guarantee-lsq 11 mesiacov pred
rodič
commit
1db9f65594

+ 7 - 6
platform-rest/src/main/java/com/platform/rest/controller/workflow/WorkflowTaskBomController.java

@@ -13,7 +13,6 @@ import com.platform.dao.vo.query.workflow.WorkflowTaskBomVO;
 import com.platform.rest.log.annotation.SysLog;
 import com.platform.service.workflow.WorkflowTaskBomService;
 import lombok.AllArgsConstructor;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -52,7 +51,6 @@ public class WorkflowTaskBomController {
      */
     @SysLog("新增流程任务审核字段显示表")
     @PostMapping
-    @PreAuthorize("@pms.hasPermission('workflow-bom-add')")
     public R save(@Validated({AddGroup.class}) @RequestBody WorkflowTaskBomDTO workflowTaskBomDTO) {
         return new R<>(workflowTaskBomService.saveModelByDTO(workflowTaskBomDTO));
     }
@@ -65,7 +63,6 @@ public class WorkflowTaskBomController {
      */
     @SysLog("修改流程任务审核字段显示表")
     @PutMapping("/{id}")
-    @PreAuthorize("@pms.hasPermission('workflow-bom-edit')")
     public R update(@PathVariable("id") String id, @Validated({UpdateGroup.class}) @RequestBody WorkflowTaskBomDTO workflowTaskBomDTO) {
         workflowTaskBomService.modModelByDTO(workflowTaskBomDTO);
         return new R<>();
@@ -80,7 +77,6 @@ public class WorkflowTaskBomController {
      */
     @SysLog("删除流程任务审核字段显示表")
     @DeleteMapping("/{id}")
-    @PreAuthorize("@pms.hasPermission('workflow-bom-del')")
     public R removeById(@PathVariable String id) {
         workflowTaskBomService.deleteByPrimaryKey(id);
         return new R<>();
@@ -94,7 +90,6 @@ public class WorkflowTaskBomController {
      */
     @SysLog("批量删除流程任务审核字段显示表")
     @DeleteMapping("")
-    @PreAuthorize("@pms.hasPermission('workflow-bom-del')")
     public R removeIds(@RequestBody List<String> ids) {
         workflowTaskBomService.batchDelete(ids);
         return new R<>();
@@ -132,10 +127,16 @@ public class WorkflowTaskBomController {
      */
     @GetMapping("/export")
     @SysLog("流程任务审核字段显示表导出")
-    @PreAuthorize("@pms.hasPermission('workflow-bom-export')")
     public void export(HttpServletResponse response, WorkflowTaskBomDTO workflowTaskBomDTO) {
         List<WorkflowTaskBom> list = workflowTaskBomService.getModelListByDTO(workflowTaskBomDTO);
         ExcelUtil.exportResponseDict(response, ExportWorkflowTaskBomVO.class, BeanConverterUtil.copyListProperties(list, ExportWorkflowTaskBomVO.class), "流程任务审核字段显示表");
     }
 
+    @SysLog("任务发送(发起)")
+    @PutMapping("/publish/task/{id}")
+    public R publishTask(@PathVariable String id) {
+        workflowTaskBomService.publishTask(id);
+        return new R();
+    }
+
 }

+ 3 - 0
platform-service/src/main/java/com/platform/service/sb/SbInfoService.java

@@ -15,6 +15,7 @@ import com.platform.service.base.IBaseService;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
@@ -369,4 +370,6 @@ public interface SbInfoService extends IBaseService<SbInfo, SbInfoDTO> {
 
     List<String> getChildIds(List<String> ids);
 
+    Boolean testVal(String id, BigDecimal val,Integer symbol);
+
 }

+ 21 - 0
platform-service/src/main/java/com/platform/service/sb/impl/SbInfoServiceImpl.java

@@ -3933,4 +3933,25 @@ public class SbInfoServiceImpl extends BaseServiceImpl<SbInfoMapper, SbInfo, SbI
     public List<String> getChildIds(List<String> ids) {
         return mapper.getChildIds(ids);
     }
+
+    @Override
+    public Boolean testVal(String id, BigDecimal val,Integer symbol) {
+        SbInfo info = mapper.selectByPrimaryKey(id);
+        BigDecimal sbVal = BigDecimalUtil.valueOf(info.getCurrentValue());
+        switch (symbol){
+            case 0 : // ≠
+                return sbVal.compareTo(val) != 0;
+            case 1 : // <
+                return sbVal.compareTo(val) < 0;
+            case 2: // ≤
+                return sbVal.compareTo(val) <= 0;
+            case 3 : // =
+                return sbVal.compareTo(val) == 0;
+            case 4: // ≥
+                return sbVal.compareTo(val) >= 0;
+            case 5 : // >
+                return sbVal.compareTo(val) > 0;
+        }
+        return false;
+    }
 }

+ 132 - 29
platform-service/src/main/java/com/platform/service/workflow/impl/WorkflowTaskBomServiceImpl.java

@@ -1,22 +1,23 @@
 package com.platform.service.workflow.impl;
 
+import com.alibaba.fastjson.JSONArray;
 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.common.util.*;
 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.custom.CustomClassName;
+import com.platform.dao.entity.custom.CustomFormData;
 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.custom.CustomClassNameMapper;
+import com.platform.dao.mapper.custom.CustomFormDataMapper;
 import com.platform.dao.mapper.workflow.WorkflowNodeMapper;
 import com.platform.dao.mapper.workflow.WorkflowTaskBomMapper;
 import com.platform.dao.mapper.workflow.WorkflowTaskMapper;
@@ -33,7 +34,10 @@ import tk.mybatis.mapper.weekend.Weekend;
 import tk.mybatis.mapper.weekend.WeekendCriteria;
 
 import javax.annotation.Resource;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -51,6 +55,10 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
     private WorkflowTaskMapper workflowTaskMapper;
     @Autowired
     private WorkflowNodeMapper workflowNodeMapper;
+    @Autowired
+    private CustomClassNameMapper customClassNameMapper;
+    @Autowired
+    private CustomFormDataMapper customFormDataMapper;
 
     @Override
     public int batchDelete(List<String> ids) {
@@ -103,6 +111,7 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
     public void publishTask(String id) {
         WorkflowTaskBom bom = mapper.selectByPrimaryKey(id);
         WorkflowTask task = workflowTaskMapper.selectByPrimaryKey(bom.getTaskId());
+        CustomFormData data = customFormDataMapper.selectByPrimaryKey(task.getFormDataId());
         // 校验是否处于待发起的状态,bom.status=0 & task.status = 3、5、6
         if (bom.getStatus().intValue() != YesNoEnum.NO.getValue()) {
             throw new DeniedException("待办事项状态有误,请检查");
@@ -128,53 +137,147 @@ public class WorkflowTaskBomServiceImpl extends BaseServiceImpl<WorkflowTaskBomM
         WorkflowTask updTask = new WorkflowTask();
         updTask.setId(bom.getTaskId());
         updTask.setFlowId(task.getFlowId());
+        updTask.setApplyTime(LocalDateTime.now());
         WorkflowTaskBom updBom = new WorkflowTaskBom();
         updBom.setId(id);
-        generateTaskBom(nodeList,updTask,updBom);
-        // 修改已有taskBom
-
-        // 修改Task
-
+        WorkflowTaskBom insertBom = generateTaskBom(nodeList,updTask,updBom,data);
+        // 存入bom
+        mapper.insert(insertBom);
+        // 修改老节点
+        mapper.updateByPrimaryKey(updBom);
+        // 修改任务
+        workflowTaskMapper.updateByPrimaryKeySelective(updTask);
     }
 
-    private WorkflowTaskBom generateTaskBom(List<WorkflowNodeVO> nodeList,WorkflowTask updTask,WorkflowTaskBom updBom) {
+    /**
+     * 生成新bom初始方法
+     * @param nodeList
+     * @param updTask
+     * @param updBom
+     * @param data
+     * @return
+     */
+    private WorkflowTaskBom generateTaskBom(List<WorkflowNodeVO> nodeList,WorkflowTask updTask,WorkflowTaskBom updBom,CustomFormData data) {
         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;
-                }
+        for (WorkflowNodeVO nodeVO : nodeList) {
+            bom = generateTaskBom(nodeVO,updTask,updBom,data);
+            if (bom != null) {
+                break;
             }
         }
         return bom;
     }
 
-    private WorkflowTaskBom generateTaskBom(WorkflowNodeVO node,WorkflowTask updTask,WorkflowTaskBom updBom){
+    /**
+     * 具体处理分支方法
+     * @param node
+     * @param updTask
+     * @param updBom
+     * @param data
+     * @return
+     */
+    private WorkflowTaskBom generateTaskBom(WorkflowNodeVO node,WorkflowTask updTask,WorkflowTaskBom updBom,CustomFormData data){
         WorkflowTaskBom bom = null;
         switch (node.getType()) {
             case CommonConstants.CONDITION_TYPE: // 条件分支
                 JSONObject switchJson = JSONObject.parseObject(node.getSwitchJson());
-                int symbol = switchJson.getInteger("symbol"); // 比较符号
+                int symbol = switchJson.getInteger("symbol"); // 比较符号 > = < 等
                 BigDecimal val = BigDecimalUtil.valueNull(switchJson.getString("value")); // 比较值
+                String fieldName = switchJson.getString("fieldName");
+                // 获取主键ID值
+                String primaryKey = getPrimaryKey(data.getJsonString(),fieldName);
+                // 获取表单关联关系
+                if(StringUtils.isBlank(node.getSwitchHandleId())){
+                    throw new DeniedException("分支条件处理class流程未配置");
+                }
+                CustomClassName className = customClassNameMapper.selectByPrimaryKey(node.getSwitchHandleId());
+                Object obj = BeanUtils.getBean(className.getHandleCode());
+                Class cla = obj.getClass();
+                Boolean findFlag = Boolean.FALSE; // 符合分支条件
+                try{
+                    Method method = cla.getMethod("");
+                    findFlag = (Boolean)method.invoke(obj,primaryKey,val,symbol);
+                }catch (NoSuchMethodException e){
+                    e.printStackTrace();
+                }catch (IllegalAccessException e2){
+                    e2.printStackTrace();
+                }catch (InvocationTargetException e3){
+                    e3.printStackTrace();
+                }
+                if(findFlag){
+                    // 获取下一个节点,封装审批人
+                    int nodeSort = node.getNodeLevel();
+                    nodeSort++;
+                    WorkflowNodeDTO nextNode = new WorkflowNodeDTO();
+                    nextNode.setNodeLevel(nodeSort);
+                    nextNode.setFlowId(data.getFlowId());
+                    nextNode.setFrontParentId(node.getFrontId());
+                    List<WorkflowNodeVO> nodeList = workflowNodeMapper.selectNodeList(nextNode);
+                    bom = getBomByNode(nodeList.get(0),updTask,updBom);
+                }
                 // 获取分支
                 break;
             case CommonConstants.VERIFY_USER_TYPE: // 审核人处理
+                bom = getBomByNode(node,updTask,updBom);
                 break;
         }
         return bom;
     }
 
+    /**
+     * 根据node获取bom具体方法
+     * @param node
+     * @return
+     */
+    private WorkflowTaskBom getBomByNode(WorkflowNodeVO node,WorkflowTask updTask,WorkflowTaskBom updBom){
+        WorkflowTaskBom bom = new WorkflowTaskBom();
+        bom.setId(IdGeneratorUtils.getObjectId());
+        bom.setTaskId(updTask.getId());
+        bom.setStatus(YesNoEnum.NO.getValue());
+        bom.setPersonalType(YesNoEnum.YES.getValue() + 1);
+        bom.setCreatedUserName(node.getUserName());
+        bom.setCreatedUserId(node.getUserId());
+        bom.setCreatedTime(LocalDateTime.now());
+        bom.setReadFlag(YesNoEnum.NO.getValue());
+        bom.setReminderNum(YesNoEnum.NO.getValue());
+        // 修改已有taskBom
+        updBom.setStatus(YesNoEnum.YES.getValue());
+        updBom.setHandleRemark("发起审批流程");
+        updBom.setHandleTime(LocalDateTime.now());
+        // 修改Task
+        updTask.setStatus(FlowTaskStatusEnum.VERIFYING.getValue());
+        updTask.setNodeSort(node.getNodeLevel());
+        updTask.setFrontId(node.getFrontId());
+        updTask.setLastTime(LocalDateTime.now());
+        updTask.setLastUserName(SecurityUtils.getUserInfo().getRealName());
+        updTask.setLastUserId(SecurityUtils.getUserInfo().getUserId());
+        updTask.setCurrentUserId(node.getUserId());
+        updTask.setCurrentUserName(node.getUserName());
+        updTask.setRemark("待" + node.getUserName() + "处理");
+        return bom;
+    }
+
+    /**
+     * 检索表单数据中的主键值
+     * @param json
+     * @param fieldName
+     * @return
+     */
+    private String getPrimaryKey(String json,String fieldName){
+        String id = "";
+        JSONObject jsonObject = JSONObject.parseObject(json);
+        String components = jsonObject.getString("components");
+        JSONArray array = JSONArray.parseArray(components);
+        for (int i = 0; i < array.size(); i++) {
+            JSONObject jsonItem = array.getJSONObject(i);
+            if(jsonItem.getString("fieldName").equals(fieldName)){
+                id = jsonItem.getString("id");
+                break;
+            }
+        }
+        return id;
+    }
+
     @Override
     public AbstractPageResultBean<WorkflowTaskBom> selectPageInfo(WorkflowTaskBomDTO record, int pageNum, int pageSize) {
         PageHelper.startPage(pageNum, pageSize);