diff --git a/cc-admin-master/yudao-module-hand-mqtt/src/main/java/cn/iocoder/yudao/module/mqtt/processor/DeviceMessageProcessor.java b/cc-admin-master/yudao-module-hand-mqtt/src/main/java/cn/iocoder/yudao/module/mqtt/processor/DeviceMessageProcessor.java index 60bcb35..7ce02e7 100644 --- a/cc-admin-master/yudao-module-hand-mqtt/src/main/java/cn/iocoder/yudao/module/mqtt/processor/DeviceMessageProcessor.java +++ b/cc-admin-master/yudao-module-hand-mqtt/src/main/java/cn/iocoder/yudao/module/mqtt/processor/DeviceMessageProcessor.java @@ -58,7 +58,7 @@ public class DeviceMessageProcessor { } Long tenantId = Long.parseLong(tenantIdObj.toString()); - // 保存原始日志,这个操作不涉及状态竞争,可以放在锁外 + // 保存原始日志 logSave(topic, payload, tenantId); // topic 即为设备 sn,是锁的最佳 key @@ -129,6 +129,7 @@ public class DeviceMessageProcessor { private void handLogSave(HandDataVo handVo) { TdengineDataVo bean = BeanUtils.toBean(handVo, TdengineDataVo.class); + bean.setGasType(handVo.getGasType()); bean.setTenantId(handVo.getTenantId()); bean.setTs(new Timestamp(System.currentTimeMillis())); // 直接创建Timestamp对象 tdengineBatchConfig.addToBatch(bean); @@ -271,6 +272,7 @@ public class DeviceMessageProcessor { */ private void fanceAlarm(HandDataVo handVo) { if (StringUtils.isBlank(handVo.getFenceIds())) { + handVo.setFenceStatus(HandAlarmType.NORMAL.getType()); log.info("当前设备未绑定围栏,sn{}", handVo.getSn()); return; } @@ -376,7 +378,7 @@ public class DeviceMessageProcessor { } fenceAlarmService.update(existingAlarm); } - handVo.setGasStatus(HandAlarmType.ALARM.getType()); + handVo.setFenceStatus(HandAlarmType.ALARM.getType()); } else { // --- 场景:当前处于正常状态 --- @@ -394,7 +396,7 @@ public class DeviceMessageProcessor { handVo.setFenceAlarmId(null); handVo.setDistance(null); handVo.setMaxDistance(null); - handVo.setGasStatus(HandAlarmType.NORMAL.getType()); + handVo.setFenceStatus(HandAlarmType.NORMAL.getType()); } else { log.debug("当前状态正常,且无进行中报警,无需操作。"); } @@ -440,6 +442,7 @@ public class DeviceMessageProcessor { private HandDataVo gasHandAlarm(AlarmRuleDO alarmRule, HandDataVo redisData) { if (null == alarmRule) { log.error("无报警规则:sn: {}", redisData.getSn()); + redisData.setGasStatus(HandAlarmType.NORMAL.getType()); return redisData; } @@ -530,6 +533,8 @@ public class DeviceMessageProcessor { detector.setTime(new Date(System.currentTimeMillis())); //添加默认状态 detector.setOnlineStatus(OnlineStatusType.ONLINE.getType()); + String type = split[2]; + detector.setGasType(Integer.parseInt(type)); return detector; } diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/FenceController.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/FenceController.java index 5670ee4..bcc6729 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/FenceController.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/FenceController.java @@ -1,12 +1,14 @@ package cn.iocoder.yudao.module.hand.controller.admin; import cn.iocoder.yudao.module.hand.dal.FenceDO; +import cn.iocoder.yudao.module.hand.dal.HandDetectorDO; import cn.iocoder.yudao.module.hand.service.FenceService; import cn.iocoder.yudao.module.hand.vo.FencePageReqVO; import cn.iocoder.yudao.module.hand.vo.FenceRespVO; import cn.iocoder.yudao.module.hand.vo.FenceSaveReqVO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -94,7 +96,22 @@ public class FenceController { PageResult pageResult = fenceService.getFencePage(pageReqVO); return success(BeanUtils.toBean(pageResult, FenceRespVO.class)); } - + @GetMapping("/getListAll") + @Operation(summary = "获得围栏全部") + public CommonResult> getListAll(@RequestParam(value = "name", required = false) String name, + @RequestParam(value = "type", required = false) String type) { + QueryWrapper handDetectorDOQueryWrapper = new QueryWrapper<>(); + // 添加动态查询条件 + if (StringUtils.isNotBlank(name)) { + handDetectorDOQueryWrapper.like("name", name); // 模糊查询名称 + } + + if (StringUtils.isNotBlank(type)) { + handDetectorDOQueryWrapper.eq("type", type); + } + List handDetectorDOS = fenceService.listAll(handDetectorDOQueryWrapper); + return success(handDetectorDOS); + } @GetMapping("/export-excel") @Operation(summary = "导出GAS电子围栏 Excel") @PreAuthorize("@ss.hasPermission('gas:fence:export')") diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandDetectorController.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandDetectorController.java index e535cbb..3046a34 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandDetectorController.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandDetectorController.java @@ -8,6 +8,8 @@ import cn.iocoder.yudao.module.hand.util.RedisUtil; import cn.iocoder.yudao.module.hand.vo.HandDetectorPageReqVO; import cn.iocoder.yudao.module.hand.vo.HandDetectorRespVO; import cn.iocoder.yudao.module.hand.vo.HandDetectorSaveReqVO; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -19,6 +21,7 @@ import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.constraints.*; import jakarta.validation.*; import jakarta.servlet.http.*; + import java.util.*; import java.io.IOException; @@ -33,6 +36,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; + import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUser; import static cn.iocoder.yudao.module.hand.enums.ErrorCodeConstants.HAND_DETECTOR_NOT_EXISTS; @@ -75,7 +79,7 @@ public class HandDetectorController { @DeleteMapping("/delete-list") @Parameter(name = "ids", description = "编号", required = true) @Operation(summary = "批量删除GAS手持探测器") - @PreAuthorize("@ss.hasPermission('gas:hand-detector:delete')") + @PreAuthorize("@ss.hasPermission('gas:hand-detector:delete')") public CommonResult deleteHandDetectorList(@RequestParam("ids") List ids) { handDetectorService.deleteHandDetectorListByIds(ids); return success(true); @@ -95,7 +99,24 @@ public class HandDetectorController { @PreAuthorize("@ss.hasPermission('gas:hand-detector:query')") public CommonResult> getHandDetectorPage(@Valid HandDetectorPageReqVO pageReqVO) { PageResult pageResult = handDetectorService.getHandDetectorPage(pageReqVO); - return success(BeanUtils.toBean(pageResult,HandDetectorRespVO.class)); + return success(BeanUtils.toBean(pageResult, HandDetectorRespVO.class)); + } + + @GetMapping("/getListAll") + @Operation(summary = "获得GAS手持探测器全部") + public CommonResult> getListAll(@RequestParam(value = "name", required = false) String name, + @RequestParam(value = "sn", required = false) String sn) { + QueryWrapper handDetectorDOQueryWrapper = new QueryWrapper<>(); + // 添加动态查询条件 + if (StringUtils.isNotBlank(name)) { + handDetectorDOQueryWrapper.like("name", name); // 模糊查询名称 + } + + if (StringUtils.isNotBlank(sn)) { + handDetectorDOQueryWrapper.eq("sn", sn); // 精确查询序列号 + } + List handDetectorDOS = handDetectorService.listAll(handDetectorDOQueryWrapper); + return success(handDetectorDOS); } @GetMapping("/export-excel") @@ -103,28 +124,29 @@ public class HandDetectorController { @PreAuthorize("@ss.hasPermission('gas:hand-detector:export')") @ApiAccessLog(operateType = EXPORT) public void exportHandDetectorExcel(@Valid HandDetectorPageReqVO pageReqVO, - HttpServletResponse response) throws IOException { + HttpServletResponse response) throws IOException { pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); List list = handDetectorService.getHandDetectorPage(pageReqVO).getList(); // 导出 Excel ExcelUtils.write(response, "GAS手持探测器.xls", "数据", HandDetectorRespVO.class, - BeanUtils.toBean(list, HandDetectorRespVO.class)); + BeanUtils.toBean(list, HandDetectorRespVO.class)); } @GetMapping("/getByHandData") @Operation(summary = "获得GAS手持探测器实时数据") - public CommonResult> getHandData(){ + public CommonResult> getHandData() { LoginUser loginUser = getLoginUser(); - if (null == loginUser){ + if (null == loginUser) { throw exception(HAND_DETECTOR_REDIS_NOT_EXISTS); } String tenantDeviceHashKey = RedisKeyUtil.getTenantDeviceHashKey(loginUser.getTenantId()); Map handData = handDetectorService.getHandData(tenantDeviceHashKey); return CommonResult.success(handData); } + @GetMapping("/getMonitor") @Operation(summary = "综合监控数据展示") - public CommonResult> getMonitor(){ + public CommonResult> getMonitor() { Map monitor = handDetectorService.getMonitor(); return CommonResult.success(monitor); } diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandTdengineController.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandTdengineController.java index 8d22218..a53308b 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandTdengineController.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/controller/admin/HandTdengineController.java @@ -62,5 +62,12 @@ public class HandTdengineController { PageResult pageResult = tdengineService.getOriginalLogPage(pageReqVO); return success(pageResult); } + @GetMapping("/HistoricalSn") + @Operation(summary = "手持表历史轨迹") + @PreAuthorize("@ss.hasPermission('gas:hand-td:HistoricalSn')") + public CommonResult> HistoricalSn(@Valid HandTdenginePo po) { + List list = tdengineService.HistoricalSn(po); + return success(list); + } } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandAlarmMapper.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandAlarmMapper.java index 997e90f..7147208 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandAlarmMapper.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandAlarmMapper.java @@ -19,6 +19,9 @@ public interface HandAlarmMapper extends BaseMapperX { default PageResult selectPage(HandAlarmPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(HandAlarmDO::getDetectorId,reqVO.getDetectorId()) + .likeIfPresent(HandAlarmDO::getName,reqVO.getName()) + .likeIfPresent(HandAlarmDO::getSn,reqVO.getSn()) .eqIfPresent(HandAlarmDO::getAlarmLevel, reqVO.getAlarmLevel()) .eqIfPresent(HandAlarmDO::getGasType, reqVO.getGasType()) .eqIfPresent(HandAlarmDO::getUnit, reqVO.getUnit()) diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandDetectorMapper.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandDetectorMapper.java index 2c9d1eb..5fb2265 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandDetectorMapper.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/HandDetectorMapper.java @@ -21,7 +21,7 @@ public interface HandDetectorMapper extends BaseMapperX { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(HandDetectorDO::getSn, reqVO.getSn()) .likeIfPresent(HandDetectorDO::getName, reqVO.getName()) - .eqIfPresent(HandDetectorDO::getFenceIds, reqVO.getFenceId()) + .eqIfPresent(HandDetectorDO::getFenceIds, reqVO.getFenceIds()) .eqIfPresent(HandDetectorDO::getGasTypeId, reqVO.getGasTypeId()) .eqIfPresent(HandDetectorDO::getGasChemical, reqVO.getGasChemical()) .eqIfPresent(HandDetectorDO::getMin, reqVO.getMin()) diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/TdengineMapper.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/TdengineMapper.java index 52654e9..90bc4cb 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/TdengineMapper.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/mapper/TdengineMapper.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.hand.mapper; import cn.iocoder.yudao.module.hand.vo.HandOriginalLog; import cn.iocoder.yudao.module.hand.vo.HandTdenginePageVO; +import cn.iocoder.yudao.module.hand.vo.HandTdenginePo; import cn.iocoder.yudao.module.hand.vo.TdengineDataVo; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; // 确保导入这个注解 import com.baomidou.mybatisplus.core.metadata.IPage; @@ -27,4 +28,7 @@ public interface TdengineMapper { IPage selectPage(IPage page,@Param("vo") HandTdenginePageVO vo); IPage selectOriginalPage(IPage page,@Param("vo") HandTdenginePageVO vo); + + List HistoricalSn(HandTdenginePo po); + } diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/FenceService.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/FenceService.java index e1803c6..142229a 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/FenceService.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/FenceService.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.module.hand.dal.FenceDO; import cn.iocoder.yudao.module.hand.vo.FencePageReqVO; import cn.iocoder.yudao.module.hand.vo.FenceSaveReqVO; import cn.iocoder.yudao.module.hand.vo.Geofence; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jakarta.validation.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -69,4 +70,8 @@ public interface FenceService { * @return GAS电子围栏列表 */ List getFenceList(List idList); + + List listAll(QueryWrapper handDetectorDOQueryWrapper); + + } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/HandDetectorService.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/HandDetectorService.java index 1b2bd4a..0fce465 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/HandDetectorService.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/HandDetectorService.java @@ -71,4 +71,5 @@ public interface HandDetectorService { Map getMonitor(); + List listAll(QueryWrapper handDetectorDOQueryWrapper); } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/TdengineService.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/TdengineService.java index bd9dc7e..be10b38 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/TdengineService.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/TdengineService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.hand.service; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.hand.vo.HandOriginalLog; import cn.iocoder.yudao.module.hand.vo.HandTdenginePageVO; +import cn.iocoder.yudao.module.hand.vo.HandTdenginePo; import cn.iocoder.yudao.module.hand.vo.TdengineDataVo; import java.util.List; @@ -17,4 +18,7 @@ public interface TdengineService { PageResult getHandDataLog(HandTdenginePageVO pageReqVO); PageResult getOriginalLogPage(HandTdenginePageVO pageReqVO); + + List HistoricalSn(HandTdenginePo po); + } diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/FenceServiceImpl.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/FenceServiceImpl.java index 70d7115..5d07a6a 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/FenceServiceImpl.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/FenceServiceImpl.java @@ -132,4 +132,9 @@ public class FenceServiceImpl implements FenceService { return allGeofences; } + @Override + public List listAll(QueryWrapper handDetectorDOQueryWrapper) { + return fenceMapper.selectList(handDetectorDOQueryWrapper); + } + } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/HandDetectorServiceImpl.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/HandDetectorServiceImpl.java index 85c89e1..2dc4884 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/HandDetectorServiceImpl.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/HandDetectorServiceImpl.java @@ -258,4 +258,10 @@ public class HandDetectorServiceImpl implements HandDetectorService { return objectObjectHashMap; } + @Override + public List listAll(QueryWrapper handDetectorDOQueryWrapper) { + + return handDetectorMapper.selectList(handDetectorDOQueryWrapper); + } + } \ No newline at end of file diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/TdengineServiceImpl.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/TdengineServiceImpl.java index aeec4f0..83169ac 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/TdengineServiceImpl.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/service/impl/TdengineServiceImpl.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.hand.mapper.TdengineMapper; import cn.iocoder.yudao.module.hand.service.TdengineService; import cn.iocoder.yudao.module.hand.vo.HandOriginalLog; import cn.iocoder.yudao.module.hand.vo.HandTdenginePageVO; +import cn.iocoder.yudao.module.hand.vo.HandTdenginePo; import cn.iocoder.yudao.module.hand.vo.TdengineDataVo; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -97,4 +98,10 @@ public class TdengineServiceImpl implements TdengineService { return new PageResult<>(doList, resultPage.getTotal()); } + + @Override + public List HistoricalSn(HandTdenginePo po) { + + return tdengineMapper.HistoricalSn(po); + } } diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDataVo.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDataVo.java index 99892fd..62a0240 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDataVo.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDataVo.java @@ -69,6 +69,8 @@ public class HandDataVo { @Schema(description = "最大报警值") private Double maxValue; + @Schema(description = "定位类型") + private Integer gasType; @Schema(description = "报警开始时间") private LocalDateTime tAlarmStart; diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorPageReqVO.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorPageReqVO.java index 98107e2..232c4a6 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorPageReqVO.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorPageReqVO.java @@ -21,8 +21,11 @@ public class HandDetectorPageReqVO extends PageParam { @Schema(description = "持有人姓名", example = "赵六") private String name; - @Schema(description = "围栏id", example = "15853") - private Long fenceId; + /** + * 围栏id + */ + @Schema(description = "围栏ids") + private String fenceIds; @Schema(description = "围栏类型", example = "1") diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorRespVO.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorRespVO.java index 8bbfd00..09f8a8e 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorRespVO.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorRespVO.java @@ -24,9 +24,11 @@ public class HandDetectorRespVO { @ExcelProperty("持有人姓名") private String name; - @Schema(description = "围栏id", example = "15853") - @ExcelProperty("围栏id") - private Long fenceId; + /** + * 围栏id + */ + @Schema(description = "围栏ids") + private String fenceIds; @Schema(description = "围栏类型", example = "1") private Integer fenceType; diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorSaveReqVO.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorSaveReqVO.java index a4ff591..9a26c9f 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorSaveReqVO.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandDetectorSaveReqVO.java @@ -19,8 +19,9 @@ public class HandDetectorSaveReqVO { @Schema(description = "持有人姓名", example = "赵六") private String name; - @Schema(description = "围栏id", example = "15853") - private Long fenceId; + + @Schema(description = "围栏ids") + private String fenceIds; @Schema(description = "围栏类型", example = "1") private Integer fenceType; diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandTdenginePo.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandTdenginePo.java new file mode 100644 index 0000000..fb7ef82 --- /dev/null +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/HandTdenginePo.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.hand.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import lombok.Data; + +import java.sql.Timestamp; + +@Data +public class HandTdenginePo{ + + private String sn; + + private Timestamp startTime; + + private Timestamp endTime; + + private Long tenantId; + + +} diff --git a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/TdengineDataVo.java b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/TdengineDataVo.java index c9a80c2..a279ce6 100644 --- a/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/TdengineDataVo.java +++ b/cc-admin-master/yudao-module-hand/src/main/java/cn/iocoder/yudao/module/hand/vo/TdengineDataVo.java @@ -27,6 +27,9 @@ public class TdengineDataVo { @Schema(description = "纬度") private Double latitude; + @Schema(description = "纬度") + private Integer gasType; + @Schema(description = "更新时间") private Timestamp ts; diff --git a/cc-admin-master/yudao-module-hand/src/main/resources/mapper/TdengineMapper.xml b/cc-admin-master/yudao-module-hand/src/main/resources/mapper/TdengineMapper.xml index 20a6a30..795b9f9 100644 --- a/cc-admin-master/yudao-module-hand/src/main/resources/mapper/TdengineMapper.xml +++ b/cc-admin-master/yudao-module-hand/src/main/resources/mapper/TdengineMapper.xml @@ -25,17 +25,17 @@ INSERT INTO device_data_log_#{sn} USING device_data_log TAGS(#{sn}, #{tenantId}) - (ts, battery, `value`, longitude, latitude, `name`) + (ts, battery, `value`, longitude, latitude, `name`,gas_type) VALUES - (#{log.ts}, #{log.battery}, #{log.value}, #{log.longitude}, #{log.latitude}, #{log.name}) + (#{log.ts}, #{log.battery}, #{log.value}, #{log.longitude}, #{log.latitude}, #{log.name}, #{log.gasType}) + + \ No newline at end of file diff --git a/cc-admin-master/yudao-server/src/main/resources/application-dev.yaml b/cc-admin-master/yudao-server/src/main/resources/application-dev.yaml index 05afbaa..a5a8fde 100644 --- a/cc-admin-master/yudao-server/src/main/resources/application-dev.yaml +++ b/cc-admin-master/yudao-server/src/main/resources/application-dev.yaml @@ -1,11 +1,15 @@ server: - port: 48080 + port: 48081 --- #################### 数据库相关配置 #################### - spring: autoconfigure: + # noinspection SpringBootApplicationYaml exclude: + # - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置 + # - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置 + # - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置 + # - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 - org.springframework.ai.vectorstore.qdrant.autoconfigure.QdrantVectorStoreAutoConfiguration # 禁用 AI 模块的 Qdrant,手动创建 - org.springframework.ai.vectorstore.milvus.autoconfigure.MilvusVectorStoreAutoConfiguration # 禁用 AI 模块的 Milvus,手动创建 # 数据源配置项 @@ -30,43 +34,40 @@ spring: multi-statement-allow: true dynamic: # 多数据源配置 druid: # Druid 【连接池】相关的全局配置 - initial-size: 5 # 初始连接数 - min-idle: 10 # 最小连接池数量 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 max-active: 20 # 最大连接池数量 max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 - validation-query: SELECT 1 # 配置检测连接是否有效 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 test-while-idle: true test-on-borrow: false test-on-return: false primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 - username: root - password: 123456 - slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 - lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://127.0.0.1:3306/hand_alarm?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: roomasd111 + driver-class-name: com.mysql.cj.jdbc.Driver # MySQL Connector/J 8.X 连接的示例 + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 127.0.0.1 # 地址 port: 6379 # 端口 - database: 1 # 数据库索引 -# password: 123456 # 密码,建议生产环境开启 + database: 5 # 数据库索引 + # password: dev # 密码,建议生产环境开启 --- #################### 定时任务相关配置 #################### # Quartz 配置项,对应 QuartzProperties 配置类 spring: quartz: - auto-startup: true # 测试环境,需要开启 Job + auto-startup: true # 本地开发环境,尽量不要开启 Job scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。 wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true @@ -103,12 +104,15 @@ spring: rabbitmq: host: 127.0.0.1 # RabbitMQ 服务的地址 port: 5672 # RabbitMQ 服务的端口 - username: guest # RabbitMQ 服务的账号 - password: guest # RabbitMQ 服务的密码 + username: rabbit # RabbitMQ 服务的账号 + password: rabbit # RabbitMQ 服务的密码 # Kafka 配置项,对应 KafkaProperties 配置类 kafka: - bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 - + bootstrap-servers: zdmq.zdhlcn.com:9092 # 或者内网地址 172.21.16.6:9091 + properties: + security.protocol: SASL_PLAINTEXT + sasl.mechanism: SCRAM-SHA-512 + sasl.jaas.config: 'org.apache.kafka.common.security.scram.ScramLoginModule required username="zdkafka" password="Zdhl@2025";' --- #################### 服务保障相关配置 #################### # Lock4j 配置项 @@ -142,21 +146,41 @@ spring: logging: file: name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 - ---- #################### 微信公众号相关配置 #################### -wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 - mp: - # 公众号配置(必填) - app-id: wx041349c6f39b268b - secret: 5abee519483bc9f8cb37ce280e814bd0 + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.bpm.dal.mysql: debug + cn.iocoder.yudao.module.infra.dal.mysql: debug + cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印 + cn.iocoder.yudao.module.infra.dal.mysql.job.JobLogMapper: INFO # 配置 JobLogMapper 的日志级别为 info + cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info + cn.iocoder.yudao.module.pay.dal.mysql: debug + cn.iocoder.yudao.module.pay.dal.mysql.notify.PayNotifyTaskMapper: INFO # 配置 PayNotifyTaskMapper 的日志级别为 info + cn.iocoder.yudao.module.system.dal.mysql: debug + cn.iocoder.yudao.module.mqtt: WARN + org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 + # 打开 dynamic-datasource 框架的 DEBUG 日志 + #com.baomidou.dynamic.datasource: DEBUG +debug: false + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + app-id: wxf56b1542b9e85f8a # 测试号(Kongdy 提供的) + secret: 496379dcef1ba869e9234de8d598cfd3 # 存储配置,解决 AccessToken 的跨节点的共享 + cp: + # 你的企业ID + corpId: ww6e1eee0a8ae45397 + agentId: 1000002 + corpSecret: ITbfuoZkmUifGoDL5ZB8SyuMzVM8VXZNkfZJzYn5sGo + config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 key-prefix: wx # Redis Key 的前缀 http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 - appid: wx63c280fe3248a3e7 - secret: 6f270509224a7ae1296bbf1c8cb97aed + appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的) + secret: 4a1a04e07f6a4a0751b39c3064a92c8b config-storage: type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 key-prefix: wa # Redis Key 的前缀 @@ -166,69 +190,35 @@ wx: # 参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-sta # 芋道配置项,设置当前项目所有自定义的配置 yudao: - pay: - order-notify-url: http://yunai.natapp1.cc/admin-api/pay/notify/order # 支付渠道的【支付】回调地址 - refund-notify-url: http://yunai.natapp1.cc/admin-api/pay/notify/refund # 支付渠道的【退款】回调地址 - transfer-notify-url: https://yunai.natapp1.cc/admin-api/pay/notify/transfer # 支付渠道的【转账】回调地址 - demo: false # 开启演示模式 + captcha: + enable: false # 本地环境,暂时关闭图片验证码,方便登录等接口的测试; + security: + mock-enable: true + access-log: # 访问日志的配置项 + enable: false + demo: false # 关闭演示模式 + wxa-code: + env-version: develop # 小程序版本: 正式版为 "release";体验版为 "trial";开发版为 "develop" + wxa-subscribe-message: + miniprogram-state: developer # 跳转小程序类型:开发版为 “developer”;体验版为 “trial”为;正式版为 “formal” tencent-lbs-key: TVDBZ-TDILD-4ON4B-PFDZA-RNLKH-VVF6E # QQ 地图的密钥 https://lbs.qq.com/service/staticV2/staticGuide/staticDoc -justauth: - enabled: true - type: - DINGTALK: # 钉钉 - client-id: dingvrnreaje3yqvzhxg - client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI - ignore-check-redirect-uri: true - WECHAT_ENTERPRISE: # 企业微信 - client-id: wwd411c69a39ad2e54 - client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw - agent-id: 1000004 - ignore-check-redirect-uri: true - # noinspection SpringBootApplicationYaml - WECHAT_MINI_PROGRAM: # 微信小程序 - client-id: ${wx.miniapp.appid} - client-secret: ${wx.miniapp.secret} - ignore-check-redirect-uri: true - ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验 - WECHAT_MP: # 微信公众号 - client-id: ${wx.mp.app-id} - client-secret: ${wx.mp.secret} - ignore-check-redirect-uri: true + cache: type: REDIS prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 - ---- #################### iot相关配置 TODO 芋艿:再瞅瞅 #################### -iot: - emq: - # 账号 - username: anhaohao - # 密码 - password: ahh@123456 - # 主机地址 - hostUrl: tcp://chaojiniu.top:1883 - # 客户端Id,不能相同,采用随机数 ${random.value} - client-id: ${random.int} - # 默认主题 - default-topic: test - # 保持连接 - keepalive: 60 - # 清除会话(设置为false,断开连接,重连后使用原来的会话 保留订阅的主题,能接收离线期间的消息) - clearSession: true - - -# 插件配置 +--- #################### iot相关配置 TODO 芋艿【IOT】:再瞅瞅 #################### pf4j: - pluginsDir: ${user.home}/plugins # 插件目录 + # pluginsDir: /tmp/ + pluginsDir: ../plugins mqtt: enable: true - url: tcp://127.0.0.1:1883 - username: root - password: roomasd111 + url: tcp://zdmq.zdhlcn.com:2883 + username: mobileqt + password: DVSwxQwY