2
0

feat: 封装omada api以适配其他api

This commit is contained in:
caiyuchao
2024-12-31 14:10:17 +08:00
parent c96fb94625
commit 467076a067
10 changed files with 494 additions and 41 deletions

View File

@@ -0,0 +1,9 @@
package org.wfc.user.api;
/**
* @description: API抽象层
* @author: cyc
* @since: 2024-12-30
*/
public abstract class AbstractWifiApi implements IWifiApi {
}

View File

@@ -0,0 +1,17 @@
package org.wfc.user.api;
import org.wfc.user.api.omada.domain.dto.ClientRateLimitSettingDto;
/**
* @description: API接口
* @author: cyc
* @since: 2024-12-30
*/
public interface IWifiApi {
boolean authClient(String siteId, String clientMac);
boolean cancelAuthClient(String siteId, String clientMac);
boolean updateClientRateLimitSetting(String siteId, String clientMac, ClientRateLimitSettingDto clientRateLimitSettingDto);
}

View File

@@ -0,0 +1,23 @@
package org.wfc.user.api.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.wfc.user.api.IWifiApi;
import org.wfc.user.api.omada.OmadaWifiApi;
/**
* @description: API 自动装配
* @author: cyc
* @since: 2024-12-30
*/
@Configuration
public class WifiApiAutoConfig {
@ConditionalOnProperty(prefix = "wifi.api", name = "name", havingValue = "omada", matchIfMissing = true)
@Bean
public IWifiApi omadaApi() {
return new OmadaWifiApi();
}
}

View File

@@ -0,0 +1,13 @@
package org.wfc.user.api.omada;
import org.wfc.user.api.AbstractWifiApi;
/**
* @description: Omada API 抽象层
* @author: cyc
* @since: 2024-12-30
*/
public abstract class AbstractOmadaWifiApi extends AbstractWifiApi {
}

View File

@@ -0,0 +1,43 @@
package org.wfc.user.api.omada;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.wfc.omada.api.client.OmadaClientApi;
import org.wfc.omada.api.client.model.ClientRateLimitSetting;
import org.wfc.omada.api.client.model.OperationResponseWithoutResult;
import org.wfc.omada.api.hotspot.OmadaAuthorizedClientApi;
import org.wfc.user.api.omada.domain.convert.OmadaConvert;
import org.wfc.user.api.omada.domain.dto.ClientRateLimitSettingDto;
/**
* @description: Omada API
* @author: cyc
* @since: 2024-12-30
*/
public class OmadaWifiApi extends AbstractOmadaWifiApi {
@Autowired
private OmadaAuthorizedClientApi omadaAuthorizedClientApi;
@Autowired
private OmadaClientApi omadaClientApi;
@Override
public boolean authClient(String siteId, String clientMac) {
omadaAuthorizedClientApi.authClient(siteId, clientMac);
return true;
}
@Override
public boolean cancelAuthClient(String siteId, String clientMac) {
omadaAuthorizedClientApi.cancelAuthClient(siteId, clientMac);
return true;
}
@Override
public boolean updateClientRateLimitSetting(String siteId, String clientMac, ClientRateLimitSettingDto clientRateLimitSettingDto) {
ClientRateLimitSetting clientRateLimitSetting = OmadaConvert.INSTANCE.toClientRateLimitSettingDto(clientRateLimitSettingDto);
ResponseEntity<OperationResponseWithoutResult> response = omadaClientApi.updateClientRateLimitSetting(siteId, clientMac, clientRateLimitSetting);
return true;
}
}

View File

@@ -0,0 +1,19 @@
package org.wfc.user.api.omada.domain.convert;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import org.wfc.omada.api.client.model.ClientRateLimitSetting;
import org.wfc.user.api.omada.domain.dto.ClientRateLimitSettingDto;
/**
* @description: OmadaMapping
* @author: cyc
* @since: 2024-12-30
*/
@Mapper
public interface OmadaConvert {
OmadaConvert INSTANCE = Mappers.getMapper(OmadaConvert.class);
ClientRateLimitSetting toClientRateLimitSettingDto(ClientRateLimitSettingDto dto);
}

View File

