diff --git a/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/WifiConstants.java b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/WifiConstants.java index d2dbc0b..40886e6 100644 --- a/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/WifiConstants.java +++ b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/WifiConstants.java @@ -11,4 +11,10 @@ public class WifiConstants { * 密码最大错误次数 */ public final static int ERROR_CODE_SUCCESS = 0; + + public final static int AUTH_STATUS_AUTHORIZED = 2; + + public final static int PAGE = 1; + + public final static int PAGE_SIZE = 1000; } diff --git a/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UAccountServiceImpl.java b/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UAccountServiceImpl.java index fbf1517..56de5d6 100644 --- a/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UAccountServiceImpl.java +++ b/wfc-modules/wfc-user/src/main/java/org/wfc/user/service/impl/UAccountServiceImpl.java @@ -9,10 +9,19 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.wfc.common.core.constant.WifiConstants; import org.wfc.common.core.domain.LoginUser; +import org.wfc.common.core.utils.ResponseUtils; import org.wfc.common.security.utils.SecurityUtils; +import org.wfc.omada.api.client.OmadaClientApi; +import org.wfc.omada.api.client.model.ClientInfo; +import org.wfc.omada.api.client.model.OperationResponseClientGridVoClientInfo; +import org.wfc.omada.api.organization.OmadaSiteApi; +import org.wfc.omada.api.organization.model.OperationResponseGridVoSiteSummaryInfo; +import org.wfc.omada.api.organization.model.SiteSummaryInfo; import org.wfc.user.api.IWifiApi; import org.wfc.user.api.domain.bo.UClientBo; import org.wfc.user.api.omada.domain.convert.OmadaConvert; @@ -67,6 +76,12 @@ public class UAccountServiceImpl extends ServiceImpl i @Autowired private UBillRuleMapper billRuleMapper; + @Autowired + private OmadaSiteApi omadaSiteApi; + + @Autowired + private OmadaClientApi omadaClientApi; + // 定时任务时间间隔 private static final int JOB_PERIOD = -30; @@ -221,6 +236,42 @@ public class UAccountServiceImpl extends ServiceImpl i } } + cancelAuthClient(); + + } + + private void cancelAuthClient() { + // 查出所有已授权client, 根据client的site和mac去查当前user, 再查user的account是否有可用套餐和余额,没有则取消授权 + ResponseEntity siteRes = omadaSiteApi.getSiteList(WifiConstants.PAGE, WifiConstants.PAGE_SIZE); + Date current = new Date(); + if (ObjectUtil.isNotNull(siteRes.getBody())) { + ResponseUtils.logResponse(siteRes.getBody().getErrorCode(), siteRes.getBody().getMsg()); + List sites = siteRes.getBody().getResult().getData(); + for (SiteSummaryInfo site : sites) { + ResponseEntity clientRes = omadaClientApi.getGridActiveClients(site.getSiteId(), WifiConstants.PAGE, WifiConstants.PAGE_SIZE); + if (ObjectUtil.isNull(clientRes.getBody())) { + continue; + } + ResponseUtils.logResponse(clientRes.getBody().getErrorCode(), clientRes.getBody().getMsg()); + List clients = clientRes.getBody().getResult().getData().stream() + .filter(c -> c.getAuthStatus() == WifiConstants.AUTH_STATUS_AUTHORIZED).collect(Collectors.toList()); + + for (ClientInfo client : clients) { + UClient loginClient = clientMapper.selectOne(Wrappers.lambdaQuery().eq(UClient::getSiteId, site.getSiteId()) + .eq(UClient::getClientMac, client.getMac()), false); + if (ObjectUtil.isNull(loginClient) || ObjectUtil.isNull(loginClient.getUserId())) { + wifiApi.cancelAuthClient(site.getSiteId(), client.getMac()); + } + UAccount account = this.getOne(Wrappers.lambdaQuery().eq(UAccount::getUserId, loginClient.getUserId()), false); + if (ObjectUtil.isNull(account)) { + wifiApi.cancelAuthClient(site.getSiteId(), client.getMac()); + } + if (!AccountUtil.isValid(account, current)) { + wifiApi.cancelAuthClient(site.getSiteId(), client.getMac()); + } + } + } + } } public void authClientAndRateLimit(UClientBo client) {