diff --git a/zc-business/src/main/java/com/zc/business/controller/DcEventController.java b/zc-business/src/main/java/com/zc/business/controller/DcEventController.java
index 629bf40c..8fe87c39 100644
--- a/zc-business/src/main/java/com/zc/business/controller/DcEventController.java
+++ b/zc-business/src/main/java/com/zc/business/controller/DcEventController.java
@@ -204,4 +204,27 @@ public class DcEventController extends BaseController
     public AjaxResult skipClear(@ApiParam(value="事件id", name="eventId", required=true) @RequestParam ("eventId") String eventId){
         return dcEventService.skipClear(eventId);
     }
+
+    @ApiOperation("调度记录-事件列表 按时间展示交通事件,默认当天时间 。可查询条件 交通事件状态 ,时间范围")
+    @GetMapping("/dispatchRecordEventList")
+    public TableDataInfo dispatchRecordEventList(DcEvent dcEvent){
+
+        List<DcEvent> list = dcEventService.dispatchRecordEventList(dcEvent);
+        return getDataTable(list);
+    }
+
+
+    /**
+     * @Description 查询关联事件
+     *
+     * @author liuwenge
+     * @date 2024/5/30 14:27
+     * @param eventId
+     * @return com.ruoyi.common.core.domain.AjaxResult
+     */
+    @ApiOperation("查询关联事件")
+    @GetMapping( "/getLinkEvent/{eventId}")
+    public AjaxResult getLinkEvent(@ApiParam(name = "eventId", value = "事件id", required = true) @PathVariable("eventId") String eventId){
+        return dcEventService.getLinkEvent(eventId);
+    }
 }
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 3c9f6cc5..029931fa 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
@@ -160,7 +160,7 @@ public class DcWarningController extends BaseController
         return dcWarningService.batchConvert(dcWarningBatchConvert);
     }
 
-    //指挥调度
+    //1,指挥调度,查看是否存在记录和资源信息,存在即返回
     @PostMapping("/commandAndDispatch")
     public AjaxResult commandAndDispatch(@RequestBody DcWarning dcWarning){
         if (StringUtils.isBlank(dcWarning.getStakeMark())||StringUtils.isBlank(dcWarning.getId())){
@@ -168,6 +168,22 @@ public class DcWarningController extends BaseController
         }
         return (dcWarningService.commandAndDispatch(dcWarning));
     }
+    //2,指挥调度,当调度信息为空的时候调用智能分配资源
+    @PostMapping("/intelligentSource")
+    public AjaxResult intelligentSource(@RequestBody DcWarning dcWarning){
+        if (StringUtils.isBlank(dcWarning.getStakeMark())){
+            return AjaxResult.error("参数错误");
+        }
+        return (dcWarningService.intelligentSource(dcWarning));
+    }
+    //3.指挥调度,新增调度记录信息
+    @PostMapping("/insertDispatch")
+    public AjaxResult insertDispatch(@RequestBody HashMap map){
+        if (map == null || !map.containsKey("eventId")||StringUtils.isBlank(map.get("eventId").toString())){
+            return AjaxResult.error("参数错误");
+        }
+        return (dcWarningService.insertDispatch(map));
+    }
     //指挥调度记录修改
     @PostMapping("/updateDispatch")
     public AjaxResult insertDispatch(@RequestBody DcDispatch dcDispatch){
@@ -176,12 +192,9 @@ public class DcWarningController extends BaseController
         }
         return toAjax(dcWarningService.insertDispatch(dcDispatch));
     }
-    //指挥调度资源新增
+    //4.指挥调度资源新增(用户修改弹窗的提交)
     @PostMapping("/updateSource")
     public AjaxResult insertDispatchSource(@RequestBody HashMap map){
-        if (map==null||!map.containsKey("dispatchId")){
-            return AjaxResult.error("参数错误");
-        }
         return toAjax(dcWarningService.insertDispatchSource(map));
     }
     //感知事件误报
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 fd84070d..14f05f49 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
@@ -1,16 +1,16 @@
 package com.zc.business.domain;
 
-import java.util.Date;
-import java.util.List;
-
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import com.ruoyi.common.annotation.Excel;
+
+import java.util.Date;
+import java.util.List;
 
 /**
  * 事件信息对象 dc_event
@@ -58,8 +58,8 @@ public class DcEvent {
      * 2-中
      * 3-下
      */
-   @Excel(name = "方向", readConverterExp = "1=菏泽方向,3=济南方向")
-   //@Excel(name = "方向")
+    @Excel(name = "方向", readConverterExp = "1=菏泽方向,3=济南方向")
+    //@Excel(name = "方向")
     @ApiModelProperty("方向")
     private String direction;
 
