PayServiceImpl.java 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. package com.malk.hangshi.service.Impl;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.malk.hangshi.service.DingTalkService;
  7. import com.malk.hangshi.service.PayService;
  8. import com.malk.server.aliwork.YDConf;
  9. import com.malk.server.aliwork.YDParam;
  10. import com.malk.server.common.McException;
  11. import com.malk.server.dingtalk.DDConf;
  12. import com.malk.server.dingtalk.DDR;
  13. import com.malk.server.dingtalk.MDR;
  14. import com.malk.service.aliwork.YDClient;
  15. import com.malk.service.aliwork.YDService;
  16. import com.malk.service.dingtalk.*;
  17. import com.malk.utils.UtilMap;
  18. import lombok.extern.slf4j.Slf4j;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.stereotype.Service;
  22. import java.time.LocalDate;
  23. import java.time.LocalDateTime;
  24. import java.time.ZoneId;
  25. import java.time.format.DateTimeFormatter;
  26. import java.util.ArrayList;
  27. import java.util.HashMap;
  28. import java.util.List;
  29. import java.util.Map;
  30. import java.util.concurrent.ConcurrentHashMap;
  31. @Service
  32. @Slf4j
  33. public class PayServiceImpl implements PayService {
  34. @Autowired
  35. private DDClient ddClient;
  36. @Autowired
  37. private DDClient_Workflow ddClient_workflow;
  38. @Autowired
  39. private DDClient_Meeting ddClientMeeting;
  40. @Autowired
  41. private DDClient_Contacts ddClient_contacts;
  42. @Autowired
  43. private DDClient_Personnel ddClientPersonnel;
  44. @Value("${dingtalk.appKey}")
  45. private String APP_EKY;
  46. @Value("${dingtalk.appSecret}")
  47. private String APP_SECRET;
  48. @Value("${dingtalk.agentId}")
  49. private Long agentId;
  50. @Autowired
  51. DingTalkService dingTalkService;
  52. @Autowired
  53. DDService ddService;
  54. @Autowired
  55. private YDClient ydClient;
  56. @Autowired
  57. private YDService ydService;
  58. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
  59. private static final String API_TOKEN = "/corpAccessToken/get/V2";
  60. private static final String POST_GET_USER = "/user/getByMobile";
  61. private static final String POST_DATA_UPDATE = "/crm/custom/v2/data/update";
  62. private static final String TABLE_PRODUCT_FIELID = "TableField_BEUZFS0B8R40";
  63. private static final String TABLE_CELLLINES_FIELID = "TableField_M04O3XGALA80";
  64. private static String CROPID = "";
  65. private ConcurrentHashMap<String, LocalDateTime> formInstanceIdStore = new ConcurrentHashMap<>();
  66. //所有的人员控件枚举
  67. private static final Map<String, String> EMPLOYEE_ENUM = new HashMap<>();
  68. static {
  69. EMPLOYEE_ENUM.put("下属公司","employeeField_mji9tann");
  70. EMPLOYEE_ENUM.put("一线部门","employeeField_mji9tany");
  71. EMPLOYEE_ENUM.put("室","employeeField_mji9tao9");
  72. EMPLOYEE_ENUM.put("班组","employeeField_mjiac7gr");
  73. }
  74. //运行控制子表枚举
  75. private static final Map<String, String> OPERATION_CONTROL = new HashMap<>();
  76. static {
  77. OPERATION_CONTROL.put("投资公司","tableField_mjavj2r6");
  78. OPERATION_CONTROL.put("下属公司","tableField_mji9tanq");
  79. OPERATION_CONTROL.put("一线部门","tableField_mji9tao1");
  80. OPERATION_CONTROL.put("室","tableField_mji9taoc");
  81. }
  82. //安全生产子表枚举
  83. private static final Map<String, String> WORK_SAFETY = new HashMap<>();
  84. static {
  85. WORK_SAFETY.put("投资公司","tableField_mjgiipn0");
  86. // WORK_SAFETY.put("下属公司","tableField_mji9tant");
  87. // WORK_SAFETY.put("一线部门","tableField_mji9tao4");
  88. // WORK_SAFETY.put("室","tableField_mji9taof");
  89. }
  90. //质量控制子表枚举
  91. private static final Map<String, String> QUALITY_CONTROL = new HashMap<>();
  92. static {
  93. QUALITY_CONTROL.put("投资公司","tableField_mjgiipn4");
  94. // QUALITY_CONTROL.put("下属公司","tableField_mji9tanw");
  95. // QUALITY_CONTROL.put("一线部门","tableField_mji9tao7");
  96. // QUALITY_CONTROL.put("室","tableField_mji9taoi");
  97. }
  98. private YDParam.YDParamBuilder _initLYParam() {
  99. return YDParam.builder()
  100. .appType("APP_PG9VWQVT23CRFBOOOG6Y")
  101. .systemToken("73D66971EQO1KI40NT9M96FHV3BK3CZNBQGJMWX1");
  102. }
  103. /**
  104. * token存储
  105. * @param formInstanceId
  106. * @param expireMinutes
  107. */
  108. public void addToken(String formInstanceId, int expireMinutes) {
  109. log.info("缓存添加id:{}",formInstanceId);
  110. LocalDateTime expirationTime = LocalDateTime.now().plusMinutes(expireMinutes);
  111. formInstanceIdStore.put(formInstanceId, expirationTime);
  112. }
  113. /**
  114. * 清理过期token
  115. * @param token
  116. * @return
  117. */
  118. public boolean validateToken(String token) {
  119. LocalDateTime expirationTime = formInstanceIdStore.get(token);
  120. if (expirationTime == null || expirationTime.isBefore(LocalDateTime.now())) {
  121. formInstanceIdStore.remove(token); // 清理过期 Token
  122. return false;
  123. }
  124. return true;
  125. }
  126. /**
  127. * 发起流程审批
  128. * @param formInstanceId
  129. * @param depId 部门id
  130. * @return 流程实例id和地址
  131. */
  132. @Override
  133. public Map<String, Object> startProcess(String formInstanceId, String depId, String serial) {
  134. log.info("开始发起流程审批");
  135. addToken(formInstanceId + ",0",1440);
  136. //获取部门下所有员工id
  137. List<String> workingEmployeeIds = ddClient_contacts.listDepartmentUserId(ddClient.getAccessToken(), Long.parseLong(depId));
  138. List<String> instanceIds = new ArrayList<>();
  139. //发送失败的userid
  140. List<String> errorEmployeeIds = new ArrayList<>();
  141. Map formData = ydClient.queryData(_initLYParam()
  142. .formInstId(formInstanceId).build()
  143. , YDConf.FORM_QUERY.retrieve_id).getFormData();
  144. //整合子表
  145. List<List<Map>> lastList = new ArrayList<>();
  146. // extracted(formData, lastList, OPERATION_CONTROL, "(一)运行控制");
  147. // extracted(formData, lastList, WORK_SAFETY, "(二)安全生产");
  148. // extracted(formData, lastList, QUALITY_CONTROL, "(三)质量控制");
  149. extracted(formData, lastList);
  150. String meetingTitle = UtilMap.getString(formData, "textField_mjsiv3xl");
  151. String ClassContent = UtilMap.getString(formData, "textareaField_mkg9hebk");
  152. List banzus = UtilMap.getList(formData, "departmentSelectField_mjb7ixr6");//班组
  153. List yixianbumen = UtilMap.getList(formData, "departmentSelectField_mjb7ixr6");//一线部门
  154. String attachmentStr = UtilMap.getString(formData, "attachmentField_mkv4ln1q");
  155. JSONArray attachments = JSONArray.parseArray(attachmentStr);
  156. List<Map<String, Object>> resultList = new ArrayList<>();
  157. if (ObjectUtil.isNotNull(attachments) && attachments.size() > 0){
  158. log.info("开始处理附件上传");
  159. attachments.forEach(e->{
  160. JSONObject value = (JSONObject) JSONObject.parse(e.toString());
  161. String[] split = UtilMap.getString(value, "name").split("\\.");
  162. String downLoadUrl = "https://c6eln1.aliwork.com"+UtilMap.getString(value, "downloadUrl");
  163. String fileName = split[0];
  164. String type = split[1];
  165. downLoadUrl = ydClient.convertTemporaryUrl(downLoadUrl,"APP_PG9VWQVT23CRFBOOOG6Y","73D66971EQO1KI40NT9M96FHV3BK3CZNBQGJMWX1");
  166. Map map = ddService.uploadFileFormUrlForOverflow(ddClient.getAccessToken(), "957340835", downLoadUrl, fileName, type);
  167. Map<String, Object> result = UtilMap.map("spaceId, fileName, fileSize, fileType, fileId", UtilMap.getString(map, "spaceId"), fileName,
  168. UtilMap.getString(map, "size"), UtilMap.getString(map, "extension"), UtilMap.getString(map, "id"));
  169. resultList.add(result);
  170. });
  171. }
  172. try {
  173. workingEmployeeIds.forEach(e->{
  174. List<Map> formValue = new ArrayList<>();
  175. List<String> empList = new ArrayList<>();
  176. empList.add(e);
  177. formValue.add(UtilMap.map("name, value","附件",JSON.toJSONString(resultList)));
  178. // empList.add("153620324221442254");
  179. formValue.add(UtilMap.map("name, value","流水号",serial));
  180. formValue.add(UtilMap.map("name, value","宣讲明细",JSON.toJSONString(lastList)));
  181. formValue.add(UtilMap.map("name, value","宜搭班组会id",formInstanceId));
  182. formValue.add(UtilMap.map("name, value","班组会会议主题",meetingTitle));
  183. formValue.add(UtilMap.map("name, value","班组宣贯内容",ClassContent));
  184. formValue.add(UtilMap.map("name, value","creator",e));
  185. // formValue.add(UtilMap.map("name, value","creator","153620324221442254"));
  186. formValue.add(UtilMap.map("name, value","联系人", JSON.toJSONString(empList)));
  187. // String result = ddClient_workflow.doProcessInstancesNew(ddClient.getAccessToken(), e, "PROC-597774D7-7E42-4C88-AC1D-06CA945E70C9", formValue, depId);
  188. String result = ddClient_workflow.doProcessInstancesNew(ddClient.getAccessToken(), "957340835", "PROC-597774D7-7E42-4C88-AC1D-06CA945E70C9", formValue, depId);
  189. JSONObject jsonObject = JSONObject.parseObject(result);
  190. if (!ObjectUtil.isNotNull(jsonObject.get("instanceId"))){
  191. errorEmployeeIds.add(e);
  192. }else {
  193. instanceIds.add(jsonObject.get("instanceId").toString());
  194. }
  195. });
  196. } catch (Exception e) {
  197. log.info("发起流程失败:{}",e);
  198. e.printStackTrace();
  199. }
  200. String url = "https://applink.dingtalk.com/approval/detail?corpId=ding226da4276814d290a1320dcb25e91351&instanceId=";
  201. return UtilMap.map("ddProcessId, dtUrl, errorEmpIds", instanceIds, url,errorEmployeeIds);
  202. }
  203. private static void extracted(Map formData, List<List<Map>> lastList, Map<String, String> currentMap, String type) {
  204. List<Map> details = new ArrayList<>();
  205. final String[] content = {""};
  206. currentMap.forEach((k1,v1)->{
  207. List<Map> sonList = (List<Map>) formData.get(v1);
  208. if (ObjectUtil.isNotNull(sonList) && sonList.size() > 0){
  209. sonList.forEach(s->{
  210. s.forEach((k2,v2)->{
  211. content[0] = content[0] + v2 + System.lineSeparator();
  212. });
  213. });
  214. }
  215. });
  216. details.add(UtilMap.map("name, value","内容",content[0]));
  217. details.add(UtilMap.map("name, value","类型",type));
  218. lastList.add(details);
  219. }
  220. private static void extracted(Map formData, List<List<Map>> lastList) {
  221. List<Map> mapList1 = UtilMap.getList(formData,OPERATION_CONTROL.get("投资公司") );
  222. List<Map> mapList2 = UtilMap.getList(formData,WORK_SAFETY.get("投资公司"));
  223. List<Map> mapList3 = UtilMap.getList(formData,QUALITY_CONTROL.get("投资公司"));
  224. List<Map> mapList4 = UtilMap.getList(formData,OPERATION_CONTROL.get("下属公司"));
  225. List<Map> mapList5 = UtilMap.getList(formData,OPERATION_CONTROL.get("一线部门"));
  226. List<Map> mapList6 = UtilMap.getList(formData,OPERATION_CONTROL.get("室"));
  227. if (ObjectUtil.isNotNull(mapList1) && mapList1.size()>0){
  228. final String[] content = {""};
  229. mapList1.forEach(e1->{
  230. e1.forEach((k,v)->{
  231. content[0] = content[0] + v;
  232. });
  233. });
  234. List<Map> details = new ArrayList<>();
  235. details.add(UtilMap.map("name, value","内容",content[0]));
  236. details.add(UtilMap.map("name, value","类型","(一)运行控制"));
  237. lastList.add(details);
  238. }
  239. if (ObjectUtil.isNotNull(mapList2) && mapList2.size()>0) {
  240. final String[] content = {""};
  241. mapList2.forEach(e1 -> {
  242. e1.forEach((k, v) -> {
  243. content[0] = content[0] + v;
  244. });
  245. });
  246. List<Map> details = new ArrayList<>();
  247. details.add(UtilMap.map("name, value","内容",content[0]));
  248. details.add(UtilMap.map("name, value","类型","(二)安全生产"));
  249. lastList.add(details);
  250. }
  251. if (ObjectUtil.isNotNull(mapList3) && mapList3.size()>0) {
  252. final String[] content = {""};
  253. mapList3.forEach(e1 -> {
  254. e1.forEach((k, v) -> {
  255. content[0] = content[0] + v;
  256. });
  257. });
  258. List<Map> details = new ArrayList<>();
  259. details.add(UtilMap.map("name, value","内容",content[0]));
  260. details.add(UtilMap.map("name, value","类型","(三)质量控制"));
  261. lastList.add(details);
  262. }
  263. if (ObjectUtil.isNotNull(mapList4) && mapList4.size()>0) {
  264. final String[] content = {""};
  265. mapList4.forEach(e1 -> {
  266. e1.forEach((k, v) -> {
  267. content[0] = content[0] + v;
  268. });
  269. });
  270. List<Map> details = new ArrayList<>();
  271. details.add(UtilMap.map("name, value","内容",content[0]));
  272. details.add(UtilMap.map("name, value","类型","下属公司"));
  273. lastList.add(details);
  274. }
  275. if (ObjectUtil.isNotNull(mapList5) && mapList5.size()>0) {
  276. final String[] content = {""};
  277. mapList5.forEach(e1 -> {
  278. e1.forEach((k, v) -> {
  279. content[0] = content[0] + v;
  280. });
  281. });
  282. List<Map> details = new ArrayList<>();
  283. details.add(UtilMap.map("name, value","内容",content[0]));
  284. details.add(UtilMap.map("name, value","类型","一线部门"));
  285. lastList.add(details);
  286. }
  287. if (ObjectUtil.isNotNull(mapList6) && mapList6.size()>0) {
  288. final String[] content = {""};
  289. mapList6.forEach(e1 -> {
  290. e1.forEach((k, v) -> {
  291. content[0] = content[0] + v;
  292. });
  293. });
  294. List<Map> details = new ArrayList<>();
  295. details.add(UtilMap.map("name, value","内容",content[0]));
  296. details.add(UtilMap.map("name, value","类型","室"));
  297. lastList.add(details);
  298. }
  299. List<Map> details = new ArrayList<>();
  300. details.add(UtilMap.map("name, value","内容",UtilMap.getString(formData, "textareaField_mkg9hebk")));
  301. details.add(UtilMap.map("name, value","类型","班组"));
  302. lastList.add(details);
  303. }
  304. /**
  305. * 终止流程
  306. * @param data 传参
  307. * @return 是否成功
  308. */
  309. @Override
  310. public Map terminateProcess(Map data) {
  311. boolean isSystem = false;
  312. if (data.containsKey("isSystem") && ObjectUtil.isNotNull(data.get("isSystem"))){
  313. isSystem = UtilMap.getBoolean(data,"isSystem");
  314. }
  315. String operatingUserId = "";
  316. if (data.containsKey("operatingUserId")){
  317. operatingUserId = UtilMap.getString(data,"operatingUserId");
  318. }
  319. boolean isOk = ddClient_workflow.terminateRunningApproveNew(ddClient.getAccessToken(), UtilMap.getString(data, "processInstanceId"), isSystem, UtilMap.getString(data, "remark"), operatingUserId);
  320. return UtilMap.map("result",isOk);
  321. }
  322. @Override
  323. public void meetingIssue(String formInstanceId) {
  324. LocalDate today = LocalDate.now().plusDays(1);
  325. String dateStr = today.format(formatter);
  326. long timestamp = today.atStartOfDay(ZoneId.systemDefault())
  327. .toInstant()
  328. .toEpochMilli();
  329. Map formData = ydClient.queryData(_initLYParam()
  330. .formInstanceId(formInstanceId)
  331. .useLatestVersion(true)
  332. .build(),
  333. YDConf.FORM_QUERY.retrieve_id).getFormData();
  334. List department = UtilMap.getList(formData, "departmentSelectField_mjb7ixr6_id");
  335. log.info("开始执行下发流程,部门类型:{},id:{}",UtilMap.getString(formData, "selectField_mjavj2ry"),formInstanceId);
  336. List<Map> dataList = new ArrayList<>();
  337. //如果是投资公司下发,则查询所有下属公司,因为在部门档案表中上级部门无法选择投资公司
  338. if (UtilMap.getString(formData, "selectField_mjavj2ry").equals("投资公司")){
  339. //写入AI表格
  340. insertAIExcel(formData);
  341. dataList = ydService.queryFormData_all(_initLYParam()
  342. .formUuid("FORM-651D1713A25E423FB4EC1A5A06A7A741QWEY")
  343. .searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_mjgj9non, radioField_mjgsdrat", "下属公司","开启")))
  344. .build());
  345. }else {
  346. dataList = ydService.queryFormData_all(_initLYParam()
  347. .formUuid("FORM-651D1713A25E423FB4EC1A5A06A7A741QWEY")
  348. .searchFieldJson(JSON.toJSONString(UtilMap.map("departmentSelectField_mjgqcjsw, radioField_mjgsdrat", department.get(0),"开启")))
  349. .build());
  350. }
  351. dataList.forEach(e->{
  352. List issueDepartment = UtilMap.getList(e, "departmentSelectField_mjgj9noi_id");
  353. List issueEmployee = UtilMap.getList(e, "employeeField_mjgj9noh_id");
  354. String depType = UtilMap.getString(e,"selectField_mjgj9non");
  355. formData.put("selectField_mjavj2ry",depType);
  356. formData.put("departmentSelectField_mjb7ixr6",issueDepartment);
  357. formData.put("dateField_mjb860nt",System.currentTimeMillis());
  358. formData.put("textField_mkv4ln1p",UtilMap.getString(formData, "serialNumberField_mkv4ln1o"));
  359. formData.put("employeeField_mji9tann",UtilMap.getList(formData, "employeeField_mji9tann_id"));
  360. formData.put("employeeField_mji9tany",UtilMap.getList(formData, "employeeField_mji9tany_id"));
  361. formData.put("employeeField_mji9tao9",UtilMap.getList(formData, "employeeField_mji9tao9_id"));
  362. formData.put("departmentSelectField_mkkjlg1x",UtilMap.getList(formData, "departmentSelectField_mkkjlg1x_id"));
  363. formData.put("departmentSelectField_mkkjlg1y",UtilMap.getList(formData, "departmentSelectField_mkkjlg1y_id"));
  364. formData.put(EMPLOYEE_ENUM.get(UtilMap.getString(e,"selectField_mjgj9non")),issueEmployee);
  365. /*发起流程*/
  366. if (depType.equals("班组")){
  367. String classType = UtilMap.getString(e,"radioField_mke10pcc");
  368. List<Map> mapList1 = UtilMap.getList(formData,OPERATION_CONTROL.get("投资公司") );
  369. List<Map> mapList2 = UtilMap.getList(formData,WORK_SAFETY.get("投资公司"));
  370. List<Map> mapList3 = UtilMap.getList(formData,QUALITY_CONTROL.get("投资公司"));
  371. List<Map> mapList4 = UtilMap.getList(formData,OPERATION_CONTROL.get("下属公司"));
  372. List<Map> mapList5 = UtilMap.getList(formData,OPERATION_CONTROL.get("一线部门"));
  373. List<Map> mapList6 = UtilMap.getList(formData,OPERATION_CONTROL.get("室"));
  374. final String[] content = {"投资公司 \n"};
  375. if (ObjectUtil.isNotNull(mapList1) && mapList1.size()>0){
  376. content[0] = content[0] + "(一)运行控制 \n";
  377. mapList1.forEach(e1->{
  378. e1.forEach((k,v)->{
  379. content[0] = content[0] + v;
  380. });
  381. });
  382. }
  383. if (ObjectUtil.isNotNull(mapList2) && mapList2.size()>0) {
  384. content[0] = content[0] + "\n(二)安全生产 \n";
  385. mapList2.forEach(e1 -> {
  386. e1.forEach((k, v) -> {
  387. content[0] = content[0] + v;
  388. });
  389. });
  390. }
  391. if (ObjectUtil.isNotNull(mapList3) && mapList3.size()>0) {
  392. content[0] = content[0] + "\n(三)质量控制 \n";
  393. mapList3.forEach(e1 -> {
  394. e1.forEach((k, v) -> {
  395. content[0] = content[0] + v;
  396. });
  397. });
  398. }
  399. if (ObjectUtil.isNotNull(mapList4) && mapList4.size()>0 ) {
  400. content[0] = content[0] + "\n下属公司 \n";
  401. mapList4.forEach(e1 -> {
  402. e1.forEach((k, v) -> {
  403. content[0] = content[0] + v;
  404. });
  405. });
  406. }
  407. if (ObjectUtil.isNotNull(mapList5) && mapList5.size()>0) {
  408. content[0] = content[0] + "\n一线部门 \n";
  409. mapList5.forEach(e1 -> {
  410. e1.forEach((k, v) -> {
  411. content[0] = content[0] + v;
  412. });
  413. });
  414. }
  415. if (ObjectUtil.isNotNull(mapList6) && mapList6.size()>0) {
  416. content[0] = content[0] + "\n室 \n";
  417. mapList6.forEach(e1 -> {
  418. e1.forEach((k, v) -> {
  419. content[0] = content[0] + v;
  420. });
  421. });
  422. }
  423. formData.put("textField_mjkuqqx4",issueDepartment.get(0));
  424. formData.put("numberField_mjqsi2ut",0);
  425. formData.put("dateField_mlj0cv20",timestamp);
  426. formData.put("radioField_mke10pcc",classType);//是否外包
  427. formData.put("textareaField_mke0p9o9",content[0]);//上级部门内容
  428. String name = "";
  429. try {
  430. Map deptInfo = ddClient_contacts.getDepartmentInfo(ddClient.getAccessToken(), Long.parseLong(UtilMap.getList(e, "departmentSelectField_mjgj9noi_id").get(0).toString()));
  431. name = UtilMap.getString(deptInfo, "name");
  432. log.info("部门信息:{}",deptInfo);
  433. } catch (NumberFormatException ex) {
  434. name = UtilMap.getList(e, "departmentSelectField_mjgj9noi").get(0).toString();
  435. log.info("获取部门信息出错:{}",ex.toString());
  436. ex.printStackTrace();
  437. }
  438. formData.put("textField_mjsiv3xl",name + dateStr + "班前会");//会议主题
  439. try {
  440. ydClient.operateData(_initLYParam()
  441. .formUuid("FORM-18921AB3A1AD4CC6853EB7631B9ABA0AHCF3")
  442. .formDataJson(JSON.toJSONString(formData))
  443. .build(), YDConf.FORM_OPERATION.start);
  444. }catch (McException mcException){
  445. try {
  446. Thread.sleep(10000);
  447. } catch (InterruptedException ex) {
  448. ex.printStackTrace();
  449. }
  450. ydClient.operateData(_initLYParam()
  451. .formUuid("FORM-18921AB3A1AD4CC6853EB7631B9ABA0AHCF3")
  452. .formDataJson(JSON.toJSONString(formData))
  453. .build(), YDConf.FORM_OPERATION.start);
  454. mcException.printStackTrace();
  455. }
  456. }else {
  457. if(depType.equals("下属公司")){
  458. formData.put("departmentSelectField_mkkjlg1x",issueDepartment);
  459. }else if(depType.equals("一线部门")){
  460. formData.put("departmentSelectField_mkkjlg1y",issueDepartment);
  461. }
  462. ydClient.operateData(_initLYParam()
  463. .formUuid("FORM-609926407D9D4CABB771228200AEE57EKGSE")
  464. .formDataJson(JSON.toJSONString(formData))
  465. .build(), YDConf.FORM_OPERATION.start);
  466. }
  467. });
  468. }
  469. /**
  470. * 写入AI表格
  471. * @param formData
  472. */
  473. private void insertAIExcel(Map formData) {
  474. log.info("开始执行插入AI表格");
  475. LocalDate today = LocalDate.now();
  476. String dateStr = today.format(formatter);
  477. List<Map> mapList1 = UtilMap.getList(formData,OPERATION_CONTROL.get("投资公司"));
  478. List<Map> mapList2 = UtilMap.getList(formData,WORK_SAFETY.get("投资公司"));
  479. List<Map> mapList3 = UtilMap.getList(formData,QUALITY_CONTROL.get("投资公司"));
  480. final String[] content = {""};
  481. if (mapList1.size()>0 && ObjectUtil.isNotNull(mapList1)){
  482. content[0] = content[0] + "(一)运行控制 \n";
  483. mapList1.forEach(e->{
  484. e.forEach((k,v)->{
  485. content[0] = content[0] + v;
  486. });
  487. });
  488. }
  489. if (mapList2.size()>0 && ObjectUtil.isNotNull(mapList2)) {
  490. content[0] = content[0] + "\n(二)安全生产 \n";
  491. mapList2.forEach(e -> {
  492. e.forEach((k, v) -> {
  493. content[0] = content[0] + v;
  494. });
  495. });
  496. }
  497. if (mapList3.size()>0 && ObjectUtil.isNotNull(mapList3)) {
  498. content[0] = content[0] + "\n(三)质量控制 \n";
  499. mapList3.forEach(e -> {
  500. e.forEach((k, v) -> {
  501. content[0] = content[0] + v;
  502. });
  503. });
  504. }
  505. if (mapList1.size()>0 || mapList2.size()>0 || mapList3.size()>0){
  506. List<Map<String,Object>> records = new ArrayList<>();
  507. Map<String, Object> map = UtilMap.map("fields", UtilMap.map("标题, 内容", "东航食品每日运行风险通告("+dateStr+")",content[0]));
  508. records.add(map);
  509. Map body = UtilMap.map("records", records);
  510. try {
  511. DDR.doPost("https://api.dingtalk.com/v1.0/notable/bases/XPwkYGxZV3yb9pLrsg2e2ZRZ8AgozOKL/sheets/数据表/records?operatorId=HFfiiOvDDoszFVOKmtiShJQwiEiE", DDConf.initTokenHeader(ddClient.getAccessToken()), null, body);
  512. } catch (Exception e) {
  513. log.info("返回值映射问题,不必理会");
  514. // e.printStackTrace();
  515. }
  516. }
  517. }
  518. @Override
  519. public void getInvestmentCompany(boolean isLastTime) {
  520. LocalDate today = LocalDate.now();
  521. // 2. 定义常用格式化器(按需选择)
  522. // 格式1:yyyy-MM-dd(推荐,通用格式)
  523. String dateStr = today.format(formatter);
  524. // List<Map> dataList = ydService.queryFormData_all(_initLYParam()
  525. // .formUuid("FORM-609926407D9D4CABB771228200AEE57EKGSE")
  526. List<Map> dataList = ydService.queryFormData_all(YDParam.builder()
  527. .appType("APP_PUWIPZKD59N56D06GBJO")
  528. .systemToken("KM666OC1PIGVI5674V8ZPAHRBQBD3LO0WQ5WKR1")
  529. .formUuid("FORM-WY766581TT8BA0H9AYDQZ565KGDD2K9AX5SILH")
  530. .createFromTimeGMT(dateStr + " 00:00:00").createToTimeGMT(dateStr + " 23:59:59")
  531. .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_mjjo82fr","否")))
  532. .build());
  533. log.info("日期:{},条数:{}",dateStr,dataList.size());
  534. if ((isLastTime && dataList.size() != 0) || (ObjectUtil.isNotNull(dataList) && dataList.size() >= 3)){
  535. Map<String, Object> formData = new HashMap<>();
  536. formData.put("selectField_mjavj2ry","投资公司");
  537. formData.put("dateField_mjb860nt",System.currentTimeMillis());
  538. dataList.forEach(e->{
  539. String type = UtilMap.getString(e,"textField_lis5zo49");
  540. List<Map> sonList = (List<Map>) e.get("tableField_mj9dnvr7");
  541. if (sonList.size() > 0 && ObjectUtil.isNotNull(sonList)){
  542. if("运行控制".equals(type)){
  543. sonList.forEach(s->{
  544. s.put("textareaField_mjavj2r7",UtilMap.getString_default(s,"textareaField_mj9dnvr8","-"));
  545. });
  546. formData.put("tableField_mjavj2r6",sonList);
  547. }else if ("安全生产".equals(type)) {
  548. sonList.forEach(s->{
  549. s.put("textareaField_mjgiipmy",UtilMap.getString_default(s,"textareaField_mj9dnvr8","-"));
  550. });
  551. formData.put("tableField_mjgiipn0",sonList);
  552. } else if ("质量控制".equals(type)) {
  553. sonList.forEach(s->{
  554. s.put("textareaField_mjgiipn2",UtilMap.getString_default(s,"textareaField_mj9dnvr8","-"));
  555. });
  556. formData.put("tableField_mjgiipn4",sonList);
  557. }
  558. ydClient.operateData(YDParam.builder()
  559. .appType("APP_PUWIPZKD59N56D06GBJO")
  560. .systemToken("KM666OC1PIGVI5674V8ZPAHRBQBD3LO0WQ5WKR1")
  561. .formInstanceId(UtilMap.getString(e, "formInstanceId"))
  562. .useLatestVersion(true)
  563. .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_mjjo82fr", "是")))
  564. .build(), YDConf.FORM_OPERATION.update);
  565. }
  566. });
  567. ydClient.operateData(_initLYParam()
  568. .formUuid("FORM-609926407D9D4CABB771228200AEE57EKGSE")
  569. .formDataJson(JSON.toJSONString(formData))
  570. .build(), YDConf.FORM_OPERATION.start);
  571. }
  572. }
  573. @Override
  574. public void updateMeeting(String processInstanceId) {
  575. // addToken( "6e16d9ac-104d-4c85-8d85-ee9d4295e2e5,0",1440);
  576. log.info("回调执行更新缓存中计数数据:{}",processInstanceId);
  577. String token = ddClient.getAccessToken(APP_EKY, APP_SECRET);
  578. Map processData = ddClient_workflow.getProcessInstanceId(token, processInstanceId);
  579. List<Map> formComponentValues = (List<Map>) processData.get("formComponentValues");
  580. Map formComp = formComponentValues.stream().filter(item -> "宜搭班组会id".equals(item.get("name"))).findAny().get();
  581. if (ObjectUtil.isNotNull(formComp)){
  582. String value = formComp.get("value").toString();
  583. // 流式判断:anyMatch 找到匹配项立即终止遍历
  584. boolean hasStartWithS = formInstanceIdStore.keySet().stream()
  585. .filter(key -> key != null) // 过滤空 Key,避免 NPE
  586. .anyMatch(key -> key.startsWith(value));
  587. log.info("是否查询到数据:{}",hasStartWithS);
  588. // 若存在
  589. if (hasStartWithS){
  590. for (String key : formInstanceIdStore.keySet()) {
  591. // 避免空 Key 导致 NPE,先判空再匹配前缀
  592. if (key != null && key.startsWith(value)) {
  593. String[] split = key.split(",");
  594. int count = Integer.parseInt(split[1]);
  595. count++;
  596. formInstanceIdStore.put(split[0]+","+count, formInstanceIdStore.get(key));
  597. log.info("更新成功id:{},计数:{}",split[0],formInstanceIdStore.get(split[0]+"-"+count));
  598. formInstanceIdStore.remove(key);
  599. break; // 找到后立即退出循环,提升性能
  600. }
  601. }
  602. }
  603. }
  604. }
  605. /**
  606. * 创建视频会议
  607. * @param userId
  608. * @param title
  609. * @return
  610. */
  611. @Override
  612. public String createVideoMeeting(String userId, String title) {
  613. String unionId = String.valueOf(ddClient_contacts.getUserInfoById(ddClient.getAccessToken(), userId).get("unionid"));
  614. MDR meeting = ddClientMeeting.createMeeting(ddClient.getAccessToken(), unionId, title, null, true);
  615. return meeting.getExternalLinkUrl();
  616. }
  617. @Override
  618. public void updateYidaMeeting() {
  619. formInstanceIdStore.forEach((k, v) -> {
  620. String[] split = k.split(",");
  621. int count = Integer.parseInt(split[1]);
  622. ydClient.operateData(_initLYParam()
  623. .formInstanceId(split[0])
  624. .useLatestVersion(true)
  625. .updateFormDataJson(JSON.toJSONString(UtilMap.map("numberField_mji9taov",count)))
  626. .build(), YDConf.FORM_OPERATION.update);
  627. if (validateToken(k)) {
  628. log.info("已处理流程id:{}",k);
  629. }else {
  630. log.info("已在缓存中移除流程id:{}",k);
  631. }
  632. });
  633. }
  634. @Override
  635. public void testToken() {
  636. // approveUpdateCRM(processInstanceId,"DXCPXS","审批拒绝", isAgree);
  637. }
  638. @Override
  639. public void testGet(String id,boolean isAgree) {
  640. System.out.println(id);
  641. if (isAgree){
  642. System.out.println("11111");
  643. log.info("isAgree:{},",isAgree);
  644. }
  645. log.info("id:{},",id);
  646. }
  647. }