Browse Source

Merge branch 'master' of http://222.243.138.146:2000/hmy/hnyz_dcs

HMY 8 months ago
parent
commit
45949e08b7
30 changed files with 2581 additions and 32 deletions
  1. 13 13
      admin/src/main/java/com/dcs/equipment/service/ProtocolServiceFactory.java
  2. 1 1
      admin/src/main/java/com/dcs/equipment/task/ModbusTcpTask.java
  3. 52 0
      admin/src/main/java/com/dcs/hnyz/api/ApiController.java
  4. 104 0
      admin/src/main/java/com/dcs/hnyz/controller/DcsGroupTaskController.java
  5. 104 0
      admin/src/main/java/com/dcs/hnyz/controller/DcsGroupTaskLineController.java
  6. 104 0
      admin/src/main/java/com/dcs/hnyz/controller/DcsRequestTaskController.java
  7. 52 0
      admin/src/main/java/com/dcs/hnyz/domain/DcsGroupTask.java
  8. 69 0
      admin/src/main/java/com/dcs/hnyz/domain/DcsGroupTaskLine.java
  9. 58 0
      admin/src/main/java/com/dcs/hnyz/domain/DcsRequestTask.java
  10. 63 0
      admin/src/main/java/com/dcs/hnyz/mapper/DcsGroupTaskLineMapper.java
  11. 66 0
      admin/src/main/java/com/dcs/hnyz/mapper/DcsGroupTaskMapper.java
  12. 63 0
      admin/src/main/java/com/dcs/hnyz/mapper/DcsRequestTaskMapper.java
  13. 10 8
      admin/src/main/java/com/dcs/hnyz/service/IActionConfigService.java
  14. 61 0
      admin/src/main/java/com/dcs/hnyz/service/IDcsGroupTaskLineService.java
  15. 63 0
      admin/src/main/java/com/dcs/hnyz/service/IDcsGroupTaskService.java
  16. 61 0
      admin/src/main/java/com/dcs/hnyz/service/IDcsRequestTaskService.java
  17. 37 10
      admin/src/main/java/com/dcs/hnyz/service/impl/ActionConfigServiceImpl.java
  18. 96 0
      admin/src/main/java/com/dcs/hnyz/service/impl/DcsGroupTaskLineServiceImpl.java
  19. 101 0
      admin/src/main/java/com/dcs/hnyz/service/impl/DcsGroupTaskServiceImpl.java
  20. 96 0
      admin/src/main/java/com/dcs/hnyz/service/impl/DcsRequestTaskServiceImpl.java
  21. 109 0
      admin/src/main/java/com/dcs/hnyz/task/RequestGroupTask.java
  22. 132 0
      admin/src/main/resources/mapper/hnyz/DcsGroupTaskLineMapper.xml
  23. 95 0
      admin/src/main/resources/mapper/hnyz/DcsGroupTaskMapper.xml
  24. 105 0
      admin/src/main/resources/mapper/hnyz/DcsRequestTaskMapper.xml
  25. 44 0
      ui/src/api/hnyz/groupTask.js
  26. 44 0
      ui/src/api/hnyz/groupTaskLine.js
  27. 44 0
      ui/src/api/hnyz/requesttask.js
  28. 262 0
      ui/src/views/hnyz/groupTask/index.vue
  29. 193 0
      ui/src/views/hnyz/groupTask/line.vue
  30. 279 0
      ui/src/views/hnyz/requesttask/index.vue

+ 13 - 13
admin/src/main/java/com/dcs/equipment/service/ProtocolServiceFactory.java

@@ -12,34 +12,34 @@ import java.util.Map;
 /**
  * 协议服务工厂
  * 根据协议类型获取对应的服务实现
- * 
+ *
  * @author: wangpx
  * @date: 2025-07-24
  */
 @Component
 public class ProtocolServiceFactory {
-    
+
     @Autowired
     @Qualifier("modbusTcpService")
     private ProtocolService modbusTcpService;
-    
-    @Autowired
-    @Qualifier("opcUAService")
-    private ProtocolService opcUAService;
-    
+
+//    @Autowired
+//    @Qualifier("opcUAService")
+//    private ProtocolService opcUAService;
+
     @Autowired
     @Qualifier("mqttService")
     private ProtocolService mqttService;
-    
+
     private final Map<Integer, ProtocolService> serviceMap = new HashMap<>();
-    
+
     @PostConstruct
     public void init() {
         serviceMap.put(ProtocolConstants.MODBUS_TCP, modbusTcpService);
-        serviceMap.put(ProtocolConstants.OPC_UA, opcUAService);
+//        serviceMap.put(ProtocolConstants.OPC_UA, opcUAService);
         serviceMap.put(ProtocolConstants.MQTT, mqttService);
     }
-    
+
     /**
      * 根据协议类型获取对应的服务
      */
@@ -50,11 +50,11 @@ public class ProtocolServiceFactory {
         }
         return service;
     }
-    
+
     /**
      * 检查是否支持指定的协议类型
      */
     public boolean isSupported(Integer protocolType) {
         return serviceMap.containsKey(protocolType);
     }
-} 
+}

+ 1 - 1
admin/src/main/java/com/dcs/equipment/task/ModbusTcpTask.java

@@ -105,7 +105,7 @@ public class ModbusTcpTask {
 
     // 保存并广播设备数据消息
     public void saveAndBroadcastEquipmentData() {
-        updateDataToEquipmentParamFormVOList();
+//        updateDataToEquipmentParamFormVOList();
         // 广播列表设备数据
         equipmentListWebSocketServer.broadCastInfo(JSON.toJSONString(broadCastEquipmentParamFormVOList));
     }

+ 52 - 0
admin/src/main/java/com/dcs/hnyz/api/ApiController.java

@@ -0,0 +1,52 @@
+package com.dcs.hnyz.api;
+
+
+import com.dcs.common.annotation.Log;
+import com.dcs.common.core.domain.AjaxResult;
+import com.dcs.common.enums.BusinessType;
+import com.dcs.hnyz.domain.DcsRequestTask;
+import com.dcs.hnyz.service.IDcsRequestTaskService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "任务接口")
+@RestController
+@RequestMapping("/hnyz/api")
+public class ApiController {
+    @Autowired
+    private IDcsRequestTaskService requestTaskService;
+
+    @Log(title = "发送任务请求", businessType = BusinessType.INSERT)
+    @PostMapping("/requestTask")
+    @ApiOperation(value = "发送任务请求")
+    public AjaxResult requestTask(@RequestBody DcsRequestTask requestTask)
+    {
+        try {
+            int i = requestTaskService.insertDcsRequestTask(requestTask);
+            if (i == 0) {
+                throw new Exception("任务请求失败");
+            }
+            return AjaxResult.success(requestTask);
+        }catch (Exception ex){
+            return AjaxResult.success(ex.getMessage());
+        }
+    }
+
+    @Log(title = "查询任务请求", businessType = BusinessType.OTHER)
+    @PostMapping("/searchTask")
+    @ApiOperation(value = "发送任务请求")
+    public AjaxResult searchTask(@RequestBody DcsRequestTask requestTask)
+    {
+        try {
+            requestTask = requestTaskService.selectDcsRequestTaskByRequestId(requestTask.getRequestId());
+            return AjaxResult.success(requestTask);
+        }catch (Exception ex){
+            return AjaxResult.success(ex.getMessage());
+        }
+    }
+}

+ 104 - 0
admin/src/main/java/com/dcs/hnyz/controller/DcsGroupTaskController.java

