ソースを参照

中台接口及调用调整

lizhenhao 2 年 前
コミット
039279238f

+ 10 - 7
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/centerservice/service/ccpm/reimbursement/ReimbursementRequest.java

@@ -1,4 +1,4 @@
-package com.jeeplus.centerservice.service.ccpm.reimbursement;
+package com.jeeplus.centerservice.service.ccpm;
 
 import com.jeeplus.centerservice.utils.RestTemplateService;
 import org.springframework.stereotype.Service;
@@ -10,21 +10,24 @@ import java.util.Map;
 
 @Service
 @Transactional(rollbackFor = Exception.class)
-public class ReimbursementRequest {
+public class CcpmRequest {
 
     @Resource
     private RestTemplateService restTemplateService;
 
     /**
-     * 根据报销数据id查询报销详情
+     * 根据数据id查询详情
      * @param id
      * @return
      */
-    public Object getById(String id) {
+    public Object getById(String id, String flowType) {
         String token = "";
-        Map<String, Object> paramMap = new HashMap<>();
-        paramMap.put("id", id);
-        Object res = restTemplateService.getCCPM("/a/workreimbursement/workReimbursement/getById", token, paramMap);
+        Object res = null;
+        if ("13".equals(flowType)) { // 报销详情
+            Map<String, Object> paramMap = new HashMap<>();
+            paramMap.put("id", id);
+            res = restTemplateService.getCCPM("/a/workreimbursement/workReimbursement/getById", token, paramMap);
+        }
         return res;
     }
 

+ 3 - 1
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/centerservice/service/ccpm/flow/FlowRequest.java

@@ -3,6 +3,7 @@ package com.jeeplus.centerservice.service.ccpm.flow;
 import cn.hutool.core.util.StrUtil;
 import com.jeeplus.centerservice.utils.RestTemplateService;
 import com.jeeplus.flowable.model.Flow;
+import com.jeeplus.sys.utils.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -64,7 +65,7 @@ public class FlowRequest {
      * @param flow
      * @return
      */
-    public Object getNotifyList(Flow flow) {
+    public Object getNotifyList(Flow flow, String belongProject) {
         String token = "";
         Map<String, Object> paramMap = new HashMap<>();
         // 设置查询条件
@@ -82,6 +83,7 @@ public class FlowRequest {
         if (com.jeeplus.sys.utils.StringUtils.isNotEmpty(flow.getAssigneeName())) { // 流程发起人
             paramMap.put("userName", flow.getAssigneeName());
         }
+        paramMap.put("belongProject", belongProject);
         paramMap.put("size", -1);
         paramMap.put("count", -1);
         Object response = restTemplateService.getCCPM("/a/workprojectnotify/workProjectNotify/getList", token, paramMap);

+ 10 - 3
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/centerservice/service/ccpm/flow/FlowService.java

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -26,9 +27,12 @@ public class FlowService {
      * @return
      */
     public List<Map<String,Object>> getHistoicFlowList(String procInsId) {
+        List<Map<String,Object>> histoicFlowList = new ArrayList<>();
         Object histoicFlow = flowRequest.getHistoicFlowList(procInsId);
-        List<Map<String,Object>> histoicFlows = JSONArray.parseArray(JSON.toJSONString(histoicFlow));
-        List<Map<String,Object>> histoicFlowList = ConvertServiceUtil.convertHisFlowList(histoicFlows); // 格式转换
+        if (Objects.nonNull(histoicFlow)) {
+            List<Map<String,Object>> histoicFlows = JSONArray.parseArray(JSON.toJSONString(histoicFlow));
+            histoicFlowList.addAll(ConvertServiceUtil.convertHisFlowList(histoicFlows));
+        }
         return histoicFlowList;
     }
 
@@ -38,8 +42,11 @@ public class FlowService {
      * @return
      */
     public List<Map<String,Object>> getFlowChart(String procInsId) {
+        List<Map<String,Object>> flowCharts = new ArrayList<>();
         Object flowChart = flowRequest.getFlowChart(procInsId);
-        List<Map<String,Object>> flowCharts = JSONArray.parseArray(JSON.toJSONString(flowChart)); // 格式转换
+        if (Objects.nonNull(flowChart)) {
+            flowCharts.addAll(JSONArray.parseArray(JSON.toJSONString(flowChart)));
+        }
         return flowCharts;
     }
 }

+ 39 - 21
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/centerservice/service/ccpm/reimbursement/ReimbursementService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.jeeplus.centerservice.dto.reimbursement.SaveInfoDto;
+import com.jeeplus.centerservice.service.ccpm.CcpmRequest;
 import com.jeeplus.centerservice.service.ccpm.flow.FlowRequest;
 import com.jeeplus.centerservice.utils.ConvertServiceUtil;
 import com.jeeplus.sys.utils.StringUtils;
@@ -21,7 +22,7 @@ import java.util.Objects;
 public class ReimbursementService {
 
     @Resource
-    private ReimbursementRequest reimbursementRequest;
+    private CcpmRequest ccpmRequest;
 
     @Resource
     private FlowRequest flowRequest;
@@ -32,18 +33,25 @@ public class ReimbursementService {
      * @return
      */
     public SaveInfoDto getReimbursementById(String id) {
-        Object response = reimbursementRequest.getById(id); // 报销详情
-        SaveInfoDto saveInfoDto = ConvertServiceUtil.convertReim(response); // 格式转换
-        if (Objects.nonNull(saveInfoDto) && StringUtils.isNotBlank(saveInfoDto.getProcInsId())) {
-            // 流程流向图
-            Object flowChart = flowRequest.getFlowChart(saveInfoDto.getProcInsId());
-            List<Map<String,Object>> flowCharts = JSONArray.parseArray(JSON.toJSONString(flowChart)); // 格式转换
-            saveInfoDto.setFlowChart(flowCharts);
-            // 流程历史
-            Object histoicFlow = flowRequest.getHistoicFlowList(saveInfoDto.getProcInsId());
-            List<Map<String,Object>> histoicFlows = JSONArray.parseArray(JSON.toJSONString(histoicFlow));
-            List<Map<String,Object>> histoicFlowList = ConvertServiceUtil.convertHisFlowList(histoicFlows); // 格式转换
-            saveInfoDto.setHistoicFlowList(histoicFlowList);
+        SaveInfoDto saveInfoDto = new SaveInfoDto();
+        Object response = ccpmRequest.getById(id, "13"); // 报销详情
+        if (Objects.nonNull(response)) {
+            saveInfoDto = ConvertServiceUtil.convertReim(response); // 格式转换
+            if (Objects.nonNull(saveInfoDto) && StringUtils.isNotBlank(saveInfoDto.getProcInsId())) {
+                // 流程流向图
+                Object flowChart = flowRequest.getFlowChart(saveInfoDto.getProcInsId());
+                if (Objects.nonNull(flowChart)) {
+                    List<Map<String,Object>> flowCharts = JSONArray.parseArray(JSON.toJSONString(flowChart)); // 格式转换
+                    saveInfoDto.setFlowChart(flowCharts);
+                }
+                // 流程历史
+                Object histoicFlow = flowRequest.getHistoicFlowList(saveInfoDto.getProcInsId());
+                if (Objects.nonNull(histoicFlow)) {
+                    List<Map<String,Object>> histoicFlows = JSONArray.parseArray(JSON.toJSONString(histoicFlow));
+                    List<Map<String,Object>> histoicFlowList = ConvertServiceUtil.convertHisFlowList(histoicFlows); // 格式转换
+                    saveInfoDto.setHistoicFlowList(histoicFlowList);
+                }
+            }
         }
         return saveInfoDto;
     }
@@ -57,10 +65,20 @@ public class ReimbursementService {
      */
     public Map<String, Object> reimAudit(String id, String flag, String taskDefKey, String comment) {
         Map<String, Object> resultMap = new HashMap<>();
-        Object response = reimbursementRequest.getById(id); // 报销详情
-        Map<String, Object> resp = JSONObject.parseObject(JSON.toJSONString(response));
-        Object result = reimbursementRequest.saveAuditFunc(resp, taskDefKey, flag, comment); // 审核通过、审核驳回
-        resultMap = JSONObject.parseObject(JSON.toJSONString(result));
+        Object response = ccpmRequest.getById(id, "13"); // 报销详情
+        if (Objects.nonNull(response)) {
+            Map<String, Object> resp = JSONObject.parseObject(JSON.toJSONString(response));
+            Object result = ccpmRequest.saveAuditFunc(resp, taskDefKey, flag, comment); // 审核通过、审核驳回
+            if (Objects.nonNull(result)) {
+                resultMap = JSONObject.parseObject(JSON.toJSONString(result));
+            } else {
+                resultMap.put("success", false);
+                resultMap.put("message","操作失败");
+            }
+        } else {
+            resultMap.put("success", false);
+            resultMap.put("message","操作失败");
+        }
         return resultMap;
 
     }
@@ -72,10 +90,10 @@ public class ReimbursementService {
      */
     public Map<String, Object> deleteReim(String id) {
         Map<String, Object> resultMap = new HashMap<>();
-        try{
-            Object result = flowRequest.deleteNotify(id,"13"); // 13代表报销模块
-            resultMap = JSONObject.parseObject(JSON.toJSONString(result));
-        } catch (Exception e) {
+        Object result = flowRequest.deleteNotify(id,"13"); // 13代表报销模块
+        if (Objects.nonNull(result)) {
+            resultMap.putAll(JSONObject.parseObject(JSON.toJSONString(result)));
+        } else {
             resultMap.put("code", 0);
             resultMap.put("msg", "报销信息删除失败");
         }

+ 103 - 11
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/centerservice/utils/ConvertServiceUtil.java

@@ -2,11 +2,13 @@ package com.jeeplus.centerservice.utils;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.centerservice.dto.flow.NotifyListDTO;
 import com.jeeplus.centerservice.dto.reimbursement.ReimbursementAmountInfo;
 import com.jeeplus.centerservice.dto.reimbursement.ReimbursementDetailInfo;
 import com.jeeplus.centerservice.dto.reimbursement.SaveInfoDto;
@@ -29,21 +31,27 @@ public class ConvertServiceUtil {
      */
     public static List<ProcessVo> convertProcessVoList(List<Map<String, Object>> res) throws Exception {
         ArrayList<ProcessVo> processVoList = new ArrayList<>();
-        String ccpm_task = Global.getConfig("CCPM_TASK"); // 获取ccpm可查看的待办数据
-        if (StringUtils.isNotBlank(ccpm_task)) {
-            String[] taskAliasList = ccpm_task.split(","); // 获取到ccpm待办
-            if(CollectionUtil.isNotEmpty(res) && ArrayUtil.isNotEmpty(taskAliasList)) {
-                String[] distinctTaskAlias = ArrayUtil.distinct(taskAliasList); // ccpm待办去重
-                for (Map<String, Object> item : res) {
-                    for (String taskAlias : distinctTaskAlias) {
-                        if (taskAlias.equals(item.get("type").toString()) && item.get("remarks").toString().contains("待审批")) {
-                            ProcessVo processVo = convertProcessVo(item);
-                            processVoList.add(processVo);
+        if (CollectionUtil.isNotEmpty(res)) {
+            List<ProcessVo> processVos = JSON.parseArray(JSON.toJSONString(res), ProcessVo.class);
+            String ccpm_task = Global.getConfig("CCPM_TASK"); // 获取ccpm可查看的待办数据
+            if (StringUtils.isNotBlank(ccpm_task)) {
+                String[] taskAliasList = ccpm_task.split(","); // 获取到ccpm待办
+                if(CollectionUtil.isNotEmpty(res) && ArrayUtil.isNotEmpty(taskAliasList)) {
+                    String[] distinctTaskAlias = ArrayUtil.distinct(taskAliasList); // ccpm待办去重
+                    for (ProcessVo item : processVos) {
+                        TaskVo task = item.getTask();
+                        Map vars = item.getVars();
+                        for (String taskAlias : distinctTaskAlias) {
+                            if (Objects.nonNull(task) && taskAlias.equals(task.getProcessDefKey()) &&
+                                    Objects.nonNull(vars) && vars.get("remarks").toString().contains("待审批")) {
+                                processVoList.add(item);
+                            }
                         }
                     }
                 }
             }
         }
+
         return processVoList;
     }
     /**
@@ -105,7 +113,7 @@ public class ConvertServiceUtil {
      */
     public static Page getSortAndPaging(Page page,List<ProcessVo> list) {
         // 将数据按照creaTime倒序排序
-        List<ProcessVo> sort = CollectionUtil.sort(list, new Comparator<ProcessVo>() {
+        CollectionUtil.sort(list, new Comparator<ProcessVo>() {
             @Override
             public int compare(ProcessVo o1, ProcessVo o2) {
                 return o2.getTask().getCreateTime().compareTo(o1.getTask().getCreateTime());
@@ -306,4 +314,88 @@ public class ConvertServiceUtil {
         String format = sdf.format(dt);
         return format;
     }
+
+    /**
+     * 当前系统待办数据转换为ccpm待办 批量转换
+     * @param processVoList
+     * @return
+     */
+    public static List<Map<String,Object>> copyNotifyListToCcpm(List<ProcessVo> processVoList) throws Exception {
+        List<Map<String,Object>> res = new ArrayList<>();
+        for (ProcessVo processVo : processVoList) {
+            Map<String, Object> respMap = copyNotifyToCcpm(processVo);
+            if (MapUtil.isNotEmpty(respMap)) {
+                res.add(respMap);
+            }
+        }
+        return res;
+    }
+
+    /**
+     * 当前系统待办数据转换为ccpm待办
+     * @param processVo
+     * @return
+     * @throws Exception
+     */
+    public static Map<String,Object> copyNotifyToCcpm(ProcessVo processVo) throws Exception {
+        Map<String,Object> res = new HashMap<>();
+        Map<String, Object> vars = processVo.getVars();
+        TaskVo task = processVo.getTask();
+        // 只查询待审批状态的数据
+        // vars.get("agree") 的值为false时,此流程为驳回状态。值为null或其他时,此流程为待审批状态
+        if (Objects.nonNull(vars) && (Objects.isNull(vars.get("agree")) || Boolean.parseBoolean(vars.get("agree").toString()))) {
+            res.put("belongProject",processVo.getBelongProject());
+            // 流程名称
+            if (StringUtils.isNotBlank(processVo.getProcessDefinitionName())){
+                res.put("typeLabel", processVo.getProcessDefinitionName());
+            }
+            // 标题
+            if (Objects.nonNull(vars.get("title"))){
+                res.put("title", "cpa " + vars.get("title").toString()); // 标题
+                res.put("content", vars.get("title").toString()); // 内容
+            }
+            // 流程发起人
+            if (Objects.nonNull(vars.get("userName"))){
+                res.put("createUserName",vars.get("userName").toString());
+            }
+            // 数据id
+            if (Objects.nonNull(vars.get("id"))){
+                res.put("notifyId",vars.get("id").toString());
+            }
+            // 审批状态
+            res.put("remarks","待审批");
+            if (Objects.nonNull(vars.get("agree"))) {
+                if (!Boolean.parseBoolean(vars.get("agree").toString())) {
+                    res.put("remarks","重新发起"); // vars.get("agree")的值为false时,此流程为驳回状态,其他值为待审批状态
+                }
+            }
+            if (Objects.nonNull(task)) {
+                // 流程类型
+                if (StringUtils.isNotBlank(task.getProcessDefKey())){
+                    // Process_1665383385070 评估-报销审批
+//                    if ("Process_1665383385070".equals(task.getProcessDefKey())) {
+//                        res.put("type", "13");
+//                    }
+                    res.put("type", task.getProcessDefKey());
+                }
+                // 当前环节
+                if (Objects.nonNull(task.getName())){
+                    res.put("notifyRole", task.getName());
+                }
+                // 创建时间
+                if (Objects.nonNull(task.getCreateTime())){
+                    res.put("createDate", task.getCreateTime());
+                }
+                // 流程id
+                if (Objects.nonNull(task.getId())){
+                    res.put("id",task.getId());
+                }
+                // 审核人
+                if (Objects.nonNull(task.getAssignee())){
+                    res.put("auditUserName",task.getAssignee());
+                }
+            }
+        }
+        return res;
+    }
 }

+ 19 - 12
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/centerservice/utils/RestTemplateService.java

@@ -53,19 +53,26 @@ public class RestTemplateService {
      * @return
      */
     public Object httpRequest(HttpMethod method, String token, Map<String, Object> paramMap, Map<String, Object> bodyMap, String hostAddress, String path) {
-        JSONObject jsonObject = new JSONObject();
-        if (CollectionUtil.isNotEmpty(bodyMap)) {
-            jsonObject = new JSONObject(bodyMap); // 另一端接口需要使用@RequestBody来接收此参数
-        }
-        String url = getUrl(hostAddress, path, paramMap);
-        HttpHeaders httpHeaders = new HttpHeaders();
+        Object res = null;
+        try {
+            JSONObject jsonObject = new JSONObject();
+            if (CollectionUtil.isNotEmpty(bodyMap)) {
+                jsonObject = new JSONObject(bodyMap); // 另一端接口需要使用@RequestBody来接收此参数
+            }
+            String url = getUrl(hostAddress, path, paramMap);
+            HttpHeaders httpHeaders = new HttpHeaders();
 //        httpHeaders.add("token",token);
-        httpHeaders.add("Accept", MediaType.ALL_VALUE);
-        httpHeaders.add("cookie", "jeeplus.session.id=0635611b0f5a4401836262c7d23ae98e");
-        httpHeaders.setContentType(new MediaType("application","json", Charset.forName("UTF-8")));
-        HttpEntity<Object> entity = new HttpEntity<>(jsonObject,httpHeaders);
-        ResponseEntity<Object> responseEntity = restTemplate.exchange(url, method, entity, Object.class);
-        return responseEntity.getBody();
+            httpHeaders.add("Accept", MediaType.ALL_VALUE);
+            httpHeaders.add("cookie", "jeeplus.session.id=0635611b0f5a4401836262c7d23ae98e");
+            httpHeaders.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));
+            HttpEntity<Object> entity = new HttpEntity<>(jsonObject, httpHeaders);
+            ResponseEntity<Object> responseEntity = restTemplate.exchange(url, method, entity, Object.class);
+            res = responseEntity.getBody();
+        } catch (Exception e) {
+            System.out.println("远程调用失败");
+            e.printStackTrace();
+        }
+        return res;
     }
 
     /**

+ 65 - 15
jeeplus-plugins/jeeplus-flowable/src/main/java/com/jeeplus/flowable/controller/FlowableTaskController.java

@@ -98,26 +98,76 @@ public class FlowableTaskController {
     public ResponseEntity todoListData(Page <ProcessVo> page, Flow flow) throws Exception {
         //获取当前登陆人的信息
         UserDTO currentUserDTO = UserUtils.getCurrentUserDTO();
-        //各服务引用状态 =》 (若包含,则进行获取该服务的流程信息)
-        String inquireStatus = Global.getConfig("INQUIRE_STATUS");
-        Page <ProcessVo> pageList = flowTaskService.todoList(new Page<>(1, -1), flow);
-        List<ProcessVo> list = new ArrayList<>();
-        list.addAll(pageList.getRecords()); // 当前系统查询数据
         //判定如果当前登陆人是否可以查看其他服务的待办信息
         if("1".equals(currentUserDTO.getOtherServiceFlag())){
-            if(inquireStatus.contains("ccpm")){
-                // 访问ccpm
-                Object response = flowRequest.getNotifyList(flow);
+            // 中台数据查询
+            List<Map<String, Object>> cpa = queryTodoListCenter(flow, "cpa", Global.getConfig("INQUIRE_STATUS"));
+            if (cpa.size() > 0) {
+                List<ProcessVo> list = JSON.parseArray(JSON.toJSONString(cpa), ProcessVo.class);
+                // 将整合后的结果排序后分页
+                Page sortAndPaging = ConvertServiceUtil.getSortAndPaging(page, list);
+                return ResponseEntity.ok (sortAndPaging);
+            } else {
+                // 如果中台没有返回任何数据,就去查询本系统分页待办数据
+                Page <ProcessVo> pageList = flowTaskService.todoList(page, flow);
+                return ResponseEntity.ok (pageList);
+            }
+        }else{
+            // 查询本系统分页待办数据
+            Page <ProcessVo> pageList = flowTaskService.todoList(page, flow);
+            return ResponseEntity.ok (pageList);
+        }
+    }
+
+    /**
+     * 查询待办信息后分发给所属系统
+     * @param flow
+     * @param belongProject 所属系统
+     * @param inquireStatus 各服务引用状态 =》 (若包含,则进行获取该服务的流程信息)
+     * @return
+     * @throws Exception
+     */
+    @GetMapping("queryTodoListCenter")
+    public List<Map<String,Object>> queryTodoListCenter(Flow flow,String belongProject,String inquireStatus) throws Exception {
+        List<Map<String, Object>> result = new ArrayList<>();
+        List<ProcessVo> processVoList = new ArrayList<>();
+        // cpa系统
+        if (inquireStatus.contains("cpa") || ("cpa").equals(belongProject)) {
+            Page <ProcessVo> pageList = flowTaskService.todoList(new Page<>(1, -1), flow);
+            pageList.getRecords().stream().forEach(item->{
+                item.setBelongProject("cpa");
+                // 查询审核人
+                if (Objects.nonNull(item.getTask()) && StringUtils.isNotBlank(item.getTask().getAssignee())) {
+                    UserDTO userDTO = UserUtils.get(item.getTask().getAssignee());
+                    if (Objects.nonNull(userDTO) && StringUtils.isNotBlank(userDTO.getName())) {
+                        item.getTask().setAssignee(userDTO.getName());
+                    }
+                }
+            });
+            List<ProcessVo> processVos = pageList.getRecords();
+            processVoList.addAll(processVos);
+        }
+        // ccpm系统
+        if(inquireStatus.contains("ccpm") || ("ccpm").equals(belongProject)){
+            // 访问ccpm
+            Object response = flowRequest.getNotifyList(flow, belongProject);
+            if (Objects.nonNull(response)) {
                 List<Map<String, Object>> res = JSONObject.parseArray(JSON.toJSONString(response));
-                // ccpm待办查询返回结果
-                List<ProcessVo> processVos = ConvertServiceUtil.convertProcessVoList(res);
-                // 整合全部查询结果
-                list.addAll(processVos); // ccpm返回数据
+                if (("ccpm").equals(belongProject)) { // 如果是ccpm系统查询,则直接返回
+                    result.addAll(res);
+                } else { // 如果是其他系统查询,则将结果格式化后返回
+                    List<ProcessVo> processVos = ConvertServiceUtil.convertProcessVoList(res);
+                    processVoList.addAll(processVos);
+                }
             }
         }
-        // 将整合后的结果排序后分页
-        Page sortAndPaging = ConvertServiceUtil.getSortAndPaging(page, list);
-        return ResponseEntity.ok (sortAndPaging);
+        // 根据不同系统返回不同字段值
+        if ("cpa".equals(belongProject)) {
+            result.addAll(JSON.parseArray(JSON.toJSONString(processVoList)));
+        } else if ("ccpm".equals(belongProject)) {
+            result.addAll(ConvertServiceUtil.copyNotifyListToCcpm(processVoList));
+        }
+        return result;
     }
 
     @GetMapping("allTodo")