diff --git a/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java b/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java index df443061..800a725a 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcWarningController.java @@ -1,6 +1,7 @@ package com.zc.business.controller; import com.ruoyi.common.utils.uuid.IdUtils; +import com.zc.business.domain.DcWarningBatchConvert; import com.zc.business.service.IDcWarningService; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; @@ -9,17 +10,13 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.zc.business.domain.DcWarning; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; @@ -31,6 +28,7 @@ import java.util.List; * @author ruoyi * @date 2024-01-26 */ +@Api(tags = "感知事件") @RestController @RequestMapping("/business/warning") public class DcWarningController extends BaseController @@ -41,6 +39,7 @@ public class DcWarningController extends BaseController /** * 查询预警信息列表 */ + @ApiOperation("查询感知事件列表") @PreAuthorize("@ss.hasPermi('business:warning:list')") @GetMapping("/list") public TableDataInfo list(DcWarning dcWarning) @@ -130,4 +129,11 @@ public class DcWarningController extends BaseController List<HashMap<String,Object>> list = dcWarningService.selectDcWarningoTherConfig(dcWarning); return getDataTable(list); } + + @ApiOperation("感知事件批量转换") + @PostMapping("/batchConvert") + public AjaxResult batchConvert(@RequestBody DcWarningBatchConvert dcWarningBatchConvert){ + + return dcWarningService.batchConvert(dcWarningBatchConvert); + } } diff --git a/zc-business/src/main/java/com/zc/business/domain/DcMeteorologicalDetectorData.java b/zc-business/src/main/java/com/zc/business/domain/DcMeteorologicalDetectorData.java index 436edfa8..627f5f12 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcMeteorologicalDetectorData.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcMeteorologicalDetectorData.java @@ -34,14 +34,22 @@ public class DcMeteorologicalDetectorData extends BaseEntity @Excel(name = "能见度") private String visibility; - /** 路面状况 */ - @Excel(name = "路面状况") - private String roadSurfaceStatus; + /** 路面温度 */ + @Excel(name = "路面温度") + private String remoteRoadSurfaceTemperature; /** 气压 */ @Excel(name = "气压") private String atmosphericPressure; + /** 降水类型 */ + @Excel(name = "降水类型") + private String precipitationType; + + /** 湿滑系数 */ + @Excel(name = "湿滑系数") + private String wetSlipperyCoefficient; + /** 气温 */ @Excel(name = "气温") private String temperature; @@ -58,49 +66,18 @@ public class DcMeteorologicalDetectorData extends BaseEntity @Excel(name = "风速") private String windSpeed; - /** 冰点温度 */ - @Excel(name = "冰点温度") - private String freezingPointTemperature; - - /** 盐度值 */ - @Excel(name = "盐度值") - private String salinityValue; - - /** 路面温度 */ - @Excel(name = "路面温度") - private String roadSurfaceTemperature; - - /** 水膜厚度(GS1) */ - @Excel(name = "水膜厚度(GS1)") - private String waterFilmThickness; - - /** 降水类型 */ - @Excel(name = "降水类型") - private String precipitationType; + /** 路面状态 */ + @Excel(name = "路面状态") + private String remoteRoadSurfaceStatus; - /** 湿滑系数 */ - @Excel(name = "湿滑系数") - private String wetSlipperyCoefficient; + /** 水膜厚度 */ + @Excel(name = "水膜厚度") + private String waterFilmIceSnowValue; - /** 传感器温度 */ - @Excel(name = "传感器温度") - private String sensorTemperature; - /** 远程路面温度 */ - @Excel(name = "远程路面温度") - private String remoteRoadSurfaceTemperature; - /** 远程路面状态 */ - @Excel(name = "远程路面状态") - private String remoteRoadSurfaceStatus; - /** 路基温度 */ - @Excel(name = "路基温度") - private String subSurfaceTemperature; - /** 水膜厚度(GS2) */ - @Excel(name = "水膜厚度(GS2)") - private String waterFilmIceSnowValue; public void setId(Long id) { @@ -147,15 +124,6 @@ public class DcMeteorologicalDetectorData extends BaseEntity { return visibility; } - public void setRoadSurfaceStatus(String roadSurfaceStatus) - { - this.roadSurfaceStatus = roadSurfaceStatus; - } - - public String getRoadSurfaceStatus() - { - return roadSurfaceStatus; - } public void setAtmosphericPressure(String atmosphericPressure) { this.atmosphericPressure = atmosphericPressure; @@ -201,42 +169,7 @@ public class DcMeteorologicalDetectorData extends BaseEntity { return windSpeed; } - public void setFreezingPointTemperature(String freezingPointTemperature) - { - this.freezingPointTemperature = freezingPointTemperature; - } - - public String getFreezingPointTemperature() - { - return freezingPointTemperature; - } - public void setSalinityValue(String salinityValue) - { - this.salinityValue = salinityValue; - } - - public String getSalinityValue() - { - return salinityValue; - } - public void setRoadSurfaceTemperature(String roadSurfaceTemperature) - { - this.roadSurfaceTemperature = roadSurfaceTemperature; - } - public String getRoadSurfaceTemperature() - { - return roadSurfaceTemperature; - } - public void setWaterFilmThickness(String waterFilmThickness) - { - this.waterFilmThickness = waterFilmThickness; - } - - public String getWaterFilmThickness() - { - return waterFilmThickness; - } public void setPrecipitationType(String precipitationType) { this.precipitationType = precipitationType; @@ -255,15 +188,7 @@ public class DcMeteorologicalDetectorData extends BaseEntity { return wetSlipperyCoefficient; } - public void setSensorTemperature(String sensorTemperature) - { - this.sensorTemperature = sensorTemperature; - } - public String getSensorTemperature() - { - return sensorTemperature; - } public void setRemoteRoadSurfaceTemperature(String remoteRoadSurfaceTemperature) { this.remoteRoadSurfaceTemperature = remoteRoadSurfaceTemperature; @@ -282,15 +207,7 @@ public class DcMeteorologicalDetectorData extends BaseEntity { return remoteRoadSurfaceStatus; } - public void setSubSurfaceTemperature(String subSurfaceTemperature) - { - this.subSurfaceTemperature = subSurfaceTemperature; - } - public String getSubSurfaceTemperature() - { - return subSurfaceTemperature; - } public void setWaterFilmIceSnowValue(String waterFilmIceSnowValue) { this.waterFilmIceSnowValue = waterFilmIceSnowValue; @@ -309,22 +226,15 @@ public class DcMeteorologicalDetectorData extends BaseEntity .append("rainfall", getRainfall()) .append("visibilityType", getVisibilityType()) .append("visibility", getVisibility()) - .append("roadSurfaceStatus", getRoadSurfaceStatus()) .append("atmosphericPressure", getAtmosphericPressure()) .append("temperature", getTemperature()) .append("humidity", getHumidity()) .append("windDirection", getWindDirection()) .append("windSpeed", getWindSpeed()) - .append("freezingPointTemperature", getFreezingPointTemperature()) - .append("salinityValue", getSalinityValue()) - .append("roadSurfaceTemperature", getRoadSurfaceTemperature()) - .append("waterFilmThickness", getWaterFilmThickness()) .append("precipitationType", getPrecipitationType()) .append("wetSlipperyCoefficient", getWetSlipperyCoefficient()) - .append("sensorTemperature", getSensorTemperature()) .append("remoteRoadSurfaceTemperature", getRemoteRoadSurfaceTemperature()) .append("remoteRoadSurfaceStatus", getRemoteRoadSurfaceStatus()) - .append("subSurfaceTemperature", getSubSurfaceTemperature()) .append("waterFilmIceSnowValue", getWaterFilmIceSnowValue()) .toString(); } diff --git a/zc-business/src/main/java/com/zc/business/domain/DcWarning.java b/zc-business/src/main/java/com/zc/business/domain/DcWarning.java index 970ee88d..3c9376a5 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcWarning.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcWarning.java @@ -116,6 +116,11 @@ public class DcWarning extends BaseEntity private String startStakeMark; private String endStakeMark; + //开始日期 + private String startDate; + //结束日期 + private String endDate; + public String getStartStakeMark() { return startStakeMark; } @@ -372,6 +377,22 @@ public class DcWarning extends BaseEntity return otherConfig; } + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) diff --git a/zc-business/src/main/java/com/zc/business/domain/DcWarningBatchConvert.java b/zc-business/src/main/java/com/zc/business/domain/DcWarningBatchConvert.java new file mode 100644 index 00000000..2ee7b80f --- /dev/null +++ b/zc-business/src/main/java/com/zc/business/domain/DcWarningBatchConvert.java @@ -0,0 +1,38 @@ +package com.zc.business.domain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.List; + +/** + * @Description 感知事件批量处理 + * + * @author liuwenge + * @date 2024/3/16 16:27 + */ +@ApiModel("感知事件批量处理") +public class DcWarningBatchConvert { + + @ApiModelProperty("操作类型:0误报,1确认") + private String type; + + @ApiModelProperty("感知事件列表") + private List<DcWarning> warningList; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public List<DcWarning> getWarningList() { + return warningList; + } + + public void setWarningList(List<DcWarning> warningList) { + this.warningList = warningList; + } +} diff --git a/zc-business/src/main/java/com/zc/business/domain/MdEvent.java b/zc-business/src/main/java/com/zc/business/domain/MdEvent.java index 23f2eab6..18f47296 100644 --- a/zc-business/src/main/java/com/zc/business/domain/MdEvent.java +++ b/zc-business/src/main/java/com/zc/business/domain/MdEvent.java @@ -666,8 +666,8 @@ public class MdEvent //交通事件详情 this.eventDesc = dcEvent.getDescription(); //发生时间 - this.occurTime = dcEvent.getStartTime(); - //发生时间 + this.occurTime = dcEvent.getOccurrenceTime(); + //结束时间 this.endTime = dcEvent.getEndTime(); //发生路段位置桩号 this.stakeNumber = dcEvent.getStakeMark(); 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 index e22bfef9..2499377b 100644 --- a/zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java +++ b/zc-business/src/main/java/com/zc/business/enums/IotProductEnum.java @@ -13,6 +13,9 @@ public enum IotProductEnum { // 行车诱导 TRAFFIC_GUIDANCE("8866"), + // 护栏碰撞 + GUARDRAIL_COLLISION("hlpz"), + // 气象检测器 WEATHER_DETECTOR("zc-meteorological"), diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcEventMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcEventMapper.java index 24fc59d0..c82f85ef 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcEventMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcEventMapper.java @@ -73,6 +73,16 @@ public interface DcEventMapper extends BaseMapper<DcEvent> List<Map<String,String>>selectCount(); + /** + * @Description 批量添加事件 + * + * @author liuwenge + * @date 2024/3/18 15:02 + * @param eventList + * @return boolean + */ + boolean batchInsertDcEvent(List<DcEvent> eventList); + } diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java index a55e1ed6..35aaf365 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/DcWarningMapper.java @@ -70,4 +70,7 @@ public interface DcWarningMapper //AI视频 List<HashMap<String,Object>> selectDcWarningoTherConfig(DcWarning dcWarning); + boolean batchUpdateState(@Param("userId") Long userId,@Param("dcWarningList") List<DcWarning> dcWarningList); + + boolean batchDelete(@Param("dcWarningList") List<DcWarning> dcWarningList); } diff --git a/zc-business/src/main/java/com/zc/business/mapper/MiddleDatabaseMapper.java b/zc-business/src/main/java/com/zc/business/mapper/MiddleDatabaseMapper.java index 180700fb..051869d5 100644 --- a/zc-business/src/main/java/com/zc/business/mapper/MiddleDatabaseMapper.java +++ b/zc-business/src/main/java/com/zc/business/mapper/MiddleDatabaseMapper.java @@ -81,4 +81,14 @@ public interface MiddleDatabaseMapper * @return 结果 */ boolean updateMiddleDatabaseEvent(MdEvent mdEvent); + + /** + * @Description 中间库批量添加事件 + * + * @author liuwenge + * @date 2024/3/18 15:09 + * @param mdEventList + * @return boolean + */ + boolean batchInsertMiddleDatabaseEvent(List<MdEvent> mdEventList); } 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 eec32d66..663f37e4 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 @@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.redis.RedisCache; import com.zc.business.constant.RedisKeyConstants; import com.zc.business.domain.DcDevice; @@ -21,10 +22,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.stream.Collectors; /** @@ -116,6 +116,11 @@ public class DeviceMessageHandler { if (IotProductEnum.WEATHER_DETECTOR.value().equals(productId)) { weatherDetectorMessageHandle(data); } + + // 护栏碰撞 + if (IotProductEnum.GUARDRAIL_COLLISION.value().equals(productId)) { + guardrailCollisionDeviceMessageHandle(data); + } } @@ -229,26 +234,27 @@ public class DeviceMessageHandler { extracted1(data, dcWarning); } //抛洒物(有ID有框) - if (illegalTrafficEventSubType.equals("abandonedObjectEnd")){ + if (illegalTrafficEventSubType.equals("abandonedObjectEnd")) { extracted3(data, dcWarning); } //事故(有ID有框) - if(illegalTrafficEventSubType.equals("trafficAccidentEnd")){ + if (illegalTrafficEventSubType.equals("trafficAccidentEnd")) { extracted3(data, dcWarning); } //车辆抛锚有ID有框) - if(illegalTrafficEventSubType.equals("singleVehicleBreakdownEnd")){ + if (illegalTrafficEventSubType.equals("singleVehicleBreakdownEnd")) { extracted3(data, dcWarning); } //违停(有ID有框) - if(illegalTrafficEventSubType.equals("illegalParkingEnd")){ + if (illegalTrafficEventSubType.equals("illegalParkingEnd")) { extracted3(data, dcWarning); } } -//(有ID有框) + + //(有ID有框) private void extracted3(JSONObject data, DcWarning dcWarning) { //事件上报ID String targetId = data.getString("targetId"); @@ -267,7 +273,7 @@ public class DeviceMessageHandler { String targetIdEvent = (String) hashMap.get("targetId"); //事件位置 String coordinateEvent = (String) hashMap.get("coordinate"); - if (coordinate.equals(coordinateEvent)&&targetId.equals(targetIdEvent)) { + if (coordinate.equals(coordinateEvent) && targetId.equals(targetIdEvent)) { DcWarning dcWarning2 = new DcWarning(); dcWarning2.setId(id); //自动确定状态 @@ -326,6 +332,7 @@ public class DeviceMessageHandler { /** * 一站式情况调查站设备消息处理入口 + * * @param msg 设备消息 */ private void oneStopDeviceMessageHandle(JSONObject msg) { @@ -333,8 +340,76 @@ public class DeviceMessageHandler { } + /** + * 护栏碰撞设备消息处理入口 + * + * @param msg 设备消息 + */ + private void guardrailCollisionDeviceMessageHandle(JSONObject msg) { + JSONObject dataJsonObject = msg.getJSONObject("data"); + String serviceIP = dataJsonObject.getString("serviceIP");//告警ip + String timeOfFireAlarming = dataJsonObject.getString("timeOfFireAlarming");//告警时间 + JSONArray jsonArray = dataJsonObject.getJSONArray("data"); + for (Object o : jsonArray) { + JSONObject jsonObject = JSONObject.parseObject(o.toString()); + String nodeAddress = jsonObject.getString("nodeAddress");//节点地址 + String alarmType = jsonObject.getString("alarmType");//告警类型 + String location = jsonObject.getString("location");//告警位置 + String areaCode = jsonObject.getString("areaCode");//区域号 + DcWarning dcWarning = new DcWarning(); + + LambdaQueryWrapper<DcDevice> lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(DcDevice::getIotDeviceId, nodeAddress); + List<DcDevice> dcDevices = dcDeviceService.list(lambdaQueryWrapper); + + String direction = ""; + if (Objects.equals(location, "0")) { + dcWarning.setDirection("1"); + direction = "上行右侧"; + } else if (Objects.equals(location, "1")) { + dcWarning.setDirection("1"); + direction = "上行左侧"; + } else if (Objects.equals(location, "10")) { + dcWarning.setDirection("0"); + direction = "下行右侧"; + } else if (Objects.equals(location, "11")) { + dcWarning.setDirection("0"); + direction = "下行左侧"; + } + + String eventType = ""; + if (Objects.equals(alarmType, "1")) { + eventType = "碰撞"; + } else if (Objects.equals(alarmType, "2")) { + eventType = "只倾斜无碰撞"; + } else if (Objects.equals(alarmType, "3")) { + eventType = "碰撞后倾斜"; + } else if (Objects.equals(alarmType, "4")) { + eventType = "应急车道被占"; + } else if (Objects.equals(alarmType, "5")) { + eventType = "车离开应急车道"; + } + + SimpleDateFormat sdf = new SimpleDateFormat("yy年MM月dd日HH时mm分"); + try { + Date date = sdf.parse(timeOfFireAlarming); + dcWarning.setWarningTime(date); + } catch (ParseException e) { + e.printStackTrace(); + } + dcWarning.setStakeMark(dcDevices.get(0).getStakeMark()); + dcWarning.setWarningType(9); + dcWarning.setCreateTime(new Date()); + dcWarning.setWarningTitle("护栏碰撞上报事件:区域号为" + areaCode + "在" + timeOfFireAlarming + direction + "发生" + eventType + "事件"); + dcWarning.setOtherConfig(dataJsonObject.toJSONString()); + dcWarningService.insertDcWarning(dcWarning); + } + } + + /** * 气象检测器消息处理入口 + * * @param msg 设备消息 */ private void weatherDetectorMessageHandle(JSONObject msg) { @@ -352,19 +427,19 @@ public class DeviceMessageHandler { Map<String,Object> expands = new HashMap<>(); expands.put("rainFall",meteorologicalDetectorData.getRainfall()); //雨量 - expands.put("windSpeed",meteorologicalDetectorData.getWindSpeed()); //风速 expands.put("windDirection",meteorologicalDetectorData.getWindDirection()); //风向 + expands.put("windSpeed",meteorologicalDetectorData.getWindSpeed()); //风速 expands.put("temperature",meteorologicalDetectorData.getTemperature()); //大气温度 expands.put("humidity",meteorologicalDetectorData.getHumidity()); //大气湿度 - expands.put("airPressure",meteorologicalDetectorData.getAtmosphericPressure()); //数字气压 + expands.put("airPressure",meteorologicalDetectorData.getAtmosphericPressure()); //气压 + expands.put("waterThick",meteorologicalDetectorData.getWaterFilmIceSnowValue()); //水膜厚度 expands.put("wet",meteorologicalDetectorData.getWetSlipperyCoefficient()); //湿滑 expands.put("rainXingTai",meteorologicalDetectorData.getPrecipitationType()); //雨量降水形态 expands.put("visibility",meteorologicalDetectorData.getVisibility()); //能见度 - expands.put("pathContactLu",meteorologicalDetectorData.getRoadSurfaceTemperature()); //路面温度 - expands.put("pathContactBing",meteorologicalDetectorData.getFreezingPointTemperature()); //冰点温度 - expands.put("pathContactYan",meteorologicalDetectorData.getSalinityValue()); //路面盐度 + expands.put("remoteRoadSurfaceTemperature",meteorologicalDetectorData.getRemoteRoadSurfaceTemperature()); //路面温度 expands.put("pathContactZhuang",meteorologicalDetectorData.getRemoteRoadSurfaceStatus()); //路面状况 + mdDeviceData.setExpands(JSONObject.toJSONString(expands)); middleDatabaseService.insertMiddleDatabaseDeviceData(mdDeviceData); diff --git a/zc-business/src/main/java/com/zc/business/service/IDcEventService.java b/zc-business/src/main/java/com/zc/business/service/IDcEventService.java index 7ac8db57..ed7ce542 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcEventService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcEventService.java @@ -38,6 +38,17 @@ public interface IDcEventService */ public int insertDcEvent(DcEvent dcEvent); public int insertDcEventWarning(DcEvent dcEvent); + + /** + * @Description 批量添加事件 + * + * @author liuwenge + * @date 2024/3/18 8:43 + * @param dcEventList + * @return int + */ + public boolean batchInsertDcEventWarning(List<DcEvent> dcEventList); + /** * 修改事件信息 * diff --git a/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java b/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java index 837c6dfa..7d2650ad 100644 --- a/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java +++ b/zc-business/src/main/java/com/zc/business/service/IDcWarningService.java @@ -5,6 +5,8 @@ import java.util.List; import com.ruoyi.common.core.domain.AjaxResult; import com.zc.business.domain.DcWarning; +import com.zc.business.domain.DcWarningBatchConvert; +import org.springframework.web.bind.annotation.RequestBody; /** * 预警信息Service接口 @@ -69,4 +71,14 @@ public interface IDcWarningService int deleteDcWarningByStringId(DcWarning dcWarning); List<HashMap<String,Object>> selectDcWarningoTherConfig(DcWarning dcWarning); + /** + * @Description 感知事件批量转换 + * + * @author liuwenge + * @date 2024/3/16 16:35 + * @param dcWarningBatchConvert + * @return com.ruoyi.common.core.domain.AjaxResult + */ + AjaxResult batchConvert(DcWarningBatchConvert dcWarningBatchConvert); + } diff --git a/zc-business/src/main/java/com/zc/business/service/IMiddleDatabaseService.java b/zc-business/src/main/java/com/zc/business/service/IMiddleDatabaseService.java index 96560db1..004b2954 100644 --- a/zc-business/src/main/java/com/zc/business/service/IMiddleDatabaseService.java +++ b/zc-business/src/main/java/com/zc/business/service/IMiddleDatabaseService.java @@ -89,4 +89,7 @@ public interface IMiddleDatabaseService */ boolean updateMiddleDatabaseEvent(MdEvent mdEvent); + + boolean batchInsertMiddleDatabaseEvent(List<MdEvent> mdEventList); + } diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java index 98415896..77161fbd 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEventServiceImpl.java @@ -101,14 +101,14 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl } List<DcEvent> dcEventList = dcEventMapper.selectDcEventList(dcEvent); - for (DcEvent dcEvents : dcEventList) { + /*for (DcEvent dcEvents : dcEventList) { // 根据 deptId 获取部门名称 Long deptId = dcEvents.getDeptId(); String deptName = deptService.selectDeptById(deptId).getDeptName(); // 将部门名称赋值给 deptName 字段 dcEvents.setDeptName(deptName); - } + }*/ return dcEventList; } @@ -348,6 +348,32 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl } } + /** + * @Description 批量添加事件 + * + * @author liuwenge + * @date 2024/3/18 8:42 + * @param dcEventList + * @return int + */ + @Override + public boolean batchInsertDcEventWarning(List<DcEvent> dcEventList) { + + boolean flag = dcEventMapper.batchInsertDcEvent(dcEventList); + + if (flag) { + //中间库 + List<MdEvent> mdEventList = new ArrayList<>(); + for (DcEvent dcEvent : dcEventList) { + MdEvent mdEvent = new MdEvent(dcEvent); + mdEventList.add(mdEvent); + } + middleDatabaseService.batchInsertMiddleDatabaseEvent(mdEventList); + } + + return flag; + } + /** * 修改事件信息 * diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java index 93112275..3bce9a25 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcWarningServiceImpl.java @@ -6,6 +6,7 @@ import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.zc.business.domain.DcEvent; import com.zc.business.domain.DcWarning; +import com.zc.business.domain.DcWarningBatchConvert; import com.zc.business.enums.ValueConverter; import com.zc.business.mapper.DcEventMapper; import com.zc.business.mapper.DcWarningMapper; @@ -16,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -170,4 +172,79 @@ public class DcWarningServiceImpl implements IDcWarningService { return dcWarningMapper.selectDcWarningoTherConfig(dcWarning); } + + /** + * @Description 感知事件批量转换 + * + * @author liuwenge + * @date 2024/3/16 16:36 + * @param dcWarningBatchConvert + * @return com.ruoyi.common.core.domain.AjaxResult + */ + @Override + @Transactional + public AjaxResult batchConvert(DcWarningBatchConvert dcWarningBatchConvert){ + + if (StringUtils.isBlank(dcWarningBatchConvert.getType())){ + return AjaxResult.error("请选择操作类型"); + } + List<DcWarning> dcWarningList = dcWarningBatchConvert.getWarningList(); + + if (dcWarningList != null && dcWarningList.size() > 0){ + + //误报,批量删除 + if ("0".equals(dcWarningBatchConvert.getType())){ + dcWarningMapper.batchDelete(dcWarningList); + } else { + //确认,批量转换为事件 + List<DcEvent> dcEventList = new ArrayList<>(); + for (DcWarning dcWarning : dcWarningList) { + if (dcWarning == null || dcWarning.getId() == null || StringUtils.isBlank(dcWarning.getStakeMark()) || + StringUtils.isBlank(dcWarning.getDirection())) { + return AjaxResult.error("参数错误"); + } + dcWarning.setUserId(SecurityUtils.getUserId()); + + DcEvent dcEvent = new DcEvent(); + dcEvent.setId(dcWarning.getId());//id + dcEvent.setStakeMark(dcWarning.getStakeMark());//桩号 + dcEvent.setDirection(dcWarning.getDirection());//方向 + dcEvent.setDeptId(dcWarning.getDeptId());//部门 + dcEvent.setOccurrenceTime(dcWarning.getWarningTime());//预警时间 + if (dcWarning.getWarningLevel() != null) { + dcEvent.setEventLevel(dcWarning.getWarningLevel().longValue());//事件等级 + } + if (dcWarning.getWarningSource() != null) { + dcEvent.setEventSource((long) ValueConverter.convertValueSource(dcWarning.getWarningSource()));//事件来源 + } + if (dcWarning.getWarningType() != null) { + dcEvent.setEventType((long) ValueConverter.convertValueHost(dcWarning.getWarningType()));//事件主类 + } + if (StringUtils.isBlank(dcWarning.getWarningSubclass())) { + dcEvent.setEventSubclass(ValueConverter.convertValueSon(dcWarning.getWarningSubclass()));//事件子类 + } + dcEvent.setEventTitle(dcWarning.getWarningTitle());//标题 + dcEvent.setLang(dcWarning.getLane());//车道 + dcEvent.setRemark(dcEvent.getRemark());//备注 + dcEvent.setIsPerceived(1);//是否感知事件 + dcEvent.setEventState(Long.valueOf(1));//状态为处理中 + dcEvent.setCreateTime(DateUtils.getNowDate());//创建时间 + dcEvent.setUserId(SecurityUtils.getUserId());//处置人员 + + dcEventList.add(dcEvent); + } + + //批量更改感知事件状态 + dcWarningMapper.batchUpdateState(SecurityUtils.getUserId(),dcWarningList); + //批量插入事件表 + dcEventService.batchInsertDcEventWarning(dcEventList); + } + + + } else { + return AjaxResult.error("请选择感知事件"); + } + return AjaxResult.success("批量操作成功"); + } + } diff --git a/zc-business/src/main/java/com/zc/business/service/impl/MiddleDatabaseServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/MiddleDatabaseServiceImpl.java index 7f5021de..af8e8a74 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/MiddleDatabaseServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/MiddleDatabaseServiceImpl.java @@ -153,4 +153,10 @@ public class MiddleDatabaseServiceImpl implements IMiddleDatabaseService { } return middleDatabaseMapper.updateMiddleDatabaseEvent(mdEvent); } + + @Override + public boolean batchInsertMiddleDatabaseEvent(List<MdEvent> mdEventList){ + return middleDatabaseMapper.batchInsertMiddleDatabaseEvent(mdEventList); + } + } diff --git a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml index bcb89011..85c410f8 100644 --- a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml @@ -144,6 +144,7 @@ SELECT id, dc_event.dept_id as dept_id, + sys_dept.dept_name, stake_mark, CASE direction WHEN '1' THEN '菏泽方向' @@ -257,6 +258,7 @@ FROM dc_event LEFT JOIN sys_user on dc_event.user_id = sys_user.user_id + LEFT JOIN sys_dept on dc_event.dept_id = sys_dept.dept_id </sql> <sql id="selectDcEventVoListAll"> select dc_event.id AS id, @@ -542,8 +544,69 @@ <if test="isPerceived != null">#{isPerceived},</if> </trim> </insert> + <insert id="batchInsertDcEvent" useGeneratedKeys="true" keyProperty="id"> + <foreach collection ="list" item="dcEvent" index= "index" separator =";"> + insert into dc_event + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="dcEvent.id != null">id,</if> + <if test="dcEvent.deptId != null">dept_id,</if> + <if test="dcEvent.stakeMark != null and dcEvent.stakeMark != ''">stake_mark,</if> + <if test="dcEvent.direction != null and dcEvent.direction != ''">direction,</if> + <if test="dcEvent.userId != null">user_id,</if> + <if test="dcEvent.startTime != null">start_time,</if> + <if test="dcEvent.endTime != null">end_time,</if> + <if test="dcEvent.estimatedEndTime != null">estimated_end_time,</if> + <if test="dcEvent.eventLevel != null">event_level,</if> + <if test="dcEvent.eventType != null">event_type,</if> + <if test="dcEvent.eventSubclass != null">event_subclass,</if> + <if test="dcEvent.eventCause != null">event_cause,</if> + <if test="dcEvent.description != null">description,</if> + <if test="dcEvent.eventState != null">event_state,</if> + <if test="dcEvent.eventSource != null">event_source,</if> + <if test="dcEvent.eventNature != null">event_nature,</if> + <if test="dcEvent.remark != null">remark,</if> + <if test="dcEvent.createTime != null">create_time,</if> + <if test="dcEvent.updateTime != null">update_time,</if> + <if test="dcEvent.eventSourceTips != null">event_source_tips,</if> + <if test="dcEvent.inTunnel != null">in_tunnel,</if> + <if test="dcEvent.roadId != null">road_id,</if> + <if test="dcEvent.lang != null">lang,</if> + <if test="dcEvent.eventTitle != null">event_title,</if> + <if test="dcEvent.occurrenceTime != null">occurrence_time,</if> + <if test="dcEvent.isPerceived != null">is_perceived,</if> + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="dcEvent.id != null">#{dcEvent.id},</if> + <if test="dcEvent.deptId != null">#{dcEvent.deptId},</if> + <if test="dcEvent.stakeMark != null and dcEvent.stakeMark != ''">#{dcEvent.stakeMark},</if> + <if test="dcEvent.direction != null and dcEvent.direction != ''">#{dcEvent.direction},</if> + <if test="dcEvent.userId != null">#{dcEvent.userId},</if> + <if test="dcEvent.startTime != null">#{dcEvent.startTime},</if> + <if test="dcEvent.endTime != null">#{dcEvent.endTime},</if> + <if test="dcEvent.estimatedEndTime != null">#{dcEvent.estimatedEndTime},</if> + <if test="dcEvent.eventLevel != null">#{dcEvent.eventLevel},</if> + <if test="dcEvent.eventType != null">#{dcEvent.eventType},</if> + <if test="dcEvent.eventSubclass != null">#{dcEvent.eventSubclass},</if> + <if test="dcEvent.eventCause != null">#{dcEvent.eventCause},</if> + <if test="dcEvent.description != null">#{dcEvent.description},</if> + <if test="dcEvent.eventState != null">#{dcEvent.eventState},</if> + <if test="dcEvent.eventSource != null">#{dcEvent.eventSource},</if> + <if test="dcEvent.eventNature != null">#{dcEvent.eventNature},</if> + <if test="dcEvent.remark != null">#{dcEvent.remark},</if> + <if test="dcEvent.createTime != null">#{dcEvent.createTime},</if> + <if test="dcEvent.updateTime != null">#{dcEvent.updateTime},</if> + <if test="dcEvent.eventSourceTips != null">#{dcEvent.eventSourceTips},</if> + <if test="dcEvent.inTunnel != null">#{dcEvent.inTunnel},</if> + <if test="dcEvent.roadId != null">#{dcEvent.roadId},</if> + <if test="dcEvent.lang != null">#{dcEvent.lang},</if> + <if test="dcEvent.eventTitle != null">#{dcEvent.eventTitle},</if> + <if test="dcEvent.occurrenceTime != null">#{dcEvent.occurrenceTime},</if> + <if test="dcEvent.isPerceived != null">#{dcEvent.isPerceived},</if> + </trim> + </foreach> + </insert> - <update id="updateDcEvent" parameterType="DcEvent"> + <update id="updateDcEvent" parameterType="DcEvent"> update dc_event <trim prefix="SET" suffixOverrides=","> <if test="deptId != null">dept_id = #{deptId},</if> diff --git a/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml b/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml index 04da5447..255812b2 100644 --- a/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml @@ -59,6 +59,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <if test="warningTitle != null and warningTitle != ''"> and warning_title = #{warningTitle}</if> <if test="otherConfig != null and otherConfig != ''"> and other_config = #{otherConfig}</if> <if test="lane != null and lane != ''"> and lane = #{lane}</if> + <if test="startDate != null and startDate != ''"> and date_format(warning_time,'%Y-%m-%d') >= #{startDate}</if> + <if test="endDate != null and endDate != ''"> and date_format(warning_time,'%Y-%m-%d') <= #{endDate}</if> </where> </select> @@ -148,6 +150,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update dc_warning set warning_state=2,user_id=#{userId} where id=#{id} </update> + <update id="batchUpdateState"> + update dc_warning set warning_state = 2,user_id = #{userId} + where id in + <foreach collection="dcWarningList" item="item" index="index" + separator="," open="(" close=")"> + #{item.id} + </foreach> + + </update> + <delete id="deleteDcWarningById" parameterType="Integer"> delete from dc_warning where id = #{id} </delete> @@ -158,6 +170,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <delete id="deleteDcWarningByStringId"> delete from dc_warning where id= #{id} </delete> + + <delete id="batchDelete"> + delete from dc_warning + where id in + <foreach collection="dcWarningList" item="item" index="index" + separator="," open="(" close=")"> + #{item.id} + </foreach> + </delete> + <select id="selectCount" resultType="int"> SELECT COUNT(*)AS count FROM dc_warning </select> diff --git a/zc-business/src/main/resources/mapper/business/MiddleDatabaseMapper.xml b/zc-business/src/main/resources/mapper/business/MiddleDatabaseMapper.xml index 1a7e42e7..9e8b9615 100644 --- a/zc-business/src/main/resources/mapper/business/MiddleDatabaseMapper.xml +++ b/zc-business/src/main/resources/mapper/business/MiddleDatabaseMapper.xml @@ -231,6 +231,92 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" </foreach> </insert> + <insert id="batchInsertMiddleDatabaseEvent"> + <foreach collection ="list" item="mdEvent" index= "index" separator =";"> + insert into event + <trim prefix="(" suffix=")" suffixOverrides=","> + <if test="mdEvent.fusionId != null">fusionId,</if> + <if test="mdEvent.eventName != null">event_name,</if> + <if test="mdEvent.eventTypeCode != null">event_type_code,</if> + <if test="mdEvent.eventDesc != null">event_desc,</if> + <if test="mdEvent.occurTime != null">occur_time,</if> + <if test="mdEvent.endTime != null">end_time,</if> + <if test="mdEvent.stakeNumber != null and mdEvent.stakeNumber != ''">stake_number,</if> + <if test="mdEvent.longitude != null">longitude,</if> + <if test="mdEvent.latitude != null">latitude,</if> + <if test="mdEvent.lane != null">lane,</if> + <if test="mdEvent.direction != null and mdEvent.direction != ''">direction,</if> + <if test="mdEvent.location != null">location,</if> + <if test="mdEvent.eventSourceCode != null">event_source_code,</if> + <if test="mdEvent.eventSource != null">event_source,</if> + <if test="mdEvent.eventStatus != null">event_status,</if> + <if test="mdEvent.eventLevel != null">event_level,</if> + <if test="mdEvent.sectionId != null">section_id,</if> + <if test="mdEvent.eventTypeCode2 != null">event_type_code2,</if> + <if test="mdEvent.eventCause != null">event_cause,</if> + <if test="mdEvent.accidentWeather != null">accident_weather,</if> + <if test="mdEvent.accidentQueue != null">accident_queue,</if> + <if test="mdEvent.congestionPile != null">congestion_pile,</if> + <if test="mdEvent.congestionReason != null">congestion_reason,</if> + <if test="mdEvent.controlCategory != null">control_category,</if> + <if test="mdEvent.controlReason != null">control_reason,</if> + <if test="mdEvent.controlReasonType != null">control_reason_type,</if> + <if test="mdEvent.controlStation != null">control_station,</if> + <if test="mdEvent.controlPile != null">control_pile,</if> + <if test="mdEvent.controlStrategy != null">control_strategy,</if> + <if test="mdEvent.controlType != null">control_type,</if> + <if test="mdEvent.controlVehicleType != null">control_vehicle_type,</if> + <if test="mdEvent.creatorUserId != null">CreatorUserId,</if> + <if test="mdEvent.lastModificationTime != null">LastModificationTime,</if> + <if test="mdEvent.lastModifierUserId != null">LastModifierUserId,</if> + <if test="mdEvent.isDeleted != null">IsDeleted,</if> + <if test="mdEvent.deleterUserId != null">DeleterUserId,</if> + <if test="mdEvent.deletionTime != null">DeletionTime,</if> + CreationTime, + </trim> + <trim prefix="values (" suffix=")" suffixOverrides=","> + <if test="mdEvent.fusionId != null">#{mdEvent.fusionId},</if> + <if test="mdEvent.eventName != null">#{mdEvent.eventName},</if> + <if test="mdEvent.eventTypeCode != null">#{mdEvent.eventTypeCode},</if> + <if test="mdEvent.eventDesc != null">#{mdEvent.eventDesc},</if> + <if test="mdEvent.occurTime != null">#{mdEvent.occurTime},</if> + <if test="mdEvent.endTime != null">#{mdEvent.endTime},</if> + <if test="mdEvent.stakeNumber != null and mdEvent.stakeNumber != ''">#{mdEvent.stakeNumber},</if> + <if test="mdEvent.longitude != null">#{mdEvent.longitude},</if> + <if test="mdEvent.latitude != null">#{mdEvent.latitude},</if> + <if test="mdEvent.lane != null">#{mdEvent.lane},</if> + <if test="mdEvent.direction != null and mdEvent.direction != ''">#{mdEvent.direction},</if> + <if test="mdEvent.location != null">#{mdEvent.location},</if> + <if test="mdEvent.eventSourceCode != null">#{mdEvent.eventSourceCode},</if> + <if test="mdEvent.eventSource != null">#{mdEvent.eventSource},</if> + <if test="mdEvent.eventStatus != null">#{mdEvent.eventStatus},</if> + <if test="mdEvent.eventLevel != null">#{mdEvent.eventLevel},</if> + <if test="mdEvent.sectionId != null">#{mdEvent.sectionId},</if> + <if test="mdEvent.eventTypeCode2 != null">#{mdEvent.eventTypeCode2},</if> + <if test="mdEvent.eventCause != null">#{mdEvent.eventCause},</if> + <if test="mdEvent.accidentWeather != null">#{mdEvent.accidentWeather},</if> + <if test="mdEvent.accidentQueue != null">#{mdEvent.accidentQueue},</if> + <if test="mdEvent.congestionPile != null">#{mdEvent.congestionPile},</if> + <if test="mdEvent.congestionReason != null">#{mdEvent.congestionReason},</if> + <if test="mdEvent.controlCategory != null">#{mdEvent.controlCategory},</if> + <if test="mdEvent.controlReason != null">#{mdEvent.controlReason},</if> + <if test="mdEvent.controlReasonType != null">#{mdEvent.controlReasonType},</if> + <if test="mdEvent.controlStation != null">#{mdEvent.controlStation},</if> + <if test="mdEvent.controlPile != null">#{mdEvent.controlPile},</if> + <if test="mdEvent.controlStrategy != null">#{mdEvent.controlStrategy},</if> + <if test="mdEvent.controlType != null">#{mdEvent.controlType},</if> + <if test="mdEvent.controlVehicleType != null">#{mdEvent.controlVehicleType},</if> + <if test="mdEvent.creatorUserId != null">#{mdEvent.creatorUserId},</if> + <if test="mdEvent.lastModificationTime != null">#{mdEvent.lastModificationTime},</if> + <if test="mdEvent.lastModifierUserId != null">#{mdEvent.lastModifierUserId},</if> + <if test="mdEvent.isDeleted != null">#{mdEvent.isDeleted},</if> + <if test="mdEvent.deleterUserId != null">#{mdEvent.deleterUserId},</if> + <if test="mdEvent.deletionTime != null">#{mdEvent.deletionTime},</if> + now() + </trim> + </foreach> + </insert> + <update id="updateMiddleDatabaseDeviceInfo" parameterType="MdDevice"> update device <set>