Quellcode durchsuchen

OA审批推送宜搭,更新项目管理项目监控分析详情

fyz vor 5 Monaten
Ursprung
Commit
911a75fd7e

+ 43 - 0
mjava-pake/src/main/java/com/malk/pake/controller/PkProjectController.java

@@ -0,0 +1,43 @@
+package com.malk.pake.controller;
+
+import com.malk.pake.service.PkProjectService;
+import com.malk.server.common.McR;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("/project")
+@Slf4j
+public class PkProjectController {
+
+    @Autowired
+    private PkProjectService pkProjectService;
+
+
+    @PostMapping("/saleUpdateProject")
+    public void saleUpdateProject(String formInstId){
+        pkProjectService.saleUpdateProject(formInstId);
+    }
+    /**
+     * 推送审批
+     */
+    @PostMapping("/oaUpdateProject")
+    public McR doApprove(String processInstanceId) {
+
+//        log.info("推送审批, {} {}", type, processInstanceId);
+        // OA组件name, 匹配宜搭组件ID
+        Map<String, String> compsId_main = UtilMap.map("费用报销类型, 付款公司, 费用出处, 项目编号, 项目名称, 商机编号, 商机名称", "selectField_m7wq5adn, selectField_m7wq5ado, selectField_m7wq5adp, textField_m7wq5adu, textField_m7wq5adx, textField_m7wq5ae0, textField_m7wq5ae2");
+        Map<String, String> compsId_itinerary = UtilMap.map("报销类目, 报销内容, 报销金额(元)", "selectField_m7wq5ae7, textareaField_m7wq5ae9, numberField_m7wq5aeb");
+        compsId_main.put("报销明细", "tableField_m7wq5ae5"); // 子表组件
+        pkProjectService.oaUpdateProject(processInstanceId, "FORM-E7D787CEA025411B9ED6CF46E0AB0C3DNXU3", compsId_main, compsId_itinerary, "报销明细");
+        return McR.success();
+    }
+
+
+}

+ 10 - 0
mjava-pake/src/main/java/com/malk/pake/service/PkProjectService.java

@@ -0,0 +1,10 @@
+package com.malk.pake.service;
+
+import java.util.Map;
+
+public interface PkProjectService {
+
+    void saleUpdateProject(String formInstId);
+
+    void oaUpdateProject(String processInstanceId, String formUuid, Map<String, String> compsId_main, Map<String, String> compsId_itinerary, String compId_sub_oa);
+}

+ 182 - 0
mjava-pake/src/main/java/com/malk/pake/service/impl/PkProjectServiceImpl.java

