From 05683f2b2bdbdbe21cf17ad523c21ab338bd1c54 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期二, 19 七月 2022 21:49:55 +0800
Subject: [PATCH] 优化添加设备 功能

---
 service-common/src/main/java/com/java110/common/cmd/workflow/UpdateWorkflowCmd.java |  222 ++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 210 insertions(+), 12 deletions(-)

diff --git a/service-common/src/main/java/com/java110/common/cmd/workflow/UpdateWorkflowCmd.java b/service-common/src/main/java/com/java110/common/cmd/workflow/UpdateWorkflowCmd.java
index 0db2ca2..755984e 100644
--- a/service-common/src/main/java/com/java110/common/cmd/workflow/UpdateWorkflowCmd.java
+++ b/service-common/src/main/java/com/java110/common/cmd/workflow/UpdateWorkflowCmd.java
@@ -15,22 +15,32 @@
  */
 package com.java110.common.cmd.workflow;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.core.annotation.Java110Cmd;
 import com.java110.core.annotation.Java110Transactional;
 import com.java110.core.context.ICmdDataFlowContext;
-import com.java110.core.event.cmd.AbstractServiceCmdListener;
+import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
 import com.java110.core.factory.GenerateCodeFactory;
-import com.java110.intf.common.IWorkflowV1InnerServiceSMO;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.workflow.WorkflowDto;
+import com.java110.dto.workflow.WorkflowStepDto;
+import com.java110.dto.workflow.WorkflowStepStaffDto;
+import com.java110.intf.common.*;
 import com.java110.po.workflow.WorkflowPo;
+import com.java110.po.workflow.WorkflowStepPo;
+import com.java110.po.workflow.WorkflowStepStaffPo;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.slf4j.Logger;
-import com.java110.core.log.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.List;
 
 
 /**
@@ -44,32 +54,220 @@
  * // modify by 寮犱笁 at 2021-09-12 绗�10琛屽湪鏌愮鍦烘櫙涓嬪瓨鍦ㄦ煇绉峛ug 闇�瑕佷慨澶嶏紝娉ㄩ噴10鑷�20琛� 鍔犲叆 20琛岃嚦30琛�
  */
 @Java110Cmd(serviceCode = "workflow.updateWorkflow")
