guarantee-lsq 9 bulan lalu
induk
melakukan
91f87835a5

+ 4 - 1
platform-dao/src/main/java/com/platform/dao/dto/workflow/WorkflowNodeDTO.java

@@ -68,7 +68,7 @@ public class WorkflowNodeDTO extends BaseDTO implements Serializable {
      */
     private String flowId;
     /**
-     * 人员类型 1 审核人 2 协同
+     * 节点类型 1 发起人 2 条件分支 3 审核
      */
     private Integer type;
     /**
@@ -97,4 +97,7 @@ public class WorkflowNodeDTO extends BaseDTO implements Serializable {
     private String switchJson; // 分支json
 
     private String switchHandleId; // 分支处理ID
+
+    private String frontId; // 前端ID
+    private String frontParentId; // 前端父级ID
 }

+ 1 - 0
platform-dao/src/main/java/com/platform/dao/dto/workflow/WorkflowTaskDTO.java

@@ -106,4 +106,5 @@ public class WorkflowTaskDTO extends BaseDTO implements Serializable {
     private Integer limitTime; // 期限
     private String currentUserId; // 当前处理人ID
     private String currentUserName; // 当前处理人
+    private String frontId; // 当前节点前端ID
 }

+ 4 - 5
platform-dao/src/main/java/com/platform/dao/entity/workflow/WorkflowNode.java

@@ -55,17 +55,13 @@ public class WorkflowNode implements Serializable {
      */
     private String flowId;
     /**
-     * 人员类型 3 审核人 2 条件分支
+     * 节点类型 1 发起人 2 条件分支 3 审核人
      */
     private Integer type;
     /**
      * 审批层级
      */
     private Integer nodeLevel;
-    /**
-     * 审批层级节点顺序
-     */
-    //private Integer nodeSort;
     /**
      * 审批人ID
      */
@@ -87,4 +83,7 @@ public class WorkflowNode implements Serializable {
 
     private String switchHandleId; // 分支处理ID
 
+    private String frontId; // 前端ID
+    private String frontParentId; // 前端父级ID
+
 }

+ 3 - 1
platform-dao/src/main/java/com/platform/dao/entity/workflow/WorkflowTask.java

@@ -59,9 +59,11 @@ public class WorkflowTask implements Serializable {
      */
     private String formDataId;
     /**
-     * 审批层级节点顺序
+     * 当前节点层级
      */
     private Integer nodeSort;
+
+    private String frontId; // 当前节点前端ID
     /**
      * 1 审批中  2 已完结 3 待发起 4 终止  5 驳回
      */

+ 1 - 0
platform-dao/src/main/java/com/platform/dao/mapper/workflow/WorkflowNodeMapper.java

@@ -23,4 +23,5 @@ public interface WorkflowNodeMapper extends MyMapper<WorkflowNode> {
      */
     List<WorkflowNodeVO> selectList(WorkflowNodeDTO dto);
 
+    List<WorkflowNodeVO> selectNodeList(WorkflowNodeDTO dto);
 }

+ 2 - 1
platform-dao/src/main/java/com/platform/dao/util/TreeUtil.java

@@ -418,6 +418,7 @@ public class TreeUtil {
                 CommonTree node = new CommonTree();
                 node.setId(key);
                 node.setKey(key);
+                String childType = DictCache.getLabelByValue("CATEGORY_TYPE", key);
                 node.setTitle(DictCache.getLabelByValue("CATEGORY_TYPE", key));
                 node.setValue(DictCache.getLabelByValue("CATEGORY_TYPE", key));
                 // 组装children
@@ -427,7 +428,7 @@ public class TreeUtil {
                         TreeNode child = new TreeNode();
                         child.setId(item.getId());
                         child.setParentId(key);
-                        child.setTitle(DictCache.getLabelByValue("CUSTOM_FORM_TYPE",item.getType()));
+                        child.setTitle(DictCache.getLabelByValue(childType,item.getType()));
                         child.setValue(child.getTitle());
                         children.add(child);
                     });

+ 4 - 1
platform-dao/src/main/java/com/platform/dao/vo/query/workflow/WorkflowNodeVO.java

@@ -52,7 +52,7 @@ public class WorkflowNodeVO extends BaseVO implements Serializable {
      */
     private String flowId;
     /**
-     * 人员类型 1 审核人 2 协同
+     * 节点类型 1 发起人 2 条件分支 3 审核
      */
     private Integer type;
     /**
@@ -79,5 +79,8 @@ public class WorkflowNodeVO extends BaseVO implements Serializable {
 
     private String switchHandleId; // 分支处理ID
 
+    private String frontId; // 前端ID
+    private String frontParentId; // 前端父级ID
+
 
 }

+ 1 - 0
platform-dao/src/main/java/com/platform/dao/vo/query/workflow/WorkflowTaskVO.java

@@ -78,4 +78,5 @@ public class WorkflowTaskVO extends BaseVO implements Serializable {
     private Integer limitTime; // 期限
     private String currentUserId; // 当前处理人ID
     private String currentUserName; // 当前处理人
+    private String frontId; // 当前节点前端ID
 }

+ 17 - 1
platform-dao/src/main/resources/mapper/workflow/WorkflowNodeMapper.xml

@@ -60,9 +60,25 @@
     <select id="selectList" parameterType="com.platform.dao.dto.workflow.WorkflowNodeDTO"
             resultType="com.platform.dao.vo.query.workflow.WorkflowNodeVO">
         select verifyUser.*
-        from t_workflow_verify_user as verifyUser
+        from t_workflow_node as verifyUser
         <where>
             <include refid="List_Condition"/>
         </where>
     </select>
+
+    <select id="selectNodeList" parameterType="com.platform.dao.dto.workflow.WorkflowNodeDTO"
+            resultType="com.platform.dao.vo.query.workflow.WorkflowNodeVO">
+        select * from t_workflow_node node
+        <where>
+            <if test="flowId != null and flowId != ''">
+                and node.flow_id = #{flowId}
+            </if>
+            <if test="nodeLevel != null">
+                and node.node_level = #{nodeLevel}
+            </if>
+            <if test="frontParentId != null and frontParentId != ''">
+                and node.front_parent_id like concat(concat('%',#{frontParentId}),'%')
+            </if>
+        </where>
+    </select>
 </mapper>

+ 10 - 4
platform-service/src/main/java/com/platform/service/custom/impl/CustomFormDataServiceImpl.java

@@ -14,10 +14,7 @@ import com.platform.dao.entity.custom.CustomForm;
 import com.platform.dao.entity.custom.CustomFormBom;
 import com.platform.dao.entity.custom.CustomFormBomField;
 import com.platform.dao.entity.custom.CustomFormData;
-import com.platform.dao.entity.workflow.Workflow;
-import com.platform.dao.entity.workflow.WorkflowTask;
-import com.platform.dao.entity.workflow.WorkflowTaskBom;
-import com.platform.dao.entity.workflow.WorkflowTaskRecord;
+import com.platform.dao.entity.workflow.*;
 import com.platform.dao.enums.FlowTaskStatusEnum;
 import com.platform.dao.enums.TaskRecordStatusEnum;
 import com.platform.dao.enums.YesNoEnum;
@@ -27,6 +24,7 @@ import com.platform.dao.mapper.custom.CustomFormDataMapper;
 import com.platform.dao.mapper.custom.CustomFormMapper;
 import com.platform.dao.mapper.upms.SysUserDeptMapper;
 import com.platform.dao.mapper.workflow.WorkflowMapper;
+import com.platform.dao.mapper.workflow.WorkflowNodeMapper;
 import com.platform.dao.mapper.workflow.WorkflowTaskBomMapper;
 import com.platform.dao.mapper.workflow.WorkflowTaskMapper;
 import com.platform.dao.vo.query.custom.CustomFormDataVO;
@@ -69,6 +67,8 @@ public class CustomFormDataServiceImpl extends BaseServiceImpl<CustomFormDataMap
     private WorkflowTaskBomMapper workflowTaskBomMapper;
     @Autowired
     private SysUserDeptMapper sysUserDeptMapper;
+    @Autowired
+    private WorkflowNodeMapper workflowNodeMapper;
 
     @Override
     public int batchDelete(List<String> ids) {
@@ -164,6 +164,12 @@ public class CustomFormDataServiceImpl extends BaseServiceImpl<CustomFormDataMap
         task.setStatus(FlowTaskStatusEnum.APPLY.getValue());
         task.setApplyDeptId(sysUserDeptMapper.selectDeptIdByUserId(task.getCreatedUserId()));
         task.setLimitTime(YesNoEnum.NO.getValue());
+        // 获取节点
+        WorkflowNode node = new WorkflowNode();
+        node.setFlowId(bom.getFlowId());
+        node.setNodeLevel(YesNoEnum.YES.getValue());
+        node = workflowNodeMapper.selectOne(node);
+        task.setFrontId(node.getFrontId());
         workflowTaskMapper.insert(task);
     }
 

+ 6 - 0
platform-service/src/main/java/com/platform/service/workflow/WorkflowTaskBomService.java

@@ -45,4 +45,10 @@ public interface WorkflowTaskBomService extends IBaseService<WorkflowTaskBom, Wo
     MyPage<WorkflowTaskBomVO> selectWorkPlacePageList(WorkflowTaskBomDTO record, int pageNum, int pageSize);
 
     WorkflowTaskBomVO getVOById(String id);
+
+    /**
+     * 发起任务
+     * @param id
+     */
+    void publishTask(String id);
 }

+ 2 - 0
platform-service/src/main/java/com/platform/service/workflow/impl/WorkflowServiceImpl.java

@@ -115,6 +115,8 @@ public class WorkflowServiceImpl extends BaseServiceImpl<WorkflowMapper, Workflo
                 node.setCreatedTime(LocalDateTime.now());
                 node.setCreatedUserId(SecurityUtils.getUserInfo().getUserId());
                 node.setCreatedUserName(SecurityUtils.getUserInfo().getRealName());
+                node.setFrontId(jsonObject.getString("id"));
+                node.setFrontParentId(jsonObject.getString("parentId"));
                 switch(type) {
                     case CommonConstants.CONDITION_TYPE: // 条件分支
                         JSONObject condition = new JSONObject();

+ 96 - 3
platform-service/src/main/java/com/platform/service/workflow/impl/WorkflowTaskBomServiceImpl.java

@@ -1,26 +1,39 @@
 package com.platform.service.workflow.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.platform.common.bean.AbstractPageResultBean;
+import com.platform.common.constant.CommonConstants;
+import com.platform.common.exception.DeniedException;
 import com.platform.common.util.BeanConverterUtil;
+import com.platform.common.util.BigDecimalUtil;
 import com.platform.common.util.ListUtils;
 import com.platform.common.util.SecurityUtils;
 import com.platform.dao.bean.MyPage;
+import com.platform.dao.dto.workflow.WorkflowNodeDTO;
 import com.platform.dao.dto.workflow.WorkflowTaskBomDTO;
+import com.platform.dao.entity.workflow.WorkflowNode;
+import com.platform.dao.entity.workflow.WorkflowTask;
 import com.platform.dao.entity.workflow.WorkflowTaskBom;
 import com.platform.dao.enums.FlowTaskStatusEnum;
 import com.platform.dao.enums.YesNoEnum;
+import com.platform.dao.mapper.workflow.WorkflowNodeMapper;
 import com.platform.dao.mapper.workflow.WorkflowTaskBomMapper;
+import com.platform.dao.mapper.workflow.WorkflowTaskMapper;
+import com.platform.dao.vo.query.workflow.WorkflowNodeVO;
 import com.platform.dao.vo.query.workflow.WorkflowTaskBomVO;
 import com.platform.service.base.impl.BaseServiceImpl;
 import com.platform.service.workflow.WorkflowTaskBomService;
 import com.platform.service.workflow.viewStrategy.BomViewStrategy;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import tk.mybatis.mapper.weekend.Weekend;
 import tk.mybatis.mapper.weekend.WeekendCriteria;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -34,6 +47,10 @@ import java.util.List;
 public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomMapper, WorkflowTaskBom, WorkflowTaskBomDTO> implements WorkflowTaskBomService {
     @Resource
     private List<BomViewStrategy> bomViewStrategyList; // 查看实现类
+    @Resource
+    private WorkflowTaskMapper workflowTaskMapper;
+    @Autowired
+    private WorkflowNodeMapper workflowNodeMapper;
 
     @Override
     public int batchDelete(List<String> ids) {
@@ -54,9 +71,9 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
     public MyPage<WorkflowTaskBomVO> selectWorkPlacePageList(WorkflowTaskBomDTO record, int pageNum, int pageSize) {
         PageHelper.startPage(pageNum, pageSize);
         record.setCreatedUserId(SecurityUtils.getUserInfo().getUserId());
-        if(record.getSearchType() != null){
+        if (record.getSearchType() != null) {
             List<Integer> statusList = ListUtils.newArrayList();
-            switch (record.getSearchType()){
+            switch (record.getSearchType()) {
                 case 1: // 待发事项
                     statusList.add(FlowTaskStatusEnum.APPLY.getValue());
                     statusList.add(FlowTaskStatusEnum.BACK.getValue());
@@ -72,7 +89,7 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
     public WorkflowTaskBomVO getVOById(String id) {
         WorkflowTaskBomVO vo = BeanConverterUtil.copyObjectProperties(mapper.selectByPrimaryKey(id), WorkflowTaskBomVO.class);
         String userId = SecurityUtils.getUserInfo().getUserId();
-        if(userId.equals(vo.getCreatedUserId())){
+        if (userId.equals(vo.getCreatedUserId())) {
             WorkflowTaskBom bom = new WorkflowTaskBom();
             bom.setId(id);
             bom.setReadFlag(YesNoEnum.YES.getValue());
@@ -82,6 +99,82 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
         return vo;
     }
 
+    @Override
+    public void publishTask(String id) {
+        WorkflowTaskBom bom = mapper.selectByPrimaryKey(id);
+        WorkflowTask task = workflowTaskMapper.selectByPrimaryKey(bom.getTaskId());
+        // 校验是否处于待发起的状态,bom.status=0 & task.status = 3、5、6
+        if (bom.getStatus().intValue() != YesNoEnum.NO.getValue()) {
+            throw new DeniedException("待办事项状态有误,请检查");
+        }
+        int taskStatus = task.getStatus();
+        if (taskStatus != FlowTaskStatusEnum.APPLY.getValue() ||
+                taskStatus != FlowTaskStatusEnum.BACK.getValue()
+                || taskStatus != FlowTaskStatusEnum.CANCEL.getValue()) {
+            throw new DeniedException("待办事项任务状态有误,请检查");
+        }
+        // 生成新的taskBom
+        int currentLevel = task.getNodeSort();
+        currentLevel++;
+        // 获取flowNode
+        WorkflowNodeDTO node = new WorkflowNodeDTO();
+        node.setFlowId(task.getFlowId());
+        node.setNodeLevel(currentLevel);
+        node.setFrontParentId(task.getFrontId());
+        List<WorkflowNodeVO> nodeList = workflowNodeMapper.selectNodeList(node);
+        if (CollectionUtils.isEmpty(nodeList)) {
+            throw new DeniedException("流程配置有误,发起人没有子节点,请检查");
+        }
+        WorkflowTask updTask = new WorkflowTask();
+        updTask.setId(bom.getTaskId());
+        updTask.setFlowId(task.getFlowId());
+        WorkflowTaskBom updBom = new WorkflowTaskBom();
+        updBom.setId(id);
+        generateTaskBom(nodeList,updTask,updBom);
+        // 修改已有taskBom
+
+        // 修改Task
+
+    }
+
+    private WorkflowTaskBom generateTaskBom(List<WorkflowNodeVO> nodeList,WorkflowTask updTask,WorkflowTaskBom updBom) {
+        WorkflowTaskBom bom = null;
+        if (nodeList.size() == 1) {
+            WorkflowNodeVO node = nodeList.get(0);
+            switch (node.getType()) {
+                case CommonConstants.CONDITION_TYPE: // 条件分支
+                    break;
+                case CommonConstants.VERIFY_USER_TYPE:
+                    break;
+            }
+        } else {
+            for (WorkflowNodeVO node : nodeList) {
+                switch (node.getType()) {
+                    case CommonConstants.CONDITION_TYPE:
+                        break;
+                    case CommonConstants.VERIFY_USER_TYPE:
+                        break;
+                }
+            }
+        }
+        return bom;
+    }
+
+    private WorkflowTaskBom generateTaskBom(WorkflowNodeVO node,WorkflowTask updTask,WorkflowTaskBom updBom){
+        WorkflowTaskBom bom = null;
+        switch (node.getType()) {
+            case CommonConstants.CONDITION_TYPE: // 条件分支
+                JSONObject switchJson = JSONObject.parseObject(node.getSwitchJson());
+                int symbol = switchJson.getInteger("symbol"); // 比较符号
+                BigDecimal val = BigDecimalUtil.valueNull(switchJson.getString("value")); // 比较值
+                // 获取分支
+                break;
+            case CommonConstants.VERIFY_USER_TYPE: // 审核人处理
+                break;
+        }
+        return bom;
+    }
+
     @Override
     public AbstractPageResultBean<WorkflowTaskBom> selectPageInfo(WorkflowTaskBomDTO record, int pageNum, int pageSize) {
         PageHelper.startPage(pageNum, pageSize);