@@ -0,0 +1,104 @@
+package com.dcs.hnyz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.dcs.common.annotation.Log;
+import com.dcs.common.core.controller.BaseController;
+import com.dcs.common.core.domain.AjaxResult;
+import com.dcs.common.enums.BusinessType;
+import com.dcs.hnyz.domain.DcsGroupTask;
+import com.dcs.hnyz.service.IDcsGroupTaskService;
+import com.dcs.common.utils.poi.ExcelUtil;
+import com.dcs.common.core.page.TableDataInfo;
+
+/**
+ * 任务动作组Controller
+ *
+ * @author wuhb
+ * @date 2025-08-04
+ */
+@RestController
+@RequestMapping("/hnyz/groupTask")
+public class DcsGroupTaskController extends BaseController
+{
+    @Autowired
+    private IDcsGroupTaskService dcsGroupTaskService;
+
+    /**
+     * 查询任务动作组列表
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTask:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(DcsGroupTask dcsGroupTask)
+    {
+        startPage();
+        List<DcsGroupTask> list = dcsGroupTaskService.selectDcsGroupTaskList(dcsGroupTask);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出任务动作组列表
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTask:export')")
+    @Log(title = "任务动作组", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, DcsGroupTask dcsGroupTask)
+    {
+        List<DcsGroupTask> list = dcsGroupTaskService.selectDcsGroupTaskList(dcsGroupTask);
+        ExcelUtil<DcsGroupTask> util = new ExcelUtil<DcsGroupTask>(DcsGroupTask.class);
+        util.exportExcel(response, list, "任务动作组数据");
+    }
+
+    /**
+     * 获取任务动作组详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTask:query')")
+    @GetMapping(value = "/{groupId}")
+    public AjaxResult getInfo(@PathVariable("groupId") Long groupId)
+    {
+        return success(dcsGroupTaskService.selectDcsGroupTaskByGroupId(groupId));
+    }
+
+    /**
+     * 新增任务动作组
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTask:add')")
+    @Log(title = "任务动作组", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody DcsGroupTask dcsGroupTask)
+    {
+        return toAjax(dcsGroupTaskService.insertDcsGroupTask(dcsGroupTask));
+    }
+
+    /**
+     * 修改任务动作组
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTask:edit')")
+    @Log(title = "任务动作组", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody DcsGroupTask dcsGroupTask)
+    {
+        return toAjax(dcsGroupTaskService.updateDcsGroupTask(dcsGroupTask));
+    }
+
+    /**
+     * 删除任务动作组
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTask:remove')")
+    @Log(title = "任务动作组", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{groupIds}")
+    public AjaxResult remove(@PathVariable Long[] groupIds)
+    {
+        return toAjax(dcsGroupTaskService.deleteDcsGroupTaskByGroupIds(groupIds));
+    }
+}

+ 104 - 0
admin/src/main/java/com/dcs/hnyz/controller/DcsGroupTaskLineController.java

@@ -0,0 +1,104 @@
+package com.dcs.hnyz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.dcs.common.annotation.Log;
+import com.dcs.common.core.controller.BaseController;
+import com.dcs.common.core.domain.AjaxResult;
+import com.dcs.common.enums.BusinessType;
+import com.dcs.hnyz.domain.DcsGroupTaskLine;
+import com.dcs.hnyz.service.IDcsGroupTaskLineService;
+import com.dcs.common.utils.poi.ExcelUtil;
+import com.dcs.common.core.page.TableDataInfo;
+
+/**
+ * 任务动作组明细Controller
+ *
+ * @author wuhb
+ * @date 2025-08-04
+ */
+@RestController
+@RequestMapping("/hnyz/groupTaskLine")
+public class DcsGroupTaskLineController extends BaseController
+{
+    @Autowired
+    private IDcsGroupTaskLineService dcsGroupTaskLineService;
+
+    /**
+     * 查询任务动作组明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTaskLine:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(DcsGroupTaskLine dcsGroupTaskLine)
+    {
+        startPage();
+        List<DcsGroupTaskLine> list = dcsGroupTaskLineService.selectDcsGroupTaskLineList(dcsGroupTaskLine);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出任务动作组明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTaskLine:export')")
+    @Log(title = "任务动作组明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, DcsGroupTaskLine dcsGroupTaskLine)
+    {
+        List<DcsGroupTaskLine> list = dcsGroupTaskLineService.selectDcsGroupTaskLineList(dcsGroupTaskLine);
+        ExcelUtil<DcsGroupTaskLine> util = new ExcelUtil<DcsGroupTaskLine>(DcsGroupTaskLine.class);
+        util.exportExcel(response, list, "任务动作组明细数据");
+    }
+
+    /**
+     * 获取任务动作组明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTaskLine:query')")
+    @GetMapping(value = "/{lineId}")
+    public AjaxResult getInfo(@PathVariable("lineId") Long lineId)
+    {
+        return success(dcsGroupTaskLineService.selectDcsGroupTaskLineByLineId(lineId));
+    }
+
+    /**
+     * 新增任务动作组明细
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTaskLine:add')")
+    @Log(title = "任务动作组明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody DcsGroupTaskLine dcsGroupTaskLine)
+    {
+        return toAjax(dcsGroupTaskLineService.insertDcsGroupTaskLine(dcsGroupTaskLine));
+    }
+
+    /**
+     * 修改任务动作组明细
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTaskLine:edit')")
+    @Log(title = "任务动作组明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody DcsGroupTaskLine dcsGroupTaskLine)
+    {
+        return toAjax(dcsGroupTaskLineService.updateDcsGroupTaskLine(dcsGroupTaskLine));
+    }
+
+    /**
+     * 删除任务动作组明细
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:groupTaskLine:remove')")
+    @Log(title = "任务动作组明细", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{lineIds}")
+    public AjaxResult remove(@PathVariable Long[] lineIds)
+    {
+        return toAjax(dcsGroupTaskLineService.deleteDcsGroupTaskLineByLineIds(lineIds));
+    }
+}

+ 104 - 0
admin/src/main/java/com/dcs/hnyz/controller/DcsRequestTaskController.java

@@ -0,0 +1,104 @@
+package com.dcs.hnyz.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.dcs.common.annotation.Log;
+import com.dcs.common.core.controller.BaseController;
+import com.dcs.common.core.domain.AjaxResult;
+import com.dcs.common.enums.BusinessType;
+import com.dcs.hnyz.domain.DcsRequestTask;
+import com.dcs.hnyz.service.IDcsRequestTaskService;
+import com.dcs.common.utils.poi.ExcelUtil;
+import com.dcs.common.core.page.TableDataInfo;
+
+/**
+ * 请求任务Controller
+ *
+ * @author wuhb
+ * @date 2025-08-02
+ */
+@RestController
+@RequestMapping("/hnyz/requesttask")
+public class DcsRequestTaskController extends BaseController
+{
+    @Autowired
+    private IDcsRequestTaskService dcsRequestTaskService;
+
+    /**
+     * 查询请求任务列表
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:requesttask:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(DcsRequestTask dcsRequestTask)
+    {
+        startPage();
+        List<DcsRequestTask> list = dcsRequestTaskService.selectDcsRequestTaskList(dcsRequestTask);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出请求任务列表
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:requesttask:export')")
+    @Log(title = "请求任务", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, DcsRequestTask dcsRequestTask)
+    {
+        List<DcsRequestTask> list = dcsRequestTaskService.selectDcsRequestTaskList(dcsRequestTask);
+        ExcelUtil<DcsRequestTask> util = new ExcelUtil<DcsRequestTask>(DcsRequestTask.class);
+        util.exportExcel(response, list, "请求任务数据");
+    }
+
+    /**
+     * 获取请求任务详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:requesttask:query')")
+    @GetMapping(value = "/{requestId}")
+    public AjaxResult getInfo(@PathVariable("requestId") Long requestId)
+    {
+        return success(dcsRequestTaskService.selectDcsRequestTaskByRequestId(requestId));
+    }
+
+    /**
+     * 新增请求任务
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:requesttask:add')")
+    @Log(title = "请求任务", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody DcsRequestTask dcsRequestTask)
+    {
+        return toAjax(dcsRequestTaskService.insertDcsRequestTask(dcsRequestTask));
+    }
+
+    /**
+     * 修改请求任务
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:requesttask:edit')")
+    @Log(title = "请求任务", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody DcsRequestTask dcsRequestTask)
+    {
+        return toAjax(dcsRequestTaskService.updateDcsRequestTask(dcsRequestTask));
+    }
+
+    /**
+     * 删除请求任务
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:requesttask:remove')")
+    @Log(title = "请求任务", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{requestIds}")
+    public AjaxResult remove(@PathVariable Long[] requestIds)
+    {
+        return toAjax(dcsRequestTaskService.deleteDcsRequestTaskByRequestIds(requestIds));
+    }
+}

+ 52 - 0
admin/src/main/java/com/dcs/hnyz/domain/DcsGroupTask.java

@@ -0,0 +1,52 @@
+package com.dcs.hnyz.domain;
+
+import io.swagger.models.auth.In;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.dcs.common.annotation.Excel;
+    import com.dcs.common.core.domain.BaseEntity;
+
+    import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+    import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+/**
+ * 任务动作组对象 dcs_group_task
+ *
+ * @author dcs
+ * @date 2025-08-04
+ */
+
+@Data
+@TableName("dcs_group_task")
+public class DcsGroupTask extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "group_id", type = IdType.AUTO)
+    private Long groupId;
+
+    /** 组名称 */
+    @Excel(name = "组名称")
+    @TableField(value = "group_name")
+    private String groupName;
+
+    /** 组号 */
+    @Excel(name = "组号")
+    @TableField(value = "group_code")
+    private String groupCode;
+
+    /** 启用状态(0-待执行,1-执行中) */
+    @Excel(name = "启用状态", readConverterExp = "0=-待执行,1-执行中")
+    private Integer status;
+
+    /** 删除标志(0-存在 2-删除) */
+    @TableField(value = "del_flag")
+    private String delFlag;
+
+}

+ 69 - 0
admin/src/main/java/com/dcs/hnyz/domain/DcsGroupTaskLine.java

@@ -0,0 +1,69 @@
+package com.dcs.hnyz.domain;
+
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.dcs.common.annotation.Excel;
+    import com.dcs.common.core.domain.BaseEntity;
+
+    import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+    import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+import java.util.List;
+
+/**
+ * 任务动作组明细对象 dcs_group_task_line
+ *
+ * @author dcs
+ * @date 2025-08-04
+ */
+
+@Data
+@TableName("dcs_group_task_line")
+public class DcsGroupTaskLine extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "line_id", type = IdType.AUTO)
+    private Long lineId;
+
+    /** 组ID */
+    @Excel(name = "组ID")
+    @TableField(value = "group_id")
+    private Long groupId;
+
+    /** 动作ID */
+    @Excel(name = "动作ID")
+    @TableField(value = "action_id")
+    private Long actionId;
+
+    /** 动作名称 */
+    @Excel(name = "动作名称")
+    @TableField(value = "action_name")
+    private String actionName;
+
+    /** 上组ID */
+    @Excel(name = "上组ID")
+    @TableField(value = "parent_id")
+    private Long parentId;
+
+    /** 序号 */
+    @Excel(name = "序号")
+    @TableField(value = "action_num")
+    private Integer actionNum;
+
+    /** 启用状态() */
+    @Excel(name = "启用状态", readConverterExp = "启用状态()")
+    private String status;
+
+    /** 删除标志(0-存在 2-删除) */
+    @TableField(value = "del_flag")
+    private String delFlag;
+
+    private List<ActionConfig> actionConfigList;
+}