@@ -69,7 +69,7 @@ public class DcEvent {
 
     @ApiModelProperty("处理人员")
     private Long userId;
-  @ApiModelProperty("事件子类")
+    @ApiModelProperty("事件子类")
     private String eventSubclassName;
 
     /**
@@ -156,12 +156,12 @@ public class DcEvent {
     private String description;
     /**
      * 事件状态:
-     事件状态:
-     0-待确认
-     1-已确认
-     2-处理中
-     3-已完成
-     4-已撤销
+     * 事件状态:
+     * 0-待确认
+     * 1-已确认
+     * 2-处理中
+     * 3-已完成
+     * 4-已撤销
      */
     @ApiModelProperty("事件状态 事件状态:*      0-未解决1-已解决2-已关闭")
     private Long eventState;
@@ -200,7 +200,7 @@ public class DcEvent {
     /**
      * 是否处在隧道
      */
-    @Excel(name = "是否处在隧道" , readConverterExp = "0=否,1=是")
+    @Excel(name = "是否处在隧道", readConverterExp = "0=否,1=是")
     @ApiModelProperty("是否处在隧道  0 表示 false,1 表示 true")
     private Integer inTunnel;
     //@Excel(name = "高速")
@@ -214,27 +214,27 @@ public class DcEvent {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty("发生时间")
     private Date occurrenceTime;
-    @Excel(name = "是否是感知事件" , readConverterExp = "0=否,1=是")
+    @Excel(name = "是否是感知事件", readConverterExp = "0=否,1=是")
     @ApiModelProperty("是否是感知事件  0 表示 false,1 表示 true")
     private Integer isPerceived;
 
     @Excel(name = "影响车道")
- @ApiModelProperty("影响车道 车道占用:0-应急1-行1,2-行2,3-行3,4-行4")
+    @ApiModelProperty("影响车道 车道占用:0-应急1-行1,2-行2,3-行3,4-行4")
     private String lang;
     @ApiModelProperty("高速名")
     @TableField(exist = false)
- private String roadName;
+    private String roadName;
     @ApiModelProperty("机构")
     @TableField(exist = false)
- private String organizationName;
+    private String organizationName;
     @ApiModelProperty("事件流程")
     @TableField(exist = false)
- private List<DcProcessConfig> processConfigList;
-@ApiModelProperty("事件标题")
+    private List<DcProcessConfig> processConfigList;
+    @ApiModelProperty("事件标题")
     private String eventTitle;
-@ApiModelProperty("维度")
+    @ApiModelProperty("维度")
     private String dimension;
-@ApiModelProperty("经度")
+    @ApiModelProperty("经度")
     private String longitude;
 /**
  * 2014/2/21新增
@@ -291,20 +291,29 @@ public class DcEvent {
     private String processNode;
 
 
-
-    /** 更新时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    /**
+     * 更新时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
-    /** 创建时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
-    /** 备注 */
+    /**
+     * 备注
+     */
 
     private String remark;
 
     private String subclass;
-@ApiModelProperty("关联管制事件id")
-private String linkId;
+    @ApiModelProperty("关联管制事件id")
+    private String linkId;
+
+    @TableField(exist = false)
+    private List<DcEventProcess> dcEventProcessList;
+
 }
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 89f211a9..63ed43a8 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
@@ -119,6 +119,8 @@ public interface DcEventMapper extends BaseMapper<DcEvent>
     boolean completeEvent(@Param("eventId") String eventId);
 
     int selectClearInfo(String eventId);
+
+    List<DcEvent> dispatchRecordEventList(DcEvent dcEvent);
 }
 
 
diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcEventProcessMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcEventProcessMapper.java
index 4a00c447..7e4798d9 100644
--- a/zc-business/src/main/java/com/zc/business/mapper/DcEventProcessMapper.java
+++ b/zc-business/src/main/java/com/zc/business/mapper/DcEventProcessMapper.java
@@ -87,4 +87,6 @@ public interface DcEventProcessMapper
      * @return 状态 0未完成 1已完成
      */
     int selectPreviousNodeStatus(@Param("eventId") String eventId, @Param("processId") Long processId);
+
+    List<DcEventProcess> selectDcEventProcessByEventId(String eventId);
 }
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 aa7a8af8..95df0a5b 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
@@ -99,6 +99,7 @@ public interface DcWarningMapper
     public Integer updateEndSection(@Param("dcWarningList") List<DcWarning> dcWarningList);
     //查询当天全部可以结束的事件
     public List<DcWarning> selectEndSection();
+
     //依据桩号返回驻点id
     public Long selectSectionId(@Param("stakeMark")String stakeMark,@Param("direction")String direction);
     //依据桩号获取最近距离的驻点
@@ -130,6 +131,8 @@ public interface DcWarningMapper
     public HashMap<String,Object> selectOrganization();
     //选中的人员信息
     public List<HashMap<String,Object>> selectEmployeesChoice(@Param("dispatchId")Long dispatchId);
+    //查询最近的交警人员和电话
+    public List<HashMap<String,Object>> selectTrafficPolice(@Param("organizationId")Long organizationId);
     //选中的车辆信息
     public List<HashMap<String,Object>> selectVehiclesChoice(@Param("dispatchId")Long dispatchId);
     public Integer deleteDispatchResource(@Param("dispatchId")Long dispatchId);
@@ -137,4 +140,12 @@ public interface DcWarningMapper
     DcDispatch selectDcDispatchById(@Param("id") Long id);
     //误报解除
     public Integer falseAlarmResolution(DcWarning dcWarning);
+    //依据人员id查询人员名称
+    public String employeesName(Long id);
+    //依据车辆id查询车辆信息,前提车辆可用
+    public String vehiclesName(Long id);
+    //依据车辆id查询车辆信息,前提车辆可用
+    public String vehiclesType(Long id);
+    //依据机构id查询机构名称
+    public String  organizationName(Long id);
 }