@@ -0,0 +1,182 @@
+package com.malk.pake.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.pake.service.PkProjectService;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Notice;
+import com.malk.service.dingtalk.DDClient_Workflow;
+import com.malk.utils.UtilDateTime;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.map.HashedMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Service
+@Slf4j
+public class PkProjectServiceImpl implements PkProjectService {
+
+    @Autowired
+    private DDClient ddClient;
+    @Autowired
+    private DDClient_Notice ddClient_notice;
+    @Autowired
+    private YDClient ydClient;
+    @Autowired
+    private DDClient_Workflow ddClient_workflow;
+
+    private String projectFormUUID = "FORM-7F8921D7324F43B3B1147C1D99A3F758NFIL";
+    private String saleFormUUID = "FORM-4V966N81BW8D84BFBI41WACUKFRZ1XBFPVELLJ";
+
+    /// dingtalk
+    @Value("${dingtalk.appKey}")
+    private String APP_EKY;
+    @Value("${dingtalk.appSecret}")
+    private String APP_SECRET;
+    /// aliwork
+    @Value("${aliwork.appType}")
+    private String APP_TYPE;
+    @Value("${aliwork.systemToken}")
+    private String SYSTRM_TOKEN;
+    @Override
+    public void saleUpdateProject(String formInstId) {
+//        log.info("流程id:{}",formInstId);
+        Map formData = ydClient.queryData(YDParam.builder().formInstanceId(formInstId).build(),
+                YDConf.FORM_QUERY.retrieve_id).getFormData();
+        String contractCode = formData.get("textField_llew0vlc").toString();
+        String contractName = formData.get("textareaField_lq0s1gcw").toString();
+        String contractAmount = formData.get("numberField_llew0vlx_value").toString();
+        String projectCode = formData.get("textField_ltpbh04c").toString();
+        List<Map<String, Object>> dataList = (List<Map<String, Object>>)ydClient.queryData(YDParam.builder().formUuid(projectFormUUID)
+                        .searchFieldJson(JSONObject.toJSONString(UtilMap.map("textField_llemcq7d", projectCode))).build(),
+                YDConf.FORM_QUERY.retrieve_search_form).getData();
+
+        List<Map<String,Object>> association = new ArrayList<>();
+        Map<String, Object> map = UtilMap.map("appType, formType, formUuid, instanceId, subTitle, title", "APP_UNSAR4O4Y7NBDUYXLIP4", "process", saleFormUUID, formInstId, contractCode, contractName);
+        association.add(map);
+        dataList.forEach(e->{
+            ydClient.operateData(YDParam.builder()
+                    .formInstanceId(e.get("formInstanceId").toString())
+                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("associationFormField_lmlq4t3o, textField_lmlq4t3p, textField_lmlq4t3q, numberField_m731di5q",association,contractName,contractCode,contractAmount)))
+                    .useLatestVersion(true)
+                    .build(), YDConf.FORM_OPERATION.update);
+        });
+
+        System.out.println(formData);
+    }
+
+    @Override
+    public void oaUpdateProject(String processInstanceId, String formUuid, Map<String, String> compsId_main, Map<String, String> compsId_itinerary, String compId_sub_oa) {
+
+        System.out.println(processInstanceId);
+        String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
+
+        Map processData = ddClient_workflow.getProcessInstanceId(token, processInstanceId);
+        List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
+        System.out.println(formComponentValues.toString());
+        String userId = String.valueOf(processData.get("originatorUserId"));
+        long cDate = UtilDateTime.parse(UtilMap.getString(processData, "createTime"), "yyyy-MM-dd'T'HH:mm").getTime();
+        Map formData = UtilMap.map("employeeField_ltxqs53k, departmentSelectField_lu20ayky, dateField_ltxqs53j, textField_lygnetw9", Arrays.asList(userId), Arrays.asList(processData.get("originatorDeptId")), cDate, UtilMap.getString(processData, "businessId"));
+        Optional optional = formComponentValues.stream().filter(item -> "费用出处".equals(item.get("name"))).findAny();
+        if (optional.isPresent() && (UtilMap.getString((Map) optional.get(), "value").equals("项目费用") || UtilMap.getString((Map) optional.get(), "value").equals("研发费用"))){
+            Double sum = 0.0;
+            optional = formComponentValues.stream().filter(item -> "项目编号".equals(item.get("name"))).findAny();
+            String projectCode = UtilMap.getString((Map) optional.get(), "value");
+            optional = formComponentValues.stream().filter(item -> "费用报销类型".equals(item.get("name"))).findAny();
+            String type = UtilMap.getString((Map) optional.get(), "value");
+            String filed = "";
+            switch (type){
+                case "日常费用报销":
+                    filed = "numberField_m7473opo";
+                    break;
+                case "差旅费报销":
+                    filed = "numberField_m7473oph";
+                    break;
+                case "业务招待费报销":
+                    filed = "numberField_m7473opn";
+                    break;
+                case "交通费":
+                    filed = "numberField_m7473opi";
+                    break;
+            }
+            for (String name : compsId_main.keySet()) {
+                String compId = compsId_main.get(name);
+                // 判定是否子表 [宜搭]
+                if (compId.startsWith("tableField_")) {
+                    List<Map> details = new ArrayList<>();
+                    // 兼容明细组件, 存在多条情况 [加班跨天才有有明细]
+                    optional = formComponentValues.stream().filter(item -> compId_sub_oa.equals(item.get("name"))).findAny();
+                    if (!optional.isPresent()) {
+                        continue;
+                    }
+                    String schedule = UtilMap.getString((Map) optional.get(), "value");
+                    List<Map> itineraryList = ((List<Map>) JSON.parse(schedule));
+                    // 循环明细数据
+                    for (Map itinerary : itineraryList) {
+                        List<Map> rowValue = (List<Map>) itinerary.get("rowValue");
+                        Map rowData = new HashedMap();
+                        // 循环子表组件
+                        for (String subName : compsId_itinerary.keySet()) {
+                            Object value = rowValue.stream().filter(item -> subName.equals(item.get("bizAlias")) || subName.equals(item.get("label"))).findAny().get().get("value");
+                            if ("报销金额(元)".equals(subName)){
+                                sum = sum + Double.parseDouble(value.toString());
+                            }
+                            //  加班单跨天 [子表label为空]
+                            rowData.put(compsId_itinerary.get(subName), value);
+                        }
+                        details.add(rowData);
+                    }
+                    formData.put(compId, details);
+                }
+                else {
+                    optional = formComponentValues.stream().filter(item -> name.equals(item.get("name"))).findAny();
+                    if (!optional.isPresent()){
+                        continue;
+                    }
+                    formData.put(compId,UtilMap.getString((Map) optional.get(), "value"));
+                }
+            }
+
+            List<Map> dataList = (List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-25910D3D9DA6455C9234BEC1C08687FD0OZK")
+                    .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_llemcq7d",projectCode))).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+            String finalFiled = filed;
+            Double finalSum = sum;
+            dataList.forEach(e->{
+                Map data = (Map) e.get("formData");
+                double dataAmount = Double.parseDouble(data.get(finalFiled + "_value")==null||data.get(finalFiled + "_value").toString().isEmpty() ? "0.0" : data.get(finalFiled + "_value").toString());
+                double dataSumAmount = Double.parseDouble(data.get("numberField_m7473opq_value")==null||data.get("numberField_m7473opq_value").toString().isEmpty() ? "0.0" : data.get("numberField_m7473opq_value").toString());
+                double totalBudgetedCost = Double.parseDouble(data.get("numberField_m732y3r0_value")==null||data.get("numberField_m732y3r0_value").toString().isEmpty() ? "0.0" : data.get("numberField_m732y3r0_value").toString());
+                double totalApplyCost = Double.parseDouble(data.get("numberField_m7wyydmc_value")==null||data.get("numberField_m7wyydmc_value").toString().isEmpty() ? "0.0" : data.get("numberField_m7wyydmc_value").toString());
+                double totalBudgetedApply = Double.parseDouble(data.get("numberField_m7wyydmd_value")==null||data.get("numberField_m7wyydmd_value").toString().isEmpty() ? "0.0" : data.get("numberField_m7wyydmd_value").toString());
+                dataAmount = dataAmount + finalSum;
+                dataSumAmount = dataSumAmount + finalSum;
+                totalApplyCost = totalApplyCost + finalSum;
+                ydClient.operateData(YDParam.builder()
+                        .appType(APP_TYPE)
+                        .systemToken(SYSTRM_TOKEN)
+                        .formInstanceId(e.get("formInstanceId").toString())
+                        .updateFormDataJson(JSON.toJSONString(UtilMap.map(finalFiled + ", numberField_m7473opq, numberField_m7473oqm, numberField_m7wyydmc, numberField_m7473oqi",dataAmount,dataSumAmount,dataSumAmount/totalBudgetedCost*100,totalApplyCost,totalApplyCost/totalBudgetedApply*100)))
+                        .build(),YDConf.FORM_OPERATION.update);
+            });
+            // 用于审批回传
+//        List<Map> tasks = UtilMap.getList(processData, "tasks");
+//        formData.put("textField_lygvvyd9", tasks.get(0).get("taskId"));
+//        formData.put("textField_lygvvyda", tasks.get(0).get("userId"));
+            formData.put("textField_lyh4y3th", processInstanceId);
+            ydClient.operateData(YDParam.builder()
+                    .appType(APP_TYPE)
+                    .systemToken(SYSTRM_TOKEN)
+                    .formUuid(formUuid)
+                    .formDataJson(JSON.toJSONString(formData))
+                    .userId(userId)
+                    .build(), YDConf.FORM_OPERATION.create);
+        }
+    }
+}