From 38116a13f17e1a31fcd631d768bafe6e7e0bc8ac Mon Sep 17 00:00:00 2001 From: caiyuchao Date: Tue, 7 Jan 2025 20:16:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A1=A5=E5=85=85ap=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/wfc/system/api/RemoteUserService.java | 3 + .../factory/RemoteUserFallbackFactory.java | 5 + .../java/org/wfc/job/task/CdrInfoTask.java | 10 +- ...ntroller.java => SysDeviceController.java} | 40 ++++--- .../java/org/wfc/system/domain/SysDevice.java | 100 ++++++++++++++++++ .../java/org/wfc/system/domain/UDevice.java | 40 ------- .../domain/convert/SysDashboardConvert.java | 6 ++ .../wfc/system/mapper/SysDeviceMapper.java | 16 +++ .../org/wfc/system/mapper/UDeviceMapper.java | 18 ---- .../wfc/system/service/ISysDeviceService.java | 17 +++ .../wfc/system/service/IUDeviceService.java | 16 --- .../service/impl/SysDeviceServiceImpl.java | 74 +++++++++++++ .../service/impl/UDeviceServiceImpl.java | 20 ---- 13 files changed, 253 insertions(+), 112 deletions(-) rename wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/{UDeviceController.java => SysDeviceController.java} (52%) create mode 100644 wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/SysDevice.java delete mode 100644 wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/UDevice.java create mode 100644 wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/SysDeviceMapper.java delete mode 100644 wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/UDeviceMapper.java create mode 100644 wfc-modules/wfc-system/src/main/java/org/wfc/system/service/ISysDeviceService.java delete mode 100644 wfc-modules/wfc-system/src/main/java/org/wfc/system/service/IUDeviceService.java create mode 100644 wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysDeviceServiceImpl.java delete mode 100644 wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/UDeviceServiceImpl.java diff --git a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/RemoteUserService.java b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/RemoteUserService.java index 6793267..edc345e 100644 --- a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/RemoteUserService.java +++ b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/RemoteUserService.java @@ -51,4 +51,7 @@ public interface RemoteUserService */ @PutMapping("/user/recordlogin") public R recordUserLogin(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + @PostMapping("/device/deviceJob") + public R deviceJob(); } diff --git a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/factory/RemoteUserFallbackFactory.java b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/factory/RemoteUserFallbackFactory.java index f5b1924..8a21907 100644 --- a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/factory/RemoteUserFallbackFactory.java +++ b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/factory/RemoteUserFallbackFactory.java @@ -42,6 +42,11 @@ public class RemoteUserFallbackFactory implements FallbackFactory deviceJob() { + return R.fail("记录设备信息失败:" + throwable.getMessage()); + } }; } } diff --git a/wfc-modules/wfc-job/src/main/java/org/wfc/job/task/CdrInfoTask.java b/wfc-modules/wfc-job/src/main/java/org/wfc/job/task/CdrInfoTask.java index a6e24be..efd3898 100644 --- a/wfc-modules/wfc-job/src/main/java/org/wfc/job/task/CdrInfoTask.java +++ b/wfc-modules/wfc-job/src/main/java/org/wfc/job/task/CdrInfoTask.java @@ -3,6 +3,7 @@ package org.wfc.job.task; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.wfc.system.api.RemoteUserService; import org.wfc.user.api.RemoteUUserService; /** @@ -17,9 +18,14 @@ public class CdrInfoTask { @Autowired private RemoteUUserService remoteUUserService; + @Autowired + private RemoteUserService remoteUserService; + public void addCdrInfo() { - log.info("开始执行话单信息任务"); + long startTime = System.currentTimeMillis(); remoteUUserService.addCdrInfoByOmadaApi(); - log.info("话单信息任务执行成功"); + remoteUserService.deviceJob(); + long endTime = System.currentTimeMillis(); + log.info("wifi定时任务执行成功, 耗时:{} 毫秒", endTime - startTime); } } diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/UDeviceController.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysDeviceController.java similarity index 52% rename from wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/UDeviceController.java rename to wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysDeviceController.java index 817e4f4..55d4f38 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/UDeviceController.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysDeviceController.java @@ -1,6 +1,7 @@ package org.wfc.system.controller; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -13,57 +14,64 @@ import org.springframework.web.bind.annotation.RestController; import org.wfc.common.core.web.controller.BaseController; import org.wfc.common.core.web.domain.AjaxResult; import org.wfc.common.core.web.page.TableDataInfo; -import org.wfc.system.domain.UDevice; -import org.wfc.system.service.IUDeviceService; +import org.wfc.system.domain.SysDevice; +import org.wfc.system.service.ISysDeviceService; import java.util.List; /** *

- * 用户平台_AP设备表 前端控制器 + * 客户平台-设备表 前端控制器 *

* * @author sys - * @since 2025-01-03 + * @since 2025-01-07 */ @RestController @RequestMapping("/device") -public class UDeviceController extends BaseController { +public class SysDeviceController extends BaseController { @Autowired - private IUDeviceService uDeviceService; + private ISysDeviceService sysDeviceService; @GetMapping("/page") - public TableDataInfo page(UDevice uDevice) { + public TableDataInfo page(SysDevice sysDevice) { startPage(); - List list = uDeviceService.list(); + List list = sysDeviceService.list(Wrappers.lambdaQuery() + .like(SysDevice::getName, sysDevice.getName()) + .like(SysDevice::getMac, sysDevice.getMac())); return getDataTable(list); } @GetMapping("/list") - public AjaxResult list(UDevice uDevice) { - List list = uDeviceService.list(); + public AjaxResult list(SysDevice sysDevice) { + List list = sysDeviceService.list(); return success(list); } @GetMapping(value = "/{id}") public AjaxResult getById(@PathVariable("id") Long id) { - return success(uDeviceService.getById(id)); + return success(sysDeviceService.getById(id)); } @PostMapping - public AjaxResult add(@RequestBody UDevice uDevice) { - return toAjax(uDeviceService.save(uDevice)); + public AjaxResult add(@RequestBody SysDevice sysDevice) { + return toAjax(sysDeviceService.save(sysDevice)); } @PutMapping - public AjaxResult edit(@RequestBody UDevice uDevice) { - return toAjax(uDeviceService.updateById(uDevice)); + public AjaxResult edit(@RequestBody SysDevice sysDevice) { + return toAjax(sysDeviceService.updateById(sysDevice)); } @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(uDeviceService.removeByIds(CollUtil.newArrayList(ids))); + return toAjax(sysDeviceService.removeByIds(CollUtil.newArrayList(ids))); + } + + @PostMapping("/deviceJob") + public AjaxResult deviceJob() { + return toAjax(sysDeviceService.deviceJob()); } } diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/SysDevice.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/SysDevice.java new file mode 100644 index 0000000..6f79c7e --- /dev/null +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/SysDevice.java @@ -0,0 +1,100 @@ +package org.wfc.system.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import org.wfc.common.mybatis.domain.BaseData; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 客户平台-设备表 + *

+ * + * @author sys + * @since 2025-01-07 + */ +@Getter +@Setter +@TableName("sys_device") +@Schema(name = "SysDevice", description = "客户平台-设备表") +public class SysDevice extends BaseData { + + private static final long serialVersionUID = 1L; + + @Schema(description = "siteId") + private String siteId; + + @Schema(description = "mac") + private String mac; + + @Schema(description = "name") + private String name; + + @Schema(description = "type") + private String type; + + @Schema(description = "subtype") + private String subtype; + + @Schema(description = "deviceSeriesType") + private String deviceSeriesType; + + @Schema(description = "model") + private String model; + + @Schema(description = "ip") + private String ip; + + @Schema(description = "ipv6s") + private String ipv6s; + + @Schema(description = "uptime") + private String uptime; + + @Schema(description = "status") + private Integer status; + + @Schema(description = "lastSeen") + private Long lastSeen; + + @Schema(description = "cpuUtil") + private Integer cpuUtil; + + @Schema(description = "memUtil") + private Integer memUtil; + + @Schema(description = "sn") + private String sn; + + @Schema(description = "licenseStatus") + private Integer licenseStatus; + + @Schema(description = "tagName") + private String tagName; + + @Schema(description = "uplinkDeviceMac") + private String uplinkDeviceMac; + + @Schema(description = "uplink_device_name") + private String uplinkDeviceName; + + @Schema(description = "uplinkDevicePort") + private String uplinkDevicePort; + + @Schema(description = "linkSpeed") + private Integer linkSpeed; + + @Schema(description = "duplex") + private Integer duplex; + + @Schema(description = "switchConsistent") + private Boolean switchConsistent; + + @Schema(description = "publicIp") + private String publicIp; + + @Schema(description = "firmwareVersion") + private String firmwareVersion; +} diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/UDevice.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/UDevice.java deleted file mode 100644 index e2c87e1..0000000 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/UDevice.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.wfc.system.domain; - -import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; -import org.wfc.common.mybatis.domain.BaseData; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Getter; -import lombok.Setter; - -/** - *

- * 用户平台_AP设备表 - *

- * - * @author sys - * @since 2025-01-03 - */ -@Getter -@Setter -@TableName("u_device") -@Schema(name = "UDevice", description = "用户平台_AP设备表") -public class UDevice extends BaseData { - - private static final long serialVersionUID = 1L; - - @Schema(description = "User ID link to u_user") - private Long userId; - - @Schema(description = "Device Name") - private String deviceName; - - @Schema(description = "Device ip") - private String deviceIp; - - @Schema(description = "Device mac") - private String deviceMac; - - @Schema(description = "Device model") - private String deviceModel; -} diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/convert/SysDashboardConvert.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/convert/SysDashboardConvert.java index 636e2ce..7057240 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/convert/SysDashboardConvert.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/convert/SysDashboardConvert.java @@ -2,9 +2,13 @@ package org.wfc.system.domain.convert; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; +import org.wfc.omada.api.device.model.DeviceInfo; import org.wfc.omada.api.organization.model.SiteSummaryInfo; +import org.wfc.system.domain.SysDevice; import org.wfc.system.domain.vo.SysDashboardSiteVo; +import java.util.List; + /** * @description: OmadaMapping * @author: cyc @@ -17,4 +21,6 @@ public interface SysDashboardConvert { SysDashboardSiteVo toSysDashboardSiteVo(SiteSummaryInfo siteSummaryInfo); + List toSysDevices(List deviceInfos); + } diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/SysDeviceMapper.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/SysDeviceMapper.java new file mode 100644 index 0000000..ef90716 --- /dev/null +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/SysDeviceMapper.java @@ -0,0 +1,16 @@ +package org.wfc.system.mapper; + +import org.wfc.system.domain.SysDevice; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 客户平台-设备表 Mapper 接口 + *

+ * + * @author sys + * @since 2025-01-07 + */ +public interface SysDeviceMapper extends BaseMapper { + +} diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/UDeviceMapper.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/UDeviceMapper.java deleted file mode 100644 index 3437767..0000000 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/UDeviceMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.wfc.system.mapper; - -import com.baomidou.dynamic.datasource.annotation.DS; -import org.wfc.system.domain.UDevice; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - *

- * 用户平台_AP设备表 Mapper 接口 - *

- * - * @author sys - * @since 2025-01-03 - */ -@DS("user") -public interface UDeviceMapper extends BaseMapper { - -} diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/ISysDeviceService.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/ISysDeviceService.java new file mode 100644 index 0000000..3e32418 --- /dev/null +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/ISysDeviceService.java @@ -0,0 +1,17 @@ +package org.wfc.system.service; + +import org.wfc.system.domain.SysDevice; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 客户平台-设备表 服务类 + *

+ * + * @author sys + * @since 2025-01-07 + */ +public interface ISysDeviceService extends IService { + + boolean deviceJob(); +} diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/IUDeviceService.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/IUDeviceService.java deleted file mode 100644 index 0f7d1cd..0000000 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/IUDeviceService.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.wfc.system.service; - -import org.wfc.system.domain.UDevice; -import com.baomidou.mybatisplus.extension.service.IService; - -/** - *

- * 用户平台_AP设备表 服务类 - *

- * - * @author sys - * @since 2025-01-03 - */ -public interface IUDeviceService extends IService { - -} diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysDeviceServiceImpl.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysDeviceServiceImpl.java new file mode 100644 index 0000000..3b7e37f --- /dev/null +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/SysDeviceServiceImpl.java @@ -0,0 +1,74 @@ +package org.wfc.system.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.omada.api.device.OmadaDeviceApi; +import org.wfc.omada.api.device.model.DeviceInfo; +import org.wfc.omada.api.device.model.OperationResponseGridVoDeviceInfo; +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.system.domain.SysDevice; +import org.wfc.system.domain.convert.SysDashboardConvert; +import org.wfc.system.mapper.SysDeviceMapper; +import org.wfc.system.service.ISysDeviceService; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + *

+ * 客户平台-设备表 服务实现类 + *

+ * + * @author sys + * @since 2025-01-07 + */ +@Service +public class SysDeviceServiceImpl extends ServiceImpl implements ISysDeviceService { + + @Autowired + private OmadaSiteApi omadaSiteApi; + + @Autowired + private OmadaDeviceApi omadaDeviceApi; + + @Transactional(rollbackFor = Exception.class) + public boolean deviceJob() { + ResponseEntity siteList = omadaSiteApi.getSiteList(1, 1000); + if (siteList.getBody() == null) { + return false; + } + List sites = siteList.getBody().getResult().getData(); + for (SiteSummaryInfo site : sites) { + ResponseEntity deviceList = omadaDeviceApi.getDeviceList(site.getSiteId(), 1, 1000); + if (deviceList.getBody() == null) { + continue; + } + List devices = deviceList.getBody().getResult().getData(); + if (CollUtil.isEmpty(devices)) { + continue; + } + List macs = devices.stream().map(DeviceInfo::getMac).collect(Collectors.toList()); + List sysDevices = SysDashboardConvert.INSTANCE.toSysDevices(devices); + List sysDeviceList = this.list(Wrappers.lambdaQuery().in(SysDevice::getMac, macs)); + for (SysDevice device : sysDevices) { + device.setSiteId(site.getSiteId()); + for (SysDevice sysDevice : sysDeviceList) { + if (Objects.equals(device.getMac(), sysDevice.getMac())) { + device.setId(sysDevice.getId()); + } + } + } + return this.saveOrUpdateBatch(sysDevices); + } + return true; + } + +} diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/UDeviceServiceImpl.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/UDeviceServiceImpl.java deleted file mode 100644 index bb3783e..0000000 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/service/impl/UDeviceServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.wfc.system.service.impl; - -import org.wfc.system.domain.UDevice; -import org.wfc.system.mapper.UDeviceMapper; -import org.wfc.system.service.IUDeviceService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import org.springframework.stereotype.Service; - -/** - *

- * 用户平台_AP设备表 服务实现类 - *

- * - * @author sys - * @since 2025-01-03 - */ -@Service -public class UDeviceServiceImpl extends ServiceImpl implements IUDeviceService { - -}