diff --git a/zc-business/src/main/java/com/zc/business/controller/DcEmergencyPlansController.java b/zc-business/src/main/java/com/zc/business/controller/DcEmergencyPlansController.java index f260969a..9f5b213f 100644 --- a/zc-business/src/main/java/com/zc/business/controller/DcEmergencyPlansController.java +++ b/zc-business/src/main/java/com/zc/business/controller/DcEmergencyPlansController.java @@ -63,13 +63,14 @@ public class DcEmergencyPlansController extends BaseController { public AjaxResult listByEventType(@RequestBody DcEvent dcEvent) { List dcEmergencyPlansList = dcEmergencyPlansService.selectDcEmergencyPlansByEventType(dcEvent); + dcEmergencyPlansService.dispositionDeviceContent(dcEmergencyPlansList,dcEvent); return AjaxResult.success(dcEmergencyPlansList); } /** * 感知事件-根据事件数据查询事件预案列表 */ - @ApiOperation("感知事件-根据事件数据查询事件预案列表") +// @ApiOperation("感知事件-根据事件数据查询事件预案列表") @PreAuthorize("@ss.hasPermi('business:plans:list')") @PostMapping("/list/warning/type") public AjaxResult listByEventType(@RequestBody DcWarning dcWarning) { @@ -91,7 +92,7 @@ public class DcEmergencyPlansController extends BaseController { /** * 感知事件-情报板确认回显原始模板 */ - @ApiOperation("感知事件-情报板确认回显原始模板") +// @ApiOperation("感知事件-情报板确认回显原始模板") @PreAuthorize("@ss.hasPermi('business:plans:list')") @PostMapping("/warning/board/confirm") public AjaxResult warningBoardConfirm(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) { @@ -101,7 +102,7 @@ public class DcEmergencyPlansController extends BaseController { /** * 感知事件-情报板自动生成文字 */ - @ApiOperation("感知事件-情报板自动生成文字") +// @ApiOperation("感知事件-情报板自动生成文字") @PostMapping("/warning/automatic") public AjaxResult warningAutomaticGeneration(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) { return AjaxResult.success(dcEmergencyPlansService.warningAutomaticGeneration(dcEventAnDcEmergencyPlans)); @@ -110,7 +111,7 @@ public class DcEmergencyPlansController extends BaseController { /** * 交通事件-情报板自动生成文字 */ - @ApiOperation("交通事件-情报板自动生成文字") +// @ApiOperation("交通事件-情报板自动生成文字") @PostMapping("/event/automatic") public AjaxResult eventAutomaticGeneration(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) { return AjaxResult.success(dcEmergencyPlansService.eventAutomaticGeneration(dcEventAnDcEmergencyPlans)); @@ -138,7 +139,7 @@ public class DcEmergencyPlansController extends BaseController { /** * 感知事件确定 */ - @ApiOperation("感知事件确认") +// @ApiOperation("感知事件确认") @PreAuthorize("@ss.hasPermi('business:plans:edit')") @PostMapping("/warning/confirm") public AjaxResult warningConfirm(@RequestBody DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) { @@ -149,7 +150,7 @@ public class DcEmergencyPlansController extends BaseController { * 新增事件预案 */ @ApiOperation("新增预案") -// @PreAuthorize("@ss.hasPermi('business:plans:add')") + @PreAuthorize("@ss.hasPermi('business:plans:add')") @PostMapping public AjaxResult add(@RequestBody DcEmergencyPlans dcEmergencyPlans) { return toAjax(dcEmergencyPlansService.insertDcEmergencyPlans(dcEmergencyPlans)); @@ -159,7 +160,7 @@ public class DcEmergencyPlansController extends BaseController { * 修改事件预案 */ @ApiOperation("修改预案") -// @PreAuthorize("@ss.hasPermi('business:plans:edit')") + @PreAuthorize("@ss.hasPermi('business:plans:edit')") @PutMapping public AjaxResult update(@RequestBody DcEmergencyPlans dcEmergencyPlans) { return toAjax(dcEmergencyPlansService.updateDcEmergencyPlans(dcEmergencyPlans)); diff --git a/zc-business/src/main/java/com/zc/business/domain/DcEvent.java b/zc-business/src/main/java/com/zc/business/domain/DcEvent.java index 3d2c7750..aa171517 100644 --- a/zc-business/src/main/java/com/zc/business/domain/DcEvent.java +++ b/zc-business/src/main/java/com/zc/business/domain/DcEvent.java @@ -229,6 +229,10 @@ public class DcEvent { private List processConfigList; @ApiModelProperty("事件标题") private String eventTitle; +@ApiModelProperty("维度") + private String dimension; +@ApiModelProperty("经度") + private String longitude; /** * 2014/2/21新增 */ diff --git a/zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java b/zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java index 061e773d..0a36b980 100644 --- a/zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java +++ b/zc-business/src/main/java/com/zc/business/enums/EventSubclassEnum.java @@ -5,28 +5,28 @@ package com.zc.business.enums; * @author wangjiabao */ public enum EventSubclassEnum { - REAR_END_COLLISION("1-1", "追尾","前方发生追尾 注意避让"), - ROLLOVER("1-2", "侧翻","前方发生侧翻 注意避让"), - COLLISION_WITH_GUARDRAIL("1-3", "撞护栏","前方车撞击护栏注意避让"), - NATURAL("1-4", "自然","前方发生自然现象请注意"), - OTHER_ACCIDENTS("1-5", "其他事故","前方发生事故谨慎驾驶"), - VEHICLE_MALFUNCTION("2-1", "车辆故障","前方发生故障注意避让"), - ROAD_CONGESTION("4-1", "道路拥堵","前方道路拥堵"), - OVERPASS_CONGESTION("4-2", "立交拥堵","前方立交拥堵"), - TOLL_STATION_CONGESTION("4-3", "收费站拥堵","前方收费站拥堵"), - SERVICE_AREA_CONGESTION("4-4", "服务区拥堵","前方服务区拥堵"), - PEDESTRIAN("5-1", "行人","有行人穿行请注意"), - NON_MOTOR_VEHICLES("5-2", "非机动车","有非机动车上路请注意"), - MOTORCYCLE("5-3", "摩托车","有摩托车上路请注意"), - OTHER("5-4", "其他","有非法上路车辆"), - SMOKE("6-1", "烟雾","烟雾道路请注意驾驶"), - FALLEN_TREES("6-2", "倒伏树木","有倒伏树木请注意"), - SCATTERED_MATERIALS("6-3", "洒落物","有洒落物请注意"), - ANIMAL("6-4", "动物","有动物请注意"), - OTHER_OBSTACLES("6-5", "其他障碍","有不明障碍请注意"), - CLOSED_OR_SUSPENDED_OPERATIONS("8-1", "封闭、暂停营业","服务区封闭、暂停营业"), - SHUTDOWN_OF_IMPORTANT_FACILITIES("8-2", "重要设施停用","服务区重要设施停用"), - OTHER_ABNORMALITIES_IN_THE_SERVICE_AREA("8-3", "服务区其他异常","服务区设备停用"), + REAR_END_COLLISION("1-1", "追尾","前方*发生追尾 注意避让"), + ROLLOVER("1-2", "侧翻","前方*发生侧翻 注意避让"), + COLLISION_WITH_GUARDRAIL("1-3", "撞护栏","前方*车撞击护栏注意避让"), + NATURAL("1-4", "自然","前方*发生自然现象请注意"), + OTHER_ACCIDENTS("1-5", "其他事故","前方*发生事故谨慎驾驶"), + VEHICLE_MALFUNCTION("2-1", "车辆故障","前方*发生故障注意避让"), + ROAD_CONGESTION("4-1", "道路拥堵","前方*道路拥堵"), + OVERPASS_CONGESTION("4-2", "立交拥堵","前方*立交拥堵"), + TOLL_STATION_CONGESTION("4-3", "收费站拥堵","前方*收费站拥堵"), + SERVICE_AREA_CONGESTION("4-4", "服务区拥堵","前方*服务区拥堵"), + PEDESTRIAN("5-1", "行人","前方*有行人穿行请注意"), + NON_MOTOR_VEHICLES("5-2", "非机动车","前方*有非机动车上路请注意"), + MOTORCYCLE("5-3", "摩托车","前方*有摩托车上路请注意"), + OTHER("5-4", "其他","前方*有非法上路车辆"), + SMOKE("6-1", "烟雾","前方*烟雾道路请注意驾驶"), + FALLEN_TREES("6-2", "倒伏树木","前方*有倒伏树木请注意"), + SCATTERED_MATERIALS("6-3", "洒落物","前方*有洒落物请注意"), + ANIMAL("6-4", "动物","前方*有动物请注意"), + OTHER_OBSTACLES("6-5", "其他障碍","前方*有不明障碍请注意"), + CLOSED_OR_SUSPENDED_OPERATIONS("8-1", "封闭、暂停营业","前方*服务区封闭、暂停营业"), + SHUTDOWN_OF_IMPORTANT_FACILITIES("8-2", "重要设施停用","前方*服务区重要设施停用"), + OTHER_ABNORMALITIES_IN_THE_SERVICE_AREA("8-3", "服务区其他异常","前方*服务区设备停用"), RAIN("10-1", "雨","雨天请谨慎驾驶"), SNOW("10-2", "雪","雪天路滑请谨慎驾驶"), HEAVY_FOG("10-3", "大雾","大雾天气请谨慎驾驶"), 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 ab62a6d7..40d81d8c 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 @@ -52,6 +52,15 @@ public interface DcEventMapper extends BaseMapper */ int updateDcEvent(DcEvent dcEvent); + + /** + * 修改事件性质 关联管制事件id + * + * @param dcEvent 事件信息 + * @return 结果 + */ + int updateDcEventLinkId(DcEvent dcEvent); + /** * 删除事件信息 * diff --git a/zc-business/src/main/java/com/zc/business/service/DcEmergencyPlansService.java b/zc-business/src/main/java/com/zc/business/service/DcEmergencyPlansService.java index de8faf8e..02d4d32a 100644 --- a/zc-business/src/main/java/com/zc/business/service/DcEmergencyPlansService.java +++ b/zc-business/src/main/java/com/zc/business/service/DcEmergencyPlansService.java @@ -1,6 +1,6 @@ package com.zc.business.service; -import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.zc.business.domain.*; import java.util.List; @@ -39,6 +39,11 @@ public interface DcEmergencyPlansService { */ List selectDcEmergencyPlansByEventType(DcEvent event); + /** + * 处置设备智能发布的内容 + */ + void dispositionDeviceContent(List list, DcEvent dcEvent); + /** * 感知事件-根据事件类型查询事件预案 * @@ -63,7 +68,7 @@ public interface DcEmergencyPlansService { * @param dcEventAnDcEmergencyPlans 事件数据 和 事件预案数据 * @return 结果 */ - JSONArray executionEventConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans); + JSONObject executionEventConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans); /** * 根据事件id-查询预案事件关联表 @@ -79,7 +84,7 @@ public interface DcEmergencyPlansService { * @param dcEventAnDcEmergencyPlans 事件数据 和 事件预案数据 * @return 结果 */ - JSONArray executionWarningConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans); + JSONObject executionWarningConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans); /** * 感知事件-情报板自动生成 @@ -111,14 +116,6 @@ public interface DcEmergencyPlansService { */ int updateDcEmergencyPlans(DcEmergencyPlans dcEmergencyPlans); - /** - * 批量修改事件预案 - * - * @param dcEmergencyPlansList 事件预案 - * @return 结果 - */ - int updateBatchDcEmergencyPlans(List dcEmergencyPlansList); - /** * 批量删除事件预案 * 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 1740155f..c05eac4e 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 @@ -58,6 +58,11 @@ public interface IDcEventService */ public int updateDcEvent(DcEvent dcEvent); + /** + * @param dcEvent + * @return int + */ + /** * 批量删除事件信息 * diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java index bf54a4b8..110cb4e1 100644 --- a/zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java +++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java @@ -20,6 +20,7 @@ import com.zc.business.mapper.EventPlanAssocMapper; import com.zc.business.service.DcEmergencyPlansService; import com.zc.business.service.DcExecuteActionService; import com.zc.business.service.IDcDeviceService; +import com.zc.business.service.IDcFacilityService; import com.zc.common.core.httpclient.exception.HttpException; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @@ -50,6 +51,9 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { @Resource private EventPlanAssocMapper eventPlanAssocMapper; + @Resource + private IDcFacilityService dcFacilityService; + @Resource private ThreadPoolTaskExecutor threadPoolTaskExecutor; @@ -110,8 +114,6 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { return dcEmergencyPlansList.stream() .filter(dcEmergencyPlans -> { String triggerMechanism = dcEmergencyPlans.getTriggerMechanism(); -// JSONObject triggerJson = JSONObject.parseObject(triggerMechanism); -// String eventSubclass = triggerJson.get("eventSubclass").toString(); return triggerMechanism.equals(event.getSubclass()); }) .collect(Collectors.toList()); @@ -120,8 +122,6 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { return dcEmergencyPlansList.stream() .filter(dcEmergencyPlans -> { String triggerMechanism = dcEmergencyPlans.getTriggerMechanism(); -// JSONObject triggerJson = JSONObject.parseObject(triggerMechanism); -// String locationType = triggerJson.get("locationType").toString(); DcEventVehicleAccident dcEventVehicleAccident = event.getDcEventVehicleAccident(); String eventLocationType = dcEventVehicleAccident.getLocationType().toString(); return triggerMechanism.equals(eventLocationType); @@ -132,9 +132,6 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { return dcEmergencyPlansList.stream() .filter(dcEmergencyPlans -> { String triggerMechanism = dcEmergencyPlans.getTriggerMechanism(); -// JSONObject triggerJson = JSONObject.parseObject(triggerMechanism); - // 分类 -// Integer classify = Integer.parseInt(triggerJson.get("classify").toString()); // 事件--交通管制数据 DcEventTrafficControl dcEventTrafficControl = event.getDcEventTrafficControl(); Integer eventClassify = Integer.parseInt(dcEventTrafficControl.getClassify().toString()); @@ -148,6 +145,110 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { } + /** + * 处置设备智能发布的内容 + */ + @Override + public void dispositionDeviceContent(List list, DcEvent dcEvent) { + // 事件桩号 + dcEvent.setStakeMark(dcEvent.getStakeMark().replace("K", "")); + String[] markArray = dcEvent.getStakeMark().split("\\+"); + if (markArray[1].length() < 3) { + // 不足三位 补零 + markArray[1] = String.format("%0" + 3 + "d", markArray[1]); + } + + // 情报板 语音广播 + list.forEach(dcEmergencyPlans -> { + List dcExecuteActions = dcEmergencyPlans.getDcExecuteAction(); + dcExecuteActions.forEach(dcExecuteAction -> { + JSONObject executeConfig = JSON.parseObject(dcExecuteAction.getExecuteConfig()); + if (dcExecuteAction.getDeviceType() == DeviceTypeEnum.ROAD_SECTION_VOICE_BROADCASTING.getCode() + && executeConfig.get("operationType").equals("2")) { + // 执行操作中智能发布语音广播 + String content = intelligentPublishingOfInformation(dcEvent); + updateIntelligentPublishingContent(dcExecuteAction,markArray,dcEvent,content,dcEvent.getDirection()); + } else if (dcExecuteAction.getDeviceType() == DeviceTypeEnum.VARIABLE_INFORMATION_FLAG.getCode() + && executeConfig.get("operationType").equals("2")) { + // 执行操作中智能发布情报板 + String content = intelligentPublishingOfInformation(dcEvent); + updateIntelligentPublishingContent(dcExecuteAction,markArray,dcEvent,content,dcEvent.getDirection()); + } + }); + }); + } + + /** + * 更改智能发布中的发布内容-计算公里数 + */ + public void updateIntelligentPublishingContent(DcExecuteAction dcExecuteAction, + String[] markArray, + DcEvent dcEvent, + String content, + String direction) { + List deviceList = ruleFiltering(dcExecuteAction, markArray, dcEvent.getDirection()); + JSONObject executeConfig = JSON.parseObject(dcExecuteAction.getExecuteConfig()); + List> contentList = new ArrayList<>(); + deviceList.forEach(dcDevice -> { + Map map = new HashMap<>(); + map.put("dcDeviceId",dcDevice.getId()); + map.put("deviceName",dcDevice.getDeviceName()); + // 公里数 + int kilometers = 0; + // 米数 + int meters = 0; + dcDevice.setStakeMark(dcDevice.getStakeMark().replace("K", "")); + String[] deviceMarkArray = dcDevice.getStakeMark().split("\\+"); + if (deviceMarkArray[1].length() < 3) { + // 不足三位 补零 + deviceMarkArray[1] = String.format("%0" + 3 + "d", deviceMarkArray[1]); + } + if (direction.equals("菏泽方向") || direction.equals("1")) { + kilometers = Math.abs(Integer.parseInt(markArray[0]) - Integer.parseInt(deviceMarkArray[0])); + meters = Integer.parseInt(markArray[1]) - Integer.parseInt(deviceMarkArray[1]); + }else { + kilometers = Math.abs(Integer.parseInt(deviceMarkArray[0]) - Integer.parseInt(markArray[0])); + meters = Integer.parseInt(deviceMarkArray[1]) - Integer.parseInt(markArray[1]); + } + + double roundedDistance = Math.round((kilometers + meters / 1000.0) * 10.0) / 10.0; + if (roundedDistance < 1) { + map.put("content",content.replace("*",(int) (roundedDistance * 1000)+"米")); + }else { + if (roundedDistance % 1 == 0) { + // 去除掉1.0公里的情况 + map.put("content",content.replace("*",(int)roundedDistance+"公里")); + }else { + map.put("content",content.replace("*",roundedDistance+"公里")); + } + + } + + if (dcExecuteAction.getDeviceType() == DeviceTypeEnum.VARIABLE_INFORMATION_FLAG.getCode()) { + // 情报板 + // stopTime + map.put("stopTime", "50"); + // inScreenMode + map.put("inScreenMode", "1"); + // fontSpacing + map.put("fontSpacing", "0"); + // fontColor + map.put("fontColor", "ffff00"); + // fontType + map.put("fontType", "1"); + // fontSize + map.put("fontSize", "36"); + // screenSize 768*64 宽度和高度 + map.put("screenSize", "768*64"); + // formatStyle + map.put("formatStyle", "2"); + } + contentList.add(map); + }); + executeConfig.put("contentList",contentList); + dcExecuteAction.setExecuteConfig(executeConfig.toJSONString()); + } + /** * 感知事件 - 根据事件类型查询事件预案 * @@ -196,8 +297,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { markArray[1] = String.format("%0" + 3 + "d", markArray[1]); } DcExecuteAction executeAction = dcEventAnDcEmergencyPlans.getDcEmergencyPlans().getExecuteAction(); - Integer operationType = dcEventAnDcEmergencyPlans.getOperationType(); - List dcDevices = ruleFiltering(executeAction, markArray, direction, operationType); + List dcDevices = ruleFiltering(executeAction, markArray, direction); return getBoardTemplate(dcDevices); } @@ -218,8 +318,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { markArray[1] = String.format("%0" + 3 + "d", markArray[1]); } DcExecuteAction executeAction = dcEventAnDcEmergencyPlans.getDcEmergencyPlans().getExecuteAction(); - Integer operationType = dcEventAnDcEmergencyPlans.getOperationType(); - List dcDevices = ruleFiltering(executeAction, markArray, direction, operationType); + List dcDevices = ruleFiltering(executeAction, markArray, direction); return getBoardTemplate(dcDevices); } @@ -289,12 +388,9 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { * @param direction * @return */ - public List ruleFiltering(DcExecuteAction dcExecuteAction, String[] markArray, String direction, Integer operationType) { + public List ruleFiltering(DcExecuteAction dcExecuteAction, String[] markArray, String direction) { Integer searchRule = dcExecuteAction.getSearchRule(); - // 区分执行操作还是恢复操作 - JSONObject otherConfig = operationType.equals(1)? - JSON.parseObject(dcExecuteAction.getExecuteConfig()): JSON.parseObject(dcExecuteAction.getRecoverConfig()); List start = new ArrayList<>(); List end = new ArrayList<>(); // 设备列表 @@ -306,13 +402,13 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { // 指定设备资源 // 根据设备id,获取设备集合 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - List deviceList = (List) otherConfig.get("deviceList"); + String[] deviceList = dcExecuteAction.getDeviceList().split(","); queryWrapper.in(DcDevice::getIotDeviceId, deviceList); dcDevices = dcDeviceService.list(queryWrapper); } else if (searchRule.equals(2)) { // 事件上游最近 - if (direction.equals("菏泽方向")) { + if (direction.equals("菏泽方向") || direction.equals("1")) { // 上行 取最大的几个 start.add("55"); start.add("379"); @@ -351,8 +447,8 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { } } else if (searchRule.equals(3)) { - // 事件下游最近 - if (direction.equals("菏泽方向")) { + // 事件下游最近 没有这个类型 + if (direction.equals("菏泽方向") || direction.equals("1")) { // 上行 取最大的几个 start.add(markArray[0]); start.add(markArray[1]); @@ -406,8 +502,29 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { // 根据桩号范围,查询附近设备 dcDevices = dcDeviceService.devicePileNumberQueryDevice(parameter); } - - return dcDevices; + //将0公里和负数的设备去掉 + return dcDevices.stream() + .filter(device -> { + device.setStakeMark(device.getStakeMark().replace("K", "")); + String[] deviceMarkArray = device.getStakeMark().split("\\+"); + if (deviceMarkArray[1].length() < 3) { + deviceMarkArray[1] = String.format("%0" + 3 + "d", deviceMarkArray[1]); + } + int kilometers = 0; + int meters = 0; + if (direction.equals("菏泽方向") || direction.equals("1")) { + // 菏泽方向 桩号增大 设备桩号要小于事件桩号 + kilometers = Integer.parseInt(markArray[0]) - Integer.parseInt(deviceMarkArray[0]); + meters = Integer.parseInt(markArray[1]) - Integer.parseInt(deviceMarkArray[1]); + }else { + // 济南方向 桩号减小 设备桩号要大于事件桩号 + kilometers = Integer.parseInt(deviceMarkArray[0]) - Integer.parseInt(markArray[0]); + meters = Integer.parseInt(deviceMarkArray[1]) - Integer.parseInt(markArray[1]); + } + double roundedDistance = Math.round((kilometers + meters / 1000.0) * 10.0) / 10.0; + return kilometers >= 0 && roundedDistance > 0; + }) + .collect(Collectors.toList()); } @@ -418,7 +535,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { * @return 结果 */ @Override - public JSONArray executionEventConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) { + public JSONObject executionEventConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) { // 获取事件数据 DcEvent dcEvent = dcEventAnDcEmergencyPlans.getDcEvent(); // 方向 @@ -478,8 +595,17 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { @Override public DcInfoBoardTemplate eventAutomaticGeneration(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) { // 根据交通事件的事件类型,生成相应的情报板内容 - DcEvent dcEvent = dcEventAnDcEmergencyPlans.getDcEvent(); DcInfoBoardTemplate dcInfoBoardTemplate = dcEventAnDcEmergencyPlans.getDcInfoBoardTemplate(); + DcEvent dcEvent = dcEventAnDcEmergencyPlans.getDcEvent(); + dcInfoBoardTemplate.setContent(intelligentPublishingOfInformation(dcEvent)); + return dcInfoBoardTemplate; + } + + /** + * 智能发布信息匹配 + */ + public String intelligentPublishingOfInformation(DcEvent dcEvent) { + String content = "请注意前方危险"; int eventType = Integer.parseInt(dcEvent.getEventType().toString()); if (eventType == EventTypeEnum.ABNORMAL_WEATHER.getCode() || eventType == EventTypeEnum.TRAFFIC_ACCIDENT.getCode() || @@ -488,42 +614,41 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { eventType == EventTypeEnum.SERVICE_AREA_ABNORMALITY.getCode() || eventType == EventTypeEnum.ROADBLOCK_CLEARANCE.getCode()) { - String content = Arrays.stream(EventSubclassEnum.values()) + content = Arrays.stream(EventSubclassEnum.values()) .filter(eventSubclassEnum -> eventSubclassEnum.getCode().equals(dcEvent.getSubclass())) .findFirst() .map(EventSubclassEnum::getText) .orElse("请注意前方危险"); - dcInfoBoardTemplate.setContent(content); } else if (eventType == EventTypeEnum.VEHICLE_MALFUNCTION.getCode()) { // 车辆故障 DcEventVehicleAccident dcEventVehicleAccident = dcEvent.getDcEventVehicleAccident(); int locationType = Integer.parseInt(dcEventVehicleAccident.getLocationType().toString()); + // 路广设施id + Integer facilityId = dcEventVehicleAccident.getFacilityId(); + DcFacility facility = dcFacilityService.getFacility(facilityId.toString()); + String facilityName = facility.getFacilityName(); if (locationType == 1) { - dcInfoBoardTemplate.setContent("高速主线发生车辆故障"); - } else if (locationType == 2) { - dcInfoBoardTemplate.setContent("服务区发生车辆故障"); - } else if (locationType == 3) { - dcInfoBoardTemplate.setContent("立交桥发生车辆故障"); - } else if (locationType == 4) { - dcInfoBoardTemplate.setContent("收费站发生车辆故障"); + content = "前方*高速主线发生车辆故障"; + } else if (locationType == 2 || locationType == 3 || locationType == 4) { + // 服务区、立交、收费站 + content = "前方*"+facilityName+"发生车辆故障"; } } else if (eventType == EventTypeEnum.TRAFFIC_CONTROL.getCode()) { // 交通管制 DcEventTrafficControl dcEventTrafficControl = dcEvent.getDcEventTrafficControl(); int classify = Integer.parseInt(dcEventTrafficControl.getClassify().toString()); - String content = Arrays.stream(ClassifyEnum.values()) + content = Arrays.stream(ClassifyEnum.values()) .filter(eventSubclassEnum -> eventSubclassEnum.getCode() == classify) .findFirst() .map(ClassifyEnum::getText) - .orElse("前方存在限行或关闭"); - dcInfoBoardTemplate.setContent(content); + .orElse("前方*存在限行或关闭"); } else { // 施工建设 - dcInfoBoardTemplate.setContent("前方施工请注意驾驶"); + content = "前方*施工请注意驾驶"; } - return dcInfoBoardTemplate; + return content; } /** @@ -533,7 +658,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { * @return */ @Override - public JSONArray executionWarningConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) { + public JSONObject executionWarningConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans) { // 获取事件数据 DcWarning dcWarning = dcEventAnDcEmergencyPlans.getDcWarning(); @@ -550,7 +675,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { * @param dcEventAnDcEmergencyPlans 事件数据 和 事件预案数据 * @return */ - public JSONArray executionConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans, + public JSONObject executionConfirmation(DcEventAnDcEmergencyPlans dcEventAnDcEmergencyPlans, String stakeMark, String direction, String id) { @@ -574,7 +699,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { //获取事件预案中的操作配置 dcEmergencyPlans.getDcExecuteAction() .forEach(dcExecuteAction -> { - List dcDevices = ruleFiltering(dcExecuteAction, markArray, direction, operationType); + List dcDevices = ruleFiltering(dcExecuteAction, markArray, direction); JSONObject otherConfig = operationType.equals(1)? JSON.parseObject(dcExecuteAction.getExecuteConfig()): JSON.parseObject(dcExecuteAction.getRecoverConfig()); try { @@ -600,23 +725,26 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { }); // 创建一个 预案事件关联对象 EventPlanAssoc eventPlanAssoc = new EventPlanAssoc(); + JSONObject resultObject = new JSONObject(); // 事件编号 eventPlanAssoc.setEventId(id); EventPlanAssoc selectEventPlanAssoc = eventPlanAssocMapper.selectByEventId(eventPlanAssoc); // 区分是执行操作 还是 恢复操作 - if (dcEventAnDcEmergencyPlans.getOperationType().equals(1) && StringUtils.isEmpty(selectEventPlanAssoc.getId())) { + if (dcEventAnDcEmergencyPlans.getOperationType().equals(1) && selectEventPlanAssoc == null) { // 首次执行操作 eventPlanAssoc.setEmergencyPlansId(dcEmergencyPlans.getId()); eventPlanAssoc.setExecutingControlDevice(deviceIds.toString().replaceFirst(";", "")); eventPlanAssoc.setExecutingControlResult(resultArray.toJSONString()); eventPlanAssoc.setCreateTime(DateUtils.getNowDate()); - eventPlanAssocMapper.insertEventPlanAssoc(eventPlanAssoc); + int eventPlanAssocId = eventPlanAssocMapper.insertEventPlanAssoc(eventPlanAssoc); + resultObject.put("eventPlanAssocId",eventPlanAssocId); } else if (StringUtils.isNotEmpty(selectEventPlanAssoc.getId()) && dcEventAnDcEmergencyPlans.getOperationType().equals(1)) { // 多次执行操作 selectEventPlanAssoc.setExecutingControlResult(resultArray.toJSONString()); selectEventPlanAssoc.setUpdateTime(DateUtils.getNowDate()); eventPlanAssocMapper.updateEventPlanAssoc(selectEventPlanAssoc); + resultObject.put("eventPlanAssocId",selectEventPlanAssoc.getId()); } else { // 恢复操作 未执行的事件不能进行恢复操作 @@ -624,8 +752,10 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { selectEventPlanAssoc.setRecoveredControlDevice(deviceIds.toString().replaceFirst(";", "")); selectEventPlanAssoc.setRecoveredControlResult(resultArray.toJSONString()); eventPlanAssocMapper.updateEventPlanAssoc(selectEventPlanAssoc); + resultObject.put("eventPlanAssocId",selectEventPlanAssoc.getId()); } - return resultArray; + resultObject.put("deviceOperationResult",resultArray); + return resultObject; } /** @@ -635,7 +765,7 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { List dcDevices, JSONObject otherConfig, JSONArray resultArray) { - + CountDownLatch latch = new CountDownLatch(dcDevices.size()); for (DcDevice device : dcDevices) { @@ -673,7 +803,28 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { else if (device.getDeviceType().equals(DeviceTypeConstants.VARIABLE_INFORMATION_FLAG.toString())) { if (operationType == 1) { // 情报板发布全流程 - boardReleaseProcess(props, iotDeviceId, otherConfig, device, resultArray); + if (otherConfig.get("operationType").equals("2")) { + JSONArray contentList = JSON.parseArray(otherConfig.get("contentList").toString()); + JSONObject foundContent = contentList.stream() + .map(content -> JSON.parseObject(content.toString())) + .filter(jsonObject -> + Integer.parseInt(jsonObject.get("dcDeviceId").toString()) == device.getId()) + .findFirst() + .orElse(null); + if (foundContent == null) { + // 说明没有匹配到设备 + JSONObject errorResult = new JSONObject(); + errorResult.put("device",device.getId()); + errorResult.put("errorMessage","未匹配到对应的模板内容"); + resultArray.add(errorResult); + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("dcInfoBoardTemplate",foundContent); + boardReleaseProcess(props, iotDeviceId, jsonObject, device, resultArray); + }else { + boardReleaseProcess(props, iotDeviceId, otherConfig, device, resultArray); + } + } else { // 恢复操作 if (otherConfig.get("operationType").equals("2")) { @@ -702,7 +853,26 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { params.put("name", "task-event"); params.put("outVVol", "8"); params.put("priority", "1"); - params.put("text", otherConfig.get("content")); + if (otherConfig.get("operationType").equals("2")) { + // 智能发布 + JSONArray contentList = JSON.parseArray(otherConfig.get("contentList").toString()); + JSONObject foundContent = contentList.stream() + .map(content -> JSON.parseObject(content.toString())) + .filter(jsonObject -> + Integer.parseInt(jsonObject.get("dcDeviceId").toString()) == device.getId()) + .findFirst() + .orElse(null); + if (foundContent == null) { + // 说明没有匹配到设备 + JSONObject errorResult = new JSONObject(); + errorResult.put("device",device.getId()); + errorResult.put("errorMessage","未匹配到对应的广播内容"); + resultArray.add(errorResult); + } + params.put("text", foundContent.get("content")); + }else { + params.put("text", otherConfig.get("content")); + } params.put("repeatTimes", "3"); params.put("functionType", "startPaTts"); JSONArray termList = new JSONArray(); @@ -743,10 +913,18 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { } catch (HttpException | IOException e) { log.error(e.toString()); throw new RuntimeException(e); + } finally { + latch.countDown(); // 确保在异常情况下也能减少CountDownLatch计数 } }); } + try { + latch.await(); // 等待所有线程执行完毕 + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } /** @@ -889,11 +1067,6 @@ public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService { return dcExecuteActionService.updateDcExecuteActionBatch(dcExecuteActionList); } - @Override - public int updateBatchDcEmergencyPlans(List dcEmergencyPlansList) { - return 0; - } - /** * 批量删除事件预案 * 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 a1f75d48..cc1291e5 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 @@ -20,6 +20,7 @@ import com.zc.business.service.IMiddleDatabaseService; import com.zc.business.utils.diff.Diff; import com.zc.business.utils.diff.model.Result; import org.junit.Test; +import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -136,6 +137,7 @@ public class DcEventServiceImpl extends ServiceImpl impl String dcEventId =dcEvent.getId(); + //获取事件类型 int eventType = Math.toIntExact(dcEvent.getEventType()); @@ -146,7 +148,7 @@ public class DcEventServiceImpl extends ServiceImpl impl //获取部门信息 dcEvent.setDeptId(SecurityUtils.getDeptId()); //用户 - dcEvent.setUserId(SecurityUtils.getUserId()); + dcEvent.setUserId(SecurityUtils.getUserId()); dcEvent.setCreateTime(DateUtils.getNowDate()); @@ -187,9 +189,11 @@ public class DcEventServiceImpl extends ServiceImpl impl if (i7 > 0) { - //中间库 - MdEvent mdEvent = new MdEvent(dcEvent); - middleDatabaseService.insertMiddleDatabaseEvent(mdEvent); +if (dcEvent.getDcEventTrafficControl().getFacilityIds().length<1 &&dcEventId == null){//非 事件处置 和收费站等多条数据添加 + //中间库 + MdEvent mdEvent = new MdEvent(dcEvent); + middleDatabaseService.insertMiddleDatabaseEvent(mdEvent); +} switch (eventType) { //交通事故 case 1: @@ -213,52 +217,142 @@ public class DcEventServiceImpl extends ServiceImpl impl if (dcEvent.getDcEventTrafficControl() != null) { //TODO 插入多个收费站 if (dcEvent.getDcEventTrafficControl().getFacilityIds().length==1){//facilityIds==1 说明只选择了一个收费站 - dcEvent.getDcEventTrafficControl().setId(uuid); - dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[0]);//取出数组字段赋值 设施id - int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); - }else { + + if (dcEventId !=null){//不等于空 事件处置页面 修改 + dcEventMapper.deleteDcEventById(uuid);//删除添加的事件主类 + DcEvent dcEvent1 = new DcEvent(); + dcEvent1.setId(dcEventId);//事件id + dcEvent1.setEventNature(1l);//首发事件 + dcEvent1.setLinkId(uuid);//关联管制事件id + dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 + dcEvent.getDcEventTrafficControl().setId(uuid); + dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[0]);//取出数组字段赋值 设施id + int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl());// + }else { + //中间库 + MdEvent mdEvent = new MdEvent(dcEvent); + middleDatabaseService.insertMiddleDatabaseEvent(mdEvent); + + dcEvent.getDcEventTrafficControl().setId(uuid); + dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[0]);//取出数组字段赋值 设施id + int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); + } + + }else if (dcEvent.getDcEventTrafficControl().getFacilityIds().length>1){//facilityIds1=1 说明只选择了多个收费站 + + if (dcEventId !=null){//不等于空 事件处置页面 修改 + dcEventMapper.deleteDcEventById(uuid);//删除添加的事件主类 + DcEvent dcEvent1 = new DcEvent(); + dcEvent1.setId(dcEventId);//事件id + dcEvent1.setEventNature(1l);//首发事件 + Map map = new HashMap<>(); + for (int i = 0; i < dcEvent.getDcEventTrafficControl().getFacilityIds().length; i++) { //设置事件Id UUID无下划线格式32 + String facilityUUID = IdUtils.fastSimpleUUID(); + map.put("facilityId"+i,facilityUUID);//每循环一次生成一个uuid + } + StringBuilder sb2 = new StringBuilder(); + // 遍历map, + int a = 0; + for (Map.Entry entry : map.entrySet()) { + sb2.append(entry.getValue()); + if (dcEvent.getDcEventTrafficControl().getFacilityIds().length-a !=1){ + sb2.append(","); + } + a++; + } + String linkId2 = sb2.toString(); + dcEvent1.setLinkId(linkId2);//关联管制事件id + dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质 + for (int i = 0; i < dcEvent.getDcEventTrafficControl().getFacilityIds().length; i++) { + dcEvent.getDcEventTrafficControl().setId(map.get("facilityId"+i));//交通管制事件id + dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]);//取出数组字段赋值 设施id + // 使用StringBuilder来构建逗号分隔的字符串 + + //新增第一条数据 + dcEvent.setId(map.get("facilityId" + i)); + dcEvent.setEventState(0L); + dcEvent.setDeptId(SecurityUtils.getDeptId()); + dcEvent.setUserId(SecurityUtils.getUserId()); + dcEvent.setCreateTime(DateUtils.getNowDate()); + dcEvent.setEventNature(2L);//关联管制 + + StringBuilder sb = new StringBuilder(); + // 遍历map,排除与当前索引i对应的键 + for (Map.Entry entry : map.entrySet()) { + if (!entry.getKey().equals("facilityId" + i)) { + if (sb.length() > 0) { + sb.append(","); + } + sb.append(entry.getValue()); + } + } + String linkId = sb.toString(); + dcEvent.setLinkId(linkId); + + //交通管制 + if (eventType == 3 && dcEvent.getDcEventTrafficControl().getFacilityIds()[i] != null) { + String facilityId = String.valueOf(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]); + dcEvent.setStakeMark(extracted(facilityId)); + } + dcEventMapper.insertDcEvent(dcEvent); + //中间库 + MdEvent mdEvent = new MdEvent(dcEvent); + middleDatabaseService.insertMiddleDatabaseEvent(mdEvent); + + int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); + + } + }else { + dcEventMapper.deleteDcEventById(uuid);//删除添加的事件主类 Map map = new HashMap<>(); for (int i = 0; i < dcEvent.getDcEventTrafficControl().getFacilityIds().length; i++) { //设置事件Id UUID无下划线格式32 String facilityUUID = IdUtils.fastSimpleUUID(); map.put("facilityId"+i,facilityUUID);//每循环一次生成一个uuid - Long facilityId = dcEvent.getDcEventTrafficControl().getFacilityIds()[i]; - map.put(facilityUUID, String.valueOf(facilityId));//将uuid作为主键 设施id作为 值 存放map } for (int i = 0; i < dcEvent.getDcEventTrafficControl().getFacilityIds().length; i++) { - dcEvent.getDcEventTrafficControl().setId(map.get("facilityId"+i));//交通管制事件id + + dcEvent.getDcEventTrafficControl().setId(map.get("facilityId" + i));//交通管制事件id dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]);//取出数组字段赋值 设施id //新增第一条数据 - dcEvent.setId(map.get("facilityId"+i)); + dcEvent.setId(map.get("facilityId" + i)); dcEvent.setEventState(0L); dcEvent.setDeptId(SecurityUtils.getDeptId()); dcEvent.setUserId(SecurityUtils.getUserId()); dcEvent.setCreateTime(DateUtils.getNowDate()); dcEvent.setEventNature(2L);//关联管制 + // 使用StringBuilder来构建逗号分隔的字符串 StringBuilder sb = new StringBuilder(); - boolean isFirst = true; - // 迭代Map并过滤出不为1的键对应的值 + + // 遍历map,排除与当前索引i对应的键 for (Map.Entry entry : map.entrySet()) { - if (entry.getKey() !="facilityId"+i) { - if (!isFirst) { + if (!entry.getKey().equals("facilityId" + i)) { + if (sb.length() > 0) { sb.append(","); } sb.append(entry.getValue()); - isFirst = false; } } - String linkId= sb.toString(); + + String linkId = sb.toString(); dcEvent.setLinkId(linkId); + System.out.println(linkId); + //交通管制 - if (eventType ==3 && dcEvent.getDcEventTrafficControl().getFacilityIds()[i] != null) { + if (eventType == 3 && dcEvent.getDcEventTrafficControl().getFacilityIds()[i] != null) { String facilityId = String.valueOf(dcEvent.getDcEventTrafficControl().getFacilityIds()[i]); - dcEvent.setStakeMark( extracted(facilityId)); + dcEvent.setStakeMark(extracted(facilityId)); } + //中间库 + MdEvent mdEvent = new MdEvent(dcEvent); + middleDatabaseService.insertMiddleDatabaseEvent(mdEvent); + dcEventMapper.insertDcEvent(dcEvent); - int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); + int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl()); + } } } @@ -631,6 +725,8 @@ public class DcEventServiceImpl extends ServiceImpl impl } + + /** * 批量删除事件信息 * diff --git a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml index a2e7280c..97fb7fe1 100644 --- a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml +++ b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml @@ -4,43 +4,91 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + --> - + - SELECT - id, - dc_event.dept_id as dept_id, - sys_dept.dept_name, - stake_mark, - CASE direction - WHEN '1' THEN '菏泽方向' - WHEN '3' THEN '济南方向' - END AS direction, - dc_event.user_id as user_id, - sys_user.nick_name as nickName, - start_time, - end_time, - estimated_end_time, - event_level, - event_type, - event_title, - is_perceived, - CASE event_type - WHEN '1' THEN '交通事故' - WHEN '2' THEN '车辆故障' - WHEN '3' THEN '交通管制' - WHEN '4' THEN '交通拥堵' - WHEN '5' THEN '非法上路' - WHEN '6' THEN '路障清除' - WHEN '7' THEN '施工建设' - WHEN '8' THEN '服务区异常' - WHEN '9' THEN '设施设备隐患' - WHEN '10' THEN '异常天气' - WHEN '11' THEN '其他事件' - ELSE '其他' - END AS stringEventType, - CASE event_subclass - WHEN '1-1'THEN '追尾' - WHEN '1-2'THEN '侧翻' - WHEN '1-3'THEN '撞护栏' - WHEN '1-4'THEN '自然' - WHEN '1-5'THEN '其他事故' - WHEN '2-1'THEN '车辆故障' - WHEN '3-1'THEN '主线封闭和限行' - WHEN '3-2'THEN '收费站封闭和限行' - WHEN '3-3'THEN '立交封闭和限行' - WHEN '3-4'THEN '服务区封闭和限行' - WHEN '4-1'THEN '道路拥堵' - WHEN '4-2'THEN '立交拥堵' - WHEN '4-3'THEN '收费站拥堵' - WHEN '4-4'THEN '服务区拥堵' - WHEN '5-1'THEN '行人' - WHEN '5-2'THEN '非机动车' - WHEN '5-3'THEN '摩托车' - WHEN '5-4'THEN '其他' - WHEN '6-1'THEN '烟雾' - WHEN '6-2'THEN '倒伏树木' - WHEN '6-3'THEN '撒落物' - WHEN '6-4'THEN '动物' - WHEN '6-5'THEN '其他' - WHEN '7-1'THEN '道路养护施工' - WHEN '7-2'THEN '收费站养护施工' - WHEN '7-3'THEN '服务区养护施工' - WHEN '7-4'THEN '枢纽立交匝道养护施工' - WHEN '7-5'THEN '地方道路养护施工' - WHEN '7-6'THEN '道路工程建设施工' - WHEN '7-7'THEN '收费站工程建设施工' - WHEN '7-8'THEN '服务区工程建设施工' - WHEN '7-9' THEN '枢纽立交匝道工程建设施工' - WHEN '7-10' THEN'地方道路工程建设施工' - WHEN '8-1'THEN'封闭、暂停营业' - WHEN '8-2'THEN'重要设施停用' - WHEN '8-3'THEN'服务区其他异常' - WHEN '9-1'THEN'摄像机' - WHEN '9-2'THEN'护栏' - WHEN '9-3'THEN'隔离栅' - WHEN '9-4'THEN'情报板' - WHEN '9-5'THEN'防炫板' - WHEN '9-6'THEN'其他' - WHEN '10-1' THEN'雨' - WHEN '10-2' THEN'雪' - WHEN '10-3' THEN'雾' - WHEN '10-4' THEN'大风' - WHEN '10-5' THEN'低温寒潮' - WHEN '10-6' THEN'路面积雪' - WHEN '10-7' THEN'路面结冰' - WHEN '10-8' THEN'路面积水' - WHEN '10-9' THEN'其他' - WHEN '11-1' THEN'其他事件' - END AS event_subclass, - event_cause, - description, - dc_event.event_state, - CASE dc_event.event_state - WHEN '0' THEN '待确认' - WHEN '1' THEN '处理中' - WHEN '2' THEN '已完成' - WHEN '3' THEN '已撤销' - END AS stringEventState, - event_source, - CASE event_source - WHEN '1' THEN '96659' - WHEN '2' THEN '交警转接' - WHEN '3' THEN '道路巡查' - WHEN '4' THEN '视频巡查' - WHEN '5' THEN '视频AI' - WHEN '6' THEN '一键救援' - ELSE '其他' - END AS stringEventSource, - event_nature, - dc_event.remark as remark, - dc_event.create_time as create_time, - dc_event.update_time as update_time, - event_source_tips, - occurrence_time, - in_tunnel, - road_id, - lang - 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 - - - select dc_event.id AS id, - dc_event.stake_mark, - dc_event.direction, - dc_event.is_perceived, - dc_event.user_id, - dc_event.start_time, - dc_event.end_time, - dc_event.occurrence_time, - dc_event.estimated_end_time, - dc_event.event_level, - dc_event.event_type AS event_type, + SELECT id, + dc_event.dept_id as dept_id, + sys_dept.dept_name, + stake_mark, + CASE direction + WHEN '1' THEN '菏泽方向' + WHEN '3' THEN '济南方向' + END AS direction, + dc_event.user_id as user_id, + sys_user.nick_name as nickName, + start_time, + end_time, + estimated_end_time, + event_level, + event_type, + longitude, + dimension, + event_title, + link_id, + is_perceived, + CASE event_type + WHEN '1' THEN '交通事故' + WHEN '2' THEN '车辆故障' + WHEN '3' THEN '交通管制' + WHEN '4' THEN '交通拥堵' + WHEN '5' THEN '非法上路' + WHEN '6' THEN '路障清除' + WHEN '7' THEN '施工建设' + WHEN '8' THEN '服务区异常' + WHEN '9' THEN '设施设备隐患' + WHEN '10' THEN '异常天气' + WHEN '11' THEN '其他事件' + ELSE '其他' + END AS stringEventType, + CASE event_subclass + WHEN '1-1' THEN '追尾' + WHEN '1-2' THEN '侧翻' + WHEN '1-3' THEN '撞护栏' + WHEN '1-4' THEN '自然' + WHEN '1-5' THEN '其他事故' + WHEN '2-1' THEN '车辆故障' + WHEN '3-1' THEN '主线封闭和限行' + WHEN '3-2' THEN '收费站封闭和限行' + WHEN '3-3' THEN '立交封闭和限行' + WHEN '3-4' THEN '服务区封闭和限行' + WHEN '4-1' THEN '道路拥堵' + WHEN '4-2' THEN '立交拥堵' + WHEN '4-3' THEN '收费站拥堵' + WHEN '4-4' THEN '服务区拥堵' + WHEN '5-1' THEN '行人' + WHEN '5-2' THEN '非机动车' + WHEN '5-3' THEN '摩托车' + WHEN '5-4' THEN '其他' + WHEN '6-1' THEN '烟雾' + WHEN '6-2' THEN '倒伏树木' + WHEN '6-3' THEN '撒落物' + WHEN '6-4' THEN '动物' + WHEN '6-5' THEN '其他' + WHEN '7-1' THEN '道路养护施工' + WHEN '7-2' THEN '收费站养护施工' + WHEN '7-3' THEN '服务区养护施工' + WHEN '7-4' THEN '枢纽立交匝道养护施工' + WHEN '7-5' THEN '地方道路养护施工' + WHEN '7-6' THEN '道路工程建设施工' + WHEN '7-7' THEN '收费站工程建设施工' + WHEN '7-8' THEN '服务区工程建设施工' + WHEN '7-9' THEN '枢纽立交匝道工程建设施工' + WHEN '7-10' THEN '地方道路工程建设施工' + WHEN '8-1' THEN '封闭、暂停营业' + WHEN '8-2' THEN '重要设施停用' + WHEN '8-3' THEN '服务区其他异常' + WHEN '9-1' THEN '摄像机' + WHEN '9-2' THEN '护栏' + WHEN '9-3' THEN '隔离栅' + WHEN '9-4' THEN '情报板' + WHEN '9-5' THEN '防炫板' + WHEN '9-6' THEN '其他' + WHEN '10-1' THEN '雨' + WHEN '10-2' THEN '雪' + WHEN '10-3' THEN '雾' + WHEN '10-4' THEN '大风' + WHEN '10-5' THEN '低温寒潮' + WHEN '10-6' THEN '路面积雪' + WHEN '10-7' THEN '路面结冰' + WHEN '10-8' THEN '路面积水' + WHEN '10-9' THEN '其他' + WHEN '11-1' THEN '其他事件' + END AS event_subclass, + event_cause, + description, + dc_event.event_state, + CASE dc_event.event_state + WHEN '0' THEN '待确认' + WHEN '1' THEN '处理中' + WHEN '2' THEN '已完成' + WHEN '3' THEN '已撤销' + END AS stringEventState, + event_source, + CASE event_source + WHEN '1' THEN '96659' + WHEN '2' THEN '交警转接' + WHEN '3' THEN '道路巡查' + WHEN '4' THEN '视频巡查' + WHEN '5' THEN '视频AI' + WHEN '6' THEN '一键救援' + ELSE '其他' + END AS stringEventSource, + event_nature, + dc_event.remark as remark, + dc_event.create_time as create_time, + dc_event.update_time as update_time, + event_source_tips, + occurrence_time, + in_tunnel, + road_id, + lang + 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 + - dc_event.event_subclass, - dc_event.event_cause, - dc_event.description, - dc_event.event_state, - dc_event.event_source, - dc_event.event_nature, - dc_event.remark, - dc_event.create_time, - dc_event.update_time, - dc_event.event_source_tips, - dc_event.in_tunnel, - dc_event.road_id, - dc_event.event_title, + select dc_event.id AS id, + dc_event.stake_mark, + dc_event.link_id, + dc_event.dimension, + dc_event.longitude, + dc_event.direction, + dc_event.is_perceived, + dc_event.user_id, + dc_event.start_time, + dc_event.end_time, + dc_event.occurrence_time, + dc_event.estimated_end_time, + dc_event.event_level, + dc_event.event_type AS event_type, - dc_event_type.event_name AS event_name, - dc_process_config.node_node AS node_node, - dc_process_config.process_node AS process_node, - dc_process_config.common_phrases AS common_phrases, - dc_dispatch.id AS dc_dispatch_id, - dc_dispatch.organization_id, - dc_dispatch.dispatch_name, - dc_dispatch.dispatch_status, - dc_dispatch.remark AS dc_dispatch_remark, - dc_dispatch.end_time AS dc_dispatch_end_time, - dc_dispatch.start_time AS dc_dispatch_start_time, - dc_dispatch.event_id, - dc_organization.id AS dc_organization_id, - dc_organization.parent_id, - dc_organization.organization_type, - dc_organization.organization_name, - dc_organization.organization_address, - dc_organization.stake_mark AS dc_organization_stake_mark, - dc_organization.rescue_unit, - dc_organization.description AS dc_organization_description, - dc_vehicles.vehicle_plate, - dc_vehicles.vehicle_type, - dc_vehicles.vehicle_status, - dc_vehicles.remark AS dc_vehicles_remark, - dc_employees.post_id, - dc_employees.NAME, - dc_employees.contact_number FROM dc_event + dc_event.event_subclass, + dc_event.event_cause, + dc_event.description, + dc_event.event_state, + dc_event.event_source, + dc_event.event_nature, + dc_event.remark, + dc_event.create_time, + dc_event.update_time, + dc_event.event_source_tips, + dc_event.in_tunnel, + dc_event.road_id, + dc_event.event_title, - + dc_event_type.event_name AS event_name, + dc_process_config.node_node AS node_node, + dc_process_config.process_node AS process_node, + dc_process_config.common_phrases AS common_phrases, + dc_dispatch.id AS dc_dispatch_id, + dc_dispatch.organization_id, + dc_dispatch.dispatch_name, + dc_dispatch.dispatch_status, + dc_dispatch.remark AS dc_dispatch_remark, + dc_dispatch.end_time AS dc_dispatch_end_time, + dc_dispatch.start_time AS dc_dispatch_start_time, + dc_dispatch.event_id, + dc_organization.id AS dc_organization_id, + dc_organization.parent_id, + dc_organization.organization_type, + dc_organization.organization_name, + dc_organization.organization_address, + dc_organization.stake_mark AS dc_organization_stake_mark, + dc_organization.rescue_unit, + dc_organization.description AS dc_organization_description, + dc_vehicles.vehicle_plate, + dc_vehicles.vehicle_type, + dc_vehicles.vehicle_status, + dc_vehicles.remark AS dc_vehicles_remark, + dc_employees.post_id, + dc_employees.NAME, + dc_employees.contact_number + FROM dc_event - - - + + + + - - insert into dc_event - - id, - dept_id, - stake_mark, - direction, - user_id, - start_time, - end_time, - estimated_end_time, - event_level, - event_type, - event_subclass, - event_cause, - description, - event_state, - event_source, - event_nature, - remark, - create_time, - update_time, - event_source_tips, - in_tunnel, - road_id, - lang, - event_title, - occurrence_time, - is_perceived, - - - #{id}, - #{deptId}, - #{stakeMark}, - #{direction}, - #{userId}, - #{startTime}, - #{endTime}, - #{estimatedEndTime}, - #{eventLevel}, - #{eventType}, - #{eventSubclass}, - #{eventCause}, - #{description}, - #{eventState}, - #{eventSource}, - #{eventNature}, - #{remark}, - #{createTime}, - #{updateTime}, - #{eventSourceTips}, - #{inTunnel}, - #{roadId}, - #{lang}, - #{eventTitle}, - #{occurrenceTime}, - #{isPerceived}, - - - - + + insert into dc_event + + id, + dept_id, + stake_mark, + direction, + user_id, + start_time, + end_time, + estimated_end_time, + event_level, + event_type, + event_subclass, + event_cause, + description, + event_state, + event_source, + event_nature, + remark, + create_time, + update_time, + event_source_tips, + in_tunnel, + road_id, + lang, + event_title, + occurrence_time, + is_perceived, + dimension, + longitude, + link_id, + + + #{id}, + #{deptId}, + #{stakeMark}, + #{direction}, + #{userId}, + #{startTime}, + #{endTime}, + #{estimatedEndTime}, + #{eventLevel}, + #{eventType}, + #{eventSubclass}, + #{eventCause}, + #{description}, + #{eventState}, + #{eventSource}, + #{eventNature}, + #{remark}, + #{createTime}, + #{updateTime}, + #{eventSourceTips}, + #{inTunnel}, + #{roadId}, + #{lang}, + #{eventTitle}, + #{occurrenceTime}, + #{isPerceived}, + #{dimension}, + #{longitude}, + #{linkId}, + + + + insert into dc_event id, @@ -575,6 +597,8 @@ event_title, occurrence_time, is_perceived, + dimension, + longitude, #{dcEvent.id}, @@ -603,71 +627,111 @@ #{dcEvent.eventTitle}, #{dcEvent.occurrenceTime}, #{dcEvent.isPerceived}, + #{dcEvent.dimension}, + #{dcEvent.longitude}, - update dc_event - - dept_id = #{deptId}, - stake_mark = #{stakeMark}, - direction = #{direction}, - user_id = #{userId}, - start_time = #{startTime}, - end_time = #{endTime}, - estimated_end_time = #{estimatedEndTime}, - event_level = #{eventLevel}, - event_type = #{eventType}, - event_subclass = #{eventSubclass}, - event_cause = #{eventCause}, - description = #{description}, - event_state = #{eventState}, - event_source = #{eventSource}, - event_nature = #{eventNature}, - remark = #{remark}, - create_time = #{createTime}, - update_time = #{updateTime}, - event_source_tips = #{eventSourceTips}, - in_tunnel = #{inTunnel}, - road_id = #{roadId}, - road_id = #{lang}, - event_title = #{eventTitle}, - occurrence_time = #{occurrenceTime}, - is_perceived = #{isPerceived}, - - where id = #{id} - + update dc_event + + dept_id = #{deptId}, + stake_mark = #{stakeMark}, + direction = #{direction}, + user_id = #{userId}, + start_time = #{startTime}, + end_time = #{endTime}, + estimated_end_time = #{estimatedEndTime}, + event_level = #{eventLevel}, + event_type = #{eventType}, + event_subclass = #{eventSubclass}, + event_cause = #{eventCause}, + description = #{description}, + event_state = #{eventState}, + event_source = #{eventSource}, + event_nature = #{eventNature}, + remark = #{remark}, + create_time = #{createTime}, + update_time = #{updateTime}, + event_source_tips = #{eventSourceTips}, + in_tunnel = #{inTunnel}, + road_id = #{roadId}, + road_id = #{lang}, + event_title = #{eventTitle}, + occurrence_time = #{occurrenceTime}, + is_perceived = #{isPerceived}, + dimension = #{dimension}, + longitude = #{longitude}, + link_id = #{linkId}, + + where id = #{id} + + + update dc_event + + dept_id = #{deptId}, + stake_mark = #{stakeMark}, + direction = #{direction}, + user_id = #{userId}, + start_time = #{startTime}, + end_time = #{endTime}, + estimated_end_time = #{estimatedEndTime}, + event_level = #{eventLevel}, + event_type = #{eventType}, + event_subclass = #{eventSubclass}, + event_cause = #{eventCause}, + description = #{description}, + event_state = #{eventState}, + event_source = #{eventSource}, + remark = #{remark}, + create_time = #{createTime}, + update_time = #{updateTime}, + event_source_tips = #{eventSourceTips}, + in_tunnel = #{inTunnel}, + road_id = #{roadId}, + road_id = #{lang}, + event_title = #{eventTitle}, + occurrence_time = #{occurrenceTime}, + is_perceived = #{isPerceived}, + dimension = #{dimension}, + + event_nature = #{eventNature}, + link_id = #{linkId}, + + where id = #{id} + - - delete from dc_event where id = #{id} - + + delete + from dc_event + where id = #{id} + - - delete from dc_event where id in - - #{id} - - + + delete from dc_event where id in + + #{id} + + - + - + - + SELECT s.status, + COALESCE(t.count, 0) AS count FROM ( SELECT 0 AS event_state, 'state0Count' AS status UNION ALL SELECT 1 AS event_state, 'state1Count' AS status UNION ALL @@ -675,10 +739,11 @@ SELECT 3 AS event_state, 'state3Count' AS status ) s LEFT JOIN ( - SELECT event_state, COUNT(*) AS count + SELECT event_state, COUNT (*) AS count FROM dc_event GROUP BY event_state - ) t ON s.event_state = t.event_state; + ) t + ON s.event_state = t.event_state;