|
@@ -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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|