diff --git a/zc-business/src/main/java/com/zc/business/service/IDcEventProcessService.java b/zc-business/src/main/java/com/zc/business/service/IDcEventProcessService.java
index 3d261edd..91948483 100644
--- a/zc-business/src/main/java/com/zc/business/service/IDcEventProcessService.java
+++ b/zc-business/src/main/java/com/zc/business/service/IDcEventProcessService.java
@@ -83,4 +83,6 @@ public interface IDcEventProcessService
      * @return status 0未完成 1已完成
      */
     int selectPreviousNodeStatus(String eventId, Long processId);
+
+    List<DcEventProcess> selectDcEventProcessByEventId(String eventId);
 }
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 058a6469..8d5d5933 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
@@ -127,4 +127,16 @@ public interface IDcEventService
      * @return com.ruoyi.common.core.domain.AjaxResult
      */
     AjaxResult skipClear(String eventId);
+
+    /**
+     * @Description 查询关联事件
+     *
+     * @author liuwenge
+     * @date 2024/5/30 14:28
+     * @param eventId
+     * @return com.ruoyi.common.core.domain.AjaxResult
+     */
+    AjaxResult getLinkEvent(String eventId);
+
+    List<DcEvent> dispatchRecordEventList(DcEvent dcEvent);
 }
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 c33cacb8..095c3f74 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
@@ -91,8 +91,12 @@ public interface IDcWarningService
 
     //定时结束部分事件
     Integer updateEndSection();
-    //指挥调度
+    //1.指挥调度
     AjaxResult commandAndDispatch(DcWarning dcWarning);
+    //2.指挥调度,当调度信息为空的时候调用智能分配资源
+    AjaxResult intelligentSource(DcWarning dcWarning);
+    //3.指挥调度新增资源
+    AjaxResult insertDispatch(HashMap map);
     //修改指挥调度资源记录
     public Integer insertDispatch(DcDispatch dcDispatch);
     //新增指挥调度资源记录
diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcEventProcessServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcEventProcessServiceImpl.java
index 6dd2a68c..bddefec7 100644
--- a/zc-business/src/main/java/com/zc/business/service/impl/DcEventProcessServiceImpl.java
+++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEventProcessServiceImpl.java
@@ -163,4 +163,9 @@ public class DcEventProcessServiceImpl implements IDcEventProcessService
         return dcEventProcessMapper.selectPreviousNodeStatus(eventId,processId);
     }
 
+    @Override
+    public List<DcEventProcess> selectDcEventProcessByEventId(String eventId) {
+        return dcEventProcessMapper.selectDcEventProcessByEventId(eventId);
+    }
+
 }
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 0fafc02c..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;
@@ -245,22 +247,46 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
                             updateDcEventState(dcEvent.getId(), 1);
                             dcEvent.getDcEventTrafficControl().setId(uuid);
                             int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl());
-                            DcEvent dcEvent1 = new DcEvent();
-                            dcEvent1.setId(dcEventId);//事件id
-                            dcEvent1.setEventNature(1l);//首发事件
-                            dcEvent1.setLinkId(uuid);//关联管制事件id
-                            dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
+                            //查询事件
+                            DcEvent dcEvent2 = dcEventMapper.selectDcEventById(dcEventId);
+                            //判断事件 关联事件id是否为空
+                            if (dcEvent2.getLinkId() == null) {
+                                DcEvent dcEvent1 = new DcEvent();
+                                dcEvent1.setId(dcEventId);//事件id
+                                if (dcEvent2.getEventType() != 3) {
+                                    dcEvent1.setEventNature(1l);//首发事件
+                                    dcEvent1.setLinkId(uuid);//关联管制事件id
+                                    dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
+                                }
+
+                            } else {
+                                DcEvent dcEvent1 = new DcEvent();
+                                dcEvent1.setId(dcEventId);//事件id
+                                if (dcEvent2.getEventType() != 3) {
+                                    dcEvent1.setEventNature(1l);//首发事件
+                                    dcEvent1.setLinkId(dcEvent2.getLinkId() + "," + uuid);//关联管制事件id
+                                    dcEventMapper.updateDcEventLinkId(dcEvent1);//修改事件性质
+                                }
+                            }
+
+
                             break;
                         }
                         // 插入多个收费站
                         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
                                 int i6 = dcEventTrafficControlMapper.insertDcEventTrafficControl(dcEvent.getDcEventTrafficControl());//
@@ -277,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();
@@ -297,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
@@ -394,6 +429,7 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
 
 
                     }
+
                     break;
                 //交通拥堵
                 case 4:
@@ -509,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");
@@ -522,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");
@@ -535,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);//交通事故
@@ -547,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);//拥堵里程(公里)
@@ -566,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);//封闭
@@ -577,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());
@@ -589,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");//雨雾
@@ -783,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());
@@ -1131,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
@@ -1143,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) {
@@ -1165,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);
@@ -1176,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);
@@ -1235,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;
                     }
 