@@ -0,0 +1,130 @@
package org.wfc.user.api.omada.domain.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.Objects;
/**
* ClientRateLimitSetting
*/
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2024-12-04T10:16:05.926+08:00[Asia/Shanghai]")
public class ClientRateLimitSettingDto {
@JsonProperty("mode")
private Integer mode;
@JsonProperty("rateLimitProfileId")
private String rateLimitProfileId;
@JsonProperty("customRateLimit")
private CustomRateLimitEntityDto customRateLimit;
public ClientRateLimitSettingDto mode(Integer mode) {
this.mode = mode;
return this;
}
/**
* Rate limit mode should be a value as follows: <br/>0: Custom mode. Apply the given rate limit value to the client; <br/>1: Rate limit profile mode. Find the corresponding rate limit file with rate limit ID and apply it to the client.
* @return mode
*/
@ApiModelProperty(required = true, value = "Rate limit mode should be a value as follows: <br/>0: Custom mode. Apply the given rate limit value to the client; <br/>1: Rate limit profile mode. Find the corresponding rate limit file with rate limit ID and apply it to the client.")
@NotNull
public Integer getMode() {
return mode;
}
public void setMode(Integer mode) {
this.mode = mode;
}
public ClientRateLimitSettingDto rateLimitProfileId(String rateLimitProfileId) {
this.rateLimitProfileId = rateLimitProfileId;
return this;
}
/**
* Rate limit profile ID. Required when ratelimit mode is 1
* @return rateLimitProfileId
*/
@ApiModelProperty(value = "Rate limit profile ID. Required when ratelimit mode is 1")
public String getRateLimitProfileId() {
return rateLimitProfileId;
}
public void setRateLimitProfileId(String rateLimitProfileId) {
this.rateLimitProfileId = rateLimitProfileId;
}
public ClientRateLimitSettingDto customRateLimit(CustomRateLimitEntityDto customRateLimit) {
this.customRateLimit = customRateLimit;
return this;
}
/**
* Get customRateLimit
* @return customRateLimit
*/
@ApiModelProperty(value = "")
@Valid
public CustomRateLimitEntityDto getCustomRateLimit() {
return customRateLimit;
}
public void setCustomRateLimit(CustomRateLimitEntityDto customRateLimit) {
this.customRateLimit = customRateLimit;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ClientRateLimitSettingDto clientRateLimitSetting = (ClientRateLimitSettingDto) o;
return Objects.equals(this.mode, clientRateLimitSetting.mode) &&
Objects.equals(this.rateLimitProfileId, clientRateLimitSetting.rateLimitProfileId) &&
Objects.equals(this.customRateLimit, clientRateLimitSetting.customRateLimit);
}
@Override
public int hashCode() {
return Objects.hash(mode, rateLimitProfileId, customRateLimit);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class ClientRateLimitSetting {\n");
sb.append(" mode: ").append(toIndentedString(mode)).append("\n");
sb.append(" rateLimitProfileId: ").append(toIndentedString(rateLimitProfileId)).append("\n");
sb.append(" customRateLimit: ").append(toIndentedString(customRateLimit)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}

View File

@@ -0,0 +1,203 @@
package org.wfc.user.api.omada.domain.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Objects;
/**
* Custom configuration rate limit.
*/
@ApiModel(description = "Custom configuration rate limit.")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2024-12-04T10:16:05.926+08:00[Asia/Shanghai]")
public class CustomRateLimitEntityDto {
@JsonProperty("upEnable")
private Boolean upEnable;
@JsonProperty("upUnit")
private Integer upUnit;
@JsonProperty("upLimit")
private Integer upLimit;
@JsonProperty("downEnable")
private Boolean downEnable;
@JsonProperty("downUnit")
private Integer downUnit;
@JsonProperty("downLimit")
private Integer downLimit;
public CustomRateLimitEntityDto upEnable(Boolean upEnable) {
this.upEnable = upEnable;
return this;
}
/**
* Up limit enable
* @return upEnable
*/
@ApiModelProperty(value = "Up limit enable")
public Boolean getUpEnable() {
return upEnable;
}
public void setUpEnable(Boolean upEnable) {
this.upEnable = upEnable;
}
public CustomRateLimitEntityDto upUnit(Integer upUnit) {
this.upUnit = upUnit;
return this;
}
/**
* Up limit unit should be a value as follows: 1: Kbps; 2: Mbps
* @return upUnit
*/
@ApiModelProperty(value = "Up limit unit should be a value as follows: 1: Kbps; 2: Mbps")
public Integer getUpUnit() {
return upUnit;
}
public void setUpUnit(Integer upUnit) {
this.upUnit = upUnit;
}
public CustomRateLimitEntityDto upLimit(Integer upLimit) {
this.upLimit = upLimit;
return this;
}
/**
* Up limit should be within the range of 11024.
* @return upLimit
*/
@ApiModelProperty(value = "Up limit should be within the range of 11024.")
public Integer getUpLimit() {
return upLimit;
}
public void setUpLimit(Integer upLimit) {
this.upLimit = upLimit;
}
public CustomRateLimitEntityDto downEnable(Boolean downEnable) {
this.downEnable = downEnable;
return this;
}
/**
* Down limit enable
* @return downEnable
*/
@ApiModelProperty(value = "Down limit enable")
public Boolean getDownEnable() {
return downEnable;
}
public void setDownEnable(Boolean downEnable) {
this.downEnable = downEnable;
}
public CustomRateLimitEntityDto downUnit(Integer downUnit) {
this.downUnit = downUnit;
return this;
}
/**
* Down limit unit should be a value as follows: 1: Kbps; 2: Mbps
* @return downUnit
*/
@ApiModelProperty(value = "Down limit unit should be a value as follows: 1: Kbps; 2: Mbps")
public Integer getDownUnit() {
return downUnit;
}
public void setDownUnit(Integer downUnit) {
this.downUnit = downUnit;
}
public CustomRateLimitEntityDto downLimit(Integer downLimit) {
this.downLimit = downLimit;
return this;
}
/**
* Down limit should be within the range of 11024.
* @return downLimit
*/
@ApiModelProperty(value = "Down limit should be within the range of 11024.")
public Integer getDownLimit() {
return downLimit;
}
public void setDownLimit(Integer downLimit) {
this.downLimit = downLimit;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
CustomRateLimitEntityDto customRateLimitEntity = (CustomRateLimitEntityDto) o;
return Objects.equals(this.upEnable, customRateLimitEntity.upEnable) &&
Objects.equals(this.upUnit, customRateLimitEntity.upUnit) &&
Objects.equals(this.upLimit, customRateLimitEntity.upLimit) &&
Objects.equals(this.downEnable, customRateLimitEntity.downEnable) &&
Objects.equals(this.downUnit, customRateLimitEntity.downUnit) &&
Objects.equals(this.downLimit, customRateLimitEntity.downLimit);
}
@Override
public int hashCode() {
return Objects.hash(upEnable, upUnit, upLimit, downEnable, downUnit, downLimit);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class CustomRateLimitEntity {\n");
sb.append(" upEnable: ").append(toIndentedString(upEnable)).append("\n");
sb.append(" upUnit: ").append(toIndentedString(upUnit)).append("\n");
sb.append(" upLimit: ").append(toIndentedString(upLimit)).append("\n");
sb.append(" downEnable: ").append(toIndentedString(downEnable)).append("\n");
sb.append(" downUnit: ").append(toIndentedString(downUnit)).append("\n");
sb.append(" downLimit: ").append(toIndentedString(downLimit)).append("\n");
sb.append("}");
return sb.toString();
}
/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n ");
}
}

View File

@@ -14,10 +14,10 @@ import org.springframework.transaction.annotation.Transactional;
import org.wfc.common.core.domain.LoginUser;
import org.wfc.common.security.utils.SecurityUtils;
import org.wfc.omada.api.client.OmadaClientApi;
import org.wfc.omada.api.client.model.ClientRateLimitSetting;
import org.wfc.omada.api.client.model.CustomRateLimitEntity;
import org.wfc.omada.api.hotspot.OmadaAuthorizedClientApi;
import org.wfc.user.api.IWifiApi;
import org.wfc.user.api.domain.bo.UClientBo;
import org.wfc.user.api.omada.domain.dto.ClientRateLimitSettingDto;
import org.wfc.user.api.omada.domain.dto.CustomRateLimitEntityDto;
import org.wfc.user.domain.UAccount;
import org.wfc.user.domain.UClient;
import org.wfc.user.domain.vo.UAccountDashboardVo;
@@ -48,7 +48,7 @@ public class UAccountServiceImpl extends ServiceImpl<UAccountMapper, UAccount> i
private UCdrMapper ucdrMapper;
@Autowired
private OmadaAuthorizedClientApi omadaAuthorizedClientApi;
private IWifiApi wifiApi;
@Autowired
private UClientMapper clientMapper;
@@ -87,16 +87,16 @@ public class UAccountServiceImpl extends ServiceImpl<UAccountMapper, UAccount> i
.in(UClient::getUserId, userIds));
for (UClient client : clients) {
try {
omadaAuthorizedClientApi.cancelAuthClient(client.getSiteId(), client.getClientMac());
wifiApi.cancelAuthClient(client.getSiteId(), client.getClientMac());
// 取消带宽限速
ClientRateLimitSetting clientRateLimitSetting = new ClientRateLimitSetting();
ClientRateLimitSettingDto clientRateLimitSetting = new ClientRateLimitSettingDto();
clientRateLimitSetting.setMode(0);
CustomRateLimitEntity customRateLimitEntity = new CustomRateLimitEntity();
customRateLimitEntity.setDownEnable(false);
customRateLimitEntity.setUpEnable(false);
clientRateLimitSetting.setCustomRateLimit(customRateLimitEntity);
omadaClientApi.updateClientRateLimitSetting(client.getSiteId(), client.getClientMac(), clientRateLimitSetting);
CustomRateLimitEntityDto customRateLimitEntityDto = new CustomRateLimitEntityDto();
customRateLimitEntityDto.setDownEnable(false);
customRateLimitEntityDto.setUpEnable(false);
clientRateLimitSetting.setCustomRateLimit(customRateLimitEntityDto);
wifiApi.updateClientRateLimitSetting(client.getSiteId(), client.getClientMac(), clientRateLimitSetting);
} catch (Exception e) {
log.info("unAuth error: {}", e.getMessage());
}
@@ -114,21 +114,21 @@ public class UAccountServiceImpl extends ServiceImpl<UAccountMapper, UAccount> i
if (account.getStartTime().before(current) && account.getEndTime().after(current)
&& (!account.getTrafficEnable() || account.getTrafficUsed() <= account.getTraffic())
&& (!account.getDurationEnable() || account.getDurationUsed() <= account.getDuration())) {
omadaAuthorizedClientApi.authClient(client.getSiteId(), client.getClientMac());
wifiApi.authClient(client.getSiteId(), client.getClientMac());
// 带宽限速
if (account.getRateLimitEnable()) {
ClientRateLimitSetting clientRateLimitSetting = new ClientRateLimitSetting();
ClientRateLimitSettingDto clientRateLimitSetting = new ClientRateLimitSettingDto();
clientRateLimitSetting.setMode(0);
CustomRateLimitEntity customRateLimitEntity = new CustomRateLimitEntity();
customRateLimitEntity.setDownEnable(account.getDownLimitEnable());
customRateLimitEntity.setDownLimit(account.getDownLimit() == null ? 0 : account.getDownLimit().intValue());
customRateLimitEntity.setDownUnit(1);
customRateLimitEntity.setUpEnable(account.getUpLimitEnable());
customRateLimitEntity.setUpLimit(account.getUpLimit() == null ? 0 : account.getUpLimit().intValue());
customRateLimitEntity.setUpUnit(1);
clientRateLimitSetting.setCustomRateLimit(customRateLimitEntity);
omadaClientApi.updateClientRateLimitSetting(client.getSiteId(), client.getClientMac(), clientRateLimitSetting);
CustomRateLimitEntityDto customRateLimitEntityDto = new CustomRateLimitEntityDto();
customRateLimitEntityDto.setDownEnable(account.getDownLimitEnable());
customRateLimitEntityDto.setDownLimit(account.getDownLimit() == null ? 0 : account.getDownLimit().intValue());
customRateLimitEntityDto.setDownUnit(1);
customRateLimitEntityDto.setUpEnable(account.getUpLimitEnable());
customRateLimitEntityDto.setUpLimit(account.getUpLimit() == null ? 0 : account.getUpLimit().intValue());
customRateLimitEntityDto.setUpUnit(1);
clientRateLimitSetting.setCustomRateLimit(customRateLimitEntityDto);
wifiApi.updateClientRateLimitSetting(client.getSiteId(), client.getClientMac(), clientRateLimitSetting);
}
}

View File

@@ -11,10 +11,9 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.wfc.common.security.utils.SecurityUtils;
import org.wfc.omada.api.client.OmadaClientApi;
import org.wfc.omada.api.client.model.ClientRateLimitSetting;
import org.wfc.omada.api.client.model.CustomRateLimitEntity;
import org.wfc.omada.api.hotspot.OmadaAuthorizedClientApi;
import org.wfc.user.api.IWifiApi;
import org.wfc.user.api.omada.domain.dto.ClientRateLimitSettingDto;
import org.wfc.user.api.omada.domain.dto.CustomRateLimitEntityDto;
import org.wfc.user.domain.UAccount;
import org.wfc.user.domain.UClient;
import org.wfc.user.domain.UOrder;
@@ -59,10 +58,7 @@ public class UOrderServiceImpl extends ServiceImpl<UOrderMapper, UOrder> impleme
private IUClientService clientService;
@Autowired
private OmadaAuthorizedClientApi omadaAuthorizedClientApi;
@Autowired
private OmadaClientApi omadaClientApi;
private IWifiApi wifiApi;
public void paySuccess(Long orderId) {
// 支付成功回调(预留)
@@ -100,21 +96,21 @@ public class UOrderServiceImpl extends ServiceImpl<UOrderMapper, UOrder> impleme
List<UClient> clients = clientService.list(Wrappers.<UClient>lambdaQuery().eq(UClient::getUserId, order.getUserId()));
for (UClient client : clients) {
if (StrUtil.isNotBlank(client.getSiteId())) {
omadaAuthorizedClientApi.authClient(client.getSiteId(), client.getClientMac());
wifiApi.authClient(client.getSiteId(), client.getClientMac());
// 带宽限速
if (account.getRateLimitEnable()) {
ClientRateLimitSetting clientRateLimitSetting = new ClientRateLimitSetting();
ClientRateLimitSettingDto clientRateLimitSetting = new ClientRateLimitSettingDto();
clientRateLimitSetting.setMode(0);
CustomRateLimitEntity customRateLimitEntity = new CustomRateLimitEntity();
customRateLimitEntity.setDownEnable(account.getDownLimitEnable());
customRateLimitEntity.setDownLimit(account.getDownLimit() == null ? 0 : account.getDownLimit().intValue());
customRateLimitEntity.setDownUnit(1);
customRateLimitEntity.setUpEnable(account.getUpLimitEnable());
customRateLimitEntity.setUpLimit(account.getUpLimit() == null ? 0 : account.getUpLimit().intValue());
customRateLimitEntity.setUpUnit(1);
clientRateLimitSetting.setCustomRateLimit(customRateLimitEntity);
omadaClientApi.updateClientRateLimitSetting(client.getSiteId(), client.getClientMac(), clientRateLimitSetting);
CustomRateLimitEntityDto customRateLimitEntityDto = new CustomRateLimitEntityDto();
customRateLimitEntityDto.setDownEnable(account.getDownLimitEnable());
customRateLimitEntityDto.setDownLimit(account.getDownLimit() == null ? 0 : account.getDownLimit().intValue());
customRateLimitEntityDto.setDownUnit(1);
customRateLimitEntityDto.setUpEnable(account.getUpLimitEnable());
customRateLimitEntityDto.setUpLimit(account.getUpLimit() == null ? 0 : account.getUpLimit().intValue());
customRateLimitEntityDto.setUpUnit(1);
clientRateLimitSetting.setCustomRateLimit(customRateLimitEntityDto);
wifiApi.updateClientRateLimitSetting(client.getSiteId(), client.getClientMac(), clientRateLimitSetting);
}
}
}