From 8439c24b0ff4795f64b38f4dfec5ea03feed2194 Mon Sep 17 00:00:00 2001 From: xiepufeng <1072271977@qq.com> Date: Mon, 5 Feb 2024 16:56:58 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E8=A7=86=E9=A2=91AI=E6=84=9F=E7=9F=A5?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/constant/RedisKeyConstants.java | 13 +++ .../com/zc/business/enums/IotProductEnum.java | 35 +++++++ .../zc/business/enums/WarningSourceEnum.java | 31 ++++++ .../zc/business/enums/WarningStateEnum.java | 30 ++++++ .../business/enums/WarningSubclassEnum.java | 75 ++++++++++++++ .../zc/business/enums/WarningTypeEnum.java | 39 ++++++++ .../device/handler/DeviceMessageHandler.java | 99 +++++++++++++------ .../service/impl/DcDeviceServiceImpl.java | 69 ++++++++++++- 8 files changed, 357 insertions(+), 34 deletions(-) create mode 100644 zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java create mode 100644 zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java create mode 100644 zc-business/src/main/java/com/zc/business/enums/WarningSourceEnum.java create mode 100644 zc-business/src/main/java/com/zc/business/enums/WarningStateEnum.java create mode 100644 zc-business/src/main/java/com/zc/business/enums/WarningSubclassEnum.java create mode 100644 zc-business/src/main/java/com/zc/business/enums/WarningTypeEnum.java diff --git a/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java b/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java new file mode 100644 index 00000000..abeba97b --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/constant/RedisKeyConstants.java @@ -0,0 +1,13 @@ +package com.zc.business.constant; + +/** + * Redis key 常量定义 + * @author xiepufeng + */ +public class RedisKeyConstants +{ + /** + * 设备 + */ + public static final String DC_DEVICES = "dc:devices"; +} diff --git a/zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java b/zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java new file mode 100644 index 00000000..e22bfef9 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java @@ -0,0 +1,35 @@ +package com.zc.business.enums; + +/** + * 物联网产品类型 + * @author xiepufeng + */ +public enum IotProductEnum { + // 摄像头检测事件 + CAMERA_DETECTION_EVENT("video-event"), + // 情报板 + VARIABLE_MESSAGE_SIGN("7877"), + + // 行车诱导 + TRAFFIC_GUIDANCE("8866"), + + // 气象检测器 + WEATHER_DETECTOR("zc-meteorological"), + + // 设备箱 + EQUIPMENT_BOX("zc-shebeixiang-1883"), + + // 一站式情况调查产品 + ONE_STOP_PRODUCT("zc-yzsqkdc-3131") + + ; + private final String value; + + IotProductEnum(String value) { + this.value = value; + } + + public String value() { + return this.value; + } +} diff --git a/zc-business/src/main/java/com/zc/business/enums/WarningSourceEnum.java b/zc-business/src/main/java/com/zc/business/enums/WarningSourceEnum.java new file mode 100644 index 00000000..1f0a6c77 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/enums/WarningSourceEnum.java @@ -0,0 +1,31 @@ +package com.zc.business.enums; + +/** + * 预警事件信息来源 + * @author xiepufeng + */ +public enum WarningSourceEnum { + VIDEO_AI(1, "视频AI"), + RADAR_RECOGNITION(2,"雷达识别"), + CONE_DETECTION(3,"锥桶感应"), + GUARDRAIL_COLLISION(4,"护栏碰撞"), + QR_CODE_ALERT(5,"扫码报警"), + NON_MOTOR_VEHICLE_WARNING(6,"非机动车预警"); + + private final Integer code; + private final String description; + + WarningSourceEnum(Integer code, String description) { + this.code = code; + this.description = description; + } + + public Integer getCode() + { + return code; + } + + public String getDescription() { + return description; + } +} diff --git a/zc-business/src/main/java/com/zc/business/enums/WarningStateEnum.java b/zc-business/src/main/java/com/zc/business/enums/WarningStateEnum.java new file mode 100644 index 00000000..62afff1f --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/enums/WarningStateEnum.java @@ -0,0 +1,30 @@ +package com.zc.business.enums; + +/** + * 警情状态 + * @author xiepufeng + */ +public enum WarningStateEnum { + REPORTED(1, "上报"), + COMPLETED(2, "已完成"), + TERMINATED(3, "已终止"), + AUTO_ENDED(4, "自动结束"); + + private final Integer code; + + private final String description; + + public Integer getCode() + { + return code; + } + + WarningStateEnum(Integer code, String description) { + this.code = code; + this.description = description; + } + + public String getDescription() { + return description; + } +} diff --git a/zc-business/src/main/java/com/zc/business/enums/WarningSubclassEnum.java b/zc-business/src/main/java/com/zc/business/enums/WarningSubclassEnum.java new file mode 100644 index 00000000..990fdf28 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/enums/WarningSubclassEnum.java @@ -0,0 +1,75 @@ +package com.zc.business.enums; + +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +/** + * 预警事件子类 + * @author xiepufeng + */ +public enum WarningSubclassEnum { + + TRAFFIC_JAM("1-1", "拥堵", "发生"), + SLOW_TRAFFIC("1-2", "缓行", "发生"), + REGULAR_PEDESTRIAN("2-1", "普通行人", "有行人:"), + STAFF_MEMBER("2-2", "工作人员", "有行人:"), + MOTORCYCLE("3-1", "摩托车", "非机动车:"), + BICYCLE("3-2", "自行车","非机动车:"), + THREE_WHEELER("3-3", "三轮车","非机动车:"), + NON_CONSTRUCTION_VEHICLE("4-1", "非工程车", "非法停车:"), + CONSTRUCTION_VEHICLE("4-2", "工程车", "非法停车:"), + MAIN_ROAD_OCCUPIED("4-3", "主路有车", "非法停车:"), + RAMP_OCCUPIED("4-4", "匝道有车", "非法停车:"), + VEHICLE_BREAKDOWN("4-5", "车辆故障", "发生"), + TRAFFIC_ACCIDENT("4-6", "交通事故", "发生"), + EMERGENCY_LANE_BLOCKED("4-7", "应急车道被占用", ""), + VEHICLE_EXIT_EMERGENCY_LANE("4-8", "车离开应急车道", ""), + OTHER_CONDITION("4-9", "其他", "非法停车:"), + REVERSING_OR_GOING_BACKWARDS("5-1", "倒车/逆行", "发现"), + FIREWORKS("6-1", "烟火", ""), + DEBRIS_ON_ROAD("7-1", "撒落物", "发现"), + RAIN("8-1", "雨", "异常天气:"), + HAIL("8-2", "冰雹", "异常天气:"), + WIND("8-3", "风", "异常天气:"), + FOG("8-4", "雾", "异常天气:"), + HIGH_TEMPERATURE("8-5", "高温", "异常天气:"), + WATER_POOLING("8-6", "积水", "异常天气:"), + SLIPPERY_ROAD_SURFACE("8-6", "路面湿滑", "异常天气:"), + ICY_ROAD("8-8", "路面结冰", "异常天气:"), + LOW_VISIBILITY("8-9", "道路能见度低", "异常天气:"), + ROAD_FOG("8-10", "道路团雾", "异常天气:"), + COLLISION_ONLY("9-1", "只碰撞不倾斜", "护栏碰撞:"), + TILTED_WITHOUT_COLLISION("9-1", "只倾斜无碰撞", "护栏碰撞:"), + COLLISION_AND_TILTED("9-3", "碰撞后倾斜", "护栏碰撞:"); + @Getter + private final String code; + @Getter + private final String info; + + private final String decorate; + + private static final Map ENUM_BY_CODE = new HashMap<>(); + + static { + for (WarningSubclassEnum value : values()) { + ENUM_BY_CODE.put(value.getCode(), value); + } + } + + WarningSubclassEnum(String code, String info, String decorate) + { + this.code = code; + this.info = info; + this.decorate = decorate; + } + + public String getDecorateInfo() { + return decorate + decorate; + } + + public static String getDecorateInfo(String code) { + return ENUM_BY_CODE.get(code).getDecorateInfo(); + } +} diff --git a/zc-business/src/main/java/com/zc/business/enums/WarningTypeEnum.java b/zc-business/src/main/java/com/zc/business/enums/WarningTypeEnum.java new file mode 100644 index 00000000..a004a6b4 --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/enums/WarningTypeEnum.java @@ -0,0 +1,39 @@ +package com.zc.business.enums; + +/** + * 感知事件类型(主类) + * @author xiepufeng + */ +public enum WarningTypeEnum { + + TRAFFIC_JAM(1, "交通拥堵"), + PEDESTRIAN(2, "行人"), + NON_MOTOR_VEHICLE(3, "非机动车"), + PARK(4, "停车"), + VEHICLE_CONVERSE_RUNNING(5, "倒车/逆行"), + FIREWORKS(6, "烟火"), + OUTFALL(7, "撒落物"), + UNUSUAL_WEATHER(8, "异常天气"), + BARRIER_CRASH(9, "护栏碰撞"), + TRAFFIC_ACCIDENT(10, "交通事故"), + VEHICLE_FAULT(11, "车辆故障"), + OTHER(99, "其他"); + private final Integer code; + private final String info; + + WarningTypeEnum(Integer code, String info) + { + this.code = code; + this.info = info; + } + + public Integer getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java index a03eecf9..0dd0d91f 100644 --- a/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java +++ b/zc-business/src/main/java/com/zc/business/message/device/handler/DeviceMessageHandler.java @@ -2,52 +2,42 @@ package com.zc.business.message.device.handler; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.redis.RedisCache; +import com.zc.business.constant.RedisKeyConstants; import com.zc.business.domain.DcDevice; +import com.zc.business.domain.DcWarning; +import com.zc.business.enums.IotProductEnum; +import com.zc.business.enums.WarningSourceEnum; +import com.zc.business.enums.WarningStateEnum; +import com.zc.business.enums.WarningSubclassEnum; import com.zc.business.service.IDcDeviceService; +import com.zc.business.service.IDcWarningService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * 设备消息处理 + * @author xiepufeng */ @Service public class DeviceMessageHandler { - enum ProductType { - // 摄像头检测事件 - CAMERA_DETECTION_EVENT("video-event"), - // 情报板 - VARIABLE_MESSAGE_SIGN("7877"), - - // 行车诱导 - TRAFFIC_GUIDANCE("8866"), - - // 气象检测器 - WEATHER_DETECTOR("zc-meteorological"), - - // 设备箱 - EQUIPMENT_BOX("zc-shebeixiang-1883"), - - // 一站式情况调查产品 - ONE_STOP_PRODUCT("zc-yzsqkdc-3131") + private final Logger logger = LoggerFactory.getLogger(this.getClass()); - ; - private final String value; - - ProductType(String value) { - this.value = value; - } + @Resource + private IDcDeviceService dcDeviceService; - public String value() { - return this.value; - } - } + @Resource + private IDcWarningService dcWarningService; @Resource - private IDcDeviceService dcDeviceService; + private RedisCache redisCache; /** * 更新设备状态 @@ -76,11 +66,18 @@ public class DeviceMessageHandler { public void handle(String msg) { JSONObject data = JSON.parseObject(msg, JSONObject.class); + JSONObject headers = data.getJSONObject("headers"); + + if (headers == null) { + logger.error("物联网消息解析处理,消息中缺少headers数据"); + return; + } + // 产品id - String productId = data.getJSONObject("headers").getString("productId"); + String productId = headers.getString("productId"); // 摄像头检测事件 - if (productId.equals(ProductType.CAMERA_DETECTION_EVENT.value)) { + if (IotProductEnum.CAMERA_DETECTION_EVENT.value().equals(productId)) { this.cameraDetectionEventHandle(data); } } @@ -92,7 +89,47 @@ public class DeviceMessageHandler { */ private void cameraDetectionEventHandle(JSONObject event) { - } + JSONObject data = event.getJSONObject("data"); + + DcWarning dcWarning = new DcWarning(); + + // 桩号 + dcWarning.setStakeMark(data.getString("stakeMark")); + // 方向 + dcWarning.setDirection(data.getString("direction")); + // 警情状态 + dcWarning.setWarningState(WarningStateEnum.REPORTED.getCode()); + // 捕获时间 + Long captureTime = data.getLong("captureTime"); + // 预警时间 + dcWarning.setWarningTime(new Date(captureTime)); + // 信息来源 + dcWarning.setWarningSource(WarningSourceEnum.VIDEO_AI.getCode()); + // 事件主类型 + dcWarning.setWarningType(data.getInteger("warningType")); + + String warningSubclass = data.getString("warningSubclass"); + // 子类型 + dcWarning.setWarningSubclass(warningSubclass); + + String stakeMarkDescription = data.getString("stakeMarkDescription"); + + // 标题 + dcWarning.setWarningTitle(stakeMarkDescription + WarningSubclassEnum.getDecorateInfo(warningSubclass)); + // 影响车道 + dcWarning.setLane(String.valueOf(data.getInteger("relatedLaneNo"))); + + // 物联设备id + String iotDeviceId = event.getString("deviceId"); + + DcDevice dcDevice = redisCache.getCacheMapValue(RedisKeyConstants.DC_DEVICES, iotDeviceId); + if (dcDevice != null) { + // 所属机构 + dcWarning.setDeptId(dcDevice.getGroupId()); + } + dcWarningService.insertDcWarning(dcWarning); + + } } diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java index c0858d00..cad6b2b9 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java @@ -3,8 +3,10 @@ package com.zc.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.PageUtils; +import com.zc.business.constant.RedisKeyConstants; import com.zc.business.domain.DcDevice; import com.zc.business.domain.DcProduct; import com.zc.business.domain.DcStakeMark; @@ -15,6 +17,7 @@ import com.zc.business.service.IDcStakeMarkService; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; +import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.Date; import java.util.List; @@ -35,6 +38,42 @@ public class DcDeviceServiceImpl extends ServiceImpl i @Resource private DcDeviceMapper dcDeviceMapper; + @Resource + private RedisCache redisCache; + + @PostConstruct + public void init() + { + /* + 添加数据到 redis 缓存 + */ + updateRedisCache(); + } + + /** + * 添加数据到 redis 缓存 + */ + public void updateRedisCache() + { + // 获取全部设备列表数据 + List dcDevices = list(); + if (dcDevices == null || dcDevices.isEmpty()) + { + return; + } + + // 清楚 redis 缓存数据 + redisCache.deleteObject(RedisKeyConstants.DC_DEVICES); + + // 添加 redis 缓存数据 + dcDevices.forEach(val -> { + String iotDeviceId = val.getIotDeviceId(); + if (StringUtils.hasText(iotDeviceId)) { + redisCache.setCacheMapValue(RedisKeyConstants.DC_DEVICES, val.getIotDeviceId(), val); + } + }); + } + public LambdaQueryWrapper deviceQueryWrapper(DcDevice dcDevice) { @@ -175,7 +214,14 @@ public class DcDeviceServiceImpl extends ServiceImpl i dcDevice.setCreateTime(new Date()); dcDevice.setUseState(DcDevice.UNUSEDSTATE); - return save(dcDevice); + + if (save(dcDevice)) { + // 更新缓存 + updateRedisCache(); + return true; + } + + return false; } /** @@ -197,7 +243,14 @@ public class DcDeviceServiceImpl extends ServiceImpl i } dcDevice.setUpdateTime(new Date()); - return updateById(dcDevice); + + if (updateById(dcDevice)) { + // 更新缓存 + updateRedisCache(); + return true; + } + + return false; } /** @@ -217,7 +270,14 @@ public class DcDeviceServiceImpl extends ServiceImpl i throw new ServiceException("设备正在使用", HttpStatus.MOVED_PERM); } }); - return removeByIds(ids); + + if (removeByIds(ids)) { + // 更新缓存 + updateRedisCache(); + return true; + } + + return false; } /** @@ -257,6 +317,9 @@ public class DcDeviceServiceImpl extends ServiceImpl i queryWrapper.eq(DcDevice::getIotDeviceId,device.getIotDeviceId()); update(device,queryWrapper); } + + // 更新缓存 + updateRedisCache(); return true; } From 0060647f1beded30115a0fea0a8c28073d8de6fc Mon Sep 17 00:00:00 2001 From: zhaoxianglong Date: Mon, 5 Feb 2024 17:17:31 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=B9=E6=8D=AE?= =?UTF-8?q?=E6=A1=A9=E5=8F=B7=E8=8C=83=E5=9B=B4=E6=9F=A5=E8=AF=A2=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=8E=A5=E5=8F=A3=20=E6=96=B0=E5=A2=9E=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=20=E8=AE=BE=E5=A4=87=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/BroadcastController.java | 2 +- .../CodeScanningAlarmController.java | 2 +- .../controller/DcDeviceController.java | 2 +- .../NonAutomaticWarningController.java | 12 ++++++---- .../zc/business/service/IDcDeviceService.java | 2 +- .../service/impl/DcDeviceServiceImpl.java | 23 +++++++++++++++---- 6 files changed, 30 insertions(+), 13 deletions(-) diff --git a/zc-business/src/main/java/com/zc/business/controller/BroadcastController.java b/zc-business/src/main/java/com/zc/business/controller/BroadcastController.java index bd387b4e..5c594912 100644 --- a/zc-business/src/main/java/com/zc/business/controller/BroadcastController.java +++ b/zc-business/src/main/java/com/zc/business/controller/BroadcastController.java @@ -24,7 +24,7 @@ import static com.ruoyi.common.constant.Constants.HTTP; /** * License * - * @author Athena-xiepufeng + * @author Athena-zhaoxianglong */ @Api(tags = "广播接口") @RestController diff --git a/zc-business/src/main/java/com/zc/business/controller/CodeScanningAlarmController.java b/zc-business/src/main/java/com/zc/business/controller/CodeScanningAlarmController.java index 4b1edea2..92d6df7d 100644 --- a/zc-business/src/main/java/com/zc/business/controller/CodeScanningAlarmController.java +++ b/zc-business/src/main/java/com/zc/business/controller/CodeScanningAlarmController.java @@ -18,7 +18,7 @@ import java.util.Objects; /** * License * - * @author Athena-xiepufeng + * @author Athena-zhaoxianglong */ @Api(tags = "扫码报警") @RestController diff --git a/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java b/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java index af4114a7..2b408d49 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcDeviceController.java @@ -93,7 +93,7 @@ public class DcDeviceController extends BaseController { @ApiOperation("无分页根据设备桩号查询设备列表") @PreAuthorize("@ss.hasPermi('iot:device:query')") @PostMapping("pileNumberQuery") - public AjaxResult devicePileNumberQueryDevice(@RequestBody Map parameter) { + public AjaxResult devicePileNumberQueryDevice(@RequestBody Map parameter) { return AjaxResult.success(dcDeviceService.devicePileNumberQueryDevice(parameter)); } diff --git a/zc-business/src/main/java/com/zc/business/controller/NonAutomaticWarningController.java b/zc-business/src/main/java/com/zc/business/controller/NonAutomaticWarningController.java index 3f395bab..6aa9461d 100644 --- a/zc-business/src/main/java/com/zc/business/controller/NonAutomaticWarningController.java +++ b/zc-business/src/main/java/com/zc/business/controller/NonAutomaticWarningController.java @@ -29,7 +29,7 @@ import java.util.Objects; /** * License * - * @author Athena-xiepufeng + * @author Athena-zhaoxianglong */ @Api(tags = "非机预警接口") @RestController @@ -102,7 +102,12 @@ public class NonAutomaticWarningController extends BaseController { client.setCallback(new MqttCallback() { public void connectionLost(Throwable cause) { - System.out.println("connectionLost"); + System.out.println("断开连接"); + //try { + // eventSubscription(); + //} catch (Exception e) { + // throw new RuntimeException(e); + //} } public void messageArrived(String topic, MqttMessage message) { @@ -195,9 +200,6 @@ public class NonAutomaticWarningController extends BaseController { dcWarning.setStakeMark("k190+495"); } dcWarning.setWarningTitle(crossingName+srcName); - //设置事件Id UUID无下划线格式32 - String uuid = IdUtils.fastSimpleUUID(); - dcWarning.setId(uuid); dcWarning.setWarningSource(6); dcWarning.setWarningState(1); dcWarningService.insertDcWarning(dcWarning); diff --git a/zc-business/src/main/java/com/zc/business/service/IDcDeviceService.java b/zc-business/src/main/java/com/zc/business/service/IDcDeviceService.java index 2e4b12b3..8bd23a34 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcDeviceService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcDeviceService.java @@ -76,5 +76,5 @@ public interface IDcDeviceService extends IService { Long statisticalAnomalyDevice(); - List devicePileNumberQueryDevice(Map parameter); + List devicePileNumberQueryDevice(Map parameter); } diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java index 3f4a497a..c0ce1a20 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcDeviceServiceImpl.java @@ -298,14 +298,18 @@ public class DcDeviceServiceImpl extends ServiceImpl i } @Override - public List devicePileNumberQueryDevice(Map parameter) { + public List devicePileNumberQueryDevice(Map parameter) { ArrayList dcDevices = new ArrayList<>(); - Integer startStakeMark = Integer.parseInt(String.valueOf(parameter.get("startStakeMark").get(0)) + String.valueOf(parameter.get("startStakeMark").get(1))); - Integer endStakeMark = Integer.parseInt(String.valueOf(parameter.get("endStakeMark").get(0)) + String.valueOf(parameter.get("endStakeMark").get(1))); + List startStakeMarks = castList(parameter.get("startStakeMark"), String.class); + List endStakeMarks = castList(parameter.get("endStakeMark"), String.class); + String deviceType = String.valueOf(parameter.get("deviceType")); + Integer startStakeMark = Integer.parseInt(startStakeMarks.get(0) + startStakeMarks.get(1)); + Integer endStakeMark = Integer.parseInt(endStakeMarks.get(0) + endStakeMarks.get(1)); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); ArrayList integers = new ArrayList<>(); integers.add(6); - lambdaQueryWrapper.notIn(DcDevice::getDeviceType,integers); + lambdaQueryWrapper.notIn(DcDevice::getDeviceType, integers); + lambdaQueryWrapper.eq(DcDevice::getDeviceType, deviceType); List list = list(lambdaQueryWrapper); for (DcDevice dcDevice : list) { String stakeMark = dcDevice.getStakeMark(); @@ -336,5 +340,16 @@ public class DcDeviceServiceImpl extends ServiceImpl i return dcDevices; } + + public static List castList(Object obj, Class clazz) { + List result = new ArrayList(); + if (obj instanceof List) { + for (Object o : (List) obj) { + result.add(clazz.cast(o)); + } + return result; + } + return null; + } } From 9c86df06c83dffc854f58e34e4fca78428d40a8c Mon Sep 17 00:00:00 2001 From: lau572 <1010031226@qq.com> Date: Mon, 5 Feb 2024 18:16:23 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E4=B8=AD=E9=97=B4=E5=BA=93=E6=B0=94?= =?UTF-8?q?=E8=B1=A1=E6=A3=80=E6=B5=8B=E5=99=A8=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DcMeteorologicalDetectorDataMapper.java | 16 ++++++++ .../DevicePropertyReportListener.java | 8 +++- .../IDcMeteorologicalDetectorDataService.java | 8 ++++ ...MeteorologicalDetectorDataServiceImpl.java | 20 ++++++++++ .../DcMeteorologicalDetectorDataMapper.xml | 40 ++++++++++++++++++- 5 files changed, 89 insertions(+), 3 deletions(-) diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcMeteorologicalDetectorDataMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcMeteorologicalDetectorDataMapper.java index 3a0868cb..b98086ce 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcMeteorologicalDetectorDataMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcMeteorologicalDetectorDataMapper.java @@ -43,6 +43,22 @@ public interface DcMeteorologicalDetectorDataMapper */ int updateDcMeteorologicalDetectorData(DcMeteorologicalDetectorData dcMeteorologicalDetectorData); + /** + * 中间库新增气象检测器数据 + * + * @param dcMeteorologicalDetectorData 气象检测器数据 + * @return 结果 + */ + Boolean insertIntermediateWarehouseData(DcMeteorologicalDetectorData dcMeteorologicalDetectorData); + + /** + * 中间库修改气象检测器数据 + * + * @param dcMeteorologicalDetectorData 气象检测器数据 + * @return 结果 + */ + Boolean updateIntermediateWarehouseData(DcMeteorologicalDetectorData dcMeteorologicalDetectorData); + /** * 删除气象检测器数据 * diff --git a/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java b/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java index d7370696..561c79e6 100644 --- a/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java +++ b/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.google.gson.JsonObject; import com.zc.business.domain.DcDevice; import com.zc.business.domain.DcMeteorologicalDetectorData; +import com.zc.business.enums.IotProductEnum; import com.zc.business.service.IDcMeteorologicalDetectorDataService; import com.zc.common.core.redis.stream.RedisStream; import org.slf4j.Logger; @@ -46,11 +47,14 @@ public class DevicePropertyReportListener implements StreamListener where id = #{id} - + insert into dc_meteorological_detector_data @@ -146,6 +146,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} + + insert into meteorological_detector_data + + device_id, + temperature, + humidity, + precipitation_type, + rainfall, + road_surface_status, + water_film_thickness, + update_time + + + #{iotDeviceId}, + #{temperature}, + #{humidity}, + #{precipitationType}, + #{rainfall}, + #{roadSurfaceStatus}, + #{waterFilmThickness}, + current_date + + + + + update meteorological_detector_data + + temperature = #{temperature}, + humidity = #{humidity}, + precipitation_type = #{precipitationType}, + rainfall = #{rainfall}, + road_surface_status = #{roadSurfaceStatus}, + water_film_thickness = #{waterFilmThickness}, + update_time = current_date + + where device_id = #{iotDeviceId} + + delete from dc_meteorological_detector_data where id = #{id} From 0d28d8f80b21261193e67eeb5deaff1251d599fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com> Date: Mon, 5 Feb 2024 20:09:20 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E4=BA=A4=E9=80=9A?= =?UTF-8?q?=E4=BA=8B=E6=95=85=E4=BA=8B=E4=BB=B6=20=E8=BD=A6=E9=81=93?= =?UTF-8?q?=E5=8D=A0=E7=94=A8=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/zc/business/domain/DcEventAccident.java | 2 ++ .../device/listener/DevicePropertyReportListener.java | 3 +++ .../com/zc/business/service/impl/DcEventServiceImpl.java | 4 ++++ .../resources/mapper/business/DcEventAccidentMapper.xml | 7 +------ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/zc-business/src/main/java/com/zc/business/domain/DcEventAccident.java b/zc-business/src/main/java/com/zc/business/domain/DcEventAccident.java index 65028728..3d1785e0 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcEventAccident.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcEventAccident.java @@ -158,9 +158,11 @@ public class DcEventAccident extends BaseEntity { * 3-行3 * 4-行4 */ +/* @ApiModelProperty("车道占用") private Long laneOccupancy; +*/ /** * 小型车(辆) diff --git a/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java b/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java index d7370696..0077892f 100644 --- a/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java +++ b/zc-business/src/main/java/com/zc/business/message/device/listener/DevicePropertyReportListener.java @@ -23,6 +23,7 @@ import java.util.Map; /** * 设备属性上报消息监听 */ + @Component public class DevicePropertyReportListener implements StreamListener> { @@ -58,5 +59,7 @@ public class DevicePropertyReportListener implements StreamListener0){ //获取事件类型 int eventType = Math.toIntExact(dcEvent.getEventType()); diff --git a/zc-business/src/main/resources/mapper/business/DcEventAccidentMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventAccidentMapper.xml index c016d1eb..ce16e770 100644 --- a/zc-business/src/main/resources/mapper/business/DcEventAccidentMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEventAccidentMapper.xml @@ -21,7 +21,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - @@ -34,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, reporter_name, reporter_phone_number, accident_type, location_type, traffic_jam, weather_condition, impact_level, is_reverse_cargo, is_maintenance, police_contact, towing_service_contact, congestion_ahead, at_intersection, on_curve, spillage_item, vehicle_owner_phone, lane_occupancy, small_car, trucks, buses, tankers, minor_injuries, serious_injuries, fatalities, is_private, facility_id from dc_event_accident + select id, reporter_name, reporter_phone_number, accident_type, location_type, traffic_jam, weather_condition, impact_level, is_reverse_cargo, is_maintenance, police_contact, towing_service_contact, congestion_ahead, at_intersection, on_curve, spillage_item, vehicle_owner_phone, small_car, trucks, buses, tankers, minor_injuries, serious_injuries, fatalities, is_private, facility_id from dc_event_accident + + select - t2.facility_id facilityId,t3.facility_name,classify, + t2.facility_id facilityId,t3.facility_name facilityName,classify, SUM(case when t2.classify = '6' then 1 else 0 end) facilityClose, SUM(case when t2.classify = '7' then 1 else 0 end) facilityRestriction, SUM(case when t2.classify = '9' then 1 else 0 end) facilityInterval