@@ -1762,6 +1799,24 @@ public class DcEventServiceImpl extends ServiceImpl<DcEventMapper, DcEvent> impl
         return AjaxResult.success("无需清障成功");
     }
 
+    /**
+     * 调度记录
+     *
+     * @param dcEvent
+     * @return
+     */
+    @Override
+    public List<DcEvent> dispatchRecordEventList(DcEvent dcEvent) {
+        dcEvent.setEventState(2l);
+        List<DcEvent> dcEvents = dcEventMapper.dispatchRecordEventList(dcEvent);
+        for (DcEvent event : dcEvents) {
+            List<DcEventProcess> dcEventProcess = dcEventProcessService.selectDcEventProcessByEventId(event.getId());
+            event.setDcEventProcessList(dcEventProcess);
+        }
+
+        return dcEvents;
+    }
+
     //时间比对
     public static String getDatePoor(Date endDate, Date nowDate) {
 
@@ -1786,4 +1841,34 @@ 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
+     */
+    @Override
+    public AjaxResult getLinkEvent(String eventId) {
+
+        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());
+            result.add(item);
+
+            String[] linkIds = dcEvent.getLinkId().split(",");
+            for (String linkId : linkIds) {
+                item = new HashMap<>();
+                item.put("eventId", linkId);
+                item.put("eventNature", 2);
+                result.add(item);
+            }
+        }
+        return AjaxResult.success(result);
+    }
+
+
 }
diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcFacilityServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcFacilityServiceImpl.java
index 4737cc8d..4f1338ee 100644
--- a/zc-business/src/main/java/com/zc/business/service/impl/DcFacilityServiceImpl.java
+++ b/zc-business/src/main/java/com/zc/business/service/impl/DcFacilityServiceImpl.java
@@ -50,7 +50,7 @@ public class DcFacilityServiceImpl extends ServiceImpl<DcFacilityMapper, DcFacil
 
         // 设备类型
         if (Objects.nonNull(dcFacility.getFacilityType())) {
-            queryWrapper.like(DcFacility::getFacilityType, dcFacility.getFacilityType());
+            queryWrapper.eq(DcFacility::getFacilityType, dcFacility.getFacilityType());
         }
 
         // 名称
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 fb839689..7216ea41 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
@@ -27,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.lang.reflect.Array;
 import java.rmi.MarshalledObject;
+import java.util.Objects;
 import java.util.concurrent.ThreadLocalRandom;
 import javax.annotation.Resource;
 import java.util.ArrayList;
@@ -508,68 +509,10 @@ public class DcWarningServiceImpl implements IDcWarningService
         dcEvent.setCreateTime(DateUtils.getNowDate());//创建时间
         dcEvent.setUserId(SecurityUtils.getUserId());//处置人员
         dcEvent.setRoadId(1L);//高速公路(济菏高速)
-
         int insertDcEvent = dcEventService.insertDcEventWarning(dcEvent);
-
         if (insertDcEvent==0){
             return AjaxResult.error("操作失败");
         }
-        List<HashMap<String, Object>> mapList = dcWarningMapper.selectRecentlySection();//全部机构的桩号和名称
-        for (HashMap<String,Object> map:mapList){
-            if (StringUtils.isBlank(map.get("stakeMark").toString())){
-                continue;
-            }
-            Long id = (Long) map.get("id");//机构的id
-            String stakeMarkNew = map.get("stakeMark").toString();//机构桩号
-            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",id);
-            hashMaps.add(map);
-        }
-        List<HashMap<String, Object>> sortedHashMaps = hashMaps.stream().sorted(Comparator.comparing(map -> {
-            return (Double) map.get("difference"); })).collect(Collectors.toList());
-        HashMap<String, Object> hashMap = dcWarningMapper.selectDcDispatch(dcWarning.getId());//查询事件是否已经有转的调度记录
-        if (!sortedHashMaps.isEmpty()&&hashMap==null) {
-            HashMap<String, Object> map = sortedHashMaps.get(0);
-            Long id = (Long) map.get("id");//取出最近的机构id
-            if (id != null) {
-                DcDispatch dcDispatch = new DcDispatch();
-                DcDispatchResource dcDispatchResource = new DcDispatchResource();
-                dcDispatch.setDeptId(SecurityUtils.getLoginUser().getDeptId());
-                dcDispatch.setEventId(dcWarning.getId());
-                dcDispatch.setStartTime(DateUtils.getNowDate());
-                dcDispatch.setDispatchStatus(2L);//进行中状态
-                dcDispatch.setRemark(dcWarning.getRemark());
-                dcWarningMapper.insertDcDispatch(dcDispatch);//事件绑定信息记录
-                Long dispatchId = dcDispatch.getId();//信息记录id
-                List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectOrganizationEmployees(id);//人员map
-                if (employeesMap != null&&employeesMap.size()>0) {
-                    // 生成一个随机索引,范围在0到列表长度减1之间
-                    int randomIndex = ThreadLocalRandom.current().nextInt(employeesMap.size());
-                    HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex);
-                    Long employeesId = (Long) randomEmployee.get("id");//随机人员id
-                    dcDispatchResource.setResourceId(employeesId);//资源id
-                    dcDispatchResource.setDispatchType(1);//资源类型
-                    dcDispatchResource.setDispatchId(dispatchId);//信息记录id
-                    dcWarningMapper.insertDispatchResource(dcDispatchResource);
-                }
-                List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehicles(id);//车辆map
-                if (vehiclesMap != null&&vehiclesMap.size()>0) {
-                    // 生成一个随机索引,范围在0到列表长度减1之间
-                    int randomIndex = ThreadLocalRandom.current().nextInt(vehiclesMap.size());
-                    HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex);
-                    Long vehiclesId = (Long) randomEmployee.get("id");//随机车辆id
-                    dcDispatchResource.setResourceId(vehiclesId);//资源id
-                    dcDispatchResource.setDispatchType(2);//资源类型
-                    dcDispatchResource.setDispatchId(dispatchId);//信息记录id
-                    dcWarningMapper.insertDispatchResource(dcDispatchResource);//绑定车辆信息
-                }
-            }
-        }
-
         return AjaxResult.success("操作成功");
 
     }
