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
new file mode 100644
index 00000000..789ad59e
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/controller/DcEmergencyPlansController.java
@@ -0,0 +1,108 @@
+package com.zc.business.controller;
+
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.zc.business.domain.DcEmergencyPlans;
+import com.zc.business.domain.DcEvent;
+import com.zc.business.service.DcEmergencyPlansService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 事件预案Controller
+ *
+ * @author wangjiabao
+ * @date 2024-02-21
+ */
+@Api(tags = "事件预案")
+@RestController
+@RequestMapping("/business/plans")
+public class DcEmergencyPlansController extends BaseController {
+
+    @Autowired
+    private DcEmergencyPlansService dcEmergencyPlansService;
+
+    /**
+     * 查询事件预案列表
+     */
+    @ApiOperation("查询事件预案列表")
+    @PreAuthorize("@ss.hasPermi('business:plans:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(DcEmergencyPlans dcEmergencyPlans) {
+        startPage();
+        List<DcEmergencyPlans> list = dcEmergencyPlansService.selectDcEmergencyPlansList(dcEmergencyPlans);
+        return getDataTable(list);
+    }
+
+    /**
+     * 根据事件预案id查询事件预案列表
+     */
+    @ApiOperation("根据事件预案id查询事件预案列表")
+    @PreAuthorize("@ss.hasPermi('business:plans:list')")
+    @GetMapping("/list/{id}")
+    public AjaxResult list(@PathVariable @ApiParam(name = "id", value = "事件预案id", required = true) Integer id) {
+
+        DcEmergencyPlans dcEmergencyPlans = dcEmergencyPlansService.selectDcEmergencyPlans(id);
+        return AjaxResult.success(dcEmergencyPlans);
+    }
+
+    /**
+     * 根据事件数据查询事件预案列表
+     */
+    @ApiOperation("根据事件数据查询事件预案列表")
+    @PreAuthorize("@ss.hasPermi('business:plans:list')")
+    @PostMapping("/list/event/type")
+    public AjaxResult listByEventType(@RequestBody DcEvent dcEvent) {
+
+        List<DcEmergencyPlans> dcEmergencyPlansList = dcEmergencyPlansService.selectDcEmergencyPlansByEventType(dcEvent);
+        return AjaxResult.success(dcEmergencyPlansList);
+    }
+
+    /**
+     * 新增事件预案
+     */
+    @ApiOperation("新增预案")
+    @PreAuthorize("@ss.hasPermi('business:plans:add')")
+    @PostMapping
+    public AjaxResult add(@RequestBody DcEmergencyPlans dcEmergencyPlans) {
+        return toAjax(dcEmergencyPlansService.insertDcEmergencyPlans(dcEmergencyPlans));
+    }
+
+    /**
+     * 修改事件预案
+     */
+    @ApiOperation("修改预案")
+    @PreAuthorize("@ss.hasPermi('business:plans:edit')")
+    @PutMapping
+    public AjaxResult update(@RequestBody DcEmergencyPlans dcEmergencyPlans) {
+        return toAjax(dcEmergencyPlansService.updateDcEmergencyPlans(dcEmergencyPlans));
+    }
+
+    /**
+     * 批量修改事件预案
+     */
+//    @ApiOperation("修改预案")
+//    @PreAuthorize("@ss.hasPermi('business:plans:edit')")
+//    @Log(title = "事件预案", businessType = BusinessType.UPDATE)
+    @PutMapping("/batch")
+    public AjaxResult updateBatch(@RequestBody List<DcEmergencyPlans> dcEmergencyPlansList) {
+        return toAjax(dcEmergencyPlansService.updateBatchDcEmergencyPlans(dcEmergencyPlansList));
+    }
+
+    /**
+     * 批量删除事件预案
+     */
+    @ApiOperation("批量删除预案")
+    @PreAuthorize("@ss.hasPermi('business:plans:remove')")
+    @DeleteMapping("/{ids}")
+    public AjaxResult update(@PathVariable String[] ids) {
+        return toAjax(dcEmergencyPlansService.deleteDcEmergencyPlans(ids));
+    }
+}
diff --git a/zc-business/src/main/java/com/zc/business/domain/DcEmergencyPlans.java b/zc-business/src/main/java/com/zc/business/domain/DcEmergencyPlans.java
new file mode 100644
index 00000000..ace7707a
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/domain/DcEmergencyPlans.java
@@ -0,0 +1,85 @@
+package com.zc.business.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 事件预案对象 dc_emergency_plans
+ *
+ * @author wangjiabao
+ * @date 2024-02-21
+ */
+
+@ApiModel("事件预案实体")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DcEmergencyPlans {
+
+    /**
+     * 事件预案编号
+     */
+    @ApiModelProperty("事件预案编号")
+    private Integer id;
+
+    /**
+     * 预案名称
+     */
+    @ApiModelProperty("预案名称")
+    private String planName;
+
+    /**
+     * 事件类型
+     */
+    @ApiModelProperty("事件类型")
+    private int eventType;
+
+    /**
+     * 触发机制
+     */
+    @ApiModelProperty("触发机制")
+    private String triggerMechanism;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+    @ApiModelProperty("修改时间")
+    private Date updateTime;
+
+    /**
+     * 设备类型
+     */
+    @ApiModelProperty("设备类型")
+    private String deviceType;
+
+    /**
+     * 触发条件
+     */
+    @ApiModelProperty("触发条件")
+    private String triggeringCondition;
+
+    /**
+     * 可控设备
+     */
+    @ApiModelProperty("可控设备")
+    private String controllableDevice;
+
+    /**
+     * 控制指令
+     */
+    @ApiModelProperty("控制指令")
+    private String controlCommand;
+
+    /**
+     * 执行操作
+     */
+    @ApiModelProperty("执行操作")
+    private List<DcExecuteAction> dcExecuteAction;
+
+
+}
diff --git a/zc-business/src/main/java/com/zc/business/domain/DcExecuteAction.java b/zc-business/src/main/java/com/zc/business/domain/DcExecuteAction.java
new file mode 100644
index 00000000..1ef52211
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/domain/DcExecuteAction.java
@@ -0,0 +1,79 @@
+package com.zc.business.domain;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * 执行操作对象 dc_execute_action
+ *
+ * @author wangjiabao
+ * @date 2024-02-21
+ */
+
+@ApiModel("执行操作实体")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DcExecuteAction{
+
+    /**
+     * 执行操作编号
+     */
+    @ApiModelProperty("执行操作编号")
+    private String id;
+
+    /**
+     * 所属预案
+     */
+    @ApiModelProperty("所属预案")
+    private Integer emergencyPlansId;
+
+    /**
+     * 设备类型
+     */
+    @ApiModelProperty("设备类型")
+    private int deviceType;
+
+    /**
+     * 操作类型
+     */
+    @ApiModelProperty("操作类型")
+    private int actionType;
+
+    @ApiModelProperty("创建时间")
+    private Date createTime;
+    @ApiModelProperty("修改时间")
+    private Date updateTime;
+
+    /**
+     * 检索规则条件
+     */
+    @ApiModelProperty("检索规则条件")
+    private int searchRule;
+
+    /**
+     * 个数/里程
+     */
+    @ApiModelProperty("个数/里程")
+    private Integer number;
+
+    /**
+     * 设备列表
+     */
+    @ApiModelProperty("设备列表")
+    private String deviceList;
+
+    /**
+     * 其他配置
+     */
+    @ApiModelProperty("其他配置")
+    private String otherConfig;
+
+
+
+}
diff --git a/zc-business/src/main/java/com/zc/business/enums/EventTypeEnum.java b/zc-business/src/main/java/com/zc/business/enums/EventTypeEnum.java
new file mode 100644
index 00000000..f99add2c
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/enums/EventTypeEnum.java
@@ -0,0 +1,38 @@
+package com.zc.business.enums;
+
+/**
+ * 事件类型
+ * @author wangjiabao
+ */
+public enum EventTypeEnum {
+
+    TRAFFIC_ACCIDENT(1, "交通事故"),
+    VEHICLE_MALFUNCTION(2, "车辆故障"),
+    TRAFFIC_CONTROL(3, "交通管制"),
+    TRAFFIC_JAM(4, "交通拥堵"),
+    ILLEGAL_ROAD_USE(5, "非法上路"),
+    ROADBLOCK_CLEARANCE(6, "路障清除"),
+    CONSTRUCTION_AND_CONSTRUCTION(7, "施工建设"),
+    SERVICE_AREA_ABNORMALITY(8, "服务区异常"),
+    EQUIPMENT_HAZARDS(9, "设施设备隐患"),
+    ABNORMAL_WEATHER(10, "异常天气"),
+    OTHER_EVENTS(11, "其他事件");
+    private final int code;
+    private final String info;
+
+    EventTypeEnum(int code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public int getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+}
diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcEmergencyPlansMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcEmergencyPlansMapper.java
new file mode 100644
index 00000000..79f994d0
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/mapper/DcEmergencyPlansMapper.java
@@ -0,0 +1,68 @@
+package com.zc.business.mapper;
+
+
+import com.zc.business.domain.DcEmergencyPlans;
+import com.zc.business.domain.DcEvent;
+
+import java.util.List;
+
+/**
+ * 事件预案Mapper接口
+ *
+ * @author wangjiabao
+ * @date 2024-02-21
+ */
+public interface DcEmergencyPlansMapper {
+
+    /**
+     * 查询事件预案
+     *
+     * @param dcEmergencyPlans 事件预案
+     * @return 结果
+     */
+    List<DcEmergencyPlans> selectDcEmergencyPlansList(DcEmergencyPlans dcEmergencyPlans);
+
+    /**
+     * 根据事件id查询事件预案
+     *
+     * @param id 事件预案
+     * @return 结果
+     */
+    DcEmergencyPlans selectDcEmergencyPlans(Integer id);
+
+    /**
+     * 根据事件类型查询事件预案
+     *
+     * @param event 事件预案
+     * @return 结果
+     */
+    List<DcEmergencyPlans> selectDcEmergencyPlansByEventType(DcEvent event);
+
+    /**
+     * 新增事件预案
+     *
+     * @param dcEmergencyPlans 事件预案
+     * @return 结果
+     */
+    int insertDcEmergencyPlans(DcEmergencyPlans dcEmergencyPlans);
+
+    /**
+     * 修改事件预案
+     *
+     * @param dcEmergencyPlans 事件预案
+     * @return 结果
+     */
+    int updateDcEmergencyPlans(DcEmergencyPlans dcEmergencyPlans);
+
+    /**
+     * 批量删除事件预案
+     *
+     * @param ids 事件预案
+     * @return 结果
+     */
+    int deleteDcEmergencyPlans(String[] ids);
+
+
+}
+
+
diff --git a/zc-business/src/main/java/com/zc/business/mapper/DcExecuteActionMapper.java b/zc-business/src/main/java/com/zc/business/mapper/DcExecuteActionMapper.java
new file mode 100644
index 00000000..5344dcfe
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/mapper/DcExecuteActionMapper.java
@@ -0,0 +1,60 @@
+package com.zc.business.mapper;
+
+
+import com.zc.business.domain.DcExecuteAction;
+
+import java.util.List;
+
+/**
+ * 执行操作Mapper接口
+ *
+ * @author wangjiabao
+ * @date 2024-02-21
+ */
+public interface DcExecuteActionMapper {
+
+
+    /**
+     * 批量新增执行操作
+     *
+     * @param dcExecuteActionList 执行操作
+     * @return 结果
+     */
+    int insertDcExecuteActionBatch(List<DcExecuteAction> dcExecuteActionList);
+
+    /**
+     * 批量修改执行操作
+     *
+     * @param dcExecuteActionList 执行操作
+     * @return 结果
+     */
+    int updateDcExecuteActionBatch(List<DcExecuteAction> dcExecuteActionList);
+
+    /**
+     * 批量删除执行操作
+     *
+     * @param ids 执行操作
+     * @return 结果
+     */
+    int deleteDcExecuteActionByEmergencyPlansId(String[] ids);
+
+    /**
+     * 批量删除执行操作
+     *
+     * @param ids 执行操作
+     * @return 结果
+     */
+    int deleteDcExecuteAction(List<String> ids);
+
+    /**
+     * 根据事件预案id查询执行操作
+     *
+     * @param emergencyPlansId 执行操作
+     * @return 结果
+     */
+    List<String> selectDcExecuteActionByEmergencyPlansId(String emergencyPlansId);
+
+
+}
+
+
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
new file mode 100644
index 00000000..60ac1997
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/service/DcEmergencyPlansService.java
@@ -0,0 +1,72 @@
+package com.zc.business.service;
+
+import com.zc.business.domain.DcEmergencyPlans;
+import com.zc.business.domain.DcEvent;
+
+import java.util.List;
+
+/**
+ * 事件预案Service接口
+ *
+ * @author wangjiabao
+ * @date 2024-02-21
+ */
+public interface DcEmergencyPlansService {
+
+
+    /**
+     * 查询事件预案
+     *
+     * @param dcEmergencyPlans 事件预案
+     * @return 结果
+     */
+    List<DcEmergencyPlans> selectDcEmergencyPlansList(DcEmergencyPlans dcEmergencyPlans);
+
+    /**
+     * 根据事件id查询事件预案
+     *
+     * @param id 事件预案
+     * @return 结果
+     */
+    DcEmergencyPlans selectDcEmergencyPlans(Integer id);
+
+    /**
+     * 根据事件类型查询事件预案
+     *
+     * @param event 事件预案
+     * @return 结果
+     */
+    List<DcEmergencyPlans> selectDcEmergencyPlansByEventType(DcEvent event);
+
+    /**
+     * 新增事件预案
+     *
+     * @param dcEmergencyPlans 事件预案
+     * @return 结果
+     */
+    int insertDcEmergencyPlans(DcEmergencyPlans dcEmergencyPlans);
+
+    /**
+     * 修改事件预案
+     *
+     * @param dcEmergencyPlans 事件预案
+     * @return 结果
+     */
+    int updateDcEmergencyPlans(DcEmergencyPlans dcEmergencyPlans);
+
+    /**
+     * 批量修改事件预案
+     *
+     * @param dcEmergencyPlansList 事件预案
+     * @return 结果
+     */
+    int updateBatchDcEmergencyPlans(List<DcEmergencyPlans> dcEmergencyPlansList);
+
+    /**
+     * 批量删除事件预案
+     *
+     * @param ids 事件预案
+     * @return 结果
+     */
+    int deleteDcEmergencyPlans(String[] ids);
+}
diff --git a/zc-business/src/main/java/com/zc/business/service/DcExecuteActionService.java b/zc-business/src/main/java/com/zc/business/service/DcExecuteActionService.java
new file mode 100644
index 00000000..53d509d4
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/service/DcExecuteActionService.java
@@ -0,0 +1,54 @@
+package com.zc.business.service;
+
+import com.zc.business.domain.DcExecuteAction;
+
+import java.util.List;
+
+/**
+ * 执行操作Service接口
+ *
+ * @author wangjiabao
+ * @date 2024-02-21
+ */
+public interface DcExecuteActionService {
+
+    /**
+     * 批量新增执行操作
+     *
+     * @param dcExecuteActionList 执行操作
+     * @return 结果
+     */
+    int insertDcExecuteActionBatch(List<DcExecuteAction> dcExecuteActionList);
+
+    /**
+     * 批量修改执行操作
+     *
+     * @param dcExecuteActionList 执行操作
+     * @return 结果
+     */
+    int updateDcExecuteActionBatch(List<DcExecuteAction> dcExecuteActionList);
+
+    /**
+     * 根据事件预案id批量删除执行操作
+     *
+     * @param ids 执行操作
+     * @return 结果
+     */
+    int deleteDcExecuteActionByEmergencyPlansId(String[] ids);
+
+    /**
+     * 批量删除执行操作
+     *
+     * @param ids 执行操作
+     * @return 结果
+     */
+    int deleteDcExecuteAction(List<String> ids);
+
+    /**
+     * 根据事件预案id查询执行操作
+     *
+     * @param emergencyPlansId 执行操作
+     * @return 结果
+     */
+    List<String> selectDcExecuteActionByEmergencyPlansId(String emergencyPlansId);
+}
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
new file mode 100644
index 00000000..a132b91a
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/service/impl/DcEmergencyPlansServiceImpl.java
@@ -0,0 +1,359 @@
+package com.zc.business.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.utils.DateUtils;
+import com.zc.business.domain.*;
+import com.zc.business.enums.EventTypeEnum;
+import com.zc.business.mapper.DcEmergencyPlansMapper;
+import com.zc.business.service.DcEmergencyPlansService;
+import com.zc.business.service.DcExecuteActionService;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class DcEmergencyPlansServiceImpl implements DcEmergencyPlansService {
+
+    @Resource
+    private DcEmergencyPlansMapper dcEmergencyPlansMapper;
+    @Resource
+    private DcExecuteActionService dcExecuteActionService;
+
+
+    /**
+     * 查询事件预案
+     *
+     * @param dcEmergencyPlans 事件预案
+     * @return 结果
+     */
+    @Override
+    public List<DcEmergencyPlans> selectDcEmergencyPlansList(DcEmergencyPlans dcEmergencyPlans) {
+        return dcEmergencyPlansMapper.selectDcEmergencyPlansList(dcEmergencyPlans);
+    }
+
+    /**
+     * 根据事件id查询事件预案
+     *
+     * @param id 事件预案
+     * @return 结果
+     */
+    @Override
+    public DcEmergencyPlans selectDcEmergencyPlans(Integer id) {
+        return dcEmergencyPlansMapper.selectDcEmergencyPlans(id);
+    }
+
+    /**
+     * 根据事件类型查询事件预案
+     *
+     * @param event 事件预案
+     * @return 结果
+     */
+    @Override
+    public List<DcEmergencyPlans> selectDcEmergencyPlansByEventType(DcEvent event) {
+        List<DcEmergencyPlans> dcEmergencyPlansList = dcEmergencyPlansMapper.selectDcEmergencyPlansByEventType(event);
+
+        int eventType = Integer.parseInt(event.getEventType().toString());
+
+        if (eventType == EventTypeEnum.TRAFFIC_ACCIDENT.getCode()) {
+            return dcEmergencyPlansList.stream()
+                    .filter(dcEmergencyPlans -> {
+                        String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
+                        JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
+                        int eventLevel = Integer.parseInt(triggerJson.get("eventLevel").toString());
+                        return eventLevel == event.getEventLevel();
+                    })
+                    .collect(Collectors.toList());
+        } else if (eventType == EventTypeEnum.VEHICLE_MALFUNCTION.getCode()) {
+            return dcEmergencyPlansList.stream()
+                    .filter(dcEmergencyPlans -> {
+                        String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
+                        JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
+                        String[] lane = event.getLang().split(",");
+                        int[] intArray = Arrays.stream(lane)
+                                .mapToInt(Integer::parseInt)
+                                .toArray();
+                        JSONArray eventLevel = JSONArray.parseArray(triggerJson.get("roadOccupancy").toString());
+                        return Arrays.stream(intArray).anyMatch(Arrays.asList(eventLevel.toArray())::contains);
+                    })
+                    .collect(Collectors.toList());
+        } else if (eventType == EventTypeEnum.TRAFFIC_CONTROL.getCode()) {
+            return dcEmergencyPlansList.stream()
+                    .filter(dcEmergencyPlans -> {
+                        String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
+                        JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
+                        // 管制分类
+                        Integer controlType = Integer.parseInt(triggerJson.get("controlType").toString());
+                        // 分类
+                        Integer classify = Integer.parseInt(triggerJson.get("classify").toString());
+                        // 分类原因
+                        Integer controlCause = Integer.parseInt(triggerJson.get("controlCause").toString());
+                        // 事件--交通管制数据
+                        DcEventTrafficControl dcEventTrafficControl = event.getDcEventTrafficControl();
+                        Integer eventControlType = Integer.parseInt(dcEventTrafficControl.getControlType().toString());
+                        Integer eventClassify = Integer.parseInt(dcEventTrafficControl.getClassify().toString());
+                        Integer eventControlCause = Integer.parseInt(dcEventTrafficControl.getControlCause().toString());
+                        return controlType.equals(eventControlType) && classify.equals(eventClassify) && controlCause.equals(eventControlCause);
+                    })
+                    .collect(Collectors.toList());
+        } else if (eventType == EventTypeEnum.TRAFFIC_JAM.getCode()) {
+            return dcEmergencyPlansList.stream()
+                    .filter(dcEmergencyPlans -> {
+                        String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
+                        JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
+                        // 拥堵原因
+                        Integer congestionCause = Integer.parseInt(triggerJson.get("congestionCause").toString());
+                        // 详细原因
+                        Integer detailedReasons = Integer.parseInt(triggerJson.get("detailedReasons").toString());
+                        // 事件--交通拥堵数据
+                        DcEventTrafficCongestion dcEventTrafficCongestion = event.getDcEventTrafficCongestion();
+                        Integer eventCongestionCause = Integer.parseInt(dcEventTrafficCongestion.getCongestionCause().toString());
+                        Integer eventDetailedReasons = Integer.parseInt(dcEventTrafficCongestion.getDetailedReasons().toString());
+                        return congestionCause.equals(eventCongestionCause) && detailedReasons.equals(eventDetailedReasons);
+                    })
+                    .collect(Collectors.toList());
+        } else if (eventType == EventTypeEnum.ILLEGAL_ROAD_USE.getCode() || eventType == EventTypeEnum.ROADBLOCK_CLEARANCE.getCode()) {
+            return dcEmergencyPlansList.stream()
+                    .filter(dcEmergencyPlans -> {
+                        String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
+                        JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
+                        String eventSubclass = triggerJson.get("eventSubclass").toString();
+                        // 事件--非法上路/路障清除 数据
+                        String subclass = event.getEventSubclass();
+                        return eventSubclass.equals(subclass);
+                    })
+                    .collect(Collectors.toList());
+        } else if (eventType == EventTypeEnum.CONSTRUCTION_AND_CONSTRUCTION.getCode()) {
+            return dcEmergencyPlansList.stream()
+                    .filter(dcEmergencyPlans -> {
+                        String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
+                        JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
+                        String subclass = triggerJson.get("eventSubclass").toString();
+                        Integer controlMode = Integer.parseInt(triggerJson.get("controlMode").toString());
+                        JSONArray lane = JSONArray.parseArray(triggerJson.get("lane").toString());
+                        // 事件--施工建设数据
+                        DcEventConstruction dcEventConstruction = event.getDcEventConstruction();
+                        String eventSubclass = event.getEventSubclass();
+                        Integer eventControlMode = Integer.parseInt(dcEventConstruction.getControlMode().toString());
+                        String[] eventLane = event.getLang().split(",");
+                        int[] eventLaneInt = Arrays.stream(eventLane)
+                                .mapToInt(Integer::parseInt)
+                                .toArray();
+                        return subclass.equals(eventSubclass) && controlMode.equals(eventControlMode)
+                                && Arrays.stream(eventLaneInt).anyMatch(Arrays.asList(lane.toArray())::contains);
+                    })
+                    .collect(Collectors.toList());
+        } else if (eventType == EventTypeEnum.SERVICE_AREA_ABNORMALITY.getCode()) {
+            return dcEmergencyPlansList.stream()
+                    .filter(dcEmergencyPlans -> {
+                        String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
+                        JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
+                        Integer facilityId = Integer.parseInt(triggerJson.get("facilityId").toString());
+                        Integer disableFacility = Integer.parseInt(triggerJson.get("disableFacility").toString());
+
+                        // 事件--服务区异常数据
+                        DcEventServiceArea dcEventServiceArea = event.getDcEventServiceArea();
+                        Integer eventFacilityId = Integer.parseInt(dcEventServiceArea.getFacilityId().toString());
+                        Integer eventDisableFacility = Integer.parseInt(dcEventServiceArea.getDisableFacility().toString());
+                        return facilityId.equals(eventFacilityId) && disableFacility.equals(eventDisableFacility);
+                    })
+                    .collect(Collectors.toList());
+        } else if (eventType == EventTypeEnum.ABNORMAL_WEATHER.getCode()) {
+            return dcEmergencyPlansList.stream()
+                    .filter(dcEmergencyPlans -> {
+                        String triggerMechanism = dcEmergencyPlans.getTriggerMechanism();
+                        JSONObject triggerJson = JSONObject.parseObject(triggerMechanism);
+                        String unusualWeather = triggerJson.get("unusualWeather").toString();
+                        // 条件
+                        JSONArray conditions = JSON.parseArray(triggerJson.get("conditions").toString());
+
+                        // 事件--异常天气数据
+                        DcEventAbnormalWeather dcEventAbnormalWeather = event.getDcEventAbnormalWeather();
+                        String weatherSituation = dcEventAbnormalWeather.getWeatherSituation();
+                        // 异常天气数据
+                        Integer numericalValue = Integer.parseInt(dcEventAbnormalWeather.getNumericalValue());
+                        String conditionString = conditions.stream().map(condition -> {
+                            JSONObject conditionJSON = JSON.parseObject(condition.toString());
+                            String comparisonOperator = StringEscapeUtils.unescapeXml(conditionJSON.get("comparisonOperator").toString());
+                            String thresholdValue = conditionJSON.get("thresholdValue").toString();
+                            return numericalValue + comparisonOperator + thresholdValue;
+                        }).collect(Collectors.joining(" && "));
+
+                        ScriptEngineManager manager = new ScriptEngineManager();
+                        ScriptEngine engine = manager.getEngineByName("js");
+                        boolean result = false;
+                        try {
+                            result = (boolean) engine.eval(conditionString);
+                        } catch (ScriptException e) {
+                            e.printStackTrace();
+                        }
+
+                        return unusualWeather.equals(weatherSituation) && result;
+                    })
+                    .collect(Collectors.toList());
+        } else {
+            return null;
+        }
+
+    }
+
+
+    /**
+     * 新增事件预案
+     *
+     * @param dcEmergencyPlans 事件预案
+     * @return 结果
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public int insertDcEmergencyPlans(DcEmergencyPlans dcEmergencyPlans) {
+        dcEmergencyPlans.setCreateTime(DateUtils.getNowDate());
+        List<DcExecuteAction> dcExecuteActionList = dataProcessing(dcEmergencyPlans);
+        // 插入事件预案表数据
+        dcEmergencyPlansMapper.insertDcEmergencyPlans(dcEmergencyPlans);
+        dcExecuteActionList.forEach(dcExecuteAction -> dcExecuteAction.setEmergencyPlansId(dcEmergencyPlans.getId()));
+        // 插入执行操作表数据
+        dcExecuteActionList.forEach(dcExecuteAction -> dcExecuteAction.setCreateTime(DateUtils.getNowDate()));
+        return dcExecuteActionService.insertDcExecuteActionBatch(dcExecuteActionList);
+    }
+
+    /**
+     * 修改事件预案
+     *
+     * @param dcEmergencyPlans 事件预案
+     * @return 结果
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public int updateDcEmergencyPlans(DcEmergencyPlans dcEmergencyPlans) {
+        dcEmergencyPlans.setUpdateTime(DateUtils.getNowDate());
+        List<DcExecuteAction> dcExecuteActionList = dataProcessing(dcEmergencyPlans);
+        // 修改事件预案表数据
+        dcEmergencyPlansMapper.updateDcEmergencyPlans(dcEmergencyPlans);
+        // 修改执行操作表数据
+        dcExecuteActionList.forEach(dcExecuteAction -> dcExecuteAction.setUpdateTime(DateUtils.getNowDate()));
+        // 过滤出删除掉的执行操作和恢复操作
+        String dcExecuteActionId = dcExecuteActionList.stream()
+                .filter(dcExecuteAction -> dcExecuteAction.getId() != null)
+                .map(DcExecuteAction::getEmergencyPlansId)
+                .map(String::valueOf)
+                .findFirst()
+                .orElse(null);
+        List<String> ids = dcExecuteActionList.stream()
+                .filter(dcExecuteAction -> dcExecuteAction.getId() != null)
+                .map(DcExecuteAction::getId)
+                .collect(Collectors.toList());
+        // 查询出事件预案关联的执行操作和恢复操作
+        List<String> dcExecuteActionIdList = dcExecuteActionService.selectDcExecuteActionByEmergencyPlansId(dcExecuteActionId);
+        List<String> commonIds = new ArrayList<>(ids);
+        commonIds.retainAll(dcExecuteActionIdList);
+
+        // 删除后的执行操作id和恢复操作id
+        List<String> idsNotInDcExecuteActionIdList = new ArrayList<>(dcExecuteActionIdList);
+        idsNotInDcExecuteActionIdList.removeAll(commonIds);
+        // 根据执行操作id和恢复操作id,进行删除操作
+        if (idsNotInDcExecuteActionIdList.size() > 0) {
+            System.out.println("存在需要删除的数据");
+            dcExecuteActionService.deleteDcExecuteAction(idsNotInDcExecuteActionIdList);
+        }
+
+        // 过滤出新增的执行操作
+        List<DcExecuteAction> insertDcExecuteActionList = dcExecuteActionList.stream()
+                .filter(dcExecuteAction -> dcExecuteAction.getId() == null)
+                .collect(Collectors.toList());
+        if (insertDcExecuteActionList.size() > 0) {
+            dcExecuteActionService.insertDcExecuteActionBatch(insertDcExecuteActionList);
+        }
+
+        return dcExecuteActionService.updateDcExecuteActionBatch(dcExecuteActionList);
+    }
+
+    @Override
+    public int updateBatchDcEmergencyPlans(List<DcEmergencyPlans> dcEmergencyPlansList) {
+        return 0;
+    }
+
+    /**
+     * 批量删除事件预案
+     *
+     * @param ids 事件预案
+     * @return 结果
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public int deleteDcEmergencyPlans(String[] ids) {
+        // 批量删除执行操作
+        dcExecuteActionService.deleteDcExecuteActionByEmergencyPlansId(ids);
+        // 批量删除事件预案
+        return dcEmergencyPlansMapper.deleteDcEmergencyPlans(ids);
+    }
+
+
+    /**
+     * 将json字符串转Map
+     *
+     * @param jsonStr
+     * @return
+     */
+    public static Map<String, String> jsonToMap(String jsonStr) {
+        try {
+            ObjectMapper objectMapper = new ObjectMapper();
+            return objectMapper.readValue(jsonStr, new TypeReference<Map<String, String>>() {
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 数据处理
+     */
+    public static List<DcExecuteAction> dataProcessing(DcEmergencyPlans dcEmergencyPlans) {
+        // 过滤出执行操作数据
+        List<DcExecuteAction> dcExecuteActionOperationList = dcEmergencyPlans.getDcExecuteAction()
+                .stream()
+                .filter(dcExecuteAction -> dcExecuteAction.getActionType() == 1)
+                .collect(Collectors.toList());
+        List<DcExecuteAction> dcExecuteActionList = dcEmergencyPlans.getDcExecuteAction();
+        // 设备类型  数据处理
+        String deviceType = dcExecuteActionOperationList.stream()
+                .map(DcExecuteAction::getDeviceType)
+                .map(String::valueOf)
+                .collect(Collectors.joining(","));
+        dcEmergencyPlans.setDeviceType(deviceType);
+        // 可控设备 数据处理
+        List<DcExecuteAction> dcExecuteActionNewList = dcExecuteActionOperationList.stream()
+                .filter(dcExecuteAction -> dcExecuteAction.getSearchRule() == 1)
+                .collect(Collectors.toList());
+        String controllableDevice = dcExecuteActionNewList.stream()
+                .map(DcExecuteAction::getDeviceList)
+                .collect(Collectors.joining("、"));
+        dcEmergencyPlans.setControllableDevice(controllableDevice);
+        // 控制指令 数据处理
+        List<String> otherConfigList = dcExecuteActionOperationList.stream()
+                .map(DcExecuteAction::getOtherConfig)
+                .collect(Collectors.toList());
+
+        List<String> otherConfigStringList = otherConfigList.stream()
+                .map(json -> jsonToMap(json))
+                .filter(Objects::nonNull)
+                .map(map -> map.values().stream().collect(Collectors.joining(",")))
+                .collect(Collectors.toList());
+
+        String controlCommand = otherConfigStringList.stream()
+                .collect(Collectors.joining(";"));
+        dcEmergencyPlans.setControlCommand(controlCommand);
+        return dcExecuteActionList;
+    }
+}
diff --git a/zc-business/src/main/java/com/zc/business/service/impl/DcExecuteActionServiceImpl.java b/zc-business/src/main/java/com/zc/business/service/impl/DcExecuteActionServiceImpl.java
new file mode 100644
index 00000000..a57676f3
--- /dev/null
+++ b/zc-business/src/main/java/com/zc/business/service/impl/DcExecuteActionServiceImpl.java
@@ -0,0 +1,72 @@
+package com.zc.business.service.impl;
+
+import com.zc.business.domain.DcExecuteAction;
+import com.zc.business.mapper.DcExecuteActionMapper;
+import com.zc.business.service.DcExecuteActionService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@Service
+public class DcExecuteActionServiceImpl implements DcExecuteActionService {
+
+    @Resource
+    private DcExecuteActionMapper dcExecuteActionMapper;
+
+
+    /**
+     * 批量新增执行操作
+     *
+     * @param dcExecuteActionList 执行操作
+     * @return 结果
+     */
+    @Override
+    public int insertDcExecuteActionBatch(List<DcExecuteAction> dcExecuteActionList) {
+        return dcExecuteActionMapper.insertDcExecuteActionBatch(dcExecuteActionList);
+    }
+
+    /**
+     * 批量修改执行操作
+     *
+     * @param dcExecuteActionList 执行操作
+     * @return 结果
+     */
+    @Override
+    public int updateDcExecuteActionBatch(List<DcExecuteAction> dcExecuteActionList) {
+        return dcExecuteActionMapper.updateDcExecuteActionBatch(dcExecuteActionList);
+    }
+
+    /**
+     * 根据事件预案id批量删除执行操作
+     *
+     * @param ids 执行操作
+     * @return
+     */
+    @Override
+    public int deleteDcExecuteActionByEmergencyPlansId(String[] ids) {
+        return dcExecuteActionMapper.deleteDcExecuteActionByEmergencyPlansId(ids);
+    }
+
+    /**
+     * 批量删除执行操作
+     *
+     * @param ids 执行操作
+     * @return 结果
+     */
+    @Override
+    public int deleteDcExecuteAction(List<String> ids) {
+        return dcExecuteActionMapper.deleteDcExecuteAction(ids);
+    }
+
+    /**
+     * 根据事件预案id查询执行操作
+     *
+     * @param emergencyPlansId 执行操作
+     * @return 结果
+     */
+    @Override
+    public List<String> selectDcExecuteActionByEmergencyPlansId(String emergencyPlansId) {
+        return dcExecuteActionMapper.selectDcExecuteActionByEmergencyPlansId(emergencyPlansId);
+    }
+}
diff --git a/zc-business/src/main/resources/mapper/business/DcEmergencyPlansMapper.xml b/zc-business/src/main/resources/mapper/business/DcEmergencyPlansMapper.xml
new file mode 100644
index 00000000..bf5f50a5
--- /dev/null
+++ b/zc-business/src/main/resources/mapper/business/DcEmergencyPlansMapper.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zc.business.mapper.DcEmergencyPlansMapper">
+
+    <resultMap type="DcEmergencyPlans" id="DcEmergencyPlansResult">
+        <result property="id" column="id"/>
+        <result property="planName" column="plan_name"/>
+        <result property="eventType" column="event_type"/>
+        <result property="triggerMechanism" column="trigger_mechanism"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="deviceType" column="device_type"/>
+        <result property="triggeringCondition" column="triggering_condition"/>
+        <result property="controllableDevice" column="controllable_device"/>
+        <result property="controlCommand" column="control_command"/>
+        <collection property="dcExecuteAction" ofType="DcExecuteAction">
+            <result property="id" column="action_id"/>
+            <result property="emergencyPlansId" column="action_emergency_plans_id"/>
+            <result property="deviceType" column="action_device_type"/>
+            <result property="actionType" column="action_action_type"/>
+            <result property="createTime" column="action_create_time"/>
+            <result property="updateTime" column="action_update_time"/>
+            <result property="searchRule" column="action_search_rule"/>
+            <result property="number" column="action_number"/>
+            <result property="deviceList" column="action_device_list"/>
+            <result property="otherConfig" column="action_other_config"/>
+        </collection>
+    </resultMap>
+
+    <insert id="insertDcEmergencyPlans" parameterType="DcEmergencyPlans" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        insert into dc_emergency_plans
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="planName != null and planName != ''">plan_name,</if>
+            <if test="eventType != null">event_type,</if>
+            <if test="triggerMechanism != null and triggerMechanism != ''">trigger_mechanism,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="deviceType != null and deviceType != ''">device_type,</if>
+            <if test="triggeringCondition != null and triggeringCondition != ''">triggering_condition,</if>
+            <if test="controllableDevice != null and controllableDevice != ''">controllable_device,</if>
+            <if test="controlCommand != null and controlCommand != ''">control_command,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="planName != null and planName != ''">#{planName},</if>
+            <if test="eventType != null">#{eventType},</if>
+            <if test="triggerMechanism != null and triggerMechanism != ''">#{triggerMechanism},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="deviceType != null and deviceType != ''">#{deviceType},</if>
+            <if test="triggeringCondition != null and triggeringCondition != ''">#{triggeringCondition},</if>
+            <if test="controllableDevice != null and controllableDevice != ''">#{controllableDevice},</if>
+            <if test="controlCommand != null and controlCommand != ''">#{controlCommand},</if>
+        </trim>
+    </insert>
+
+    <update id="updateDcEmergencyPlans" parameterType="DcEmergencyPlans">
+        update dc_emergency_plans
+        set plan_name            = #{planName},
+            event_type           = #{eventType},
+            trigger_mechanism    = #{triggerMechanism},
+            update_time          = #{updateTime},
+            device_type          = #{deviceType},
+            triggering_condition = #{triggeringCondition},
+            controllable_device  = #{controllableDevice},
+            control_command      = #{controlCommand}
+        where id = #{id}
+    </update>
+
+    <delete id="deleteDcEmergencyPlans" parameterType="String">
+        delete from dc_emergency_plans where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    <sql id="selectDcEmergencyPlansListAll">
+        select t1.id,
+               t1.plan_name,
+               t1.event_type,
+               t1.trigger_mechanism,
+               t1.create_time,
+               t1.update_time,
+               t1.device_type,
+               t1.triggering_condition,
+               t1.controllable_device,
+               t1.control_command,
+               t2.id                 as action_id,
+               t2.emergency_plans_id as action_emergency_plans_id,
+               t2.device_type        as action_device_type,
+               t2.action_type        as action_action_type,
+               t2.create_time        as action_create_time,
+               t2.search_rule        as action_search_rule,
+               t2.`number`           as action_number,
+               t2.device_list        as action_device_list,
+               t2.other_config       as action_other_config
+        from dc_emergency_plans t1
+                 left join dc_execute_action t2
+                           on t1.id = t2.emergency_plans_id
+    </sql>
+
+    <select id="selectDcEmergencyPlansList" parameterType="DcEmergencyPlans" resultMap="DcEmergencyPlansResult">
+        select t1.id,
+               t1.plan_name,
+               t1.event_type,
+               t1.trigger_mechanism,
+               t1.create_time,
+               t1.update_time,
+               t1.device_type,
+               t1.triggering_condition,
+               t1.controllable_device,
+               t1.control_command
+        from dc_emergency_plans t1
+    </select>
+
+    <select id="selectDcEmergencyPlans" parameterType="Integer" resultMap="DcEmergencyPlansResult">
+        <include refid="selectDcEmergencyPlansListAll"/>
+        where t1.id = #{id}
+    </select>
+
+    <select id="selectDcEmergencyPlansByEventType" parameterType="dcEvent" resultMap="DcEmergencyPlansResult">
+        <include refid="selectDcEmergencyPlansListAll"/>
+        where t1.event_type = #{eventType}
+    </select>
+
+
+</mapper>
diff --git a/zc-business/src/main/resources/mapper/business/DcExecuteActionMapper.xml b/zc-business/src/main/resources/mapper/business/DcExecuteActionMapper.xml
new file mode 100644
index 00000000..2d975ec5
--- /dev/null
+++ b/zc-business/src/main/resources/mapper/business/DcExecuteActionMapper.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zc.business.mapper.DcExecuteActionMapper">
+
+
+    <insert id="insertDcExecuteActionBatch" parameterType="java.util.List">
+        insert into dc_execute_action
+
+        (emergency_plans_id,
+        device_type,
+        action_type,
+        create_time,
+        search_rule,
+        `number`,
+        device_list,
+        other_config
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+
+            (#{item.emergencyPlansId},
+            #{item.deviceType},
+            #{item.actionType},
+            #{item.createTime},
+            #{item.searchRule},
+            #{item.number},
+            #{item.deviceList},
+            #{item.otherConfig})
+
+        </foreach>
+    </insert>
+
+    <update id="updateDcExecuteActionBatch" parameterType="java.util.List">
+        update dc_execute_action
+        <trim prefix="set" suffixOverrides=",">
+            <trim prefix="emergency_plans_id =case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when id=#{item.id}
+                    then #{item.emergencyPlansId}
+                </foreach>
+            </trim>
+            <trim prefix="device_type =case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when id=#{item.id}
+                    then #{item.deviceType}
+                </foreach>
+            </trim>
+            <trim prefix="action_type =case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when id=#{item.id}
+                    then #{item.actionType}
+                </foreach>
+            </trim>
+            <trim prefix="update_time =case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when id=#{item.id}
+                    then #{item.updateTime}
+                </foreach>
+            </trim>
+            <trim prefix="search_rule =case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when id=#{item.id}
+                    then #{item.searchRule}
+                </foreach>
+            </trim>
+            <trim prefix="number =case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when id=#{item.id}
+                    then #{item.number}
+                </foreach>
+            </trim>
+            <trim prefix="device_list =case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when id=#{item.id}
+                    then #{item.deviceList}
+                </foreach>
+            </trim>
+            <trim prefix="other_config =case" suffix="end,">
+                <foreach collection="list" item="item" index="index">
+                    when id=#{item.id}
+                    then #{item.otherConfig}
+                </foreach>
+            </trim>
+        </trim>
+        where id in
+        <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
+            #{item.id}
+        </foreach>
+    </update>
+
+    <delete id="deleteDcExecuteActionByEmergencyPlansId" parameterType="String">
+        delete from dc_execute_action where emergency_plans_id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <delete id="deleteDcExecuteAction" parameterType="java.util.List">
+        delete from dc_execute_action where id in
+        <foreach item="id" collection="list" index="index" separator="," open="(" close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <select id="selectDcExecuteActionByEmergencyPlansId" parameterType="String" resultType="String">
+        select id from dc_execute_action where emergency_plans_id = #{emergencyPlansId}
+    </select>
+
+
+</mapper>