|
@@ -0,0 +1,525 @@
|
|
|
|
|
+package com.malk.hangshi.service.Impl;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
+import com.malk.hangshi.service.DingTalkService;
|
|
|
|
|
+import com.malk.hangshi.service.PayService;
|
|
|
|
|
+import com.malk.server.aliwork.YDConf;
|
|
|
|
|
+import com.malk.server.aliwork.YDParam;
|
|
|
|
|
+import com.malk.server.dingtalk.DDConf;
|
|
|
|
|
+import com.malk.server.dingtalk.DDR;
|
|
|
|
|
+import com.malk.server.dingtalk.MDR;
|
|
|
|
|
+import com.malk.service.aliwork.YDClient;
|
|
|
|
|
+import com.malk.service.aliwork.YDService;
|
|
|
|
|
+import com.malk.service.dingtalk.*;
|
|
|
|
|
+import com.malk.utils.UtilMap;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.HashMap;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Map;
|
|
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
+
|
|
|
|
|
+@Service
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+public class PayServiceImpl implements PayService {
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private DDClient ddClient;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private DDClient_Workflow ddClient_workflow;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private DDClient_Meeting ddClientMeeting;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private DDClient_Contacts ddClient_contacts;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private DDClient_Personnel ddClientPersonnel;
|
|
|
|
|
+ @Value("${dingtalk.appKey}")
|
|
|
|
|
+ private String APP_EKY;
|
|
|
|
|
+ @Value("${dingtalk.appSecret}")
|
|
|
|
|
+ private String APP_SECRET;
|
|
|
|
|
+ @Value("${dingtalk.agentId}")
|
|
|
|
|
+ private Long agentId;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ DingTalkService dingTalkService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ DDService ddService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private YDClient ydClient;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private YDService ydService;
|
|
|
|
|
+
|
|
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
|
+
|
|
|
|
|
+ private static final String API_TOKEN = "/corpAccessToken/get/V2";
|
|
|
|
|
+ private static final String POST_GET_USER = "/user/getByMobile";
|
|
|
|
|
+ private static final String POST_DATA_UPDATE = "/crm/custom/v2/data/update";
|
|
|
|
|
+ private static final String TABLE_PRODUCT_FIELID = "TableField_BEUZFS0B8R40";
|
|
|
|
|
+ private static final String TABLE_CELLLINES_FIELID = "TableField_M04O3XGALA80";
|
|
|
|
|
+ private static String CROPID = "";
|
|
|
|
|
+ private ConcurrentHashMap<String, LocalDateTime> formInstanceIdStore = new ConcurrentHashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ //所有的枚举
|
|
|
|
|
+ private static final Map<String, String> EMPLOYEE_ENUM = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ static {
|
|
|
|
|
+ EMPLOYEE_ENUM.put("下属公司","employeeField_mji9tann");
|
|
|
|
|
+ EMPLOYEE_ENUM.put("一线部门","employeeField_mji9tany");
|
|
|
|
|
+ EMPLOYEE_ENUM.put("室","employeeField_mji9tao9");
|
|
|
|
|
+ EMPLOYEE_ENUM.put("班组","employeeField_mjiac7gr");
|
|
|
|
|
+ }
|
|
|
|
|
+ //运行控制子表枚举
|
|
|
|
|
+ private static final Map<String, String> OPERATION_CONTROL = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ static {
|
|
|
|
|
+ OPERATION_CONTROL.put("投资公司","tableField_mjavj2r6");
|
|
|
|
|
+ OPERATION_CONTROL.put("下属公司","tableField_mji9tanq");
|
|
|
|
|
+ OPERATION_CONTROL.put("一线部门","tableField_mji9tao1");
|
|
|
|
|
+ OPERATION_CONTROL.put("室","tableField_mji9taoc");
|
|
|
|
|
+ }
|
|
|
|
|
+ //安全生产子表枚举
|
|
|
|
|
+ private static final Map<String, String> WORK_SAFETY = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ static {
|
|
|
|
|
+ WORK_SAFETY.put("投资公司","tableField_mjgiipn0");
|
|
|
|
|
+// WORK_SAFETY.put("下属公司","tableField_mji9tant");
|
|
|
|
|
+// WORK_SAFETY.put("一线部门","tableField_mji9tao4");
|
|
|
|
|
+// WORK_SAFETY.put("室","tableField_mji9taof");
|
|
|
|
|
+ }
|
|
|
|
|
+ //质量控制子表枚举
|
|
|
|
|
+ private static final Map<String, String> QUALITY_CONTROL = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ static {
|
|
|
|
|
+ QUALITY_CONTROL.put("投资公司","tableField_mjgiipn4");
|
|
|
|
|
+// QUALITY_CONTROL.put("下属公司","tableField_mji9tanw");
|
|
|
|
|
+// QUALITY_CONTROL.put("一线部门","tableField_mji9tao7");
|
|
|
|
|
+// QUALITY_CONTROL.put("室","tableField_mji9taoi");
|
|
|
|
|
+ }
|
|
|
|
|
+ private YDParam.YDParamBuilder _initLYParam() {
|
|
|
|
|
+ return YDParam.builder()
|
|
|
|
|
+ .appType("APP_PG9VWQVT23CRFBOOOG6Y")
|
|
|
|
|
+ .systemToken("73D66971EQO1KI40NT9M96FHV3BK3CZNBQGJMWX1");
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ /**
|
|
|
|
|
+ * token存储
|
|
|
|
|
+ * @param formInstanceId
|
|
|
|
|
+ * @param expireMinutes
|
|
|
|
|
+ */
|
|
|
|
|
+ public void addToken(String formInstanceId, int expireMinutes) {
|
|
|
|
|
+ log.info("缓存添加id:{}",formInstanceId);
|
|
|
|
|
+ LocalDateTime expirationTime = LocalDateTime.now().plusMinutes(expireMinutes);
|
|
|
|
|
+ formInstanceIdStore.put(formInstanceId, expirationTime);
|
|
|
|
|
+ }
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 清理过期token
|
|
|
|
|
+ * @param token
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ public boolean validateToken(String token) {
|
|
|
|
|
+ LocalDateTime expirationTime = formInstanceIdStore.get(token);
|
|
|
|
|
+ if (expirationTime == null || expirationTime.isBefore(LocalDateTime.now())) {
|
|
|
|
|
+ formInstanceIdStore.remove(token); // 清理过期 Token
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 发起流程审批
|
|
|
|
|
+ * @param formInstanceId
|
|
|
|
|
+ * @param depId 部门id
|
|
|
|
|
+ * @return 流程实例id和地址
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Map<String, Object> startProcess(String formInstanceId, String depId, String serial) {
|
|
|
|
|
+ log.info("开始发起流程审批");
|
|
|
|
|
+ addToken(formInstanceId + ",0",1440);
|
|
|
|
|
+ //获取部门下所有员工id
|
|
|
|
|
+ List<String> workingEmployeeIds = ddClient_contacts.listDepartmentUserId(ddClient.getAccessToken(), Long.parseLong(depId));
|
|
|
|
|
+ List<String> instanceIds = new ArrayList<>();
|
|
|
|
|
+ //发送失败的userid
|
|
|
|
|
+ List<String> errorEmployeeIds = new ArrayList<>();
|
|
|
|
|
+
|
|
|
|
|
+ Map formData = ydClient.queryData(_initLYParam()
|
|
|
|
|
+ .formInstId(formInstanceId).build()
|
|
|
|
|
+ , YDConf.FORM_QUERY.retrieve_id).getFormData();
|
|
|
|
|
+
|
|
|
|
|
+ //整合子表
|
|
|
|
|
+ List<List<Map>> lastList = new ArrayList<>();
|
|
|
|
|
+ extracted(formData, lastList, OPERATION_CONTROL, "(一)运行控制");
|
|
|
|
|
+ extracted(formData, lastList, WORK_SAFETY, "(二)安全生产");
|
|
|
|
|
+ extracted(formData, lastList, QUALITY_CONTROL, "(三)质量控制");
|
|
|
|
|
+
|
|
|
|
|
+ String meetingTitle = UtilMap.getString(formData, "textField_mjsiv3xl");
|
|
|
|
|
+ List banzus = UtilMap.getList(formData, "departmentSelectField_mjb7ixr6");//班组
|
|
|
|
|
+ List yixianbumen = UtilMap.getList(formData, "departmentSelectField_mjb7ixr6");//一线部门
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ workingEmployeeIds.forEach(e->{
|
|
|
|
|
+ List<Map> formValue = new ArrayList<>();
|
|
|
|
|
+ List<String> empList = new ArrayList<>();
|
|
|
|
|
+// empList.add(e);
|
|
|
|
|
+ empList.add("153620324221442254");
|
|
|
|
|
+ formValue.add(UtilMap.map("name, value","流水号",serial));
|
|
|
|
|
+ formValue.add(UtilMap.map("name, value","宣讲明细",JSON.toJSONString(lastList)));
|
|
|
|
|
+ formValue.add(UtilMap.map("name, value","宜搭班组会id",formInstanceId));
|
|
|
|
|
+ formValue.add(UtilMap.map("name, value","班组会会议主题",meetingTitle));
|
|
|
|
|
+// formValue.add(UtilMap.map("name, value","creator",e));
|
|
|
|
|
+ formValue.add(UtilMap.map("name, value","creator","153620324221442254"));
|
|
|
|
|
+ formValue.add(UtilMap.map("name, value","联系人", JSON.toJSONString(empList)));
|
|
|
|
|
+// String result = ddClient_workflow.doProcessInstancesNew(ddClient.getAccessToken(), e, "PROC-597774D7-7E42-4C88-AC1D-06CA945E70C9", formValue, depId);
|
|
|
|
|
+ String result = ddClient_workflow.doProcessInstancesNew(ddClient.getAccessToken(), "153620324221442254", "PROC-597774D7-7E42-4C88-AC1D-06CA945E70C9", formValue, depId);
|
|
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(result);
|
|
|
|
|
+ if (!ObjectUtil.isNotNull(jsonObject.get("instanceId"))){
|
|
|
|
|
+ errorEmployeeIds.add(e);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ instanceIds.add(jsonObject.get("instanceId").toString());
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.info("发起流程失败:{}",e);
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ String url = "https://applink.dingtalk.com/approval/detail?corpId=ding226da4276814d290a1320dcb25e91351&instanceId=";
|
|
|
|
|
+ return UtilMap.map("ddProcessId, dtUrl, errorEmpIds", instanceIds, url,errorEmployeeIds);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private static void extracted(Map formData, List<List<Map>> lastList, Map<String, String> currentMap, String type) {
|
|
|
|
|
+ List<Map> details = new ArrayList<>();
|
|
|
|
|
+ final String[] content = {""};
|
|
|
|
|
+ currentMap.forEach((k1,v1)->{
|
|
|
|
|
+ List<Map> sonList = (List<Map>) formData.get(v1);
|
|
|
|
|
+ if (ObjectUtil.isNotNull(sonList) && sonList.size() > 0){
|
|
|
|
|
+ sonList.forEach(s->{
|
|
|
|
|
+ s.forEach((k2,v2)->{
|
|
|
|
|
+ content[0] = content[0] + v2 + System.lineSeparator();
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ details.add(UtilMap.map("name, value","内容",content[0]));
|
|
|
|
|
+ details.add(UtilMap.map("name, value","类型",type));
|
|
|
|
|
+ lastList.add(details);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 终止流程
|
|
|
|
|
+ * @param data 传参
|
|
|
|
|
+ * @return 是否成功
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Map terminateProcess(Map data) {
|
|
|
|
|
+ boolean isSystem = false;
|
|
|
|
|
+ if (data.containsKey("isSystem") && ObjectUtil.isNotNull(data.get("isSystem"))){
|
|
|
|
|
+ isSystem = UtilMap.getBoolean(data,"isSystem");
|
|
|
|
|
+ }
|
|
|
|
|
+ String operatingUserId = "";
|
|
|
|
|
+ if (data.containsKey("operatingUserId")){
|
|
|
|
|
+ operatingUserId = UtilMap.getString(data,"operatingUserId");
|
|
|
|
|
+ }
|
|
|
|
|
+ boolean isOk = ddClient_workflow.terminateRunningApproveNew(ddClient.getAccessToken(), UtilMap.getString(data, "processInstanceId"), isSystem, UtilMap.getString(data, "remark"), operatingUserId);
|
|
|
|
|
+ return UtilMap.map("result",isOk);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void meetingIssue(String formInstanceId) {
|
|
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
|
|
+ String dateStr = today.format(formatter);
|
|
|
|
|
+ Map formData = ydClient.queryData(_initLYParam()
|
|
|
|
|
+ .formInstanceId(formInstanceId)
|
|
|
|
|
+ .useLatestVersion(true)
|
|
|
|
|
+ .build(),
|
|
|
|
|
+ YDConf.FORM_QUERY.retrieve_id).getFormData();
|
|
|
|
|
+ List department = UtilMap.getList(formData, "departmentSelectField_mjb7ixr6_id");
|
|
|
|
|
+ log.info("开始执行下发流程,部门类型:{},id:{}",UtilMap.getString(formData, "selectField_mjavj2ry"),formInstanceId);
|
|
|
|
|
+ List<Map> dataList = new ArrayList<>();
|
|
|
|
|
+
|
|
|
|
|
+ //如果是投资公司下发,则查询所有下属公司,因为在部门档案表中上级部门无法选择投资公司
|
|
|
|
|
+ if (UtilMap.getString(formData, "selectField_mjavj2ry").equals("投资公司")){
|
|
|
|
|
+ //写入AI表格
|
|
|
|
|
+ insertAIExcel(formData);
|
|
|
|
|
+
|
|
|
|
|
+ dataList = ydService.queryFormData_all(_initLYParam()
|
|
|
|
|
+ .formUuid("FORM-651D1713A25E423FB4EC1A5A06A7A741QWEY")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_mjgj9non", "下属公司")))
|
|
|
|
|
+ .build());
|
|
|
|
|
+ }else {
|
|
|
|
|
+ dataList = ydService.queryFormData_all(_initLYParam()
|
|
|
|
|
+ .formUuid("FORM-651D1713A25E423FB4EC1A5A06A7A741QWEY")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("departmentSelectField_mjgqcjsw", department.get(0))))
|
|
|
|
|
+ .build());
|
|
|
|
|
+ }
|
|
|
|
|
+ dataList.forEach(e->{
|
|
|
|
|
+ List issueDepartment = UtilMap.getList(e, "departmentSelectField_mjgj9noi_id");
|
|
|
|
|
+ List issueEmployee = UtilMap.getList(e, "employeeField_mjgj9noh_id");
|
|
|
|
|
+ String depType = UtilMap.getString(e,"selectField_mjgj9non");
|
|
|
|
|
+
|
|
|
|
|
+ formData.put("selectField_mjavj2ry",depType);
|
|
|
|
|
+ formData.put("departmentSelectField_mjb7ixr6",issueDepartment);
|
|
|
|
|
+ formData.put("dateField_mjb860nt",System.currentTimeMillis());
|
|
|
|
|
+
|
|
|
|
|
+ formData.put("employeeField_mji9tann",UtilMap.getList(formData, "employeeField_mji9tann_id"));
|
|
|
|
|
+ formData.put("employeeField_mji9tany",UtilMap.getList(formData, "employeeField_mji9tany_id"));
|
|
|
|
|
+ formData.put("employeeField_mji9tao9",UtilMap.getList(formData, "employeeField_mji9tao9_id"));
|
|
|
|
|
+ formData.put(EMPLOYEE_ENUM.get(UtilMap.getString(e,"selectField_mjgj9non")),issueEmployee);
|
|
|
|
|
+ /*发起流程*/
|
|
|
|
|
+ if (depType.equals("班组")){
|
|
|
|
|
+ String classType = UtilMap.getString(e,"radioField_mke10pcc");
|
|
|
|
|
+
|
|
|
|
|
+ List<Map> mapList1 = (List<Map>) formData.get(OPERATION_CONTROL.get("投资公司"));
|
|
|
|
|
+ List<Map> mapList2 = (List<Map>) formData.get(WORK_SAFETY.get("投资公司"));
|
|
|
|
|
+ List<Map> mapList3 = (List<Map>) formData.get(QUALITY_CONTROL.get("投资公司"));
|
|
|
|
|
+
|
|
|
|
|
+ final String[] content = {""};
|
|
|
|
|
+ if (mapList1.size()>0 && ObjectUtil.isNotNull(mapList1)){
|
|
|
|
|
+ content[0] = content[0] + "(一)运行控制 ";
|
|
|
|
|
+ mapList1.forEach(e1->{
|
|
|
|
|
+ e1.forEach((k,v)->{
|
|
|
|
|
+ content[0] = content[0] + v;
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ if (mapList2.size()>0 && ObjectUtil.isNotNull(mapList2)) {
|
|
|
|
|
+ content[0] = content[0] + "(二)安全生产 ";
|
|
|
|
|
+ mapList2.forEach(e1 -> {
|
|
|
|
|
+ e1.forEach((k, v) -> {
|
|
|
|
|
+ content[0] = content[0] + v;
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ if (mapList3.size()>0 && ObjectUtil.isNotNull(mapList3)) {
|
|
|
|
|
+ content[0] = content[0] + "(三)质量控制 ";
|
|
|
|
|
+ mapList3.forEach(e1 -> {
|
|
|
|
|
+ e1.forEach((k, v) -> {
|
|
|
|
|
+ content[0] = content[0] + v;
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ formData.put("textField_mjkuqqx4",issueDepartment.get(0));
|
|
|
|
|
+ formData.put("numberField_mjqsi2ut",0);
|
|
|
|
|
+ formData.put("radioField_mke10pcc",classType);//是否外包
|
|
|
|
|
+ formData.put("textareaField_mke0p9o9",content[0]);//上级部门内容
|
|
|
|
|
+ formData.put("textField_mjsiv3xl",UtilMap.getList(e, "departmentSelectField_mjgj9noi").get(0).toString()+dateStr+"班前会");//会议主题
|
|
|
|
|
+ ydClient.operateData(_initLYParam()
|
|
|
|
|
+ .formUuid("FORM-18921AB3A1AD4CC6853EB7631B9ABA0AHCF3")
|
|
|
|
|
+ .formDataJson(JSON.toJSONString(formData))
|
|
|
|
|
+ .build(), YDConf.FORM_OPERATION.start);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ ydClient.operateData(_initLYParam()
|
|
|
|
|
+ .formUuid("FORM-609926407D9D4CABB771228200AEE57EKGSE")
|
|
|
|
|
+ .formDataJson(JSON.toJSONString(formData))
|
|
|
|
|
+ .build(), YDConf.FORM_OPERATION.start);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 写入AI表格
|
|
|
|
|
+ * @param formData
|
|
|
|
|
+ */
|
|
|
|
|
+ private void insertAIExcel(Map formData) {
|
|
|
|
|
+ log.info("开始执行插入AI表格");
|
|
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
|
|
+ String dateStr = today.format(formatter);
|
|
|
|
|
+ List<Map> mapList1 = (List<Map>) formData.get(OPERATION_CONTROL.get("投资公司"));
|
|
|
|
|
+ List<Map> mapList2 = (List<Map>) formData.get(WORK_SAFETY.get("投资公司"));
|
|
|
|
|
+ List<Map> mapList3 = (List<Map>) formData.get(QUALITY_CONTROL.get("投资公司"));
|
|
|
|
|
+
|
|
|
|
|
+ final String[] content = {""};
|
|
|
|
|
+ if (mapList1.size()>0 && ObjectUtil.isNotNull(mapList1)){
|
|
|
|
|
+ content[0] = content[0] + "(一)运行控制 ";
|
|
|
|
|
+ mapList1.forEach(e->{
|
|
|
|
|
+ e.forEach((k,v)->{
|
|
|
|
|
+ content[0] = content[0] + v;
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ if (mapList2.size()>0 && ObjectUtil.isNotNull(mapList2)) {
|
|
|
|
|
+ content[0] = content[0] + "(二)安全生产 ";
|
|
|
|
|
+ mapList2.forEach(e -> {
|
|
|
|
|
+ e.forEach((k, v) -> {
|
|
|
|
|
+ content[0] = content[0] + v;
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ if (mapList3.size()>0 && ObjectUtil.isNotNull(mapList3)) {
|
|
|
|
|
+ content[0] = content[0] + "(三)质量控制 ";
|
|
|
|
|
+ mapList3.forEach(e -> {
|
|
|
|
|
+ e.forEach((k, v) -> {
|
|
|
|
|
+ content[0] = content[0] + v;
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ if (mapList1.size()>0 || mapList2.size()>0 || mapList3.size()>0){
|
|
|
|
|
+ List<Map<String,Object>> records = new ArrayList<>();
|
|
|
|
|
+ Map<String, Object> map = UtilMap.map("fields", UtilMap.map("标题, 内容", "东航食品每日运行风险通告("+dateStr+")",content[0]));
|
|
|
|
|
+ records.add(map);
|
|
|
|
|
+ Map body = UtilMap.map("records", records);
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ DDR.doPost("https://api.dingtalk.com/v1.0/notable/bases/XPwkYGxZV3yb9pLrsg2e2ZRZ8AgozOKL/sheets/数据表/records?operatorId=HFfiiOvDDoszFVOKmtiShJQwiEiE", DDConf.initTokenHeader(ddClient.getAccessToken()), null, body);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.info("返回值映射问题,不必理会");
|
|
|
|
|
+ e.printStackTrace();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void getInvestmentCompany(boolean isLastTime) {
|
|
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
|
|
+ // 2. 定义常用格式化器(按需选择)
|
|
|
|
|
+ // 格式1:yyyy-MM-dd(推荐,通用格式)
|
|
|
|
|
+ String dateStr = today.format(formatter);
|
|
|
|
|
+// List<Map> dataList = ydService.queryFormData_all(_initLYParam()
|
|
|
|
|
+// .formUuid("FORM-609926407D9D4CABB771228200AEE57EKGSE")
|
|
|
|
|
+ List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
|
|
|
|
|
+ .appType("APP_PUWIPZKD59N56D06GBJO")
|
|
|
|
|
+ .systemToken("KM666OC1PIGVI5674V8ZPAHRBQBD3LO0WQ5WKR1")
|
|
|
|
|
+ .formUuid("FORM-WY766581TT8BA0H9AYDQZ565KGDD2K9AX5SILH")
|
|
|
|
|
+ .createFromTimeGMT(dateStr + " 00:00:00").createToTimeGMT(dateStr + " 23:59:59")
|
|
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_mjjo82fr","否")))
|
|
|
|
|
+ .build());
|
|
|
|
|
+ log.info("日期:{},条数:{}",dateStr,dataList.size());
|
|
|
|
|
+ if (isLastTime || (ObjectUtil.isNotNull(dataList) && dataList.size() >= 3)){
|
|
|
|
|
+ Map<String, Object> formData = new HashMap<>();
|
|
|
|
|
+ formData.put("selectField_mjavj2ry","投资公司");
|
|
|
|
|
+ formData.put("dateField_mjb860nt",System.currentTimeMillis());
|
|
|
|
|
+ dataList.forEach(e->{
|
|
|
|
|
+ String type = UtilMap.getString(e,"textField_lis5zo49");
|
|
|
|
|
+ List<Map> sonList = (List<Map>) e.get("tableField_mj9dnvr7");
|
|
|
|
|
+ if (sonList.size() > 0 && ObjectUtil.isNotNull(sonList)){
|
|
|
|
|
+ if("运行控制".equals(type)){
|
|
|
|
|
+ sonList.forEach(s->{
|
|
|
|
|
+ s.put("textareaField_mjavj2r7",UtilMap.getString(s,"textareaField_mj9dnvr8"));
|
|
|
|
|
+ });
|
|
|
|
|
+ formData.put("tableField_mjavj2r6",sonList);
|
|
|
|
|
+ }else if ("安全生产".equals(type)) {
|
|
|
|
|
+ sonList.forEach(s->{
|
|
|
|
|
+ s.put("textareaField_mjgiipmy",UtilMap.getString(s,"textareaField_mj9dnvr8"));
|
|
|
|
|
+ });
|
|
|
|
|
+ formData.put("tableField_mjgiipn0",sonList);
|
|
|
|
|
+ } else if ("质量控制".equals(type)) {
|
|
|
|
|
+ sonList.forEach(s->{
|
|
|
|
|
+ s.put("textareaField_mjgiipn2",UtilMap.getString(s,"textareaField_mj9dnvr8"));
|
|
|
|
|
+ });
|
|
|
|
|
+ formData.put("tableField_mjgiipn4",sonList);
|
|
|
|
|
+ }
|
|
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
|
|
+ .appType("APP_PUWIPZKD59N56D06GBJO")
|
|
|
|
|
+ .systemToken("KM666OC1PIGVI5674V8ZPAHRBQBD3LO0WQ5WKR1")
|
|
|
|
|
+ .formInstanceId(UtilMap.getString(e, "formInstanceId"))
|
|
|
|
|
+ .useLatestVersion(true)
|
|
|
|
|
+ .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_mjjo82fr", "是")))
|
|
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ ydClient.operateData(_initLYParam()
|
|
|
|
|
+ .formUuid("FORM-609926407D9D4CABB771228200AEE57EKGSE")
|
|
|
|
|
+ .formDataJson(JSON.toJSONString(formData))
|
|
|
|
|
+ .build(), YDConf.FORM_OPERATION.start);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void updateMeeting(String processInstanceId) {
|
|
|
|
|
+// addToken( "6e16d9ac-104d-4c85-8d85-ee9d4295e2e5,0",1440);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("回调执行更新缓存中计数数据:{}",processInstanceId);
|
|
|
|
|
+ String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
|
|
|
|
|
+ Map processData = ddClient_workflow.getProcessInstanceId(token, processInstanceId);
|
|
|
|
|
+ List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
|
|
|
|
|
+ Map formComp = formComponentValues.stream().filter(item -> "宜搭班组会id".equals(item.get("name"))).findAny().get();
|
|
|
|
|
+ if (ObjectUtil.isNotNull(formComp)){
|
|
|
|
|
+ String value = formComp.get("value").toString();
|
|
|
|
|
+ // 流式判断:anyMatch 找到匹配项立即终止遍历
|
|
|
|
|
+ boolean hasStartWithS = formInstanceIdStore.keySet().stream()
|
|
|
|
|
+ .filter(key -> key != null) // 过滤空 Key,避免 NPE
|
|
|
|
|
+ .anyMatch(key -> key.startsWith(value));
|
|
|
|
|
+ log.info("是否查询到数据:{}",hasStartWithS);
|
|
|
|
|
+ // 若存在
|
|
|
|
|
+ if (hasStartWithS){
|
|
|
|
|
+ for (String key : formInstanceIdStore.keySet()) {
|
|
|
|
|
+ // 避免空 Key 导致 NPE,先判空再匹配前缀
|
|
|
|
|
+ if (key != null && key.startsWith(value)) {
|
|
|
|
|
+ String[] split = key.split(",");
|
|
|
|
|
+ int count = Integer.parseInt(split[1]);
|
|
|
|
|
+ count++;
|
|
|
|
|
+ formInstanceIdStore.put(split[0]+","+count, formInstanceIdStore.get(key));
|
|
|
|
|
+ log.info("更新成功id:{},计数:{}",split[0],formInstanceIdStore.get(split[0]+"-"+count));
|
|
|
|
|
+ formInstanceIdStore.remove(key);
|
|
|
|
|
+ break; // 找到后立即退出循环,提升性能
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 创建视频会议
|
|
|
|
|
+ * @param userId
|
|
|
|
|
+ * @param title
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String createVideoMeeting(String userId, String title) {
|
|
|
|
|
+ String unionId = String.valueOf(ddClient_contacts.getUserInfoById(ddClient.getAccessToken(), userId).get("unionid"));
|
|
|
|
|
+ MDR meeting = ddClientMeeting.createMeeting(ddClient.getAccessToken(), unionId, title, null, true);
|
|
|
|
|
+ return meeting.getExternalLinkUrl();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void updateYidaMeeting() {
|
|
|
|
|
+ formInstanceIdStore.forEach((k, v) -> {
|
|
|
|
|
+ String[] split = k.split(",");
|
|
|
|
|
+ int count = Integer.parseInt(split[1]);
|
|
|
|
|
+ ydClient.operateData(_initLYParam()
|
|
|
|
|
+ .formInstanceId(split[0])
|
|
|
|
|
+ .useLatestVersion(true)
|
|
|
|
|
+ .updateFormDataJson(JSON.toJSONString(UtilMap.map("numberField_mji9taov",count)))
|
|
|
|
|
+ .build(), YDConf.FORM_OPERATION.update);
|
|
|
|
|
+ if (validateToken(k)) {
|
|
|
|
|
+ log.info("已处理流程id:{}",k);
|
|
|
|
|
+ }else {
|
|
|
|
|
+ log.info("已在缓存中移除流程id:{}",k);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void testToken() {
|
|
|
|
|
+// approveUpdateCRM(processInstanceId,"DXCPXS","审批拒绝", isAgree);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void testGet(String id,boolean isAgree) {
|
|
|
|
|
+ System.out.println(id);
|
|
|
|
|
+ if (isAgree){
|
|
|
|
|
+ System.out.println("11111");
|
|
|
|
|
+ log.info("isAgree:{},",isAgree);
|
|
|
|
|
+ }
|
|
|
|
|
+ log.info("id:{},",id);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+}
|