@@ -670,10 +613,12 @@ public class DcWarningServiceImpl implements IDcWarningService
 
     @Override
     public AjaxResult commandAndDispatch(DcWarning dcWarning) {
+        Map<String, Object> mapAll = new HashMap<>();
+        HashMap<String, Object> dcDispatch = dcWarningMapper.selectDcDispatch(dcWarning.getId());//查询是否存在调度记录
         //逻辑,调用全部的机构信息,计算传入的桩号与机构桩号的距离作为排序使用,使用机构的id调出车辆,人员,值班等信息
         List<HashMap<String, Object>> mapList = dcWarningMapper.selectRecentlySection();//全部机构的桩号和名称
         ArrayList<HashMap<String,Object>> hashMaps = new ArrayList<>();
-        Map<String, Object> mapAll = new HashMap<>();
+
         for (HashMap<String,Object> map:mapList){
             if (StringUtils.isBlank(map.get("stakeMark").toString())){
                 continue;
@@ -684,7 +629,7 @@ public class DcWarningServiceImpl implements IDcWarningService
             Integer afferentStakeMark = stakeMarkUtils.stakeMarkToInt(dcWarning.getStakeMark());//传入的桩号米数
             Integer difference =Math.abs(afferentStakeMark-itselfStakeMark); //计算距离绝对值
             map.put("difference",difference/1000.0);//米转公里加入到map
-            Long id = (Long) map.get("id");//机构的id,用户获取人员、值班、车辆等信息
+            Long id =Long.parseLong(map.get("id").toString());//机构的id,用户获取人员、值班、车辆等信息
             List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectEmployeesDispatch(id,dcWarning.getId());//人员map
             List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehiclesDispatch(id,dcWarning.getId());//车辆map
             map.put("employeesMap",employeesMap);
@@ -692,20 +637,31 @@ public class DcWarningServiceImpl implements IDcWarningService
             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());
         mapAll.put("listData",sortedHashMaps);
+        if (!sortedHashMaps.isEmpty()) {
+            HashMap<String, Object> map = sortedHashMaps.get(0);
+            Long id = Long.parseLong(map.get("id").toString());//取出最近的机构id
+            List<HashMap<String, Object>> trafficPolice = dcWarningMapper.selectTrafficPolice(id);//交警人员信息
+            mapAll.put("trafficPolice",trafficPolice);
+        }
+        if (dcDispatch==null){
+            mapAll.put("existence",0);
+            return AjaxResult.success(mapAll);
+        }
+        mapAll.put("existence",1);
         HashMap<String, Object> map = dcWarningMapper.selectDcDispatch(dcWarning.getId());//获取机构id与资源id
         if (map!=null){
             HashMap<Object, Object> hashMap = new HashMap<>();
-            Long id = (Long) map.get("id");//调度记录id
+            Long id =Long.parseLong(map.get("id").toString());//调度记录id
             Object deptName =map.get("deptName");//部门名称
-            List<HashMap<String, Object>>  shifts = dcWarningMapper.selectShiftsEmployees();//值班为空把全部的人员信息作为值班人员信息
+            //List<HashMap<String, Object>>  shifts = dcWarningMapper.selectShiftsEmployees();//值班为空把全部的人员信息作为值班人员信息
             List<HashMap<String, Object>> resource = dcWarningMapper.selectDispatchResource(id);//全部资源信息
             List<HashMap<String, Object>> employeesChoice = dcWarningMapper.selectEmployeesChoice(id);//选中人员信息
             List<HashMap<String, Object>> vehiclesChoice = dcWarningMapper.selectVehiclesChoice(id);//选中车辆信息
             hashMap.put("id",id);//调度记录id
             hashMap.put("deptName",deptName);
-            hashMap.put("shifts",shifts);
+            //hashMap.put("shifts",shifts);
             hashMap.put("resource",resource);
             mapAll.put("resource",hashMap);
             mapAll.put("employeesChoice",employeesChoice);
@@ -713,6 +669,120 @@ public class DcWarningServiceImpl implements IDcWarningService
         }
         return AjaxResult.success(mapAll);
     }
+    //指挥调度,当调度信息为空的时候调用智能分配资源
+    @Override
+    public AjaxResult intelligentSource(DcWarning dcWarning) {
+        String stakeMark = dcWarning.getStakeMark();
+        ArrayList<HashMap<String,Object>> hashMaps = new ArrayList<>();
+        Map<String, Object> mapAll = new HashMap<>();
+        List<HashMap<String, Object>> mapList = dcWarningMapper.selectRecentlySection();//全部机构的桩号和名称
+        for (HashMap<String,Object> map:mapList){
+            HashMap<String, Object> mapValue = new HashMap<>();
+            if (StringUtils.isBlank(map.get("stakeMark").toString())){
+                continue;
+            }
+            StakeMarkUtils stakeMarkUtils = new StakeMarkUtils();
+            String stakeMarkValue = map.get("stakeMark").toString();
+            Integer itselfStakeMark = stakeMarkUtils.stakeMarkToInt(stakeMarkValue);//桩号本身的米数
+            Integer afferentStakeMark = stakeMarkUtils.stakeMarkToInt(dcWarning.getStakeMark());//传入的桩号米数
+            Integer difference =Math.abs(afferentStakeMark-itselfStakeMark); //计算距离绝对值
+
+            mapValue.put("difference",difference/1000.0);//米转公里加入到map
+            Long id =Long.parseLong(map.get("id").toString());//机构的id,用户获取人员、车辆等信息
+            List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectEmployeesDispatch(id,dcWarning.getId());//人员map
+            List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehiclesDispatch(id,dcWarning.getId());//车辆map
+            String organizationName = dcWarningMapper.organizationName(id);
+            mapValue.put("employeesMap",employeesMap);
+            mapValue.put("vehiclesMap",vehiclesMap);
+            mapValue.put("organizationId",id);
+            mapValue.put("organizationName",organizationName);
+            hashMaps.add(mapValue);
+        }
+        mapAll.put("selectData",hashMaps);
+        List<HashMap<String, Object>> sortedHashMaps = hashMaps.stream().sorted(Comparator.comparing(map -> {
+            return (Double) map.get("difference"); })).collect(Collectors.toList());
+        if (!sortedHashMaps.isEmpty()) {
+            HashMap<String, Object> map = sortedHashMaps.get(0);
+            Long id = Long.parseLong(map.get("organizationId").toString());//取出最近的机构id
+            if (id != null) {
+                List<HashMap<String, Object>> employeesMap = dcWarningMapper.selectOrganizationEmployees(id);//人员map
+                if (employeesMap != null&&employeesMap.size()>0) {
+                    HashMap<String, Object> employeesHashMap = new HashMap<>();
+                    // 生成一个随机索引,范围在0到列表长度减1之间
+                    int randomIndex = ThreadLocalRandom.current().nextInt(employeesMap.size());
+                    HashMap<String, Object> randomEmployee = employeesMap.get(randomIndex);
+                    Long employeesId = Long.parseLong(randomEmployee.get("id").toString());//随机人员id
+                    String employeesName = dcWarningMapper.employeesName(employeesId);//随机人员姓名
+                    employeesHashMap.put("employeesId",employeesId);
+                    employeesHashMap.put("employeesName",employeesName);
+                    mapAll.put("employees",employeesHashMap);
+                }
+                List<HashMap<String, Object>> vehiclesMap = dcWarningMapper.selectVehicles(id);//车辆map
+                if (vehiclesMap != null&&vehiclesMap.size()>0) {
+                    HashMap<String, Object> vehiclesHashMap = new HashMap<>();
+                    // 生成一个随机索引,范围在0到列表长度减1之间
+                    int randomIndex = ThreadLocalRandom.current().nextInt(vehiclesMap.size());
+                    HashMap<String, Object> randomEmployee = vehiclesMap.get(randomIndex);
+                    Long vehiclesId =Long.parseLong(randomEmployee.get("id").toString());//随机车辆id
+                    String vehiclesName = dcWarningMapper.vehiclesName(vehiclesId);//随机车辆
+                    String vehiclesType = dcWarningMapper.vehiclesType(vehiclesId);//随机车辆
+                    vehiclesHashMap.put("vehiclesId",vehiclesId);
+                    vehiclesHashMap.put("vehiclesName",vehiclesName);
+                    vehiclesHashMap.put("vehiclesType",vehiclesType);
+                    mapAll.put("vehicles",vehiclesHashMap);
+                }
+            }
+        }
+        return AjaxResult.success(mapAll);
+    }
+    //3.指挥调度新增资源
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult insertDispatch(HashMap map) {
+        //事件id、事件备注、机构id、资源id
+        String eventId = map.get("eventId").toString();//事件id
+        String remark = Objects.toString(map.get("remark"), "");
+        Long  employees=null;
+        if (map.get("employeesId")!=null){
+              employees = Long.parseLong(map.get("employeesId").toString());//人员
+        }
+        Long  vehicles=null;
+        if (map.get("vehiclesId").toString()!=null){
+              vehicles = Long.parseLong(map.get("vehiclesId").toString());//车辆
+        }
+        DcDispatch dcDispatch = new DcDispatch();
+        DcDispatchResource dcDispatchResource = new DcDispatchResource();
+        dcDispatch.setDeptId(SecurityUtils.getLoginUser().getDeptId());
+        dcDispatch.setEventId(eventId);
+        dcDispatch.setStartTime(DateUtils.getNowDate());
+        dcDispatch.setDispatchStatus(2L);//进行中状态
+        dcDispatch.setRemark(remark);
+        Integer integer = dcWarningMapper.insertDcDispatch(dcDispatch);//事件绑定信息记录
+        if (integer==0){
+            return AjaxResult.error();
+        }
+        Long dispatchId = dcDispatch.getId();//信息记录id
+        if (employees!=null) {
+            dcDispatchResource.setResourceId(employees);//资源id
+            dcDispatchResource.setDispatchType(1);//资源类型
+            dcDispatchResource.setDispatchId(dispatchId);//信息记录id
+            Integer employeesSource = dcWarningMapper.insertDispatchResource(dcDispatchResource);
+            if (employeesSource==0){
+                return AjaxResult.error("人员调度异常");
+            }
+        }
+        if (vehicles!=null) {
+            // 生成一个随机索引,范围在0到列表长度减1之间
+            dcDispatchResource.setResourceId(vehicles);//资源id
+            dcDispatchResource.setDispatchType(2);//资源类型
+            dcDispatchResource.setDispatchId(dispatchId);//信息记录id
+            Integer dispatchResource = dcWarningMapper.insertDispatchResource(dcDispatchResource);//绑定车辆信息
+            if (dispatchResource==0){
+                return AjaxResult.error("车辆调度异常");
+            }
+        }
+        return AjaxResult.success();
+    }
 
     @Override
     public Integer insertDispatch(DcDispatch dcDispatch) {
@@ -725,12 +795,19 @@ public class DcWarningServiceImpl implements IDcWarningService
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Integer insertDispatchSource(HashMap map) {
+        String eventId = map.get("eventId").toString();//事件id
+        String remark = Objects.toString(map.get("remark"), "");
+        DcDispatch dcDispatch = new DcDispatch();
         DcDispatchResource dcDispatchResource = new DcDispatchResource();
-        Integer pat = (Integer) map.get("dispatchId");
-        long dispatchId = pat.longValue();
+        dcDispatch.setDeptId(SecurityUtils.getLoginUser().getDeptId());
+        dcDispatch.setEventId(eventId);
+        dcDispatch.setStartTime(DateUtils.getNowDate());
+        dcDispatch.setDispatchStatus(2L);//进行中状态
+        dcDispatch.setRemark(remark);
+        dcWarningMapper.insertDcDispatch(dcDispatch);//事件绑定信息记录
+        Long dispatchId = dcDispatch.getId();
         dcWarningMapper.deleteDispatchResource(dispatchId);//删除全部属于该调度记录下的全部资源
         ArrayList<Map<String,Object>> employeesArray = (ArrayList<Map<String,Object>>) map.get("employees");//取出人员
-
         String context = "";
         if (employeesArray!=null&&employeesArray.size()>0) {
             context += "路管人员";
@@ -768,9 +845,9 @@ public class DcWarningServiceImpl implements IDcWarningService
             context += "参与事件救援";
         }
 
-        DcDispatch dcDispatch = dcWarningMapper.selectDcDispatchById(dispatchId);
+        DcDispatch dcDispatchEventId = dcWarningMapper.selectDcDispatchById(dispatchId);
         DcEventProcess dcEventProcess = new DcEventProcess();
-        dcEventProcess.setEventId(dcDispatch.getEventId());
+        dcEventProcess.setEventId(dcDispatchEventId.getEventId());
         dcEventProcess.setSource(1);
         dcEventProcess.setContext(context);
         dcEventProcessService.insertDcEventProcess(dcEventProcess);
diff --git a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml
index 3837c2ec..38faaef3 100644
--- a/zc-business/src/main/resources/mapper/business/DcEventMapper.xml
+++ b/zc-business/src/main/resources/mapper/business/DcEventMapper.xml
@@ -812,4 +812,42 @@
         update dc_event set end_time = now(),event_state = '2'
         where id = #{eventId}
     </update>
+    <select id="dispatchRecordEventList" parameterType="DcEvent" resultMap="DcEventResult">
+        <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="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>
+            <if test="eventCause != null  and eventCause != ''">and event_cause = #{eventCause}</if>
+            <if test="description != null  and description != ''">and description = #{description}</if>
+            <if test="eventState != null ">and event_state = #{eventState}</if>
+            <if test="eventSource != null ">and event_source = #{eventSource}</if>
+            <if test="eventNature != null ">and event_nature = #{eventNature}</if>
+            <if test="eventSourceTips != null  and eventSourceTips != ''">and event_source_tips = #{eventSourceTips}
+            </if>
+            <if test="inTunnel != null ">and in_tunnel = #{inTunnel}</if>
+            <if test="isPerceived != null ">and is_perceived = #{isPerceived}</if>
+        </where>
+        <choose>
+            <when test="eventState == 0">
+                ORDER BY occurrence_time DESC
+            </when>
+            <when test="eventState == 1">
+                ORDER BY start_time DESC
+            </when>
+            <when test="eventState == 2">
+                ORDER BY end_time DESC
+            </when>
+            <otherwise>
+                ORDER BY create_time DESC
+            </otherwise>
+        </choose>
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/zc-business/src/main/resources/mapper/business/DcEventProcessMapper.xml b/zc-business/src/main/resources/mapper/business/DcEventProcessMapper.xml
index 6a7ea7fb..e852e609 100644
--- a/zc-business/src/main/resources/mapper/business/DcEventProcessMapper.xml
+++ b/zc-business/src/main/resources/mapper/business/DcEventProcessMapper.xml
@@ -150,4 +150,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where event_id = #{eventId} and process_type = '1' and process_id = #{processId} - 1
     </select>
 
+    <select id="selectDcEventProcessByEventId" parameterType="string" resultMap="DcEventProcessResult">
+        <include refid="selectDcEventProcessVo"/>
+        where event_id = #{eventId} and type = 'text'
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml b/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml
index 3486169b..c3986369 100644
--- a/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml
+++ b/zc-business/src/main/resources/mapper/business/DcWarningMapper.xml
@@ -255,6 +255,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </trim>
         where id = #{id}
     </update>
+
     <delete id="deleteDcWarningById" parameterType="Integer">
         delete from dc_warning where id = #{id}
     </delete>
@@ -278,6 +279,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         delete from dc_dispatch_resource where dispatch_id=#{dispatchId}
     </delete>
 
+
     <select id="selectCount"   resultType="int">
         SELECT COUNT(*)AS count  FROM dc_warning
     </select>
@@ -317,7 +319,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where parent_id!=0
     </select>
     <select id="selectOrganizationEmployees" resultType="java.util.HashMap">
-        select id, name,contact_number contactNumber from dc_employees where organization_id=#{organizationId} and employees_type=2
+        select id, name,contact_number contactNumber from dc_employees where organization_id=#{organizationId}
     </select>
     <select id="selectShifts" resultType="java.util.HashMap">
         select shifts.scheduling,employees.name shiftsName,employees.contact_number shiftsNumber  from dc_shifts as shifts
@@ -368,11 +370,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectEmployeesDispatch" resultType="java.util.HashMap">
         SELECT DISTINCT dc_employees.id,
                dc_employees.name,
-               dc_employees.contact_number AS contactNumber,
-               CASE
-                   WHEN t.id IS NOT NULL THEN 1 -- 连接成立
-                   ELSE 0 -- 连接不成立
-                   END                     AS state
+               dc_employees.contact_number AS contactNumber
         from dc_employees
                  LEFT JOIN(
             select employees.id id, employees.name, employees.contact_number contactNumber
@@ -380,19 +378,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                      left JOIN dc_dispatch_resource as respurce on respurce.resource_id = employees.id
                      LEFT JOIN dc_dispatch as path on path.id = respurce.dispatch_id
             where employees.organization_id = #{organizationId}
-              and employees.employees_type = 2
               and respurce.dispatch_type = 1
               and path.event_id = #{eventId}) as t on t.id = dc_employees.id
-        where organization_id =  #{organizationId}
+        where organization_id =  #{organizationId}  and dc_employees.employees_type=1
     </select>
     <select id="selectVehiclesDispatch" resultType="java.util.HashMap">
         select DISTINCT dc_vehicles.id,
                dc_vehicles.vehicle_type  vehicleType,
-               dc_vehicles.vehicle_plate vehiclePlate,
-               CASE
-                   WHEN t.id IS NOT NULL THEN 1 -- 连接成立
-                   ELSE 0 -- 连接不成立
-                   END AS                state
+               dc_vehicles.vehicle_plate vehiclePlate
         from dc_vehicles
                  LEFT JOIN(
             select vehicles.id, vehicles.vehicle_type vehicleType, vehicles.vehicle_plate vehiclePlate
@@ -400,11 +393,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                      LEFT JOIN dc_dispatch_resource as resource on resource.resource_id = vehicles.id
                      LEFT JOIN dc_dispatch as path on path.id = resource.dispatch_id
             where vehicles.organization_id = #{organizationId}
-              and vehicles.vehicle_status = 1
               and resource.dispatch_type = 2
               and path.event_id = #{eventId}) as t on t.id = dc_vehicles.id
         where vehicle_status = 1
-          and organization_id = #{organizationId}
+          and organization_id = #{organizationId}  and dc_vehicles.vehicle_status = 1
     </select>
     <select id="selectOrganization" resultType="java.util.HashMap">
         select id from dc_organization where parent_id=0;
@@ -423,5 +415,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectDcDispatchById" resultType="com.zc.business.domain.DcDispatch">
         select * from  dc_dispatch where id = #{id}
     </select>
+    <select id="employeesName" resultType="java.lang.String">
+        select name from dc_employees where id=#{id}
+    </select>
+    <select id="vehiclesName" resultType="java.lang.String">
+       select  vehicle_plate from dc_vehicles where id=#{id}
+    </select>
+    <select id="organizationName" resultType="java.lang.String">
+        select organization_name from dc_organization where id=#{id}
+    </select>
+    <select id="vehiclesType" resultType="java.lang.String">
+        select  vehicle_type from dc_vehicles where id=#{id}
+    </select>
+    <select id="selectTrafficPolice" resultType="java.util.HashMap">
+        select name,contact_number contactNumber from dc_employees where organization_id=#{organizationId} and employees_type=2
+    </select>
 
 </mapper>