+ 58 - 0
admin/src/main/java/com/dcs/hnyz/domain/DcsRequestTask.java

@@ -0,0 +1,58 @@
+package com.dcs.hnyz.domain;
+
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.dcs.common.annotation.Excel;
+    import com.dcs.common.core.domain.BaseEntity;
+
+    import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+    import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+/**
+ * 请求任务对象 dcs_request_task
+ *
+ * @author dcs
+ * @date 2025-08-02
+ */
+
+@Data
+@TableName("dcs_request_task")
+public class DcsRequestTask extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "request_id", type = IdType.AUTO)
+    private Long requestId;
+
+    @Excel(name = "名称")
+    @TableField(value = "request_name")
+    private String requestName;
+
+    @Excel(name = "请求编号")
+    @TableField(value = "request_code")
+    private String requestCode;
+
+    @Excel(name = "生产线")
+    @TableField(value = "line_code")
+    private String lineCode;
+
+    @Excel(name = "请求类型")
+    @TableField(value = "request_type")
+    private String requestType;
+
+    @Excel(name = "参数")
+    @TableField(value = "request_param")
+    private String requestParam;
+
+    @Excel(name = "启用状态", readConverterExp = "0=-待执行,1-执行中,2-完成,3-异常")
+    private Integer status;
+
+    @TableField(value = "del_flag")
+    private String delFlag;
+}

+ 63 - 0
admin/src/main/java/com/dcs/hnyz/mapper/DcsGroupTaskLineMapper.java