-public class UpdateWorkflowCmd extends AbstractServiceCmdListener {
+public class UpdateWorkflowCmd extends Cmd {
 
-  private static Logger logger = LoggerFactory.getLogger(UpdateWorkflowCmd.class);
+    private static Logger logger = LoggerFactory.getLogger(UpdateWorkflowCmd.class);
 
 
     @Autowired
     private IWorkflowV1InnerServiceSMO workflowV1InnerServiceSMOImpl;
 
+
+    @Autowired
+    private IWorkflowStepStaffInnerServiceSMO workflowStepStaffInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IWorkflowStepStaffV1InnerServiceSMO workflowStepStaffV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IWorkflowStepV1InnerServiceSMO workflowStepV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IWorkflowStepInnerServiceSMO workflowStepInnerServiceSMOImpl;
+
+    @Autowired
+    private IWorkflowInnerServiceSMO workflowInnerServiceSMOImpl;
+
+
     @Override
     public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
         Assert.hasKeyAndValue(reqJson, "flowId", "flowId涓嶈兘涓虹┖");
-Assert.hasKeyAndValue(reqJson, "communityId", "communityId涓嶈兘涓虹┖");
+        Assert.hasKeyAndValue(reqJson, "flowName", "璇锋眰鎶ユ枃涓湭鍖呭惈flowName");
+        Assert.hasKeyAndValue(reqJson, "communityId", "璇锋眰鎶ユ枃涓湭鍖呭惈communityId");
+        Assert.hasKeyAndValue(reqJson, "storeId", "璇锋眰鎶ユ枃涓湭鍖呭惈鍟嗘埛ID");
+
+        JSONArray steps = reqJson.getJSONArray("steps");
+        if (steps == null || steps.size() < 1) {
+            //throw new IllegalArgumentException("鏈寘鍚楠�");
+            return;
+        }
+        JSONObject step = null;
+        JSONObject subStaff = null;
+        for (int stepIndex = 0; stepIndex < steps.size(); stepIndex++) {
+            step = steps.getJSONObject(stepIndex);
+
+            Assert.hasKeyAndValue(step, "staffId", "姝ラ涓湭鍖呭惈鍛樺伐");
+            Assert.hasKeyAndValue(step, "staffName", "姝ラ涓湭鍖呭惈鍛樺伐");
+            Assert.hasKeyAndValue(step, "type", "姝ラ涓被鍨嬩細绛捐繕鏄甯告祦绋�");
+
+            //姝e父娴佺▼
+            if (WorkflowStepDto.TYPE_NORMAL.equals(step.getString("type"))) {
+                continue;
+            }
+
+            //浼氱娴佺▼
+            if (!step.containsKey("subStaff")) {
+                throw new IllegalArgumentException("鏈寘鍚細绛惧憳宸ヤ俊鎭�");
+            }
+
+            JSONArray subStaffs = step.getJSONArray("subStaff");
+
+            if (subStaffs == null || subStaffs.size() < 1) {
+                throw new IllegalArgumentException("鏈寘鍚細绛惧憳宸ヤ俊鎭�");
+            }
+
+            for (int subStaffIndex = 0; subStaffIndex < subStaffs.size(); subStaffIndex++) {
+                subStaff = subStaffs.getJSONObject(subStaffIndex);
+                Assert.hasKeyAndValue(subStaff, "staffId", "浼氱涓湭鍖呭惈鍛樺伐");
+                Assert.hasKeyAndValue(subStaff, "staffName", "浼氱涓湭鍖呭惈鍛樺伐");
+            }
+        }
 
     }
 
     @Override
     @Java110Transactional
     public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
+        logger.debug("杩涘叆淇敼宸ヤ綔娴乧md>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
 
-       WorkflowPo workflowPo = BeanConvertUtil.covertBean(reqJson, WorkflowPo.class);
-        int flag = workflowV1InnerServiceSMOImpl.updateWorkflow(workflowPo);
-
-        if (flag < 1) {
-            throw new CmdException("鏇存柊鏁版嵁澶辫触");
+        if (reqJson.containsKey("flowType")) {
+            String flowType = reqJson.getString("flowType");
+            if (WorkflowDto.FLOW_TYPE_PURCHASE.equals(flowType)
+                    || WorkflowDto.FLOW_TYPE_CONTRACT_CHANGE.equals(flowType)
+                    || WorkflowDto.FLOW_TYPE_ALLOCATION_STOREHOUSE.equals(flowType)
+                    || WorkflowDto.FLOW_TYPE_CONTRACT_APPLY.equals(flowType)) {
+                reqJson.put("communityId", "9999");
+            }
         }
 
+        WorkflowStepDto workflowStepDto = new WorkflowStepDto();
+        workflowStepDto.setFlowId(reqJson.getString("flowId"));
+        workflowStepDto.setCommunityId(reqJson.getString("communityId"));
+        List<WorkflowStepDto> workflowStepDtos = workflowStepInnerServiceSMOImpl.queryWorkflowSteps(workflowStepDto);
+        if (workflowStepDtos != null) {
+            for (WorkflowStepDto tmpWorkflowStepDto : workflowStepDtos) {
+                deleteWorkflowStepAndStaff(cmdDataFlowContext, reqJson, tmpWorkflowStepDto);
+            }
+        }
+
+        //淇敼 宸ヤ綔娴佺▼
+        WorkflowPo workflowPo = new WorkflowPo();
+        workflowPo.setFlowId(reqJson.getString("flowId"));
+        workflowPo.setFlowName(reqJson.getString("flowName"));
+        workflowPo.setCommunityId(reqJson.getString("communityId"));
+        workflowPo.setStartNodeFinish(reqJson.getString("startNodeFinish"));
+        workflowPo.setDescrible(reqJson.getString("describle"));
+
+
+        //淇濆瓨 宸ヤ綔娴佺▼姝ラ
+        JSONArray steps = reqJson.getJSONArray("steps");
+        String processDefinitionKey = "";
+        int flag = 0;
+        if (steps != null && steps.size() > 0) { // 鏈夋楠�
+            JSONObject step = null;
+            JSONObject subStaff = null;
+            WorkflowStepStaffPo workflowStepStaffPo = null;
+            List<WorkflowStepDto> tmpWorkflowStepDtos = new ArrayList<>();
+            for (int stepIndex = 0; stepIndex < steps.size(); stepIndex++) {
+                step = steps.getJSONObject(stepIndex);
+                WorkflowStepPo workflowStepPo = new WorkflowStepPo();
+                workflowStepPo.setStepId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_flowId));
+                workflowStepPo.setCommunityId(workflowPo.getCommunityId());
+                workflowStepPo.setFlowId(workflowPo.getFlowId());
+                workflowStepPo.setSeq((stepIndex + 1) + "");
+                workflowStepPo.setType(step.getString("type"));
+                workflowStepPo.setStoreId(reqJson.getString("storeId"));
+                flag = workflowStepV1InnerServiceSMOImpl.saveWorkflowStep(workflowStepPo);
+                if (flag < 1) {
+                    throw new CmdException("淇濆瓨姝ラ澶辫触");
+                }
+                WorkflowStepDto tmpWorkflowStepDto = BeanConvertUtil.covertBean(workflowStepPo, WorkflowStepDto.class);
+                //姝e父娴佺▼
+                List<WorkflowStepStaffDto> workflowStepStaffDtos = new ArrayList<>();
+                workflowStepStaffPo = new WorkflowStepStaffPo();
+                workflowStepStaffPo.setWssId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_wssId));
+                workflowStepStaffPo.setCommunityId(workflowPo.getCommunityId());
+                workflowStepStaffPo.setStaffId(step.getString("staffId"));
+                workflowStepStaffPo.setStaffName(step.getString("staffName"));
+                workflowStepStaffPo.setStepId(workflowStepPo.getStepId());
+                workflowStepStaffPo.setFlowType(reqJson.getString("flowType"));
+                workflowStepStaffPo.setStaffRole(StringUtil.isEmpty(step.getString("staffRole")) ? "1001" : step.getString("staffRole"));
+
+                if (!"1001".equals(workflowStepStaffPo.getStaffRole()) && workflowStepStaffPo.getStaffRole().startsWith("${")) {
+                    throw new IllegalArgumentException("閲囪喘浜哄憳鎴栬�呯墿鍝侀鐢ㄤ汉鍛樺繀椤绘寚瀹氫汉锛屼笉鑳芥槸鍔ㄦ�佹寚瀹�");
+                }
+                flag = workflowStepStaffV1InnerServiceSMOImpl.saveWorkflowStepStaff(workflowStepStaffPo);
+                if (flag < 1) {
+                    throw new CmdException("淇濆瓨姝ラ澶辫触");
+                }
+                workflowStepStaffDtos.add(BeanConvertUtil.covertBean(workflowStepStaffPo, WorkflowStepStaffDto.class));
+                //浼氱娴佺▼
+                JSONArray subStaffs = step.getJSONArray("subStaff");
+                if (subStaffs != null && subStaffs.size() > 0) {
+                    for (int subStaffIndex = 0; subStaffIndex < subStaffs.size(); subStaffIndex++) {
+                        subStaff = subStaffs.getJSONObject(subStaffIndex);
+                        workflowStepStaffPo = new WorkflowStepStaffPo();
+                        workflowStepStaffPo.setWssId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_wssId));
+                        workflowStepStaffPo.setCommunityId(workflowPo.getCommunityId());
+                        workflowStepStaffPo.setStaffId(subStaff.getString("staffId"));
+                        workflowStepStaffPo.setStaffName(subStaff.getString("staffName"));
+                        workflowStepStaffPo.setStepId(workflowStepPo.getStepId());
+                        workflowStepStaffPo.setStaffRole(StringUtil.isEmpty(subStaff.getString("staffRole")) ? "1001" : subStaff.getString("staffRole"));
+
+                        flag = workflowStepStaffV1InnerServiceSMOImpl.saveWorkflowStepStaff(workflowStepStaffPo);
+                        if (flag < 1) {
+                            throw new CmdException("淇濆瓨姝ラ澶辫触");
+                        }
+                        workflowStepStaffDtos.add(BeanConvertUtil.covertBean(workflowStepStaffPo, WorkflowStepStaffDto.class));
+                    }
+                }
+
+                tmpWorkflowStepDto.setWorkflowStepStaffs(workflowStepStaffDtos);
+
+                tmpWorkflowStepDtos.add(tmpWorkflowStepDto);
+            }
+
+            WorkflowDto workflowDto = BeanConvertUtil.covertBean(workflowPo, WorkflowDto.class);
+            workflowDto.setWorkflowSteps(tmpWorkflowStepDtos);
+            WorkflowDto tmpWorkflowDto = workflowInnerServiceSMOImpl.addFlowDeployment(workflowDto);
+            processDefinitionKey = tmpWorkflowDto.getProcessDefinitionKey();
+        } else {
+            processDefinitionKey = "-1";
+        }
+
+        workflowPo.setProcessDefinitionKey(processDefinitionKey);
+        flag = workflowV1InnerServiceSMOImpl.updateWorkflow(workflowPo);
+        if (flag < 1) {
+            throw new CmdException("淇濆瓨姝ラ澶辫触");
+        }
         cmdDataFlowContext.setResponseEntity(ResultVo.success());
     }
