ScheduleTask.java 84 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432
  1. package com.malk.tuosi.schedule;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  7. import com.fasterxml.jackson.core.JsonProcessingException;
  8. import com.fasterxml.jackson.core.type.TypeReference;
  9. import com.fasterxml.jackson.databind.JsonNode;
  10. import com.fasterxml.jackson.databind.ObjectMapper;
  11. import com.malk.server.common.McR;
  12. import com.malk.server.dingtalk.DDR;
  13. import com.malk.tuosi.entity.*;
  14. import com.malk.tuosi.mapper.*;
  15. import com.malk.tuosi.service.TBService;
  16. import com.malk.utils.UtilHttp;
  17. import lombok.SneakyThrows;
  18. import lombok.extern.slf4j.Slf4j;
  19. import lombok.var;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.scheduling.annotation.Scheduled;
  22. import org.springframework.web.bind.annotation.*;
  23. import java.text.SimpleDateFormat;
  24. import java.time.LocalDateTime;
  25. import java.time.format.DateTimeFormatter;
  26. import java.util.*;
  27. import java.util.regex.Matcher;
  28. import java.util.regex.Pattern;
  29. import java.util.stream.Collectors;
  30. import java.util.stream.StreamSupport;
  31. @Slf4j
  32. @RestController
  33. @RequestMapping("/scheduleTask")
  34. public class ScheduleTask {
  35. @Autowired
  36. private TBService tbService;
  37. @Autowired
  38. private ConfirmDesignYearMapper confirmDesignYearMapper;
  39. @Autowired
  40. private YearPersonalConfirmMapper yearPersonalConfirmMapper;
  41. @Autowired
  42. private EmployeeWeeklyTasksMapper employeeWeeklyTasksMapper;
  43. @Autowired
  44. private AnnualSeasonalSampleMapper annualSeasonalSampleMapper;
  45. @Autowired
  46. private AnnualSeasonalCategoryMapper annualSeasonalCategoryMapper;
  47. @Autowired
  48. private NewprocessImplementationMapper newprocessImplementationMapper;
  49. @Autowired
  50. private DesigndeparttMonthConfirmMapper designdeparttMonthConfirmMapper;
  51. @Autowired
  52. private ChangeDocumentSourceMapper changeDocumentSourceMapper;
  53. /*每天凌晨定时同步任务状态*/
  54. @SneakyThrows
  55. @GetMapping("/renwulist")
  56. @Scheduled(cron = "0 0 0 * * ?")
  57. public McR RenWuList(){
  58. //计数项目任务
  59. HashMap header = new HashMap();
  60. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  61. McR Token = tbService.AppAccessToken();
  62. Object token = Token.getData();
  63. header.put("Authorization","Bearer " + token);
  64. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  65. header.put("X-Tenant-Type","organization");
  66. String projectId = "6878b323386fac7ab9dbe5e9";
  67. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) null);
  68. Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
  69. int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//1450
  70. //查询项目任务
  71. HashMap param = new HashMap();
  72. param.put("pageSize",100);
  73. ArrayList list = new ArrayList();//分页标全部存在list
  74. ArrayList<String> allIds = new ArrayList<>();//全部任务id存在allIds
  75. String pageToken = "";//初始值
  76. for (int i=0;i<result/100 + 1;i++){
  77. param.put("pageToken",pageToken);
  78. String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/query", header, param);
  79. List<String> batchIds = extractIdsFromJson(doGet1);//提取当前批次的id
  80. allIds.addAll(batchIds);//添加到总列表
  81. ObjectMapper mapper = new ObjectMapper();
  82. String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
  83. if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
  84. // 不为空,使用nextPageToken
  85. list.add(nextPageToken);
  86. pageToken = nextPageToken;
  87. }else {
  88. // 为空,不进行处理
  89. }
  90. }
  91. //查询任务详情
  92. int k =0;
  93. for (int i = 0; i < allIds.size(); i++) {
  94. k++;
  95. HashMap params = new HashMap();
  96. params.put("taskId",allIds.get(i));
  97. String doGet2 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params);
  98. String tfsId = new ObjectMapper().readTree(doGet2).get("result").get(0).get("tfsId").asText();//任务状态ID
  99. String renWuName = new ObjectMapper().readTree(doGet2).get("result").get(0).get("content").asText();//任务名称
  100. String title = StreamSupport.stream(new ObjectMapper().readTree(doGet2)
  101. .get("result").get(0).get("customfields").spliterator(), false)
  102. .filter(field -> "689d4ebf343c05fe73700c93".equals(field.get("cfId").asText()))
  103. .findFirst()
  104. .map(field -> field.get("value").get(0).get("title").asText())
  105. .orElse(null);//CRM单据ID
  106. //搜索项目工作流状态
  107. HashMap params_A = new HashMap();
  108. params_A.put("tfsIds",tfsId);
  109. String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/taskflowstatus/search", header, params_A);
  110. String name = new ObjectMapper().readTree(doGet3).get("result").get(0).get("name").asText();//当前任务状态
  111. //调用回传TB的接口更新状态
  112. HashMap head = new HashMap();
  113. head.put("crmuserid","620131c2fe8d7eb6b8dfbf76");//TODO:这里不清楚权限,用张昆
  114. head.put("TargetSystem","CRM");
  115. HashMap body_B = new HashMap();
  116. HashMap params_B = new HashMap();
  117. params_B.put("crmid",title);
  118. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  119. String currentTime = LocalDateTime.now().format(formatter);
  120. params_B.put("jssj",currentTime);
  121. params_B.put("ddzt",name);
  122. body_B.put("params",params_B);
  123. String s = UtilHttp.doPost("http://ounuo.ip.raresoft.net:8888/api/dd/selfchange", head, null, body_B);
  124. System.out.println(k+"-"+ allIds.size());
  125. log.info("任务名称:{},任务状态:{},CRM单据ID:{},------同步完成",renWuName,name,title);
  126. }
  127. log.info("任务同步完毕!");
  128. return McR.success(result);
  129. }
  130. /*额外方法:从项目任务查询的100条任务提取result中所有的id*/
  131. private static List<String> extractIdsFromJson(String jsonString) throws Exception {
  132. ObjectMapper mapper = new ObjectMapper();
  133. JsonNode rootNode = mapper.readTree(jsonString);
  134. JsonNode resultArray = rootNode.get("result");
  135. // 预分配100容量(每批大约100条数据)
  136. List<String> ids = new ArrayList<>(100);
  137. if (resultArray != null && resultArray.isArray()) {
  138. for (JsonNode item : resultArray) {
  139. if (item.has("id")) {
  140. String id = item.get("id").asText();
  141. ids.add(id);
  142. }
  143. }
  144. }
  145. return ids;
  146. }
  147. /*todo:设计类别年确认情况*/
  148. @Scheduled(cron = "0 30 3 * * ?")
  149. @PostMapping("/confirmDesignYear")
  150. @SneakyThrows
  151. McR confirmDesignYear() throws JsonProcessingException {
  152. //1、统计符合条件的任务个数
  153. HashMap header = new HashMap();
  154. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  155. McR Token = tbService.AppAccessToken();
  156. Object token = Token.getData();
  157. header.put("Authorization","Bearer " + token);
  158. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  159. header.put("X-Tenant-Type","organization");
  160. HashMap param = new HashMap();
  161. String q = "cf:691c29c1f8cbae320a1c8e75 != 无 AND cf:691c29c1f8cbae320a1c8e75 != 扩版 AND cf:691c29c1f8cbae320a1c8e75 !=null AND scenarioId = 6878b3d8f40485da4c5f99a2 AND tfsId = 6878b38d6e46cb7d4fec9592 AND cf:687df8813d5081f8c81cf375 = 公司 AND tagId != 68f5840f90efa8d7498bd5e9 AND tagId != 68f58407a89ee3bbe639f85c AND created >= 2026-01-01";
  162. param.put("q",q);
  163. String projectId = "6878b323386fac7ab9dbe5e9";
  164. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);//todo:[计数项目任务]
  165. Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
  166. int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//23
  167. //2、分页查询
  168. HashMap param1 = new HashMap();
  169. param1.put("pageSize",100);
  170. String pageToken = "";//初始值
  171. for (int i=0;i<result/100 + 1;i++){
  172. ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
  173. param1.put("q",q);
  174. param1.put("pageToken",pageToken);
  175. String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);//todo:[查询项目任务]
  176. List<String> batchIds = extractIdsFromJson(doGet1);
  177. allIds.addAll(batchIds);//添加到总列表
  178. ObjectMapper mapper = new ObjectMapper();
  179. String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
  180. if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
  181. pageToken = nextPageToken;
  182. }else {
  183. // 为空,不进行处理
  184. }
  185. //3、查询任务详情
  186. ArrayList errorList = new ArrayList();
  187. for (int j = 0; j < allIds.size(); j++) {
  188. HashMap params3 = new HashMap();
  189. params3.put("taskId", allIds.get(j));
  190. String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
  191. String taskId = "";//任务id
  192. String taskName = "";//任务名称
  193. String designlevel = "";//设计等级
  194. String tasktype = "确认稿单";//任务类型
  195. taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
  196. taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
  197. JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
  198. for (int p = 0; p < customfields.size(); p++) {
  199. JSONObject field = customfields.getJSONObject(p);
  200. String cfId = field.getString("cfId");
  201. JSONArray valueArray = field.getJSONArray("value");
  202. if (valueArray != null && !valueArray.isEmpty()) {
  203. String value = valueArray.getJSONObject(0).getString("title");
  204. //根据cfId匹配
  205. switch (cfId){
  206. case "691c29c1f8cbae320a1c8e75":
  207. designlevel = value;
  208. break;
  209. }
  210. }
  211. }
  212. /*todo:给实体赋值*/
  213. ConfirmDesignYear confirmDesignYear = new ConfirmDesignYear();
  214. confirmDesignYear.setTaskId(taskId);
  215. confirmDesignYear.setTaskName(taskName);
  216. confirmDesignYear.setDesignLevel(designlevel);
  217. confirmDesignYear.setTaskType(tasktype);
  218. //4、插入数据库
  219. QueryWrapper<ConfirmDesignYear> queryWrapper = new QueryWrapper<>();
  220. List<ConfirmDesignYear> confirmDesignYearList = null;
  221. try {
  222. queryWrapper.eq("task_id", taskId);
  223. confirmDesignYearList = confirmDesignYearMapper.selectList(queryWrapper);
  224. } catch (Exception e) {
  225. e.printStackTrace();
  226. }
  227. UpdateWrapper<ConfirmDesignYear> updateWrapper = new UpdateWrapper<>();
  228. updateWrapper.eq("task_id", taskId);
  229. if (confirmDesignYearList != null && confirmDesignYearList.size() > 0) {
  230. updateWrapper.set("task_name", taskName);
  231. updateWrapper.set("design_level", designlevel);
  232. updateWrapper.set("task_type", tasktype);
  233. confirmDesignYearMapper.update(null, updateWrapper);
  234. }else {
  235. int insert = confirmDesignYearMapper.insert(confirmDesignYear);
  236. Map<String, Object> response = new HashMap<>();
  237. if(insert > 0){
  238. response.put("success", true);
  239. response.put("message", "用户创建成功");
  240. response.put("data", "");
  241. log.info("任务创建成功,任务名称:{},任务id:{}", confirmDesignYear.getTaskName(),confirmDesignYear.getTaskId());
  242. }
  243. }
  244. }
  245. }
  246. log.info("设计类别年确认情况已同步数据库");
  247. return McR.success();
  248. }
  249. /*todo:本年度个人确认稿数据(人员)*//*todo:确认稿件数量(总数量)*//*todo:同期确认稿数量(时间)*/
  250. @Scheduled(cron = "0 0 3 * * ?")
  251. @PostMapping("/yearPersonalconfirm")
  252. @SneakyThrows
  253. McR yearPersonalconfirm(){
  254. //1、统计符合条件的任务个数
  255. Map header = new HashMap<>();
  256. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  257. McR Token = tbService.AppAccessToken();
  258. Object token = Token.getData();
  259. header.put("Authorization","Bearer " + token);
  260. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  261. header.put("X-Tenant-Type","organization");
  262. HashMap param = new HashMap();
  263. String q = "cf:691c29c1f8cbae320a1c8e75 != 无 AND cf:691c29c1f8cbae320a1c8e75 != 扩版 AND cf:691c29c1f8cbae320a1c8e75 !=null AND scenarioId = 6878b3d8f40485da4c5f99a2 AND tfsId = 6878b38d6e46cb7d4fec9592 AND cf:687df8813d5081f8c81cf375 = 公司 AND tagId != 68f5840f90efa8d7498bd5e9 AND tagId != 68f58407a89ee3bbe639f85c AND created >= 2026-01-01";
  264. param.put("q",q);
  265. String projectId = "6878b323386fac7ab9dbe5e9";
  266. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
  267. Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
  268. int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//26
  269. //2、分页查询
  270. HashMap param1 = new HashMap();
  271. param1.put("pageSize",100);
  272. String pageToken = "";//初始值
  273. for (int i=0;i<result/100 + 1;i++){
  274. ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
  275. param1.put("q",q);
  276. param1.put("pageToken",pageToken);
  277. String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
  278. List<String> batchIds = extractIdsFromJson(doGet1);
  279. allIds.addAll(batchIds);//添加到总列表
  280. ObjectMapper mapper = new ObjectMapper();
  281. String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
  282. if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
  283. pageToken = nextPageToken;
  284. }else {
  285. // 为空,不进行处理
  286. }
  287. //3、查询任务详情
  288. String deadline = "";//完成时间
  289. String deadlineTime = "";
  290. for (int j = 0; j < allIds.size(); j++) {
  291. String taskId1 = allIds.get(j);
  292. HashMap params3 = new HashMap();
  293. //补充:查询任务前先看下这个是否是新版本的工作流
  294. String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
  295. JSONObject response = JSON.parseObject(doneGet);
  296. JSONArray resultArray = response.getJSONArray("result");
  297. String targetId_deadline = "6875c736476bc6384b458cfc";//【完成时间节点】
  298. String targetName = "确认工";//确认工艺等级完成
  299. for (int k = 0; k < resultArray.size(); k++) {
  300. JSONObject node = resultArray.getJSONObject(k);
  301. String currentNodeId = node.getString("name");
  302. String indexOf = currentNodeId.substring(0,3);
  303. if (targetName.contains(indexOf)) {
  304. for(int k1 = 0; k1 < resultArray.size(); k1++){
  305. JSONObject node1 = resultArray.getJSONObject(k1);
  306. if(targetId_deadline.equals(node1.getString("id"))){
  307. deadline = node1.getString("accomplished");
  308. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
  309. SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  310. //【时间转换】TB中获取的时间为UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。
  311. String timeStr = deadline.replace("Z", " UTC");
  312. try {
  313. Date zhuangtaiDate = format.parse(timeStr);
  314. deadlineTime = defaultFormat.format(zhuangtaiDate);
  315. } catch (Exception e) {
  316. e.printStackTrace();
  317. }
  318. }
  319. }
  320. params3.put("taskId", taskId1);
  321. String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
  322. String taskId = "";//任务id
  323. String taskName = "";//任务名称
  324. String designPerson = "";//设计人员
  325. String department = "";//所属部门
  326. Integer coefficient = null;//系数
  327. String customerName = "";//客户名称
  328. String designlevel = "";//设计等级
  329. taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
  330. taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
  331. JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
  332. for (int p = 0; p < customfields.size(); p++) {
  333. JSONObject field = customfields.getJSONObject(p);
  334. String cfId = field.getString("cfId");
  335. JSONArray valueArray = field.getJSONArray("value");
  336. if (valueArray != null && !valueArray.isEmpty()) {
  337. String value = valueArray.getJSONObject(0).getString("title");
  338. //根据cfId匹配
  339. switch (cfId){
  340. case "691c29c1f8cbae320a1c8e75":
  341. designlevel = value;
  342. break;
  343. case "687df3b60ae1530fa2704499":
  344. customerName = value;
  345. break;
  346. case "695deb1a3fbe995aeeb1b590":
  347. designPerson = value;
  348. break;
  349. }
  350. }
  351. }
  352. /*todo:给实体赋值*/
  353. YearPersonalConfirm yearPersonalConfirm = new YearPersonalConfirm();
  354. yearPersonalConfirm.setTaskId(taskId);
  355. yearPersonalConfirm.setTaskName(taskName);
  356. yearPersonalConfirm.setDesignPerson(designPerson);
  357. if("一级设计".equals(designlevel)){
  358. coefficient = 5;
  359. }else if("二级设计".equals(designlevel)){
  360. coefficient = 3;
  361. }else if("三级设计".equals(designlevel)){
  362. coefficient = 1;
  363. }else if("四级设计".equals(designlevel)){
  364. coefficient = 0;
  365. }
  366. yearPersonalConfirm.setCoefficient(coefficient);
  367. yearPersonalConfirm.setCustomerName(customerName);
  368. yearPersonalConfirm.setDesignLevel(designlevel);
  369. yearPersonalConfirm.setDeadline(deadlineTime);
  370. if(!designPerson.equals("")){
  371. department = UserGetDeprt(designPerson);
  372. }
  373. yearPersonalConfirm.setDepartment(department);
  374. //4、插入数据库
  375. QueryWrapper<YearPersonalConfirm> queryWrapper = new QueryWrapper<>();
  376. List<YearPersonalConfirm> YearPersonalConfirmList = null;
  377. try {
  378. queryWrapper.eq("task_id", taskId);
  379. YearPersonalConfirmList = yearPersonalConfirmMapper.selectList(queryWrapper);
  380. } catch (Exception e) {
  381. e.printStackTrace();
  382. }
  383. UpdateWrapper<YearPersonalConfirm> updateWrapper = new UpdateWrapper<>();
  384. updateWrapper.eq("task_id", taskId);
  385. if (YearPersonalConfirmList != null && YearPersonalConfirmList.size() > 0) {
  386. updateWrapper.set("task_name", taskName);
  387. updateWrapper.set("design_person", designPerson);
  388. updateWrapper.set("coefficient", coefficient);
  389. updateWrapper.set("customer_name", customerName);
  390. updateWrapper.set("design_level", designlevel);
  391. updateWrapper.set("deadline",deadlineTime);
  392. updateWrapper.set("department",department);
  393. yearPersonalConfirmMapper.update(null, updateWrapper);
  394. }else {
  395. int insert = yearPersonalConfirmMapper.insert(yearPersonalConfirm);
  396. Map<String, Object> response1 = new HashMap<>();
  397. if(insert > 0){
  398. response1.put("success", true);
  399. response1.put("message", "用户创建成功");
  400. response1.put("data", "");
  401. log.info("任务创建成功,任务名称:{},任务id:{}", yearPersonalConfirm.getTaskName(),yearPersonalConfirm.getTaskId());
  402. }
  403. }
  404. }
  405. }
  406. }
  407. }
  408. log.info("本年度个人确认稿数据、确认稿件数量、同期确认稿数量");
  409. return McR.success();
  410. }
  411. /*todo:员工每周任务*/
  412. @Scheduled(cron = "0 30 2 * * ?")
  413. @PostMapping("/employeeWeeklyTasks")
  414. @SneakyThrows
  415. McR employeeWeeklyTasks(){
  416. //1、统计符合条件的任务个数
  417. Map header = new HashMap<>();
  418. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  419. McR Token = tbService.AppAccessToken();
  420. Object token = Token.getData();
  421. header.put("Authorization","Bearer " + token);
  422. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  423. header.put("X-Tenant-Type","organization");
  424. HashMap param = new HashMap();
  425. String q = "(tfsId = 6895659041ab7094b84f7235 OR tfsId = 6878b384d3c6329fa3728bc5 OR tfsId = 6878b384d3c6329fa3728c0d OR tfsId = 6878b384d3c6329fa3728c4d OR tfsId = 68946c59de80b116cef042a2 OR tfsId = 68955f8d3fc1a7d437bc2b74 OR tfsId = 6878b38c6e46cb7d4fec943e OR tfsId = 6895659041ab7094b84f7237 OR tfsId = 68946c59de80b116cef042a4 OR tfsId = 68955f8d3fc1a7d437bc2b77 OR tfsId = 68bfbe3701710304d9992693 OR tfsId = 6878b384d3c6329fa3728c0e OR tfsId =6878b384d3c6329fa3728c4e OR tfsId = 6878b384d3c6329fa3728bc6 OR tfsId = 6878b38c6e46cb7d4fec943f OR tfsId =6878b384d3c6329fa3728bc7 OR tfsId =689ededd07e4bad72e58f33b) AND tagId != 68f5840f90efa8d7498bd5e9 AND tagId != 68f58407a89ee3bbe639f85c";
  426. param.put("q",q);
  427. String projectId = "6878b323386fac7ab9dbe5e9";
  428. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
  429. Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
  430. int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//16
  431. //2、分页查询
  432. HashMap param1 = new HashMap();
  433. param1.put("pageSize",100);
  434. String pageToken = "";//初始值
  435. for (int i=0;i<result/100 + 1;i++) {
  436. ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
  437. param1.put("q", q);
  438. param1.put("pageToken", pageToken);
  439. String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
  440. List<String> batchIds = extractIdsFromJson(doGet1);
  441. allIds.addAll(batchIds);//添加到总列表
  442. ObjectMapper mapper = new ObjectMapper();
  443. String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
  444. if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
  445. pageToken = nextPageToken;
  446. } else {
  447. // 为空,不进行处理
  448. }
  449. //3、查询任务详情
  450. String deadlineTime_START = "";
  451. String deadlineTime_END = "";
  452. for (int j = 0; j < allIds.size(); j++) {
  453. String taskId1 = allIds.get(j);
  454. HashMap params3 = new HashMap();
  455. String status = "";//状态
  456. String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
  457. JSONObject response = JSON.parseObject(doneGet);
  458. JSONArray resultArray = response.getJSONArray("result");
  459. String targetName = "设计接";
  460. //这里只是遍历每一条任务是否完成status状态
  461. for(int n = 0;n < resultArray.size();n++){
  462. JSONObject node = resultArray.getJSONObject(n);
  463. String nodeName = node.getString("name");
  464. if("已完成".equals(nodeName)){
  465. status = node.getString("status");
  466. break;
  467. }
  468. }
  469. for (int k = 0; k < resultArray.size(); k++) {
  470. JSONObject node = resultArray.getJSONObject(k);
  471. String currentNodeId = node.getString("name");
  472. String indexOf = currentNodeId.substring(0,3);
  473. //抓取设计接单节点数据
  474. if (targetName.contains(indexOf)) {
  475. params3.put("taskId", taskId1);//allIds.get(j)
  476. String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
  477. String taskId = "";//任务id
  478. String taskName = "";//任务名称
  479. String manager = "";//负责人
  480. String time_start = "";//开始时间
  481. String time_end = "";//结束时间
  482. String task_type = "";//任务类型
  483. String department = "";//所属部门
  484. time_start = node.getString("startDate");
  485. time_end = node.getString("dueDate");
  486. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
  487. SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  488. //【时间转换】TB中获取的时间为UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。
  489. String timeStr = "";
  490. if(time_start != null){
  491. timeStr = time_start.replace("Z", " UTC");
  492. }
  493. String timeStr_A = "";
  494. if(time_end != null){
  495. timeStr_A = time_end.replace("Z", " UTC");
  496. }
  497. try {
  498. if(timeStr != null){
  499. Date zhuangtaiDate = format.parse(timeStr);
  500. deadlineTime_START = defaultFormat.format(zhuangtaiDate);
  501. }
  502. if(timeStr_A != ""){
  503. Date zhuangtaiDate_A = format.parse(timeStr_A);
  504. deadlineTime_END = defaultFormat.format(zhuangtaiDate_A);
  505. }
  506. } catch (Exception e) {
  507. e.printStackTrace();
  508. }
  509. taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
  510. taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
  511. String type = new ObjectMapper().readTree(doGet3).get("result").get(0).get("sfcId").asText();
  512. switch (type) {
  513. case "6878b3b60d49d89e7955726f"://PPT效果图
  514. task_type = "PPT效果图单";
  515. break;
  516. case "6878b3c0669d175c3c6bc679"://打样机打样
  517. task_type = "打样机打样";
  518. break;
  519. case "6878b3ceb5ffcf500365d17a"://印刷机打样
  520. task_type = "印刷机打样";
  521. break;
  522. case "6878b3d8f40485da4c5f99a2"://确认稿单
  523. task_type = "确认稿单";
  524. break;
  525. case "6878b39a27ae5f3cac355fb9"://设计单
  526. task_type = "设计单";
  527. break;
  528. case "6878b3a4090e6872fd6b78c6"://设计修改单
  529. task_type = "设计修改单";
  530. break;
  531. case "6878b3ad9e17ac8a027c6d37"://设计扩版单
  532. task_type = "设计扩版单";
  533. break;
  534. }
  535. JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
  536. for (int p = 0; p < customfields.size(); p++) {
  537. JSONObject field = customfields.getJSONObject(p);
  538. String cfId = field.getString("cfId");
  539. JSONArray valueArray = field.getJSONArray("value");
  540. if (valueArray != null && !valueArray.isEmpty()) {
  541. //根据cfId匹配
  542. switch (cfId) {
  543. case "66bb1a56f7e230ed6843796e"://设计接单的负责人
  544. for (int a = 0; a < valueArray.size(); a++) {
  545. String value = valueArray.getJSONObject(a).getString("title");
  546. manager = value;
  547. department = UserGetDeprt(manager);
  548. /*todo:给实体赋值*/
  549. EmployeeWeeklyTasks employeeWeeklyTasks = new EmployeeWeeklyTasks();
  550. employeeWeeklyTasks.setTaskId(taskId);
  551. employeeWeeklyTasks.setTaskName(taskName);
  552. employeeWeeklyTasks.setManager(manager);
  553. employeeWeeklyTasks.setTaskType(task_type);
  554. employeeWeeklyTasks.setTimeEnd(deadlineTime_END);
  555. employeeWeeklyTasks.setTimeStart(deadlineTime_START);
  556. employeeWeeklyTasks.setStatus(status);
  557. employeeWeeklyTasks.setDepartment(department);
  558. //4、插入数据库
  559. QueryWrapper<EmployeeWeeklyTasks> queryWrapper = new QueryWrapper<>();
  560. List<EmployeeWeeklyTasks> EmployeeWeeklyTasksList = null;
  561. try {
  562. String finalManager = manager;
  563. queryWrapper.eq("task_id", taskId).and(q1 -> q1.eq("manager", finalManager));
  564. EmployeeWeeklyTasksList = employeeWeeklyTasksMapper.selectList(queryWrapper);
  565. } catch (Exception e) {
  566. e.printStackTrace();
  567. }
  568. UpdateWrapper<EmployeeWeeklyTasks> updateWrapper = new UpdateWrapper<>();
  569. updateWrapper.eq("task_id", taskId).eq("manager",manager);
  570. if (EmployeeWeeklyTasksList != null && EmployeeWeeklyTasksList.size() > 0) {
  571. updateWrapper.set("task_name", taskName);
  572. updateWrapper.set("manager", manager);
  573. updateWrapper.set("time_start", deadlineTime_START);
  574. updateWrapper.set("time_end", deadlineTime_END);
  575. updateWrapper.set("task_type", task_type);
  576. updateWrapper.set("status", status);
  577. updateWrapper.set("department",department);
  578. employeeWeeklyTasksMapper.update(null, updateWrapper);
  579. } else {
  580. int insert = employeeWeeklyTasksMapper.insert(employeeWeeklyTasks);
  581. Map<String, Object> response1 = new HashMap<>();
  582. if (insert > 0) {
  583. response1.put("success", true);
  584. response1.put("message", "用户创建成功");
  585. response1.put("data", "");
  586. log.info("任务创建成功,任务名称:{},任务id:{}", employeeWeeklyTasks.getTaskName(), employeeWeeklyTasks.getTaskId());
  587. }
  588. }
  589. }
  590. // manager = value;
  591. break;
  592. }
  593. }
  594. }
  595. }
  596. }
  597. }
  598. }
  599. log.info("员工每周工作内容已同步");
  600. return McR.success();
  601. }
  602. /*todo:年度季节品类打样数量*/
  603. @Scheduled(cron = "0 0 2 * * ?")
  604. @PostMapping("/annualSeasonalSample")
  605. @SneakyThrows
  606. McR annualSeasonalSample(){
  607. //1、统计符合条件的任务个数
  608. Map header = new HashMap<>();
  609. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  610. McR Token = tbService.AppAccessToken();
  611. Object token = Token.getData();
  612. header.put("Authorization","Bearer " + token);
  613. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  614. header.put("X-Tenant-Type","organization");
  615. HashMap param = new HashMap();
  616. String q = " (tfsId = 6878b38c6e46cb7d4fec9479 OR tfsId = 6878b38d6e46cb7d4fec9516) AND (scenarioId = 6878b3c0669d175c3c6bc679 OR scenarioId = 6878b3ceb5ffcf500365d17a) AND (cf:691c29c1f8cbae320a1c8e75 = 二级设计 OR cf:691c29c1f8cbae320a1c8e75 = 二级系列设计) AND cf:687df8813d5081f8c81cf375 = 公司 AND tagId != 68f5840f90efa8d7498bd5e9 AND tagId != 68f58407a89ee3bbe639f85c AND created >= 2026-01-01";
  617. param.put("q",q);
  618. String projectId = "6878b323386fac7ab9dbe5e9";
  619. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
  620. Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
  621. int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//57
  622. //2、分页查询
  623. HashMap param1 = new HashMap();
  624. param1.put("pageSize",100);
  625. String pageToken = "";//初始值
  626. for (int i=0;i<result/100 + 1;i++) {
  627. ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
  628. param1.put("q", q);
  629. param1.put("pageToken", pageToken);
  630. String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
  631. List<String> batchIds = extractIdsFromJson(doGet1);
  632. allIds.addAll(batchIds);//添加到总列表
  633. ObjectMapper mapper = new ObjectMapper();
  634. String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
  635. if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
  636. pageToken = nextPageToken;
  637. } else {
  638. // 为空,不进行处理
  639. }
  640. //3、查询任务详情
  641. for (int j = 0; j < allIds.size(); j++) {
  642. String taskId1 = allIds.get(j);
  643. HashMap params3 = new HashMap();
  644. //补充:查询任务前先看下这个是否是新版本的工作流
  645. String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
  646. JSONObject response = JSON.parseObject(doneGet);
  647. JSONArray resultArray = response.getJSONArray("result");
  648. String targetName = "确认工";//确认工艺等级完成
  649. for (int k = 0; k < resultArray.size(); k++) {
  650. JSONObject node = resultArray.getJSONObject(k);
  651. String currentNodeId = node.getString("name");
  652. String indexOf = currentNodeId.substring(0,3);
  653. if (targetName.contains(indexOf)) {
  654. params3.put("taskId", allIds.get(j));
  655. String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
  656. String taskId = "";//任务id
  657. String taskName = "";//任务名称
  658. String customer = "";//客户
  659. String designType = "";//设计类别
  660. String designlevel = "";//设计等级
  661. taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
  662. taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
  663. JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
  664. for (int p = 0; p < customfields.size(); p++) {
  665. JSONObject field = customfields.getJSONObject(p);
  666. String cfId = field.getString("cfId");
  667. JSONArray valueArray = field.getJSONArray("value");
  668. if (valueArray != null && !valueArray.isEmpty()) {
  669. String value = valueArray.getJSONObject(0).getString("title");
  670. //根据cfId匹配
  671. switch (cfId){
  672. case "691c29c1f8cbae320a1c8e75":
  673. designlevel = value;
  674. break;
  675. case "687df3b60ae1530fa2704499":
  676. customer = value;
  677. break;
  678. case "687e0308e3f7ce8174a19cfc":
  679. designType = value;
  680. break;
  681. }
  682. }
  683. }
  684. /*todo:给实体赋值*/
  685. AnnualSeasonalSample annualSeasonalSample = new AnnualSeasonalSample();
  686. annualSeasonalSample.setTaskId(taskId);
  687. annualSeasonalSample.setTaskName(taskName);
  688. annualSeasonalSample.setCustomer(customer);
  689. annualSeasonalSample.setDesignType(designType);
  690. annualSeasonalSample.setDesignLevel(designlevel);
  691. //4、插入数据库
  692. QueryWrapper<AnnualSeasonalSample> queryWrapper = new QueryWrapper<>();
  693. List<AnnualSeasonalSample> AnnualSeasonalSampleList = null;
  694. try {
  695. queryWrapper.eq("task_id", taskId);
  696. AnnualSeasonalSampleList = annualSeasonalSampleMapper.selectList(queryWrapper);
  697. } catch (Exception e) {
  698. e.printStackTrace();
  699. }
  700. UpdateWrapper<AnnualSeasonalSample> updateWrapper = new UpdateWrapper<>();
  701. updateWrapper.eq("task_id", taskId);
  702. if (AnnualSeasonalSampleList != null && AnnualSeasonalSampleList.size() > 0) {
  703. updateWrapper.set("task_name", taskName);
  704. updateWrapper.set("customer", customer);
  705. updateWrapper.set("design_type", designType);
  706. updateWrapper.set("design_level", designlevel);
  707. annualSeasonalSampleMapper.update(null, updateWrapper);
  708. }else {
  709. int insert = annualSeasonalSampleMapper.insert(annualSeasonalSample);
  710. Map<String, Object> response1 = new HashMap<>();
  711. if(insert > 0){
  712. response1.put("success", true);
  713. response1.put("message", "用户创建成功");
  714. response1.put("data", "");
  715. log.info("任务创建成功,任务名称:{},任务id:{}", annualSeasonalSample.getTaskName(),annualSeasonalSample.getTaskId());
  716. }
  717. }
  718. }
  719. }
  720. }
  721. }
  722. log.info("年度季节品类打样数量同步完成");
  723. return McR.success();
  724. }
  725. /*todo:年度季节品类确认数量*/
  726. @Scheduled(cron = "0 0 4 * * ?")
  727. @PostMapping("/annualSeasonalCategory")
  728. @SneakyThrows
  729. McR annualSeasonalCategory(){
  730. //1、统计符合条件的任务个数
  731. Map header = new HashMap<>();
  732. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  733. McR Token = tbService.AppAccessToken();
  734. Object token = Token.getData();
  735. header.put("Authorization","Bearer " + token);
  736. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  737. header.put("X-Tenant-Type","organization");
  738. HashMap param = new HashMap();
  739. String q = "tfsId = 6878b38d6e46cb7d4fec9592 AND scenarioId = 6878b3d8f40485da4c5f99a2 AND (cf:691c29c1f8cbae320a1c8e75 = 二级设计 OR cf:691c29c1f8cbae320a1c8e75 = 二级系列设计) AND cf:687df8813d5081f8c81cf375 = 公司 AND tagId != 68f5840f90efa8d7498bd5e9 AND tagId != 68f58407a89ee3bbe639f85c AND created >= 2026-01-01";
  740. param.put("q",q);
  741. String projectId = "6878b323386fac7ab9dbe5e9";
  742. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
  743. Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
  744. int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//6
  745. //2、分页查询
  746. HashMap param1 = new HashMap();
  747. param1.put("pageSize",100);
  748. String pageToken = "";//初始值
  749. for (int i=0;i<result/100 + 1;i++) {
  750. ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
  751. param1.put("q", q);
  752. param1.put("pageToken", pageToken);
  753. String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
  754. List<String> batchIds = extractIdsFromJson(doGet1);
  755. allIds.addAll(batchIds);//添加到总列表
  756. ObjectMapper mapper = new ObjectMapper();
  757. String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
  758. if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
  759. pageToken = nextPageToken;
  760. } else {
  761. // 为空,不进行处理
  762. }
  763. //3、查询任务详情
  764. for (int j = 0; j < allIds.size(); j++) {
  765. String taskId1 = allIds.get(j);
  766. HashMap params3 = new HashMap();
  767. //补充:查询任务前先看下这个是否是新版本的工作流
  768. String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
  769. JSONObject response = JSON.parseObject(doneGet);
  770. JSONArray resultArray = response.getJSONArray("result");
  771. String targetName = "确认工";//确认工艺等级完成
  772. for (int k = 0; k < resultArray.size(); k++) {
  773. JSONObject node = resultArray.getJSONObject(k);
  774. String currentNodeId = node.getString("name");
  775. String indexOf = currentNodeId.substring(0,3);
  776. if (targetName.contains(indexOf)) {
  777. params3.put("taskId", allIds.get(j));
  778. String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
  779. String taskId = "";//任务id
  780. String taskName = "";//任务名称
  781. String customer = "";//客户
  782. String designType = "";//设计类别
  783. String designlevel = "";//设计等级
  784. taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
  785. taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
  786. JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
  787. for (int p = 0; p < customfields.size(); p++) {
  788. JSONObject field = customfields.getJSONObject(p);
  789. String cfId = field.getString("cfId");
  790. JSONArray valueArray = field.getJSONArray("value");
  791. if (valueArray != null && !valueArray.isEmpty()) {
  792. String value = valueArray.getJSONObject(0).getString("title");
  793. //根据cfId匹配
  794. switch (cfId){
  795. case "691c29c1f8cbae320a1c8e75":
  796. designlevel = value;
  797. break;
  798. case "687df3b60ae1530fa2704499":
  799. customer = value;
  800. break;
  801. case "687e0308e3f7ce8174a19cfc":
  802. designType = value;
  803. break;
  804. }
  805. }
  806. }
  807. /*todo:给实体赋值*/
  808. AnnualSeasonalCategory annualSeasonalCategory = new AnnualSeasonalCategory();
  809. annualSeasonalCategory.setTaskId(taskId);
  810. annualSeasonalCategory.setTaskName(taskName);
  811. annualSeasonalCategory.setCustomer(customer);
  812. annualSeasonalCategory.setDesignType(designType);
  813. annualSeasonalCategory.setDesignLevel(designlevel);
  814. //4、插入数据库
  815. QueryWrapper<AnnualSeasonalCategory> queryWrapper = new QueryWrapper<>();
  816. List<AnnualSeasonalCategory> AnnualSeasonalCategoryList = null;
  817. try {
  818. queryWrapper.eq("task_id", taskId);
  819. AnnualSeasonalCategoryList = annualSeasonalCategoryMapper.selectList(queryWrapper);
  820. } catch (Exception e) {
  821. e.printStackTrace();
  822. }
  823. UpdateWrapper<AnnualSeasonalCategory> updateWrapper = new UpdateWrapper<>();
  824. updateWrapper.eq("task_id", taskId);
  825. if (AnnualSeasonalCategoryList != null && AnnualSeasonalCategoryList.size() > 0) {
  826. updateWrapper.set("task_name", taskName);
  827. updateWrapper.set("customer", customer);
  828. updateWrapper.set("design_type", designType);
  829. updateWrapper.set("design_level", designlevel);
  830. annualSeasonalCategoryMapper.update(null, updateWrapper);
  831. }else {
  832. int insert = annualSeasonalCategoryMapper.insert(annualSeasonalCategory);
  833. Map<String, Object> response1 = new HashMap<>();
  834. if(insert > 0){
  835. response1.put("success", true);
  836. response1.put("message", "用户创建成功");
  837. response1.put("data", "");
  838. log.info("任务创建成功,任务名称:{},任务id:{}", annualSeasonalCategory.getTaskName(),annualSeasonalCategory.getTaskId());
  839. }
  840. }
  841. }
  842. }
  843. }
  844. }
  845. log.info("年度季节品类确认数量同步完成");
  846. return McR.success();
  847. }
  848. /*todo:新工艺落地情况*/
  849. @Scheduled(cron = "0 30 1 * * ?")
  850. @SneakyThrows
  851. @PostMapping("/newprocessImplementation")
  852. McR newprocessImplementation(){
  853. //1、统计符合条件的任务个数
  854. Map header = new HashMap<>();
  855. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  856. McR Token = tbService.AppAccessToken();
  857. Object token = Token.getData();
  858. header.put("Authorization","Bearer " + token);
  859. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  860. header.put("X-Tenant-Type","organization");
  861. HashMap param = new HashMap();
  862. String q = "(scenarioId = 6878b3d8f40485da4c5f99a2 OR scenarioId = 6878b3ceb5ffcf500365d17a OR scenarioId = 6878b3c0669d175c3c6bc679) AND (tfsId = 6878b38d6e46cb7d4fec9592 OR tfsId = 6878b38c6e46cb7d4fec9479 OR tfsId = 6878b38d6e46cb7d4fec9516) AND tagId != 68f5840f90efa8d7498bd5e9 AND tagId != 68f58407a89ee3bbe639f85c AND cf:691c29c1f8cbae320a1c8e75 != 无 AND cf:691c29c1f8cbae320a1c8e75 != 扩版 AND cf:687df8813d5081f8c81cf375 = 公司 AND created >= 2026-01-01";
  863. param.put("q",q);
  864. String projectId = "6878b323386fac7ab9dbe5e9";
  865. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
  866. Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
  867. int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//个数 113
  868. //2、分页查询
  869. HashMap param1 = new HashMap();
  870. param1.put("pageSize",100);
  871. String pageToken = "";//初始值
  872. for (int i=0;i<result/100 + 1;i++) {
  873. ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
  874. param1.put("q", q);
  875. param1.put("pageToken", pageToken);
  876. String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
  877. List<String> batchIds = extractIdsFromJson(doGet1);
  878. allIds.addAll(batchIds);//添加到总列表
  879. ObjectMapper mapper = new ObjectMapper();
  880. String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
  881. if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
  882. pageToken = nextPageToken;
  883. } else {
  884. // 为空,不进行处理
  885. }
  886. //3、查询任务详情
  887. for (int j = 0; j < allIds.size(); j++) {
  888. String taskId1 = allIds.get(j);
  889. HashMap params3 = new HashMap();
  890. //补充:查询任务前先看下这个是否是新版本的工作流
  891. String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
  892. JSONObject response = JSON.parseObject(doneGet);
  893. JSONArray resultArray = response.getJSONArray("result");
  894. String targetName = "确认工";//确认工艺等级完成
  895. for (int k = 0; k < resultArray.size(); k++) {
  896. JSONObject node = resultArray.getJSONObject(k);
  897. String currentNodeId = node.getString("name");
  898. String indexOf = currentNodeId.substring(0,3);
  899. if (targetName.contains(indexOf)) {
  900. params3.put("taskId", allIds.get(j));
  901. String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
  902. String taskId = "";//任务id
  903. String taskName = "";//任务名称
  904. String customer = "";//客户
  905. String designType = "";//设计类别
  906. String designlevel = "";//设计等级
  907. String repetitionCount = "";//遍数
  908. taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
  909. taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
  910. JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
  911. for (int p = 0; p < customfields.size(); p++) {
  912. JSONObject field = customfields.getJSONObject(p);
  913. String cfId = field.getString("cfId");
  914. JSONArray valueArray = field.getJSONArray("value");
  915. if (valueArray != null && !valueArray.isEmpty()) {
  916. String value = valueArray.getJSONObject(0).getString("title");
  917. //根据cfId匹配
  918. switch (cfId){
  919. case "691c29c1f8cbae320a1c8e75":
  920. designlevel = value;
  921. break;
  922. case "687df3b60ae1530fa2704499":
  923. customer = value;
  924. break;
  925. case "687e0308e3f7ce8174a19cfc":
  926. designType = value;
  927. break;
  928. case "691c1e19bac224231d7b0994":
  929. repetitionCount = value;
  930. }
  931. }
  932. }
  933. /*todo:给实体赋值*/
  934. NewprocessImplementation newprocessImplementation = new NewprocessImplementation();
  935. newprocessImplementation.setTaskId(taskId);
  936. newprocessImplementation.setTaskName(taskName);
  937. newprocessImplementation.setCustomer(customer);
  938. newprocessImplementation.setDesignType(designType);
  939. newprocessImplementation.setDesignLevel(designlevel);
  940. newprocessImplementation.setRepetitionCount(repetitionCount);
  941. //4、插入数据库
  942. QueryWrapper<NewprocessImplementation> queryWrapper = new QueryWrapper<>();
  943. List<NewprocessImplementation> NewprocessImplementationList = null;
  944. try {
  945. queryWrapper.eq("task_id", taskId);
  946. NewprocessImplementationList = newprocessImplementationMapper.selectList(queryWrapper);
  947. } catch (Exception e) {
  948. e.printStackTrace();
  949. }
  950. UpdateWrapper<NewprocessImplementation> updateWrapper = new UpdateWrapper<>();
  951. updateWrapper.eq("task_id", taskId);
  952. if (NewprocessImplementationList != null && NewprocessImplementationList.size() > 0) {
  953. updateWrapper.set("task_name", taskName);
  954. updateWrapper.set("customer", customer);
  955. updateWrapper.set("design_type", designType);
  956. updateWrapper.set("design_level", designlevel);
  957. updateWrapper.set("repetition_count",repetitionCount);
  958. newprocessImplementationMapper.update(null, updateWrapper);
  959. }else {
  960. int insert = newprocessImplementationMapper.insert(newprocessImplementation);
  961. Map<String, Object> response1 = new HashMap<>();
  962. if(insert > 0){
  963. response1.put("success", true);
  964. response1.put("message", "用户创建成功");
  965. response1.put("data", "");
  966. log.info("任务创建成功,任务名称:{},任务id:{}", newprocessImplementation.getTaskName(),newprocessImplementation.getTaskId());
  967. }
  968. }
  969. }
  970. }
  971. }
  972. }
  973. log.info("新工艺落地情况数据已同步");
  974. return McR.success();
  975. }
  976. /*todo:设计部月确认稿数量*/
  977. @Scheduled(cron = "0 0 1 * * ?")
  978. @SneakyThrows
  979. @PostMapping("/designdeparttMonthConfirm")
  980. McR DesigndeparttMonthConfirm(){
  981. //1、统计符合条件的任务个数
  982. Map header = new HashMap<>();
  983. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  984. McR Token = tbService.AppAccessToken();
  985. Object token = Token.getData();
  986. header.put("Authorization","Bearer " + token);
  987. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  988. header.put("X-Tenant-Type","organization");
  989. HashMap param = new HashMap();
  990. String q = "scenarioId = 6878b3d8f40485da4c5f99a2 AND tfsId = 6878b38d6e46cb7d4fec9592 AND tagId != 68f5840f90efa8d7498bd5e9 AND tagId != 68f58407a89ee3bbe639f85c AND cf:687df8813d5081f8c81cf375 = 公司 AND cf:691c29c1f8cbae320a1c8e75 != 无 AND cf:691c29c1f8cbae320a1c8e75 != 扩版 AND created >= 2026-01-01";
  991. param.put("q",q);
  992. String projectId = "6878b323386fac7ab9dbe5e9";
  993. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
  994. Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
  995. int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//个数 26
  996. //2、分页查询
  997. HashMap param1 = new HashMap();
  998. param1.put("pageSize",100);
  999. String pageToken = "";//初始值
  1000. for (int i=0;i<result/100 + 1;i++) {
  1001. ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
  1002. param1.put("q", q);
  1003. param1.put("pageToken", pageToken);
  1004. String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
  1005. List<String> batchIds = extractIdsFromJson(doGet1);
  1006. allIds.addAll(batchIds);//添加到总列表
  1007. ObjectMapper mapper = new ObjectMapper();
  1008. String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
  1009. if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
  1010. pageToken = nextPageToken;
  1011. } else {
  1012. // 为空,不进行处理
  1013. }
  1014. //3、查询任务详情
  1015. String deadlineTime_END = "";
  1016. for (int j = 0; j < allIds.size(); j++) {
  1017. String taskId1 = allIds.get(j);
  1018. HashMap params3 = new HashMap();
  1019. //补充:查询任务前先看下这个是否是新版本的工作流
  1020. String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
  1021. JSONObject response = JSON.parseObject(doneGet);
  1022. JSONArray resultArray = response.getJSONArray("result");
  1023. String targetName = "确认工";//确认工艺等级完成
  1024. for (int k = 0; k < resultArray.size(); k++) {
  1025. JSONObject node = resultArray.getJSONObject(k);
  1026. String currentNodeId = node.getString("name");
  1027. String indexOf = currentNodeId.substring(0,3);
  1028. if (targetName.contains(indexOf)) {
  1029. params3.put("taskId", allIds.get(j));
  1030. String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
  1031. String taskId = "";//任务id
  1032. String taskName = "";//任务名称
  1033. String customer = "";//客户
  1034. String designType = "";//设计类别
  1035. String designlevel = "";//设计等级
  1036. String time_end = "";//结束时间
  1037. time_end = node.getString("dueDate");
  1038. if(time_end != null){
  1039. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
  1040. SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1041. //【时间转换】TB中获取的时间为UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间
  1042. String timeStr_A = time_end.replace("Z", " UTC");
  1043. try {
  1044. Date zhuangtaiDate_A = format.parse(timeStr_A);
  1045. deadlineTime_END = defaultFormat.format(zhuangtaiDate_A);
  1046. } catch (Exception e) {
  1047. e.printStackTrace();
  1048. }
  1049. }
  1050. taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
  1051. taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
  1052. JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
  1053. for (int p = 0; p < customfields.size(); p++) {
  1054. JSONObject field = customfields.getJSONObject(p);
  1055. String cfId = field.getString("cfId");
  1056. JSONArray valueArray = field.getJSONArray("value");
  1057. if (valueArray != null && !valueArray.isEmpty()) {
  1058. String value = valueArray.getJSONObject(0).getString("title");
  1059. //根据cfId匹配
  1060. switch (cfId){
  1061. case "691c29c1f8cbae320a1c8e75":
  1062. designlevel = value;
  1063. break;
  1064. case "687df3b60ae1530fa2704499":
  1065. customer = value;
  1066. break;
  1067. case "687e0308e3f7ce8174a19cfc":
  1068. designType = value;
  1069. break;
  1070. }
  1071. }
  1072. }
  1073. /*todo:给实体赋值*/
  1074. DesigndeparttMonthConfirm designdeparttMonthConfirm = new DesigndeparttMonthConfirm();
  1075. designdeparttMonthConfirm.setTaskId(taskId);
  1076. designdeparttMonthConfirm.setTaskName(taskName);
  1077. designdeparttMonthConfirm.setCustomer(customer);
  1078. designdeparttMonthConfirm.setDesignType(designType);
  1079. designdeparttMonthConfirm.setDesignLevel(designlevel);
  1080. designdeparttMonthConfirm.setDateLineEnd(deadlineTime_END);
  1081. //4、插入数据库
  1082. QueryWrapper<DesigndeparttMonthConfirm> queryWrapper = new QueryWrapper<>();
  1083. List<DesigndeparttMonthConfirm> DesigndeparttMonthConfirmList = null;
  1084. try {
  1085. queryWrapper.eq("task_id", taskId);
  1086. DesigndeparttMonthConfirmList = designdeparttMonthConfirmMapper.selectList(queryWrapper);
  1087. } catch (Exception e) {
  1088. e.printStackTrace();
  1089. }
  1090. UpdateWrapper<DesigndeparttMonthConfirm> updateWrapper = new UpdateWrapper<>();
  1091. updateWrapper.eq("task_id", taskId);
  1092. if (DesigndeparttMonthConfirmList != null && DesigndeparttMonthConfirmList.size() > 0) {
  1093. updateWrapper.set("task_name", taskName);
  1094. updateWrapper.set("customer", customer);
  1095. updateWrapper.set("design_type", designType);
  1096. updateWrapper.set("design_level", designlevel);
  1097. updateWrapper.set("date_line_end",deadlineTime_END);
  1098. designdeparttMonthConfirmMapper.update(null, updateWrapper);
  1099. }else {
  1100. int insert = designdeparttMonthConfirmMapper.insert(designdeparttMonthConfirm);
  1101. Map<String, Object> response1 = new HashMap<>();
  1102. if(insert > 0){
  1103. response1.put("success", true);
  1104. response1.put("message", "用户创建成功");
  1105. response1.put("data", "");
  1106. log.info("任务创建成功,任务名称:{},任务id:{}", designdeparttMonthConfirm.getTaskName(),designdeparttMonthConfirm.getTaskId());
  1107. }
  1108. }
  1109. }
  1110. }
  1111. }
  1112. }
  1113. log.info("设计部月确认稿数量数据已同步");
  1114. return McR.success();
  1115. }
  1116. /*todo:文件来源变更统计*/
  1117. @SneakyThrows
  1118. @PostMapping("/changedocumentsource")
  1119. McR changedocumentsource(){
  1120. //1、统计符合条件的任务个数
  1121. Map header = new HashMap<>();
  1122. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  1123. McR Token = tbService.AppAccessToken();
  1124. Object token = Token.getData();
  1125. header.put("Authorization","Bearer " + token);
  1126. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  1127. header.put("X-Tenant-Type","organization");
  1128. HashMap param = new HashMap();
  1129. String q = "cf:687df8813d5081f8c81cf375 != null";
  1130. param.put("q",q);
  1131. String projectId = "6878b323386fac7ab9dbe5e9";
  1132. String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
  1133. Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
  1134. int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//个数4300
  1135. //2、分页查询
  1136. HashMap param1 = new HashMap();
  1137. param1.put("pageSize",100);
  1138. String pageToken = "";//初始值
  1139. for (int i=0;i<result/100 + 1;i++) {
  1140. ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
  1141. param1.put("q", q);
  1142. param1.put("pageToken", pageToken);
  1143. Map header2 = new HashMap<>();
  1144. header2.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  1145. McR Token2 = tbService.AppAccessToken();
  1146. Object token2 = Token2.getData();
  1147. header2.put("Authorization","Bearer " + token2);
  1148. header2.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  1149. header2.put("X-Tenant-Type","organization");
  1150. String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header2, param1);
  1151. List<String> batchIds = extractIdsFromJson(doGet1);
  1152. allIds.addAll(batchIds);//添加到总列表
  1153. ObjectMapper mapper = new ObjectMapper();
  1154. String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
  1155. if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
  1156. pageToken = nextPageToken;
  1157. } else {
  1158. // 为空,不进行处理
  1159. }
  1160. //3、列出任务动态(taskid && actions = “customfield.update.v2”)
  1161. for (int j = 0; j < allIds.size(); j++) {
  1162. String renwutime = "";
  1163. HashMap params3 = new HashMap();
  1164. params3.put("actions", "customfield.update.v2");
  1165. params3.put("pageSize",100);
  1166. Map header3 = new HashMap<>();
  1167. header3.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  1168. McR Token3 = tbService.AppAccessToken();
  1169. Object token3 = Token3.getData();
  1170. header3.put("Authorization","Bearer " + token3);
  1171. header3.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  1172. header3.put("X-Tenant-Type","organization");
  1173. String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/"+ allIds.get(j) +"/activity/list", header3, params3);
  1174. System.out.println("doGet3" + doGet3);
  1175. JsonNode resultNode = new ObjectMapper().readTree(doGet3).get("result");
  1176. if(resultNode == null || resultNode.isEmpty() ){
  1177. //为空不做处理
  1178. }else {
  1179. for (JsonNode item : resultNode) {
  1180. String contentStr = item.get("content").asText();
  1181. ObjectMapper objectMapper = new ObjectMapper();
  1182. JsonNode content = objectMapper.readTree(contentStr);
  1183. JsonNode customfieldName = content.get("customfieldName");
  1184. if (customfieldName != null && "文件来源".equals(customfieldName.asText())) {
  1185. //写入数据库
  1186. /*todo:给实体赋值*/
  1187. String taskId = allIds.get(j);//任务id
  1188. String taskName = "";//任务名称
  1189. String renwuTime = "";//创建时间
  1190. String customer = "";//客户名称
  1191. String ywPerson = "";//业务人员
  1192. String zdrPerson = "";//制单人
  1193. String zyjl = "";//业务经理
  1194. String designcatogry = "";//设计类别
  1195. HashMap param_A = new HashMap();
  1196. param_A.put("taskId",taskId);
  1197. String doGet4 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header3, param_A);//查询任务详情
  1198. JSONArray customfields = JSON.parseObject(doGet4).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
  1199. for (int p = 0; p < customfields.size(); p++) {
  1200. JSONObject field = customfields.getJSONObject(p);
  1201. String cfId = field.getString("cfId");
  1202. JSONArray valueArray = field.getJSONArray("value");
  1203. if (valueArray != null && !valueArray.isEmpty()) {
  1204. String value = valueArray.getJSONObject(0).getString("title");
  1205. //根据cfId匹配
  1206. switch (cfId){
  1207. case "687df3b60ae1530fa2704499":
  1208. customer = value;//客户名称
  1209. break;
  1210. case "688191972ab6c4f412ea2bb9":
  1211. ywPerson = value;//业务人员
  1212. break;
  1213. case "687df458b9c2f9f90865c13b":
  1214. zyjl = value;//业务经理
  1215. break;
  1216. case "687e0308e3f7ce8174a19cfc":
  1217. designcatogry = value;//设计类别
  1218. break;
  1219. case "688191a2d18cef625eccade6":
  1220. zdrPerson = value;//制单人
  1221. break;
  1222. }
  1223. }
  1224. }
  1225. ObjectMapper objectMapper4 = new ObjectMapper();
  1226. JsonNode rootNode = objectMapper4.readTree(doGet4);
  1227. for(JsonNode resultNode4 : rootNode.path("result")) {
  1228. taskName = resultNode4.path("content").asText();//任务名称
  1229. renwuTime = resultNode4.path("created").asText();//创建时间
  1230. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
  1231. SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  1232. //【时间转换】TB中获取的时间为UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。
  1233. String timeStr = renwuTime.replace("Z", " UTC");
  1234. try {
  1235. Date zhuangtaiDate = format.parse(timeStr);
  1236. renwutime = defaultFormat.format(zhuangtaiDate);
  1237. } catch (Exception e) {
  1238. e.printStackTrace();
  1239. }
  1240. // String creatorId = resultNode4.path("creatorId").asText();//创建人id
  1241. // List<String> involveMembers = new ArrayList<>();
  1242. // involveMembers.add(creatorId);
  1243. // zdrPerson = tbService.TBtoDinguserId(involveMembers);//创建人
  1244. }
  1245. ChangeDocumentSource changeDocumentSource = new ChangeDocumentSource();
  1246. changeDocumentSource.setTaskId(taskId);
  1247. changeDocumentSource.setTaskName(taskName);
  1248. changeDocumentSource.setRenwuTime(renwutime);
  1249. changeDocumentSource.setCustomer(customer);
  1250. changeDocumentSource.setYwPerson(ywPerson);
  1251. changeDocumentSource.setZdrPerson(zdrPerson);
  1252. changeDocumentSource.setZyjl(zyjl);
  1253. changeDocumentSource.setDesigncatogry(designcatogry);
  1254. //4、插入数据库
  1255. QueryWrapper<ChangeDocumentSource> queryWrapper = new QueryWrapper<>();
  1256. List<ChangeDocumentSource> changeDocumentSourceList = null;
  1257. try {
  1258. queryWrapper.eq("task_id", taskId);
  1259. changeDocumentSourceList = changeDocumentSourceMapper.selectList(queryWrapper);
  1260. } catch (Exception e) {
  1261. e.printStackTrace();
  1262. }
  1263. UpdateWrapper<ChangeDocumentSource> updateWrapper = new UpdateWrapper<>();
  1264. updateWrapper.eq("task_id", taskId);
  1265. if (changeDocumentSourceList != null && changeDocumentSourceList.size() > 0) {
  1266. updateWrapper.set("renwu_time", renwutime);
  1267. updateWrapper.set("customer",customer);
  1268. updateWrapper.set("yw_person",ywPerson);
  1269. updateWrapper.set("zdr_person",zdrPerson);
  1270. updateWrapper.set("zyjl",zyjl);
  1271. updateWrapper.set("designcatogry",designcatogry);
  1272. changeDocumentSourceMapper.update(null, updateWrapper);
  1273. }else {
  1274. int insert = changeDocumentSourceMapper.insert(changeDocumentSource);
  1275. Map<String, Object> response = new HashMap<>();
  1276. if(insert > 0){
  1277. response.put("success", true);
  1278. response.put("message", "用户创建成功");
  1279. response.put("data", "");
  1280. log.info("任务创建成功,任务名称:{},任务id:{}", changeDocumentSource.getTaskName(),changeDocumentSource.getTaskId());
  1281. }
  1282. }
  1283. break;//跳出循环,开始下一个任务
  1284. }
  1285. }
  1286. }
  1287. }
  1288. }
  1289. System.out.println("[任务动态同步完毕!]");
  1290. return McR.success();
  1291. }
  1292. /*todo:个人月度成功率*/
  1293. @SneakyThrows
  1294. @PostMapping("/personalmonthlySuccessrate")
  1295. McR personalmonthlySuccessrate(){
  1296. return McR.success();
  1297. }
  1298. /*todo:人员获取部门*/
  1299. @SneakyThrows
  1300. @PostMapping("/UserGetDeprt")
  1301. String UserGetDeprt(@RequestParam String User){
  1302. Map header = new HashMap<>();
  1303. header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
  1304. McR Token = tbService.AppAccessToken();
  1305. Object token = Token.getData();
  1306. header.put("Authorization","Bearer " + token);
  1307. header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
  1308. header.put("X-Tenant-Type","organization");
  1309. HashMap param = new HashMap();
  1310. param.put("query",User);
  1311. String doGet = UtilHttp.doGet("https://open.teambition.com/api/org/member/search", (Map) header, (Map) param);
  1312. JSONObject jsonObject = JSON.parseObject(doGet);
  1313. JSONArray resultArray = jsonObject.getJSONArray("result");
  1314. String userId = "";
  1315. String value = "";
  1316. if (resultArray != null && !resultArray.isEmpty()) {
  1317. JSONObject firstUser = resultArray.getJSONObject(0);
  1318. userId = firstUser.getString("userId");
  1319. System.out.println("提取到的userId: " + userId);
  1320. List<String> involveMembers = new ArrayList<>();
  1321. involveMembers.add(userId);
  1322. HashMap param2 = new HashMap();
  1323. param2.put("tbUserIds",involveMembers);
  1324. String s = UtilHttp.doGet("https://open.teambition.com/api/idmap/dingtalk/getDingUserId", header, param2);
  1325. ObjectMapper objectMapper = new ObjectMapper();
  1326. var rootNode = objectMapper.readTree(s);
  1327. List<String> userIdList = objectMapper.convertValue(
  1328. rootNode.get("result"),
  1329. new TypeReference<List<Map<String, String>>>() {
  1330. }
  1331. )
  1332. .stream()
  1333. .map(map -> map.get("dingtalkUserId"))
  1334. .collect(Collectors.toList());
  1335. System.out.println(userIdList);
  1336. HashMap head = new HashMap();
  1337. McR Token2 = tbService.OuNuoXinAccessToken();
  1338. Object Data = Token2.getData();
  1339. head.put("x-acs-dingtalk-access-token",Data);
  1340. HashMap boddy = new HashMap();
  1341. boddy.put("userIdList",userIdList);
  1342. boddy.put("fieldFilterList", Arrays.asList("sys00-mainDept"));
  1343. boddy.put("appAgentId","4115325431");
  1344. boddy.put("text2SelectConvert",true);
  1345. String ddt = UtilHttp.doPost("https://api.dingtalk.com/v1.0/hrm/rosters/lists/query",head,null,boddy);
  1346. // 使用Fastjson解析
  1347. JSONObject jsonObj = JSON.parseObject(ddt);
  1348. JSONArray resultArray2 = jsonObj.getJSONArray("result");
  1349. if (resultArray2 != null && !resultArray2.isEmpty()) {
  1350. JSONObject firstResult = resultArray2.getJSONObject(0);
  1351. JSONArray fieldDataList = firstResult.getJSONArray("fieldDataList");
  1352. if (fieldDataList != null && !fieldDataList.isEmpty()) {
  1353. // 遍历fieldDataList找到主部门字段(如果有多个字段的话)
  1354. for (int i = 0; i < fieldDataList.size(); i++) {
  1355. JSONObject fieldData = fieldDataList.getJSONObject(i);
  1356. String fieldCode = fieldData.getString("fieldCode");
  1357. // 如果是主部门字段
  1358. if ("sys00-mainDept".equals(fieldCode)) {
  1359. JSONArray fieldValueList = fieldData.getJSONArray("fieldValueList");
  1360. if (fieldValueList != null && !fieldValueList.isEmpty()) {
  1361. JSONObject firstValue = fieldValueList.getJSONObject(0);
  1362. value = firstValue.getString("value");
  1363. System.out.println("提取到的部门: " + value);
  1364. }
  1365. break;
  1366. }
  1367. }
  1368. }
  1369. }
  1370. }
  1371. return value;
  1372. }
  1373. }