duhongyu 3 週間 前
コミット
51e7439605

+ 25 - 2
smart-steward-api/src/main/java/com/smartSteward/web/controller/work/WorkOrderController.java

@@ -104,7 +104,6 @@ public class WorkOrderController extends BaseController {
104 104
     @Log(title = "工单", businessType = BusinessType.UPDATE)
105 105
     @PutMapping("/submit/{id}")
106 106
     public AjaxResult submit(@PathVariable("id") Long id) {
107
-        // 获取工单对应的流程定义
108 107
         WorkOrder workOrder = workOrderService.selectWorkOrderById(id);
109 108
         if (workOrder == null) {
110 109
             return AjaxResult.error("工单不存在");
@@ -117,12 +116,36 @@ public class WorkOrderController extends BaseController {
117 116
         if (flowDefinition == null) {
118 117
             return AjaxResult.error("未找到对应的流程定义,无法流转工单");
119 118
         }
120
-        if (!workOrder.getReporterId().equals(getUserId())) {
119
+        if (!workOrderService.checkPermission(workOrder)) {
121 120
             return AjaxResult.error("只有工单创建人才能提交工单");
122 121
         }
123 122
         return toAjax(workOrderService.submitWorkOrder(workOrder, flowDefinition));
124 123
     }
125 124
 
125
+    @ApiOperation("修改工单")
126
+    @PreAuthorize("@ss.hasPermi('workOrder:order:update')")
127
+    @Log(title = "工单", businessType = BusinessType.UPDATE)
128
+    @PutMapping("/{id}")
129
+    public AjaxResult update(@PathVariable("id") Long id, @RequestBody WorkOrderInput workOrderInput) {
130
+        WorkOrder workOrder = workOrderService.selectWorkOrderById(id);
131
+        if (workOrder == null) {
132
+            return AjaxResult.error("工单不存在");
133
+        }
134
+        // 检查工单类型是否为空
135
+        if (workOrderInput.getTicketType() == null || workOrderInput.getTicketType().isEmpty()) {
136
+            return AjaxResult.error("工单类型不能为空");
137
+        }
138
+        // 获取工单对应的流程定义
139
+        FlowDefinition flowDefinition = workOrderService.getFlowDefinition(workOrderInput.getTicketType());
140
+        if (flowDefinition == null) {
141
+            return AjaxResult.error("未找到对应的流程定义,无法流转工单");
142
+        }
143
+        if (!workOrderService.checkPermission(workOrder)) {
144
+            return AjaxResult.error("只有工单创建人才能提交工单");
145
+        }
146
+        return toAjax(workOrderService.updateWorkOrder(workOrder, workOrderInput,flowDefinition));
147
+    }
148
+
126 149
 
127 150
     @ApiOperation("查询待办任务列表")
128 151
     @PreAuthorize("@ss.hasPermi('workOrder:order:list')")

+ 2 - 0
smart-steward-entity/src/main/java/com/smartSteward/entity/input/work/WorkOrderInput.java

@@ -12,6 +12,8 @@ import lombok.Data;
12 12
 @Data
13 13
 public class WorkOrderInput {
14 14
 
15
+
16
+
15 17
     /** 工单类型 */
16 18
     @ApiModelProperty("工单类型")
17 19
     private String ticketType;

+ 3 - 1
smart-steward-service/src/main/java/com/smartSteward/service/work/IWorkOrderService.java

@@ -178,9 +178,11 @@ public interface IWorkOrderService
178 178
      * 修改工单
179 179
      * 
180 180
      * @param workOrder 工单
181
+     * @param workOrderInput 工单输入参数
182
+     * @param flowDefinition 工单流程定义
181 183
      * @return 结果
182 184
      */
183
-    public int updateWorkOrder(WorkOrder workOrder);
185
+    public int updateWorkOrder(WorkOrder workOrder, WorkOrderInput workOrderInput, FlowDefinition flowDefinition);
184 186
 
185 187
     /**
186 188
      * 批量删除工单

+ 41 - 17
smart-steward-service/src/main/java/com/smartSteward/service/work/impl/WorkOrderServiceImpl.java

@@ -146,6 +146,42 @@ public class WorkOrderServiceImpl implements IWorkOrderService {
146 146
         }
147 147
         return insert;
148 148
     }
149
+    /**
150
+     * 修改工单
151
+     *
152
+     * @param workOrder 工单
153
+     * @return 结果
154
+     */
155
+    @Override
156
+    public int updateWorkOrder(WorkOrder workOrder, WorkOrderInput workOrderInput, FlowDefinition flowDefinition) {
157
+        workOrder.setTicketType(workOrderInput.getTicketType());
158
+        workOrder.setStationId(workOrderInput.getStationId());
159
+        workOrder.setContact(workOrderInput.getContact());
160
+        workOrder.setPhone(workOrderInput.getPhone());
161
+        workOrder.setContent(workOrderInput.getContent());
162
+        workOrder.setAttachments(workOrderInput.getAttachments());
163
+        workOrder.setUpdateTime(new Date());
164
+        insertWorkOrderRecord(workOrder.getId(), workOrder.getOrderNo(), WorkOderOperationType.UPDATE.name(),
165
+                "修改工单", SecurityUtils.getUserId(), SecurityUtils.getUsername());
166
+        Long userId = SecurityUtils.getUserId();
167
+        String userName = SecurityUtils.getUsername();
168
+        int update = workOrderMapper.updateWorkOrder(workOrder);
169
+        if (update > 0) {
170
+            //提交工单时,异步处理工作流相关数据
171
+            if (workOrderInput.getIsSubmit()) {
172
+                //异步处理工作流相关数据
173
+                CompletableFuture.supplyAsync(() -> nodeStartProcessing
174
+                                (flowDefinition, workOrder, userId, userName)).thenAccept(result -> System.out.println("Result: " + result))
175
+                        .exceptionally(ex -> {
176
+                            ex.printStackTrace();
177
+                            log.error("修改工单{}时,处理工作流相关数据异常", workOrder.getOrderNo(), ex);
178
+                            return null;
179
+                        });
180
+
181
+            }
182
+        }
183
+        return workOrderMapper.updateWorkOrder(workOrder);
184
+    }
149 185
 
150 186
      /**
151 187
      * 提交工单
@@ -721,24 +757,12 @@ public class WorkOrderServiceImpl implements IWorkOrderService {
721 757
     public boolean checkPermission(WorkOrder workOrder) {
722 758
         // 管理员、工单创建人、工单场站在用户场站列表中,都可以操作工单
723 759
         return SecurityUtils.isAdmin(SecurityUtils.getUserId())
724
-                || workOrder.getReporterId().equals(SecurityUtils.getUsername())
760
+                || workOrder.getReporterId().equals(SecurityUtils.getUserId())
725 761
                 || SecurityUtils.hasStation(workOrder.getStationId());
726 762
     }
727 763
 
728 764
 
729
-    /**
730
-     * 修改工单
731
-     *
732
-     * @param workOrder 工单
733
-     * @return 结果
734
-     */
735
-    @Override
736
-    public int updateWorkOrder(WorkOrder workOrder) {
737
-        workOrder.setUpdateTime(new Date());
738
-        insertWorkOrderRecord(workOrder.getId(), workOrder.getOrderNo(), WorkOderOperationType.UPDATE.name(),
739
-                "修改工单", SecurityUtils.getUserId(), SecurityUtils.getUsername());
740
-        return workOrderMapper.updateWorkOrder(workOrder);
741
-    }
765
+
742 766
 
743 767
     /**
744 768
      * 添加工单记录
@@ -916,7 +940,7 @@ public class WorkOrderServiceImpl implements IWorkOrderService {
916 940
                         workOrder.setStatus(WorkOrderStatus.PENDING_HANDING.getStatus());
917 941
                      insertWorkOrderRecord(workOrder.getId(), workOrder.getOrderNo(), WorkOderOperationType.PROCESS.name(),
918 942
                                 "工单进入待办任务"+node.getNodeName(), userId, userName);
919
-                        nodeIds.append(taskId).append(",");
943
+                        nodeIds.append(taskId).append(StringUtils.SEPARATORSTR);
920 944
                     }
921 945
                 }
922 946
             } else {
@@ -991,7 +1015,7 @@ public class WorkOrderServiceImpl implements IWorkOrderService {
991 1015
             String parallelNode = nextNodes.stream()
992 1016
                     .map(FlowNode::getId)
993 1017
                     .map(String::valueOf)  // 将Long转换为String
994
-                    .collect(Collectors.joining(","));
1018
+                    .collect(Collectors.joining(StringUtils.SEPARATORSTR));
995 1019
             for (FlowNode node : nextNodes) {
996 1020
                 long taskId= insertWorkOrderTask(workOrder, node,parallelNode);
997 1021
                 // 工单状态为待处理
@@ -999,7 +1023,7 @@ public class WorkOrderServiceImpl implements IWorkOrderService {
999 1023
                 workOrder.setStatus(WorkOrderStatus.PENDING_HANDING.getStatus());
1000 1024
                 insertWorkOrderRecord(workOrder.getId(), workOrder.getOrderNo(), WorkOderOperationType.PROCESS.name(),
1001 1025
                         "工单退回至待办任务"+node.getNodeName(), userId, userName);
1002
-                nodeIds.append(taskId).append(",");
1026
+                nodeIds.append(taskId).append(StringUtils.SEPARATORSTR);
1003 1027
             }
1004 1028
         } else {
1005 1029
             // 没有下一个节点,说明流程定义有问题,工单直接完结