@@ -0,0 +1,63 @@
+package com.dcs.hnyz.mapper;
+
+import java.util.List;
+import com.dcs.hnyz.domain.DcsGroupTaskLine;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 任务动作组明细Mapper接口
+ *
+ * @author wuhb
+ * @date 2025-08-04
+ */
+@Mapper
+public interface DcsGroupTaskLineMapper
+{
+    /**
+     * 查询任务动作组明细
+     *
+     * @param lineId 任务动作组明细主键
+     * @return 任务动作组明细
+     */
+    public DcsGroupTaskLine selectDcsGroupTaskLineByLineId(Long lineId);
+
+    /**
+     * 查询任务动作组明细列表
+     *
+     * @param dcsGroupTaskLine 任务动作组明细
+     * @return 任务动作组明细集合
+     */
+    public List<DcsGroupTaskLine> selectDcsGroupTaskLineList(DcsGroupTaskLine dcsGroupTaskLine);
+
+    /**
+     * 新增任务动作组明细
+     *
+     * @param dcsGroupTaskLine 任务动作组明细
+     * @return 结果
+     */
+    public int insertDcsGroupTaskLine(DcsGroupTaskLine dcsGroupTaskLine);
+
+    /**
+     * 修改任务动作组明细
+     *
+     * @param dcsGroupTaskLine 任务动作组明细
+     * @return 结果
+     */
+    public int updateDcsGroupTaskLine(DcsGroupTaskLine dcsGroupTaskLine);
+
+    /**
+     * 删除任务动作组明细
+     *
+     * @param lineId 任务动作组明细主键
+     * @return 结果
+     */
+    public int deleteDcsGroupTaskLineByLineId(Long lineId);
+
+    /**
+     * 批量删除任务动作组明细
+     *
+     * @param lineIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteDcsGroupTaskLineByLineIds(Long[] lineIds);
+}

+ 66 - 0
admin/src/main/java/com/dcs/hnyz/mapper/DcsGroupTaskMapper.java

@@ -0,0 +1,66 @@
+package com.dcs.hnyz.mapper;
+
+import java.util.List;
+import com.dcs.hnyz.domain.DcsGroupTask;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 任务动作组Mapper接口
+ *
+ * @author wuhb
+ * @date 2025-08-04
+ */
+@Mapper
+public interface DcsGroupTaskMapper
+{
+    /**
+     * 查询任务动作组
+     *
+     * @param groupId 任务动作组主键
+     * @return 任务动作组
+     */
+    public DcsGroupTask selectDcsGroupTaskByGroupId(Long groupId);
+
+    /**
+     * 查询任务动作组列表
+     *
+     * @param dcsGroupTask 任务动作组
+     * @return 任务动作组集合
+     */
+    public List<DcsGroupTask> selectDcsGroupTaskList(DcsGroupTask dcsGroupTask);
+
+    /**
+     * 新增任务动作组
+     *
+     * @param dcsGroupTask 任务动作组
+     * @return 结果
+     */
+    public int insertDcsGroupTask(DcsGroupTask dcsGroupTask);
+
+    /**
+     * 修改任务动作组
+     *
+     * @param dcsGroupTask 任务动作组
+     * @return 结果
+     */
+    public int updateDcsGroupTask(DcsGroupTask dcsGroupTask);
+
+    /**
+     * 删除任务动作组
+     *
+     * @param groupId 任务动作组主键
+     * @return 结果
+     */
+    public int deleteDcsGroupTaskByGroupId(Long groupId);
+
+    /**
+     * 批量删除任务动作组
+     *
+     * @param groupIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteDcsGroupTaskByGroupIds(Long[] groupIds);
+
+
+    public DcsGroupTask selectDcsGroupTaskByGroupCode(String groupCode);
+}

+ 63 - 0
admin/src/main/java/com/dcs/hnyz/mapper/DcsRequestTaskMapper.java

@@ -0,0 +1,63 @@
+package com.dcs.hnyz.mapper;
+
+import java.util.List;
+import com.dcs.hnyz.domain.DcsRequestTask;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 请求任务Mapper接口
+ *
+ * @author wuhb
+ * @date 2025-08-02
+ */
+@Mapper
+public interface DcsRequestTaskMapper
+{
+    /**
+     * 查询请求任务
+     *
+     * @param requestId 请求任务主键
+     * @return 请求任务
+     */
+    public DcsRequestTask selectDcsRequestTaskByRequestId(Long requestId);
+
+    /**
+     * 查询请求任务列表
+     *
+     * @param dcsRequestTask 请求任务
+     * @return 请求任务集合
+     */
+    public List<DcsRequestTask> selectDcsRequestTaskList(DcsRequestTask dcsRequestTask);
+
+    /**
+     * 新增请求任务
+     *
+     * @param dcsRequestTask 请求任务
+     * @return 结果
+     */
+    public int insertDcsRequestTask(DcsRequestTask dcsRequestTask);
+
+    /**
+     * 修改请求任务
+     *
+     * @param dcsRequestTask 请求任务
+     * @return 结果
+     */
+    public int updateDcsRequestTask(DcsRequestTask dcsRequestTask);
+
+    /**
+     * 删除请求任务
+     *
+     * @param requestId 请求任务主键
+     * @return 结果
+     */
+    public int deleteDcsRequestTaskByRequestId(Long requestId);
+
+    /**
+     * 批量删除请求任务
+     *
+     * @param requestIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteDcsRequestTaskByRequestIds(Long[] requestIds);
+}

+ 10 - 8
admin/src/main/java/com/dcs/hnyz/service/IActionConfigService.java

@@ -5,15 +5,15 @@ import com.dcs.hnyz.domain.ActionConfig;
 
 /**
  * 动作配置管理Service接口
- * 
+ *
  * @author hmy
  * @date 2025-04-28
  */
-public interface IActionConfigService 
+public interface IActionConfigService
 {
     /**
      * 查询动作配置管理
-     * 
+     *
      * @param actionId 动作配置管理主键
      * @return 动作配置管理
      */
@@ -21,7 +21,7 @@ public interface IActionConfigService
 
     /**
      * 查询动作配置管理列表
-     * 
+     *
      * @param actionConfig 动作配置管理
      * @return 动作配置管理集合
      */
@@ -29,7 +29,7 @@ public interface IActionConfigService
 
     /**
      * 新增动作配置管理
-     * 
+     *
      * @param actionConfig 动作配置管理
      * @return 结果
      */
@@ -37,7 +37,7 @@ public interface IActionConfigService
 
     /**
      * 修改动作配置管理
-     * 
+     *
      * @param actionConfig 动作配置管理
      * @return 结果
      */
@@ -45,7 +45,7 @@ public interface IActionConfigService
 
     /**
      * 批量删除动作配置管理
-     * 
+     *
      * @param actionIds 需要删除的动作配置管理主键集合
      * @return 结果
      */
@@ -53,9 +53,11 @@ public interface IActionConfigService
 
     /**
      * 删除动作配置管理信息
-     * 
+     *
      * @param actionId 动作配置管理主键
      * @return 结果
      */
     public int deleteActionConfigByActionId(Long actionId);
+
+    public void triggerAction(ActionConfig actionConfig) throws Exception;
 }

+ 61 - 0
admin/src/main/java/com/dcs/hnyz/service/IDcsGroupTaskLineService.java

@@ -0,0 +1,61 @@
+package com.dcs.hnyz.service;
+
+import java.util.List;
+import com.dcs.hnyz.domain.DcsGroupTaskLine;
+
+/**
+ * 任务动作组明细Service接口
+ *
+ * @author wuhb
+ * @date 2025-08-04
+ */
+public interface IDcsGroupTaskLineService
+{
+    /**
+     * 查询任务动作组明细
+     *
+     * @param lineId 任务动作组明细主键
+     * @return 任务动作组明细
+     */
+    public DcsGroupTaskLine selectDcsGroupTaskLineByLineId(Long lineId);
+
+    /**
+     * 查询任务动作组明细列表
+     *
+     * @param dcsGroupTaskLine 任务动作组明细
+     * @return 任务动作组明细集合
+     */
+    public List<DcsGroupTaskLine> selectDcsGroupTaskLineList(DcsGroupTaskLine dcsGroupTaskLine);
+
+    /**
+     * 新增任务动作组明细
+     *
+     * @param dcsGroupTaskLine 任务动作组明细
+     * @return 结果
+     */
+    public int insertDcsGroupTaskLine(DcsGroupTaskLine dcsGroupTaskLine);
+
+    /**
+     * 修改任务动作组明细
+     *
+     * @param dcsGroupTaskLine 任务动作组明细
+     * @return 结果
+     */
+    public int updateDcsGroupTaskLine(DcsGroupTaskLine dcsGroupTaskLine);
+
+    /**
+     * 批量删除任务动作组明细
+     *
+     * @param lineIds 需要删除的任务动作组明细主键集合
+     * @return 结果
+     */
+    public int deleteDcsGroupTaskLineByLineIds(Long[] lineIds);
+
+    /**
+     * 删除任务动作组明细信息
+     *
+     * @param lineId 任务动作组明细主键
+     * @return 结果
+     */
+    public int deleteDcsGroupTaskLineByLineId(Long lineId);
+}

+ 63 - 0
admin/src/main/java/com/dcs/hnyz/service/IDcsGroupTaskService.java

@@ -0,0 +1,63 @@
+package com.dcs.hnyz.service;
+
+import java.util.List;
+import com.dcs.hnyz.domain.DcsGroupTask;
+
+/**
+ * 任务动作组Service接口
+ *
+ * @author wuhb
+ * @date 2025-08-04
+ */
+public interface IDcsGroupTaskService
+{
+    /**
+     * 查询任务动作组
+     *
+     * @param groupId 任务动作组主键
+     * @return 任务动作组
+     */
+    public DcsGroupTask selectDcsGroupTaskByGroupId(Long groupId);
+
+    /**
+     * 查询任务动作组列表
+     *
+     * @param dcsGroupTask 任务动作组
+     * @return 任务动作组集合
+     */
+    public List<DcsGroupTask> selectDcsGroupTaskList(DcsGroupTask dcsGroupTask);
+
+    /**
+     * 新增任务动作组
+     *
+     * @param dcsGroupTask 任务动作组
+     * @return 结果
+     */
+    public int insertDcsGroupTask(DcsGroupTask dcsGroupTask);
+
+    /**
+     * 修改任务动作组
+     *
+     * @param dcsGroupTask 任务动作组
+     * @return 结果
+     */
+    public int updateDcsGroupTask(DcsGroupTask dcsGroupTask);
+
+    /**
+     * 批量删除任务动作组
+     *
+     * @param groupIds 需要删除的任务动作组主键集合
+     * @return 结果
+     */
+    public int deleteDcsGroupTaskByGroupIds(Long[] groupIds);
+
+    /**
+     * 删除任务动作组信息
+     *
+     * @param groupId 任务动作组主键
+     * @return 结果
+     */
+    public int deleteDcsGroupTaskByGroupId(Long groupId);
+
+    public DcsGroupTask selectDcsGroupTaskByGroupCode(String groupCode);
+}

+ 61 - 0
admin/src/main/java/com/dcs/hnyz/service/IDcsRequestTaskService.java

@@ -0,0 +1,61 @@
+package com.dcs.hnyz.service;
+
+import java.util.List;
+import com.dcs.hnyz.domain.DcsRequestTask;
+
+/**
+ * 请求任务Service接口
+ *
+ * @author wuhb
+ * @date 2025-08-02
+ */
+public interface IDcsRequestTaskService
+{
+    /**
+     * 查询请求任务
+     *
+     * @param requestId 请求任务主键
+     * @return 请求任务
+     */
+    public DcsRequestTask selectDcsRequestTaskByRequestId(Long requestId);
+
+    /**
+     * 查询请求任务列表
+     *
+     * @param dcsRequestTask 请求任务
+     * @return 请求任务集合
+     */
+    public List<DcsRequestTask> selectDcsRequestTaskList(DcsRequestTask dcsRequestTask);
+
+    /**
+     * 新增请求任务
+     *
+     * @param dcsRequestTask 请求任务
+     * @return 结果
+     */
+    public int insertDcsRequestTask(DcsRequestTask dcsRequestTask);
+
+    /**
+     * 修改请求任务
+     *
+     * @param dcsRequestTask 请求任务
+     * @return 结果
+     */
+    public int updateDcsRequestTask(DcsRequestTask dcsRequestTask);
+
+    /**
+     * 批量删除请求任务
+     *
+     * @param requestIds 需要删除的请求任务主键集合
+     * @return 结果
+     */
+    public int deleteDcsRequestTaskByRequestIds(Long[] requestIds);
+
+    /**
+     * 删除请求任务信息
+     *
+     * @param requestId 请求任务主键
+     * @return 结果
+     */
+    public int deleteDcsRequestTaskByRequestId(Long requestId);
+}

+ 37 - 10
admin/src/main/java/com/dcs/hnyz/service/impl/ActionConfigServiceImpl.java

@@ -1,6 +1,7 @@
 package com.dcs.hnyz.service.impl;
 
 import com.dcs.common.utils.DateUtils;
+import com.dcs.equipment.exception.device.DeviceIOException;
 import com.dcs.equipment.utils.ModbusUtil;
 import com.dcs.hnyz.cache.CacheCenter;
 import com.dcs.hnyz.domain.ActionConfig;
@@ -22,6 +23,9 @@ import com.dcs.hnyz.service.IEquipmentParamService;
 import com.dcs.hnyz.cache.builder.ActionCacheBuilder;
 import com.dcs.hnyz.cache.builder.RegisterCodeMapBuilder;
 import com.dcs.hnyz.service.IEquipmentService;
+import com.intelligt.modbus.jlibmodbus.exception.ModbusIOException;
+import com.intelligt.modbus.jlibmodbus.exception.ModbusNumberException;
+import com.intelligt.modbus.jlibmodbus.exception.ModbusProtocolException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -220,7 +224,7 @@ public class ActionConfigServiceImpl implements IActionConfigService {
     }
 
 //    @Scheduled(fixedRate = 3000) // 每 3 秒执行一次
-    public void checkActions() {
+    public void checkActions(){
         Map<String, EquipmentParamFormVO> plcData = CacheCenter.registerNowDataMap;
         for (CachedAction action : actionCacheBuilder.getCache().values()) {
             ActionConfig actionConfig = action.getActionConfig();//动作配置
@@ -267,17 +271,39 @@ public class ActionConfigServiceImpl implements IActionConfigService {
      *
      * @param actionConfig 动作配置
      */
-    private void triggerActionDelay(ActionConfig actionConfig) {
+    private void triggerActionDelay(ActionConfig actionConfig){
         //延时处理
-        if (actionConfig.getTriggerDelay() > 0) {
-            scheduler.schedule(() -> {
-                log.info("延时动作执行:ID={}", actionConfig.getActionId());
+        try {
+            if (actionConfig.getTriggerDelay() > 0) {
+                scheduler.schedule(() -> {
+                    log.info("延时动作执行:ID={}", actionConfig.getActionId());
+                    try {
+                        executeAction(actionConfig);
+                    }catch (Exception ex){
+                        log.error("动作执行异常", ex);
+                    }
+                }, actionConfig.getTriggerDelay(), TimeUnit.SECONDS);
+            } else {
+                log.info("动作执行:ID={}", actionConfig.getActionId());
                 executeAction(actionConfig);
-            }, actionConfig.getTriggerDelay(), TimeUnit.SECONDS);
-        } else {
-            log.info("动作执行:ID={}", actionConfig.getActionId());
-            executeAction(actionConfig);
+            }
+        }catch (Exception ex){
+            log.error("动作执行异常", ex);
+        }
+    }
+
+    /**
+     * 延时处理
+     *
+     * @param actionConfig 动作配置
+     */
+    public void triggerAction(ActionConfig actionConfig) throws Exception {
+        //延时处理
+        log.info("动作执行:ID={}", actionConfig.getActionId());
+        if (actionConfig.getTriggerDelay() > 0) {
+            TimeUnit.SECONDS.sleep(actionConfig.getTriggerDelay());
         }
+        executeAction(actionConfig);
     }
 
 
@@ -286,7 +312,7 @@ public class ActionConfigServiceImpl implements IActionConfigService {
      *
      * @param actionConfig 动作配置
      */
-    public void executeAction(ActionConfig actionConfig) {
+    public void executeAction(ActionConfig actionConfig) throws ModbusProtocolException, ModbusNumberException, DeviceIOException, ModbusIOException {
         //动作执行对应寄存器的code
         Equipment equipment = equipmentService.selectEquipmentByEquipmentId(actionConfig.getEquipmentId());
         EquipmentParam ep=equipmentParamService.getMainSetParam(equipment.getCode());
@@ -345,6 +371,7 @@ public class ActionConfigServiceImpl implements IActionConfigService {
         } catch (Exception e) {
             log.error("执行动作失败,类型={},寄存器地址={},值={},异常信息:{}",
                     type, address, actionConfig.getValue(), e.getMessage(), e);
+            throw e;
         }
     }
 

+ 96 - 0
admin/src/main/java/com/dcs/hnyz/service/impl/DcsGroupTaskLineServiceImpl.java

@@ -0,0 +1,96 @@
+package com.dcs.hnyz.service.impl;
+
+import java.util.List;
+import com.dcs.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dcs.hnyz.mapper.DcsGroupTaskLineMapper;
+import com.dcs.hnyz.domain.DcsGroupTaskLine;
+import com.dcs.hnyz.service.IDcsGroupTaskLineService;
+
+/**
+ * 任务动作组明细Service业务层处理
+ *
+ * @author wuhb
+ * @date 2025-08-04
+ */
+@Service
+public class DcsGroupTaskLineServiceImpl implements IDcsGroupTaskLineService
+{
+    @Autowired
+    private DcsGroupTaskLineMapper dcsGroupTaskLineMapper;
+
+    /**
+     * 查询任务动作组明细
+     *
+     * @param lineId 任务动作组明细主键
+     * @return 任务动作组明细
+     */
+    @Override
+    public DcsGroupTaskLine selectDcsGroupTaskLineByLineId(Long lineId)
+    {
+        return dcsGroupTaskLineMapper.selectDcsGroupTaskLineByLineId(lineId);
+    }
+
+    /**
+     * 查询任务动作组明细列表
+     *
+     * @param dcsGroupTaskLine 任务动作组明细
+     * @return 任务动作组明细
+     */
+    @Override
+    public List<DcsGroupTaskLine> selectDcsGroupTaskLineList(DcsGroupTaskLine dcsGroupTaskLine)
+    {
+        return dcsGroupTaskLineMapper.selectDcsGroupTaskLineList(dcsGroupTaskLine);
+    }
+
+    /**
+     * 新增任务动作组明细
+     *
+     * @param dcsGroupTaskLine 任务动作组明细
+     * @return 结果
+     */
+    @Override
+    public int insertDcsGroupTaskLine(DcsGroupTaskLine dcsGroupTaskLine)
+    {
+        dcsGroupTaskLine.setCreateTime(DateUtils.getNowDate());
+        return dcsGroupTaskLineMapper.insertDcsGroupTaskLine(dcsGroupTaskLine);
+    }
+
+    /**
+     * 修改任务动作组明细
+     *
+     * @param dcsGroupTaskLine 任务动作组明细
+     * @return 结果
+     */
+    @Override
+    public int updateDcsGroupTaskLine(DcsGroupTaskLine dcsGroupTaskLine)
+    {
+        dcsGroupTaskLine.setUpdateTime(DateUtils.getNowDate());
+        return dcsGroupTaskLineMapper.updateDcsGroupTaskLine(dcsGroupTaskLine);
+    }
+
+    /**
+     * 批量删除任务动作组明细
+     *
+     * @param lineIds 需要删除的任务动作组明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDcsGroupTaskLineByLineIds(Long[] lineIds)
+    {
+        return dcsGroupTaskLineMapper.deleteDcsGroupTaskLineByLineIds(lineIds);
+    }
+
+    /**
+     * 删除任务动作组明细信息
+     *
+     * @param lineId 任务动作组明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDcsGroupTaskLineByLineId(Long lineId)
+    {
+        return dcsGroupTaskLineMapper.deleteDcsGroupTaskLineByLineId(lineId);
+    }
+}

+ 101 - 0
admin/src/main/java/com/dcs/hnyz/service/impl/DcsGroupTaskServiceImpl.java

@@ -0,0 +1,101 @@
+package com.dcs.hnyz.service.impl;
+
+import java.util.List;
+import com.dcs.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dcs.hnyz.mapper.DcsGroupTaskMapper;
+import com.dcs.hnyz.domain.DcsGroupTask;
+import com.dcs.hnyz.service.IDcsGroupTaskService;
+
+/**
+ * 任务动作组Service业务层处理
+ *
+ * @author wuhb
+ * @date 2025-08-04
+ */
+@Service
+public class DcsGroupTaskServiceImpl implements IDcsGroupTaskService
+{
+    @Autowired
+    private DcsGroupTaskMapper dcsGroupTaskMapper;
+
+    /**
+     * 查询任务动作组
+     *
+     * @param groupId 任务动作组主键
+     * @return 任务动作组
+     */
+    @Override
+    public DcsGroupTask selectDcsGroupTaskByGroupId(Long groupId)
+    {
+        return dcsGroupTaskMapper.selectDcsGroupTaskByGroupId(groupId);
+    }
+
+    /**
+     * 查询任务动作组列表
+     *
+     * @param dcsGroupTask 任务动作组
+     * @return 任务动作组
+     */
+    @Override
+    public List<DcsGroupTask> selectDcsGroupTaskList(DcsGroupTask dcsGroupTask)
+    {
+        return dcsGroupTaskMapper.selectDcsGroupTaskList(dcsGroupTask);
+    }
+
+    /**
+     * 新增任务动作组
+     *
+     * @param dcsGroupTask 任务动作组
+     * @return 结果
+     */
+    @Override
+    public int insertDcsGroupTask(DcsGroupTask dcsGroupTask)
+    {
+        dcsGroupTask.setCreateTime(DateUtils.getNowDate());
+        return dcsGroupTaskMapper.insertDcsGroupTask(dcsGroupTask);
+    }
+
+    /**
+     * 修改任务动作组
+     *
+     * @param dcsGroupTask 任务动作组
+     * @return 结果
+     */
+    @Override
+    public int updateDcsGroupTask(DcsGroupTask dcsGroupTask)
+    {
+        dcsGroupTask.setUpdateTime(DateUtils.getNowDate());
+        return dcsGroupTaskMapper.updateDcsGroupTask(dcsGroupTask);
+    }
+
+    /**
+     * 批量删除任务动作组
+     *
+     * @param groupIds 需要删除的任务动作组主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDcsGroupTaskByGroupIds(Long[] groupIds)
+    {
+        return dcsGroupTaskMapper.deleteDcsGroupTaskByGroupIds(groupIds);
+    }
+
+    /**
+     * 删除任务动作组信息
+     *
+     * @param groupId 任务动作组主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDcsGroupTaskByGroupId(Long groupId)
+    {
+        return dcsGroupTaskMapper.deleteDcsGroupTaskByGroupId(groupId);
+    }
+
+    @Override
+    public DcsGroupTask selectDcsGroupTaskByGroupCode(String groupCode) {
+        return dcsGroupTaskMapper.selectDcsGroupTaskByGroupCode(groupCode);
+    }
+}

+ 96 - 0
admin/src/main/java/com/dcs/hnyz/service/impl/DcsRequestTaskServiceImpl.java

@@ -0,0 +1,96 @@
+package com.dcs.hnyz.service.impl;
+
+import java.util.List;
+import com.dcs.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dcs.hnyz.mapper.DcsRequestTaskMapper;
+import com.dcs.hnyz.domain.DcsRequestTask;
+import com.dcs.hnyz.service.IDcsRequestTaskService;
+
+/**
+ * 请求任务Service业务层处理
+ *
+ * @author wuhb
+ * @date 2025-08-02
+ */
+@Service
+public class DcsRequestTaskServiceImpl implements IDcsRequestTaskService
+{
+    @Autowired
+    private DcsRequestTaskMapper dcsRequestTaskMapper;
+
+    /**
+     * 查询请求任务
+     *
+     * @param requestId 请求任务主键
+     * @return 请求任务
+     */
+    @Override
+    public DcsRequestTask selectDcsRequestTaskByRequestId(Long requestId)
+    {
+        return dcsRequestTaskMapper.selectDcsRequestTaskByRequestId(requestId);
+    }
+
+    /**
+     * 查询请求任务列表
+     *
+     * @param dcsRequestTask 请求任务
+     * @return 请求任务
+     */
+    @Override
+    public List<DcsRequestTask> selectDcsRequestTaskList(DcsRequestTask dcsRequestTask)
+    {
+        return dcsRequestTaskMapper.selectDcsRequestTaskList(dcsRequestTask);
+    }
+
+    /**
+     * 新增请求任务
+     *
+     * @param dcsRequestTask 请求任务
+     * @return 结果
+     */
+    @Override
+    public int insertDcsRequestTask(DcsRequestTask dcsRequestTask)
+    {
+        dcsRequestTask.setCreateTime(DateUtils.getNowDate());
+        return dcsRequestTaskMapper.insertDcsRequestTask(dcsRequestTask);
+    }
+
+    /**
+     * 修改请求任务
+     *
+     * @param dcsRequestTask 请求任务
+     * @return 结果
+     */
+    @Override
+    public int updateDcsRequestTask(DcsRequestTask dcsRequestTask)
+    {
+        dcsRequestTask.setUpdateTime(DateUtils.getNowDate());
+        return dcsRequestTaskMapper.updateDcsRequestTask(dcsRequestTask);
+    }
+
+    /**
+     * 批量删除请求任务
+     *
+     * @param requestIds 需要删除的请求任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDcsRequestTaskByRequestIds(Long[] requestIds)
+    {
+        return dcsRequestTaskMapper.deleteDcsRequestTaskByRequestIds(requestIds);
+    }
+
+    /**
+     * 删除请求任务信息
+     *
+     * @param requestId 请求任务主键
+     * @return 结果
+     */
+    @Override
+    public int deleteDcsRequestTaskByRequestId(Long requestId)
+    {
+        return dcsRequestTaskMapper.deleteDcsRequestTaskByRequestId(requestId);
+    }
+}

+ 109 - 0
admin/src/main/java/com/dcs/hnyz/task/RequestGroupTask.java

@@ -0,0 +1,109 @@
+package com.dcs.hnyz.task;
+
+import com.dcs.hnyz.domain.ActionConfig;
+import com.dcs.hnyz.domain.DcsGroupTask;
+import com.dcs.hnyz.domain.DcsGroupTaskLine;
+import com.dcs.hnyz.domain.DcsRequestTask;
+import com.dcs.hnyz.service.IDcsGroupTaskLineService;
+import com.dcs.hnyz.service.IDcsGroupTaskService;
+import com.dcs.hnyz.service.IDcsRequestTaskService;
+import com.dcs.hnyz.service.impl.ActionConfigServiceImpl;
+import org.apache.poi.ss.formula.functions.T;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+@EnableScheduling
+@Component("RequestGroupTask")
+public class RequestGroupTask {
+    public static final Logger log = LoggerFactory.getLogger(RequestGroupTask.class);
+
+    @Autowired
+    private IDcsRequestTaskService requestTaskService;
+    @Autowired
+    private IDcsGroupTaskService groupTaskService;
+    @Autowired
+    private IDcsGroupTaskLineService groupTaskLineService;
+    @Autowired
+    private ActionConfigServiceImpl actionConfigService;
+    public static Map<String, Thread> groupTaskThreadMap = new HashMap<>();
+
+
+    @Scheduled(fixedDelay=5000)
+    public void run(){
+        DcsRequestTask requestTask = new DcsRequestTask();
+        requestTask.setStatus(0);
+        List<DcsRequestTask> requestTaskList = requestTaskService.selectDcsRequestTaskList(requestTask);
+        requestTaskList.forEach(item->{
+            Thread thread = groupTaskThreadMap.get(item.getLineCode());
+            if (thread != null && thread.isAlive()) {
+                return;
+            }
+            thread = new Thread(()->{
+                runGroup(item);
+                groupTaskThreadMap.remove(item.getLineCode());
+            });
+            thread.start();
+            groupTaskThreadMap.put(item.getLineCode(), thread);
+        });
+    }
+
+    private void runGroup(DcsRequestTask requestTask){
+        String requestCode = requestTask.getRequestCode();
+        try {
+            log.info("====== 开始执行任务组:" + requestCode);
+            updateTask(requestTask.getRequestId(), "开始执行", 1);
+            DcsGroupTask groupTask = groupTaskService.selectDcsGroupTaskByGroupCode(requestCode);
+            if (groupTask == null) {
+                log.error(requestCode + ",组任务不存在");
+                updateTask(requestTask.getRequestId(), "组任务已禁用", 3);
+                return;
+            }
+            if (groupTask.getStatus() == 1) {
+                log.error(requestCode + ",组任务已禁用");
+                updateTask(requestTask.getRequestId(), "组任务已禁用", 3);
+                return;
+            }
+            if (groupTask.getStatus() == 0) {
+                runGroupAction(groupTask);
+                updateTask(requestTask.getRequestId(), "已完成", 2);
+            }
+        }catch (Exception ex){
+            log.error("执行"+requestCode+"组动作异常:", ex);
+            updateTask(requestTask.getRequestId(), ex.getMessage(), 3);
+        }
+    }
+
+    private void runGroupAction(DcsGroupTask groupTask) throws Exception {
+        DcsGroupTaskLine groupTaskLine = new DcsGroupTaskLine();
+        groupTaskLine.setGroupId(groupTask.getGroupId());
+        List<DcsGroupTaskLine> groupTaskLineList = groupTaskLineService.selectDcsGroupTaskLineList(groupTaskLine);
+        for(DcsGroupTaskLine line:groupTaskLineList){
+            List<ActionConfig> actionConfigList = line.getActionConfigList();
+            if(actionConfigList == null){
+                throw new Exception(line.getActionName() + "不存在");
+            }
+            for (ActionConfig actionConfig:actionConfigList) {
+                actionConfigService.triggerAction(actionConfig);
+            }
+        }
+    }
+
+    private void updateTask(long id, String rs, int status){
+        DcsRequestTask requestTask = new DcsRequestTask();
+        requestTask.setRequestId(id);
+        requestTask.setRemark(rs);
+        requestTask.setStatus(status);
+        requestTaskService.updateDcsRequestTask(requestTask);
+    }
+}

+ 132 - 0
admin/src/main/resources/mapper/hnyz/DcsGroupTaskLineMapper.xml

@@ -0,0 +1,132 @@
+<?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.dcs.hnyz.mapper.DcsGroupTaskLineMapper">
+
+    <resultMap type="DcsGroupTaskLine" id="DcsGroupTaskLineResult">
+        <result property="lineId"    column="line_id"    />
+        <result property="groupId"    column="group_id"    />
+        <result property="actionId"    column="action_id"    />
+        <result property="actionName"    column="action_name"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="actionNum"    column="action_num"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <resultMap id="GroupTaskLineActionConfigResult" type="DcsGroupTaskLine" extends="DcsGroupTaskLineResult">
+        <collection property="actionConfigList" notNullColumn="action_id" javaType="java.util.List" resultMap="ActionConfigResult" />
+    </resultMap>
+
+    <resultMap type="ActionConfig" id="ActionConfigResult">
+        <result property="actionId"    column="sub_action_id"    />
+        <result property="equipmentId"    column="sub_equipment_id"    />
+        <result property="actionType"    column="sub_action_type"    />
+        <result property="value"    column="sub_value"    />
+        <result property="unit"    column="sub_unit"    />
+        <result property="triggerType"    column="sub_trigger_type"    />
+        <result property="triggerCondition"    column="sub_trigger_condition"    />
+        <result property="triggerDelay"    column="sub_trigger_delay"    />
+        <result property="status"    column="sub_status"    />
+        <result property="createBy"    column="sub_create_by"    />
+        <result property="createTime"    column="sub_create_time"    />
+        <result property="updateBy"    column="sub_update_by"    />
+        <result property="updateTime"    column="sub_update_time"    />
+        <result property="remark"    column="sub_remark"    />
+    </resultMap>
+
+    <sql id="selectDcsGroupTaskLineVo">
+        select gl.line_id, gl.group_id, gl.action_id, gl.action_name, gl.parent_id, gl.action_num, gl.status, gl.del_flag, gl.create_by, gl.update_by, gl.create_time, gl.update_time, gl.remark
+        ,ac.equipment_id as sub_equipment_id,ac.action_type as sub_action_type,ac.value as sub_value,ac.unit as sub_unit,ac.trigger_type as sub_trigger_type
+        ,ac.trigger_condition as sub_trigger_condition,ac.trigger_delay as sub_trigger_delay,ac.status as sub_status,ac.create_by as sub_create_by,ac.create_time as sub_create_time
+        ,ac.update_by as sub_update_by,ac.update_time as sub_update_time,ac.remark as sub_remark
+        from dcs_group_task_line gl
+        left join action_config ac on ac.action_id = gl.action_id
+    </sql>
+
+    <select id="selectDcsGroupTaskLineList" parameterType="DcsGroupTaskLine" resultMap="GroupTaskLineActionConfigResult">
+        <include refid="selectDcsGroupTaskLineVo"/>
+        <where>
+            <if test="groupId != null "> and gl.group_id = #{groupId}</if>
+            <if test="actionId != null "> and gl.action_id = #{actionId}</if>
+            <if test="actionName != null  and actionName != ''"> and gl.action_name like concat('%', #{actionName}, '%')</if>
+            <if test="parentId != null "> and gl.parent_id = #{parentId}</if>
+            <if test="actionNum != null "> and gl.action_num = #{actionNum}</if>
+            <if test="status != null"> and gl.status = #{status}</if>
+        </where>
+        order by gl.action_num
+    </select>
+
+    <select id="selectDcsGroupTaskLineByLineId" parameterType="Long" resultMap="DcsGroupTaskLineResult">
+        <include refid="selectDcsGroupTaskLineVo"/>
+        where gl.line_id = #{lineId}
+    </select>
+
+    <insert id="insertDcsGroupTaskLine" parameterType="DcsGroupTaskLine" useGeneratedKeys="true" keyProperty="lineId">
+        insert into dcs_group_task_line
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="groupId != null">group_id,</if>
+            <if test="actionId != null">action_id,</if>
+            <if test="actionName != null">action_name,</if>
+            <if test="parentId != null">parent_id,</if>
+            <if test="actionNum != null">action_num,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="groupId != null">#{groupId},</if>
+            <if test="actionId != null">#{actionId},</if>
+            <if test="actionName != null">#{actionName},</if>
+            <if test="parentId != null">#{parentId},</if>
+            <if test="actionNum != null">#{actionNum},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateDcsGroupTaskLine" parameterType="DcsGroupTaskLine">
+        update dcs_group_task_line
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="groupId != null">group_id = #{groupId},</if>
+            <if test="actionId != null">action_id = #{actionId},</if>
+            <if test="actionName != null">action_name = #{actionName},</if>
+            <if test="parentId != null">parent_id = #{parentId},</if>
+            <if test="actionNum != null">action_num = #{actionNum},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where line_id = #{lineId}
+    </update>
+
+    <delete id="deleteDcsGroupTaskLineByLineId" parameterType="Long">
+        delete from dcs_group_task_line where line_id = #{lineId}
+    </delete>
+
+    <delete id="deleteDcsGroupTaskLineByLineIds" parameterType="String">
+        delete from dcs_group_task_line where line_id in
+        <foreach item="lineId" collection="array" open="(" separator="," close=")">
+            #{lineId}
+        </foreach>
+    </delete>
+</mapper>

+ 95 - 0
admin/src/main/resources/mapper/hnyz/DcsGroupTaskMapper.xml

@@ -0,0 +1,95 @@
+<?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.dcs.hnyz.mapper.DcsGroupTaskMapper">
+
+    <resultMap type="DcsGroupTask" id="DcsGroupTaskResult">
+        <result property="groupId"    column="group_id"    />
+        <result property="groupName"    column="group_name"    />
+        <result property="groupCode"    column="group_code"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectDcsGroupTaskVo">
+        select group_id, group_name, group_code, status, del_flag, create_by, update_by, create_time, update_time, remark from dcs_group_task
+    </sql>
+
+    <select id="selectDcsGroupTaskList" parameterType="DcsGroupTask" resultMap="DcsGroupTaskResult">
+        <include refid="selectDcsGroupTaskVo"/>
+        <where>
+            <if test="groupName != null  and groupName != ''"> and group_name like concat('%', #{groupName}, '%')</if>
+            <if test="groupCode != null  and groupCode != ''"> and group_code = #{groupCode}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+        </where>
+    </select>
+
+    <select id="selectDcsGroupTaskByGroupId" parameterType="Long" resultMap="DcsGroupTaskResult">
+        <include refid="selectDcsGroupTaskVo"/>
+        where group_id = #{groupId}
+    </select>
+
+    <select id="selectDcsGroupTaskByGroupCode" parameterType="string" resultMap="DcsGroupTaskResult">
+        <include refid="selectDcsGroupTaskVo"/>
+        where group_code = #{groupCode}
+    </select>
+
+    <insert id="insertDcsGroupTask" parameterType="DcsGroupTask" useGeneratedKeys="true" keyProperty="groupId">
+        insert into dcs_group_task
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="groupName != null">group_name,</if>
+            <if test="groupCode != null">group_code,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="groupName != null">#{groupName},</if>
+            <if test="groupCode != null">#{groupCode},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateDcsGroupTask" parameterType="DcsGroupTask">
+        update dcs_group_task
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="groupName != null">group_name = #{groupName},</if>
+            <if test="groupCode != null">group_code = #{groupCode},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where group_id = #{groupId}
+    </update>
+
+    <delete id="deleteDcsGroupTaskByGroupId" parameterType="Long">
+        delete from dcs_group_task where group_id = #{groupId}
+    </delete>
+
+    <delete id="deleteDcsGroupTaskByGroupIds" parameterType="String">
+        delete from dcs_group_task where group_id in
+        <foreach item="groupId" collection="array" open="(" separator="," close=")">
+            #{groupId}
+        </foreach>
+    </delete>
+</mapper>

+ 105 - 0
admin/src/main/resources/mapper/hnyz/DcsRequestTaskMapper.xml

@@ -0,0 +1,105 @@
+<?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.dcs.hnyz.mapper.DcsRequestTaskMapper">
+
+    <resultMap type="DcsRequestTask" id="DcsRequestTaskResult">
+        <result property="requestId"    column="request_id"    />
+        <result property="requestName"    column="request_name"    />
+        <result property="requestCode"    column="request_code"    />
+        <result property="lineCode"    column="line_code"    />
+        <result property="requestType"    column="request_type"    />
+        <result property="requestParam"    column="request_param"    />
+        <result property="status"    column="status"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectDcsRequestTaskVo">
+        select request_id, request_name, request_code, line_code, request_type, request_param, status, del_flag, create_by, update_by, create_time, update_time, remark from dcs_request_task
+    </sql>
+
+    <select id="selectDcsRequestTaskList" parameterType="DcsRequestTask" resultMap="DcsRequestTaskResult">
+        <include refid="selectDcsRequestTaskVo"/>
+        <where>
+            <if test="requestName != null  and requestName != ''"> and request_name like concat('%', #{requestName}, '%')</if>
+            <if test="requestCode != null  and requestCode != ''"> and request_code = #{requestCode}</if>
+            <if test="lineCode != null  and lineCode != ''"> and line_code = #{lineCode}</if>
+            <if test="requestType != null  and requestType != ''"> and request_type = #{requestType}</if>
+            <if test="requestParam != null  and requestParam != ''"> and request_param = #{requestParam}</if>
+            <if test="status != null"> and status = #{status}</if>
+        </where>
+    </select>
+
+    <select id="selectDcsRequestTaskByRequestId" parameterType="Long" resultMap="DcsRequestTaskResult">
+        <include refid="selectDcsRequestTaskVo"/>
+        where request_id = #{requestId}
+    </select>
+
+    <insert id="insertDcsRequestTask" parameterType="DcsRequestTask" useGeneratedKeys="true" keyProperty="requestId">
+        insert into dcs_request_task
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="requestName != null">request_name,</if>
+            <if test="requestCode != null">request_code,</if>
+            <if test="lineCode != null">line_code,</if>
+            <if test="requestType != null">request_type,</if>
+            <if test="requestParam != null">request_param,</if>
+            <if test="status != null">status,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="requestName != null">#{requestName},</if>
+            <if test="requestCode != null">#{requestCode},</if>
+            <if test="lineCode != null">#{lineCode},</if>
+            <if test="requestType != null">#{requestType},</if>
+            <if test="requestParam != null">#{requestParam},</if>
+            <if test="status != null">#{status},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateDcsRequestTask" parameterType="DcsRequestTask">
+        update dcs_request_task
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="requestName != null">request_name = #{requestName},</if>
+            <if test="requestCode != null">request_code = #{requestCode},</if>
+            <if test="lineCode != null"> and line_code = #{lineCode},</if>
+            <if test="requestType != null">request_type = #{requestType},</if>
+            <if test="requestParam != null">request_param = #{requestParam},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where request_id = #{requestId}
+    </update>
+
+    <delete id="deleteDcsRequestTaskByRequestId" parameterType="Long">
+        delete from dcs_request_task where request_id = #{requestId}
+    </delete>
+
+    <delete id="deleteDcsRequestTaskByRequestIds" parameterType="String">
+        delete from dcs_request_task where request_id in
+        <foreach item="requestId" collection="array" open="(" separator="," close=")">
+            #{requestId}
+        </foreach>
+    </delete>
+</mapper>

+ 44 - 0
ui/src/api/hnyz/groupTask.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询任务动作组列表
+export function listGroupTask(query) {
+  return request({
+    url: '/hnyz/groupTask/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询任务动作组详细
+export function getGroupTask(groupId) {
+  return request({
+    url: '/hnyz/groupTask/' + groupId,
+    method: 'get'
+  })
+}
+
+// 新增任务动作组
+export function addGroupTask(data) {
+  return request({
+    url: '/hnyz/groupTask',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改任务动作组
+export function updateGroupTask(data) {
+  return request({
+    url: '/hnyz/groupTask',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除任务动作组
+export function delGroupTask(groupId) {
+  return request({
+    url: '/hnyz/groupTask/' + groupId,
+    method: 'delete'
+  })
+}

+ 44 - 0
ui/src/api/hnyz/groupTaskLine.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询任务动作组明细列表
+export function listGroupTaskLine(query) {
+  return request({
+    url: '/hnyz/groupTaskLine/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询任务动作组明细详细
+export function getGroupTaskLine(lineId) {
+  return request({
+    url: '/hnyz/groupTaskLine/' + lineId,
+    method: 'get'
+  })
+}
+
+// 新增任务动作组明细
+export function addGroupTaskLine(data) {
+  return request({
+    url: '/hnyz/groupTaskLine',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改任务动作组明细
+export function updateGroupTaskLine(data) {
+  return request({
+    url: '/hnyz/groupTaskLine',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除任务动作组明细
+export function delGroupTaskLine(lineId) {
+  return request({
+    url: '/hnyz/groupTaskLine/' + lineId,
+    method: 'delete'
+  })
+}

+ 44 - 0
ui/src/api/hnyz/requesttask.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询请求任务列表
+export function listRequesttask(query) {
+  return request({
+    url: '/hnyz/requesttask/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询请求任务详细
+export function getRequesttask(requestId) {
+  return request({
+    url: '/hnyz/requesttask/' + requestId,
+    method: 'get'
+  })
+}
+
+// 新增请求任务
+export function addRequesttask(data) {
+  return request({
+    url: '/hnyz/requesttask',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改请求任务
+export function updateRequesttask(data) {
+  return request({
+    url: '/hnyz/requesttask',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除请求任务
+export function delRequesttask(requestId) {
+  return request({
+    url: '/hnyz/requesttask/' + requestId,
+    method: 'delete'
+  })
+}

+ 262 - 0
ui/src/views/hnyz/groupTask/index.vue

@@ -0,0 +1,262 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="组名称" prop="groupName">
+        <el-input
+          v-model="queryParams.groupName"
+          placeholder="请输入组名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="组号" prop="groupCode">
+        <el-input
+          v-model="queryParams.groupCode"
+          placeholder="请输入组号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['groupTask:groupTask:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['groupTask:groupTask:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['groupTask:groupTask:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['groupTask:groupTask:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="groupTaskList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="组名称" align="center" prop="groupName" />
+      <el-table-column label="组号" align="center" prop="groupCode" />
+      <el-table-column label="启用状态" align="center" prop="status" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['groupTask:groupTask:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['groupTask:groupTask:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改任务动作组对话框 -->
+    <el-dialog :title="title" v-model="open" width="60%" append-to-body>
+      <el-form ref="groupTaskRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="组名称" prop="groupName">
+          <el-input v-model="form.groupName" placeholder="请输入组名称" />
+        </el-form-item>
+        <el-form-item label="组号" prop="groupCode">
+          <el-input v-model="form.groupCode" placeholder="请输入组号" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <el-divider content-position="center">动作信息</el-divider> 
+      <el-card shadow="always" class="box-card">
+        <RroupTaskLine :key="commonKey" ref="groupTaskLine" :groupTask="form"></RroupTaskLine>
+      </el-card>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="GroupTask">
+import { listGroupTask, getGroupTask, delGroupTask, addGroupTask, updateGroupTask } from "@/api/hnyz/groupTask";
+import RroupTaskLine from "./line.vue";
+
+const { proxy } = getCurrentInstance();
+
+const groupTaskList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+const commonKey = ref(0); // 用于强制刷新子组件
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    groupName: null,
+    groupCode: null,
+    status: null,
+  },
+  rules: {
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询任务动作组列表 */
+function getList() {
+  loading.value = true;
+  listGroupTask(queryParams.value).then(response => {
+    groupTaskList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    groupId: null,
+    groupName: null,
+    groupCode: null,
+    status: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null,
+    createTime: null,
+    updateTime: null,
+    remark: null
+  };
+  proxy.resetForm("groupTaskRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.groupId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加任务动作组";
+  form.value.groupId = -1; // 确保新增时groupId为null
+  commonKey.value ++;
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset();
+  const _groupId = row.groupId || ids.value
+  getGroupTask(_groupId).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改任务动作组";
+    commonKey.value ++;
+  });
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["groupTaskRef"].validate(valid => {
+    if (valid) {
+      if (form.value.groupId != null) {
+        updateGroupTask(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addGroupTask(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _groupIds = row.groupId || ids.value;
+  proxy.$modal.confirm('是否确认删除任务动作组编号为"' + _groupIds + '"的数据项?').then(function() {
+    return delGroupTask(_groupIds);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('groupTask/groupTask/export', {
+    ...queryParams.value
+  }, `groupTask_${new Date().getTime()}.xlsx`)
+}
+
+getList();
+</script>

+ 193 - 0
ui/src/views/hnyz/groupTask/line.vue

@@ -0,0 +1,193 @@
+<template>
+  <div class="app-container">
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['groupTaskLine:groupTaskLine:add']"
+        >添加</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['groupTaskLine:groupTaskLine:remove']"
+        >删除</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="groupTaskLineList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="动作名称" align="center" prop="actionName" />
+      <el-table-column label="上级动作" align="center" prop="parentId" />
+      <el-table-column label="设备名称" align="center" prop="equipment" />
+      <el-table-column label="序号" align="center" prop="actionNum" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['groupTaskLine:groupTaskLine:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script setup name="GroupTaskLine">
+import { listGroupTaskLine, getGroupTaskLine, delGroupTaskLine, addGroupTaskLine, updateGroupTaskLine } from "@/api/hnyz/groupTaskLine";
+import { defineProps, defineEmits } from 'vue'
+
+const { proxy } = getCurrentInstance();
+
+const groupTaskLineList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    groupId: null,
+    actionId: null,
+    actionName: null,
+    parentId: null,
+    actionNum: null,
+    status: null,
+  },
+  rules: {
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+const props = defineProps({
+    groupTask: Object
+})
+
+/** 查询任务动作组明细列表 */
+function getList() {
+  loading.value = true;
+  queryParams.value.groupId = props.groupTask.groupId;
+  listGroupTaskLine(queryParams.value).then(response => {
+    groupTaskLineList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    lineId: null,
+    groupId: null,
+    actionId: null,
+    actionName: null,
+    parentId: null,
+    actionNum: null,
+    status: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null,
+    createTime: null,
+    updateTime: null,
+    remark: null
+  };
+  proxy.resetForm("groupTaskLineRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.lineId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加任务动作组明细";
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset();
+  const _lineId = row.lineId || ids.value
+  getGroupTaskLine(_lineId).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改任务动作组明细";
+  });
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["groupTaskLineRef"].validate(valid => {
+    if (valid) {
+      if (form.value.lineId != null) {
+        updateGroupTaskLine(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addGroupTaskLine(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _lineIds = row.lineId || ids.value;
+  proxy.$modal.confirm('是否确认删除任务动作组明细编号为"' + _lineIds + '"的数据项?').then(function() {
+    return delGroupTaskLine(_lineIds);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('groupTaskLine/groupTaskLine/export', {
+    ...queryParams.value
+  }, `groupTaskLine_${new Date().getTime()}.xlsx`)
+}
+
+getList();
+</script>

+ 279 - 0
ui/src/views/hnyz/requesttask/index.vue

@@ -0,0 +1,279 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="名称" prop="requestName">
+        <el-input
+          v-model="queryParams.requestName"
+          placeholder="请输入名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="请求编号" prop="requestCode">
+        <el-input
+          v-model="queryParams.requestCode"
+          placeholder="请输入请求编号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="Plus"
+          @click="handleAdd"
+          v-hasPermi="['hnyz:requesttask:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['hnyz:requesttask:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['hnyz:requesttask:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['hnyz:requesttask:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="requesttaskList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="名称" align="center" prop="requestName" />
+      <el-table-column label="请求编号" align="center" prop="requestCode" />
+      <el-table-column label="请求类型" align="center" prop="requestType" />
+      <el-table-column label="参数" align="center" prop="requestParam" />
+      <el-table-column label="状态" align="center" prop="status">
+        <template #default="scope">
+            <dict-tag :options="dcs_request_task_status" :value="scope.row.status" />
+        </template>
+      </el-table-column>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['hnyz:requesttask:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['hnyz:requesttask:remove']">删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      v-model:page="queryParams.pageNum"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改请求任务对话框 -->
+    <el-dialog :title="title" v-model="open" width="500px" append-to-body>
+      <el-form ref="requesttaskRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="名称" prop="requestName">
+          <el-input v-model="form.requestName" placeholder="请输入名称" />
+        </el-form-item>
+        <el-form-item label="请求编号" prop="requestCode">
+          <el-input v-model="form.requestCode" placeholder="请输入请求编号" />
+        </el-form-item>
+        <el-form-item label="参数" prop="requestParam">
+          <el-input v-model="form.requestParam" placeholder="请输入参数" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+            <el-radio-group v-model="form.status">
+              <el-radio
+                  v-for="dict in dcs_request_task_status"
+                  :key="dict.value"
+                  :value="dict.value"
+              >{{ dict.label }}</el-radio>
+            </el-radio-group>
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="Requesttask">
+import { listRequesttask, getRequesttask, delRequesttask, addRequesttask, updateRequesttask } from "@/api/hnyz/requesttask";
+
+const { proxy } = getCurrentInstance();
+const { dcs_request_task_status } = proxy.useDict("dcs_request_task_status");
+
+const requesttaskList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    requestName: null,
+    requestCode: null,
+    requestType: null,
+    requestParam: null,
+    status: null,
+  },
+  rules: {
+  }
+});
+
+const { queryParams, form, rules } = toRefs(data);
+
+/** 查询请求任务列表 */
+function getList() {
+  loading.value = true;
+  listRequesttask(queryParams.value).then(response => {
+    requesttaskList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    requestId: null,
+    requestName: null,
+    requestCode: null,
+    requestType: null,
+    requestParam: null,
+    status: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null,
+    createTime: null,
+    updateTime: null,
+    remark: null
+  };
+  proxy.resetForm("requesttaskRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.requestId);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加请求任务";
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset();
+  const _requestId = row.requestId || ids.value
+  getRequesttask(_requestId).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改请求任务";
+  });
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["requesttaskRef"].validate(valid => {
+    if (valid) {
+      if (form.value.requestId != null) {
+        updateRequesttask(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addRequesttask(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _requestIds = row.requestId || ids.value;
+  proxy.$modal.confirm('是否确认删除请求任务编号为"' + _requestIds + '"的数据项?').then(function() {
+    return delRequesttask(_requestIds);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('hnyz/requesttask/export', {
+    ...queryParams.value
+  }, `requesttask_${new Date().getTime()}.xlsx`)
+}
+
+getList();
+</script>