+
+    private void deleteWorkflowStepAndStaff(ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson, WorkflowStepDto workflowStepDto) {
+        WorkflowStepStaffDto workflowStepStaffDto = new WorkflowStepStaffDto();
+        workflowStepStaffDto.setStepId(workflowStepDto.getStepId());
+        workflowStepStaffDto.setCommunityId(workflowStepDto.getCommunityId());
+        List<WorkflowStepStaffDto> workflowStepStaffDtos = workflowStepStaffInnerServiceSMOImpl.queryWorkflowStepStaffs(workflowStepStaffDto);
+
+        WorkflowStepPo workflowStepPo = new WorkflowStepPo();
+        workflowStepPo.setCommunityId(workflowStepDto.getCommunityId());
+        workflowStepPo.setStepId(workflowStepDto.getStepId());
+        int flag = workflowStepV1InnerServiceSMOImpl.deleteWorkflowStep(workflowStepPo);
+        if (flag < 1) {
+            throw new CmdException("淇濆瓨姝ラ澶辫触");
+        }
+        if (workflowStepStaffDtos == null) {
+            return;
+        }
+        for (WorkflowStepStaffDto tmpWorkflowStepStaffDto : workflowStepStaffDtos) {
+            WorkflowStepStaffPo workflowStepStaffPo = new WorkflowStepStaffPo();
+            workflowStepStaffPo.setCommunityId(workflowStepDto.getCommunityId());
+            workflowStepStaffPo.setWssId(tmpWorkflowStepStaffDto.getWssId());
+            flag = workflowStepStaffV1InnerServiceSMOImpl.deleteWorkflowStepStaff(workflowStepStaffPo);
+            if (flag < 1) {
+                throw new CmdException("淇濆瓨姝ラ澶辫触");
+            }
+        }
+    }
 }

--
Gitblit v1.8.0