From 953e14f9405961afe187767c4d2cde6604c58e7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=8E=8B=E5=85=B4=E7=90=B3?= <1911390090@qq.com>
Date: Thu, 30 May 2024 16:02:38 +0800
Subject: [PATCH] =?UTF-8?q?=E7=AE=A1=E5=88=B6=E4=BA=8B=E4=BB=B6=EF=BC=88?=
 =?UTF-8?q?=20=E5=85=B3=E8=81=94=E7=AE=A1=E5=88=B6=EF=BC=89=20=E4=BA=8B?=
 =?UTF-8?q?=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../service/impl/DcEventServiceImpl.java      | 120 +++++++++++-------
 .../mapper/business/DcEventMapper.xml         |   4 +-
 2 files changed, 73 insertions(+), 51 deletions(-)

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 7e59ea01..53c23e79 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
@@ -197,7 +197,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
             dcEvent.setStakeMark(extracted(facilityId));
         }
         //桩号校验
-        if (!com.ruoyi.common.utils.StakeMarkUtils.checkStakeMark(dcEvent.getStakeMark())){
+        if (!com.ruoyi.common.utils.StakeMarkUtils.checkStakeMark(dcEvent.getStakeMark())) {
             return -1;
         }
 
@@ -232,9 +232,11 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                     break;
                 //交通管制
                 case 3:
+                    //交通管制事件 不做 首因关联
+
                     if (dcEvent.getDcEventTrafficControl() != null) {
                         if (dcEventId == null) {//非首页进入
-                            if (dcEvent.getDcEventTrafficControl().getFacilityIds() ==null ) {
+                            if (dcEvent.getDcEventTrafficControl().getFacilityIds() == null) {
                                 dcEvent.getDcEventTrafficControl().setId(uuid);
                                 int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl());
                                 break;
@@ -248,19 +250,23 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                             //查询事件
                             DcEvent dcEvent2 = dcEventMapper.selectDcEventById(dcEventId);
                             //判断事件 关联事件id是否为空
-                            if (dcEvent2.getLinkId()==null){
+                            if (dcEvent2.getLinkId() == null) {
                                 DcEvent dcEvent1 = new DcEvent();
                                 dcEvent1.setId(dcEventId);//事件id
-                                dcEvent1.setEventNature(1l);//首发事件
-                                dcEvent1.setLinkId(uuid);//关联管制事件id
-                                dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
-                            }else {
+                                if (dcEvent2.getEventType() != 3) {
+                                    dcEvent1.setEventNature(1l);//首发事件
+                                    dcEvent1.setLinkId(uuid);//关联管制事件id
+                                    dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
+                                }
 
+                            } else {
                                 DcEvent dcEvent1 = new DcEvent();
                                 dcEvent1.setId(dcEventId);//事件id
-                                dcEvent1.setEventNature(1l);//首发事件
-                                dcEvent1.setLinkId(dcEvent2.getLinkId()+","+uuid);//关联管制事件id
-                                dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
+                                if (dcEvent2.getEventType() != 3) {
+                                    dcEvent1.setEventNature(1l);//首发事件
+                                    dcEvent1.setLinkId(dcEvent2.getLinkId() + "," + uuid);//关联管制事件id
+                                    dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
+                                }
                             }
 
 
@@ -270,11 +276,16 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                         if (dcEvent.getDcEventTrafficControl().getFacilityIds().length == 1) {//facilityIds==1 说明只选择了一个收费站
 
                             if (dcEventId != null && !dcEventId.equals("")) {//不等于空 事件处置页面 修改
+                                DcEvent dcEvent2 = dcEventMapper.selectDcEventById(dcEventId);
+
                                 DcEvent dcEvent1 = new DcEvent();
                                 dcEvent1.setId(dcEventId);//事件id
-                                dcEvent1.setEventNature(1l);//首发事件
-                                dcEvent1.setLinkId(uuid);//关联管制事件id
-                                dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
+                                if (dcEvent2.getEventType() != 3) {
+                                    dcEvent1.setEventNature(1l);//首发事件
+                                    dcEvent1.setLinkId(dcEvent2.getLinkId()+","+uuid);//关联管制事件id
+                                    dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
+
+                                }
 
                                 dcEvent.getDcEventTrafficControl().setId(uuid);
                                 dcEvent.getDcEventTrafficControl().setFacilityId(dcEvent.getDcEventTrafficControl().getFacilityIds()[0]);//取出数组字段赋值 设施id
@@ -292,10 +303,14 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                         } else if (dcEvent.getDcEventTrafficControl().getFacilityIds().length > 1) {//facilityIds1=1 说明只选择了多个收费站
 
                             if (dcEventId != null) {//不等于空 事件处置页面 修改
+                                DcEvent dcEvent2 = dcEventMapper.selectDcEventById(dcEventId);
+
                                 dcEventMapper.deleteDcEventById(uuid);//删除添加的事件主类
                                 DcEvent dcEvent1 = new DcEvent();
                                 dcEvent1.setId(dcEventId);//事件id
-                                dcEvent1.setEventNature(1l);//首发事件
+
+                                    dcEvent1.setEventNature(1l);//首发事件
+
                                 Map<String, String> map = new HashMap<>();
                                 for (int i = 0; i < dcEvent.getDcEventTrafficControl().getFacilityIds().length; i++) { //设置事件Id UUID无下划线格式32
                                     String facilityUUID = IdUtils.fastSimpleUUID();
@@ -312,8 +327,13 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                                     a++;
                                 }
                                 String linkId2 = sb2.toString();
-                                dcEvent1.setLinkId(linkId2);//关联管制事件id
-                                dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
+                                dcEvent1.setLinkId(dcEvent2.getLinkId()+","+linkId2);//关联管制事件id
+
+                                if (dcEvent2.getEventType() != 3) {
+                                    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
@@ -409,6 +429,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
 
 
                     }
+
                     break;
                 //交通拥堵
                 case 4:
@@ -524,7 +545,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
         /*            if (dcEvent.getDcEventAccident() != null) {
 
                     }*/
-                    DcEventAccident dcEventAccident =new DcEventAccident();
+                    DcEventAccident dcEventAccident = new DcEventAccident();
                     dcEvent.setDcEventAccident(dcEventAccident);
                     dcEvent.getDcEventAccident().setId(uuid);
                     dcEvent.getDcEventAccident().setReporterName("视频AI");
@@ -537,7 +558,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
 /*                    if (dcEvent.getDcEventVehicleAccident() != null) {
 
                     }*/
-                    DcEventVehicleAccident dcEventVehicleAccident =new DcEventVehicleAccident();
+                    DcEventVehicleAccident dcEventVehicleAccident = new DcEventVehicleAccident();
                     dcEvent.setDcEventVehicleAccident(dcEventVehicleAccident);
                     dcEvent.getDcEventVehicleAccident().setReporterName("视频AI");
                     dcEvent.getDcEventVehicleAccident().setReporterPhoneNumber("96659");
@@ -550,7 +571,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
 /*                    if (dcEvent.getDcEventTrafficControl() != null) {
 
                     }     */
-                    DcEventTrafficControl dcEventTrafficControl =new DcEventTrafficControl();
+                    DcEventTrafficControl dcEventTrafficControl = new DcEventTrafficControl();
                     dcEvent.setDcEventTrafficControl(dcEventTrafficControl);
                     dcEvent.getDcEventTrafficControl().setControlType(1L);//限行
                     dcEvent.getDcEventTrafficControl().setControlCause(2L);//交通事故
@@ -562,7 +583,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
 /*                    if (dcEvent.getDcEventTrafficCongestion() != null) {
 
                     }*/
-                    DcEventTrafficCongestion dcEventTrafficCongestion =new DcEventTrafficCongestion();
+                    DcEventTrafficCongestion dcEventTrafficCongestion = new DcEventTrafficCongestion();
                     dcEvent.setDcEventTrafficCongestion(dcEventTrafficCongestion);
                     dcEvent.getDcEventTrafficCongestion().setId(uuid);
                     dcEvent.getDcEventTrafficCongestion().setCongestionMileage(0F);//拥堵里程(公里)
@@ -581,7 +602,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
 /*                    if (dcEvent.getDcEventConstruction() != null) {
 
                     }*/
-                    DcEventConstruction dcEventConstruction =new DcEventConstruction();
+                    DcEventConstruction dcEventConstruction = new DcEventConstruction();
                     dcEvent.setDcEventConstruction(dcEventConstruction);
                     dcEvent.getDcEventConstruction().setId(uuid);
                     dcEvent.getDcEventConstruction().setControlMode(1l);//封闭
@@ -592,7 +613,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
 /*                    if (dcEvent.getDcEventServiceArea() != null) {
 
                     }*/
-                    DcEventServiceArea dcEventServiceArea =new DcEventServiceArea();
+                    DcEventServiceArea dcEventServiceArea = new DcEventServiceArea();
                     dcEvent.setDcEventServiceArea(dcEventServiceArea);
                     dcEvent.getDcEventServiceArea().setId(uuid);
                     int i3 = dcEventServiceAreaMapper.insertDcEventServiceArea(dcEvent.getDcEventServiceArea());
@@ -604,7 +625,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                 case 10:
 /*                    if (dcEvent.getDcEventAbnormalWeather() != null) {
                     }*/
-                    DcEventAbnormalWeather dcEventAbnormalWeather =new DcEventAbnormalWeather();
+                    DcEventAbnormalWeather dcEventAbnormalWeather = new DcEventAbnormalWeather();
                     dcEvent.setDcEventAbnormalWeather(dcEventAbnormalWeather);
                     dcEvent.getDcEventAbnormalWeather().setId(uuid);
                     dcEvent.getDcEventAbnormalWeather().setWeatherSituation("1-1");//雨雾
@@ -798,7 +819,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
         int i7 = dcEventMapper.updateDcEvent(dcEvent);
         if (i7 > 0) {
             String context = comparisonInfo(oldEvent, dcEvent);
-            if (context.length() > 0){
+            if (context.length() > 0) {
                 //事件处置流程记录
                 DcEventProcess dcEventProcess = new DcEventProcess();
                 dcEventProcess.setEventId(dcEvent.getId());
@@ -1146,11 +1167,11 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
             dcEventProcessService.insertDcEventProcess(dcEventProcess);
 
             //插入调度默认数据
-            ArrayList<HashMap<String,Object>> hashMaps = new ArrayList<>();
+            ArrayList<HashMap<String, Object>> hashMaps = new ArrayList<>();
             String stakeMark = dcEvent.getStakeMark();//传入桩号
             List<HashMap<String, Object>> mapList = dcWarningMapper.selectRecentlySection();//全部机构的桩号和名称
-            for (HashMap<String,Object> map:mapList){
-                if (org.apache.commons.lang3.StringUtils.isBlank(map.get("stakeMark").toString())){
+            for (HashMap<String, Object> map : mapList) {
+                if (org.apache.commons.lang3.StringUtils.isBlank(map.get("stakeMark").toString())) {
                     continue;
                 }
                 Long sectionId = (Long) map.get("id");//机构的id
@@ -1158,15 +1179,16 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                 com.zc.business.utils.StakeMarkUtils stakeMarkUtils = new StakeMarkUtils();
                 Integer itselfStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMarkNew);//机构本身的米数
                 Integer afferentStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMark);//传入的桩号米数
-                Integer difference =Math.abs(afferentStakeMark-itselfStakeMark); //计算距离绝对值
-                map.put("difference",difference/1000.0);//米转公里加入到map
-                map.put("id",sectionId);
+                Integer difference = Math.abs(afferentStakeMark - itselfStakeMark); //计算距离绝对值
+                map.put("difference", difference / 1000.0);//米转公里加入到map
+                map.put("id", sectionId);
                 hashMaps.add(map);
             }
             List<HashMap<String, Object>> sortedHashMaps = hashMaps.stream().sorted(Comparator.comparing(map -> {
-                return (Double) map.get("difference"); })).collect(Collectors.toList());
+                return (Double) map.get("difference");
+            })).collect(Collectors.toList());
             HashMap<String, Object> hashMap = dcWarningMapper.selectDcDispatch(id);//查询事件是否已经有转的调度记录
-            if (!sortedHashMaps.isEmpty()&&hashMap==null) {
+            if (!sortedHashMaps.isEmpty() && hashMap == null) {
                 HashMap<String, Object> map = sortedHashMaps.get(0);
                 Long sortId = (Long) map.get("id");//取出最近的机构id
                 if (sortId != null) {
@@ -1180,7 +1202,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                     dcWarningMapper.insertDcDispatch(dcDispatch);//事件绑定信息记录
                     Long dispatchId = dcDispatch.getId();//信息记录id
                     List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectOrganizationEmployees(sortId);//人员map
-                    if (employeesMap != null&&employeesMap.size()>0) {
+                    if (employeesMap != null && employeesMap.size() > 0) {
                         // 生成一个随机索引,范围在0到列表长度减1之间
                         int randomIndex = ThreadLocalRandom.current().nextInt(employeesMap.size());
                         HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex);
@@ -1191,7 +1213,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                         dcWarningMapper.insertDispatchResource(dcDispatchResource);
                     }
                     List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehicles(sortId);//车辆map
-                    if (vehiclesMap != null&&vehiclesMap.size()>0) {
+                    if (vehiclesMap != null && vehiclesMap.size() > 0) {
                         // 生成一个随机索引,范围在0到列表长度减1之间
                         int randomIndex = ThreadLocalRandom.current().nextInt(vehiclesMap.size());
                         HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex);
@@ -1250,10 +1272,10 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                 } else if ("direction".equals(result.getRightPath())) {
 
                     if (("1".equals(result.getRight()) || "上行".equals(result.getRight()) || "菏泽方向".equals(result.getRight()))
-                            && ("1".equals(result.getLeft()) || "上行".equals(result.getLeft()) || "菏泽方向".equals(result.getLeft()))){
+                            && ("1".equals(result.getLeft()) || "上行".equals(result.getLeft()) || "菏泽方向".equals(result.getLeft()))) {
                         continue;
-                    } else if(("3".equals(result.getRight()) || "下行".equals(result.getRight()) || "济南方向".equals(result.getRight()))
-                            && ("3".equals(result.getLeft()) || "下行".equals(result.getLeft()) || "济南方向".equals(result.getLeft()))){
+                    } else if (("3".equals(result.getRight()) || "下行".equals(result.getRight()) || "济南方向".equals(result.getRight()))
+                            && ("3".equals(result.getLeft()) || "下行".equals(result.getLeft()) || "济南方向".equals(result.getLeft()))) {
                         continue;
                     }
 
@@ -1779,6 +1801,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
 
     /**
      * 调度记录
+     *
      * @param dcEvent
      * @return
      */
@@ -1787,7 +1810,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
         dcEvent.setEventState(2l);
         List<DcEvent> dcEvents = dcEventMapper.dispatchRecordEventList(dcEvent);
         for (DcEvent event : dcEvents) {
-            List<DcEventProcess> dcEventProcess= dcEventProcessService.selectDcEventProcessByEventId(event.getId());
+            List<DcEventProcess> dcEventProcess = dcEventProcessService.selectDcEventProcessByEventId(event.getId());
             event.setDcEventProcessList(dcEventProcess);
         }
 
@@ -1819,29 +1842,28 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
     }
 
     /**
+     * @param eventId
+     * @return com.ruoyi.common.core.domain.AjaxResult
      * @Description 查询关联事件
-     *
      * @author liuwenge
      * @date 2024/5/30 14:29
-     * @param eventId
-     * @return com.ruoyi.common.core.domain.AjaxResult
      */
     @Override
-    public AjaxResult getLinkEvent(String eventId){
+    public AjaxResult getLinkEvent(String eventId) {
 
-        List<Map<String,Object>> result = new ArrayList<>();
+        List<Map<String, Object>> result = new ArrayList<>();
         DcEvent dcEvent = dcEventMapper.selectDcEventById(eventId);
-        if (StringUtils.isNotEmpty(dcEvent.getLinkId())){
-            Map<String,Object> item = new HashMap<>();
-            item.put("eventId",eventId);
-            item.put("eventNature",dcEvent.getEventNature());
+        if (StringUtils.isNotEmpty(dcEvent.getLinkId())) {
+            Map<String, Object> item = new HashMap<>();
+            item.put("eventId", eventId);
+            item.put("eventNature", dcEvent.getEventNature());
             result.add(item);
 
             String[] linkIds = dcEvent.getLinkId().split(",");
             for (String linkId : linkIds) {
                 item = new HashMap<>();
-                item.put("eventId",linkId);
-                item.put("eventNature",2);
+                item.put("eventId", linkId);
+                item.put("eventNature", 2);
                 result.add(item);
             }
         }
diff --git a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml
index 86a50871..38faaef3 100644
--- a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml
+++ b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml
@@ -816,12 +816,12 @@
         <include refid="selectDcEventVo"/>
         <where>
             <if test="deptId != null ">and dept_id = #{deptId}</if>
+            <if test="id != null ">and id = #{id}</if>
             <if test="stakeMark != null and stakeMark != ''">and stake_mark BETWEEN #{stakeMark} and #{endStakeMark}
             </if>
             <if test="direction != null  and direction != ''">and direction = #{direction}</if>
             <if test="userId != null ">and user_id = #{userId}</if>
-            <if test="startTime != null ">and start_time BETWEEN #{startTime} and #{endTime}</if>
-            <if test="estimatedEndTime != null ">and estimated_end_time = #{estimatedEndTime}</if>
+            <if test="endTime != null ">and end_time BETWEEN #{startTime} and #{endTime}</if>
             <if test="eventLevel != null ">and event_level = #{eventLevel}</if>
             <if test="eventType != null ">and event_type = #{eventType}</if>
             <if test="eventSubclass != null  and eventSubclass != ''">and event_subclass = #{eventSubclass}</if>