| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432 |
- package com.malk.tuosi.schedule;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.core.type.TypeReference;
- import com.fasterxml.jackson.databind.JsonNode;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.malk.server.common.McR;
- import com.malk.server.dingtalk.DDR;
- import com.malk.tuosi.entity.*;
- import com.malk.tuosi.mapper.*;
- import com.malk.tuosi.service.TBService;
- import com.malk.utils.UtilHttp;
- import lombok.SneakyThrows;
- import lombok.extern.slf4j.Slf4j;
- import lombok.var;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.web.bind.annotation.*;
- import java.text.SimpleDateFormat;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import java.util.stream.Collectors;
- import java.util.stream.StreamSupport;
- @Slf4j
- @RestController
- @RequestMapping("/scheduleTask")
- public class ScheduleTask {
- @Autowired
- private TBService tbService;
- @Autowired
- private ConfirmDesignYearMapper confirmDesignYearMapper;
- @Autowired
- private YearPersonalConfirmMapper yearPersonalConfirmMapper;
- @Autowired
- private EmployeeWeeklyTasksMapper employeeWeeklyTasksMapper;
- @Autowired
- private AnnualSeasonalSampleMapper annualSeasonalSampleMapper;
- @Autowired
- private AnnualSeasonalCategoryMapper annualSeasonalCategoryMapper;
- @Autowired
- private NewprocessImplementationMapper newprocessImplementationMapper;
- @Autowired
- private DesigndeparttMonthConfirmMapper designdeparttMonthConfirmMapper;
- @Autowired
- private ChangeDocumentSourceMapper changeDocumentSourceMapper;
- /*每天凌晨定时同步任务状态*/
- @SneakyThrows
- @GetMapping("/renwulist")
- @Scheduled(cron = "0 0 0 * * ?")
- public McR RenWuList(){
- //计数项目任务
- HashMap header = new HashMap();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- String projectId = "6878b323386fac7ab9dbe5e9";
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) null);
- Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
- int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//1450
- //查询项目任务
- HashMap param = new HashMap();
- param.put("pageSize",100);
- ArrayList list = new ArrayList();//分页标全部存在list
- ArrayList<String> allIds = new ArrayList<>();//全部任务id存在allIds
- String pageToken = "";//初始值
- for (int i=0;i<result/100 + 1;i++){
- param.put("pageToken",pageToken);
- String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/query", header, param);
- List<String> batchIds = extractIdsFromJson(doGet1);//提取当前批次的id
- allIds.addAll(batchIds);//添加到总列表
- ObjectMapper mapper = new ObjectMapper();
- String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
- if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
- // 不为空,使用nextPageToken
- list.add(nextPageToken);
- pageToken = nextPageToken;
- }else {
- // 为空,不进行处理
- }
- }
- //查询任务详情
- int k =0;
- for (int i = 0; i < allIds.size(); i++) {
- k++;
- HashMap params = new HashMap();
- params.put("taskId",allIds.get(i));
- String doGet2 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params);
- String tfsId = new ObjectMapper().readTree(doGet2).get("result").get(0).get("tfsId").asText();//任务状态ID
- String renWuName = new ObjectMapper().readTree(doGet2).get("result").get(0).get("content").asText();//任务名称
- String title = StreamSupport.stream(new ObjectMapper().readTree(doGet2)
- .get("result").get(0).get("customfields").spliterator(), false)
- .filter(field -> "689d4ebf343c05fe73700c93".equals(field.get("cfId").asText()))
- .findFirst()
- .map(field -> field.get("value").get(0).get("title").asText())
- .orElse(null);//CRM单据ID
- //搜索项目工作流状态
- HashMap params_A = new HashMap();
- params_A.put("tfsIds",tfsId);
- String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/taskflowstatus/search", header, params_A);
- String name = new ObjectMapper().readTree(doGet3).get("result").get(0).get("name").asText();//当前任务状态
- //调用回传TB的接口更新状态
- HashMap head = new HashMap();
- head.put("crmuserid","620131c2fe8d7eb6b8dfbf76");//TODO:这里不清楚权限,用张昆
- head.put("TargetSystem","CRM");
- HashMap body_B = new HashMap();
- HashMap params_B = new HashMap();
- params_B.put("crmid",title);
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- String currentTime = LocalDateTime.now().format(formatter);
- params_B.put("jssj",currentTime);
- params_B.put("ddzt",name);
- body_B.put("params",params_B);
- String s = UtilHttp.doPost("http://ounuo.ip.raresoft.net:8888/api/dd/selfchange", head, null, body_B);
- System.out.println(k+"-"+ allIds.size());
- log.info("任务名称:{},任务状态:{},CRM单据ID:{},------同步完成",renWuName,name,title);
- }
- log.info("任务同步完毕!");
- return McR.success(result);
- }
- /*额外方法:从项目任务查询的100条任务提取result中所有的id*/
- private static List<String> extractIdsFromJson(String jsonString) throws Exception {
- ObjectMapper mapper = new ObjectMapper();
- JsonNode rootNode = mapper.readTree(jsonString);
- JsonNode resultArray = rootNode.get("result");
- // 预分配100容量(每批大约100条数据)
- List<String> ids = new ArrayList<>(100);
- if (resultArray != null && resultArray.isArray()) {
- for (JsonNode item : resultArray) {
- if (item.has("id")) {
- String id = item.get("id").asText();
- ids.add(id);
- }
- }
- }
- return ids;
- }
- /*todo:设计类别年确认情况*/
- @Scheduled(cron = "0 30 3 * * ?")
- @PostMapping("/confirmDesignYear")
- @SneakyThrows
- McR confirmDesignYear() throws JsonProcessingException {
- //1、统计符合条件的任务个数
- HashMap header = new HashMap();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- HashMap param = new HashMap();
- 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";
- param.put("q",q);
- String projectId = "6878b323386fac7ab9dbe5e9";
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);//todo:[计数项目任务]
- Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
- int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//23
- //2、分页查询
- HashMap param1 = new HashMap();
- param1.put("pageSize",100);
- String pageToken = "";//初始值
- for (int i=0;i<result/100 + 1;i++){
- ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
- param1.put("q",q);
- param1.put("pageToken",pageToken);
- String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);//todo:[查询项目任务]
- List<String> batchIds = extractIdsFromJson(doGet1);
- allIds.addAll(batchIds);//添加到总列表
- ObjectMapper mapper = new ObjectMapper();
- String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
- if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
- pageToken = nextPageToken;
- }else {
- // 为空,不进行处理
- }
- //3、查询任务详情
- ArrayList errorList = new ArrayList();
- for (int j = 0; j < allIds.size(); j++) {
- HashMap params3 = new HashMap();
- params3.put("taskId", allIds.get(j));
- String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
- String taskId = "";//任务id
- String taskName = "";//任务名称
- String designlevel = "";//设计等级
- String tasktype = "确认稿单";//任务类型
- taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
- taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
- JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
- for (int p = 0; p < customfields.size(); p++) {
- JSONObject field = customfields.getJSONObject(p);
- String cfId = field.getString("cfId");
- JSONArray valueArray = field.getJSONArray("value");
- if (valueArray != null && !valueArray.isEmpty()) {
- String value = valueArray.getJSONObject(0).getString("title");
- //根据cfId匹配
- switch (cfId){
- case "691c29c1f8cbae320a1c8e75":
- designlevel = value;
- break;
- }
- }
- }
- /*todo:给实体赋值*/
- ConfirmDesignYear confirmDesignYear = new ConfirmDesignYear();
- confirmDesignYear.setTaskId(taskId);
- confirmDesignYear.setTaskName(taskName);
- confirmDesignYear.setDesignLevel(designlevel);
- confirmDesignYear.setTaskType(tasktype);
- //4、插入数据库
- QueryWrapper<ConfirmDesignYear> queryWrapper = new QueryWrapper<>();
- List<ConfirmDesignYear> confirmDesignYearList = null;
- try {
- queryWrapper.eq("task_id", taskId);
- confirmDesignYearList = confirmDesignYearMapper.selectList(queryWrapper);
- } catch (Exception e) {
- e.printStackTrace();
- }
- UpdateWrapper<ConfirmDesignYear> updateWrapper = new UpdateWrapper<>();
- updateWrapper.eq("task_id", taskId);
- if (confirmDesignYearList != null && confirmDesignYearList.size() > 0) {
- updateWrapper.set("task_name", taskName);
- updateWrapper.set("design_level", designlevel);
- updateWrapper.set("task_type", tasktype);
- confirmDesignYearMapper.update(null, updateWrapper);
- }else {
- int insert = confirmDesignYearMapper.insert(confirmDesignYear);
- Map<String, Object> response = new HashMap<>();
- if(insert > 0){
- response.put("success", true);
- response.put("message", "用户创建成功");
- response.put("data", "");
- log.info("任务创建成功,任务名称:{},任务id:{}", confirmDesignYear.getTaskName(),confirmDesignYear.getTaskId());
- }
- }
- }
- }
- log.info("设计类别年确认情况已同步数据库");
- return McR.success();
- }
- /*todo:本年度个人确认稿数据(人员)*//*todo:确认稿件数量(总数量)*//*todo:同期确认稿数量(时间)*/
- @Scheduled(cron = "0 0 3 * * ?")
- @PostMapping("/yearPersonalconfirm")
- @SneakyThrows
- McR yearPersonalconfirm(){
- //1、统计符合条件的任务个数
- Map header = new HashMap<>();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- HashMap param = new HashMap();
- 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";
- param.put("q",q);
- String projectId = "6878b323386fac7ab9dbe5e9";
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
- Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
- int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//26
- //2、分页查询
- HashMap param1 = new HashMap();
- param1.put("pageSize",100);
- String pageToken = "";//初始值
- for (int i=0;i<result/100 + 1;i++){
- ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
- param1.put("q",q);
- param1.put("pageToken",pageToken);
- String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
- List<String> batchIds = extractIdsFromJson(doGet1);
- allIds.addAll(batchIds);//添加到总列表
- ObjectMapper mapper = new ObjectMapper();
- String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
- if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
- pageToken = nextPageToken;
- }else {
- // 为空,不进行处理
- }
- //3、查询任务详情
- String deadline = "";//完成时间
- String deadlineTime = "";
- for (int j = 0; j < allIds.size(); j++) {
- String taskId1 = allIds.get(j);
- HashMap params3 = new HashMap();
- //补充:查询任务前先看下这个是否是新版本的工作流
- String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
- JSONObject response = JSON.parseObject(doneGet);
- JSONArray resultArray = response.getJSONArray("result");
- String targetId_deadline = "6875c736476bc6384b458cfc";//【完成时间节点】
- String targetName = "确认工";//确认工艺等级完成
- for (int k = 0; k < resultArray.size(); k++) {
- JSONObject node = resultArray.getJSONObject(k);
- String currentNodeId = node.getString("name");
- String indexOf = currentNodeId.substring(0,3);
- if (targetName.contains(indexOf)) {
- for(int k1 = 0; k1 < resultArray.size(); k1++){
- JSONObject node1 = resultArray.getJSONObject(k1);
- if(targetId_deadline.equals(node1.getString("id"))){
- deadline = node1.getString("accomplished");
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
- SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- //【时间转换】TB中获取的时间为UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。
- String timeStr = deadline.replace("Z", " UTC");
- try {
- Date zhuangtaiDate = format.parse(timeStr);
- deadlineTime = defaultFormat.format(zhuangtaiDate);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- params3.put("taskId", taskId1);
- String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
- String taskId = "";//任务id
- String taskName = "";//任务名称
- String designPerson = "";//设计人员
- String department = "";//所属部门
- Integer coefficient = null;//系数
- String customerName = "";//客户名称
- String designlevel = "";//设计等级
- taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
- taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
- JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
- for (int p = 0; p < customfields.size(); p++) {
- JSONObject field = customfields.getJSONObject(p);
- String cfId = field.getString("cfId");
- JSONArray valueArray = field.getJSONArray("value");
- if (valueArray != null && !valueArray.isEmpty()) {
- String value = valueArray.getJSONObject(0).getString("title");
- //根据cfId匹配
- switch (cfId){
- case "691c29c1f8cbae320a1c8e75":
- designlevel = value;
- break;
- case "687df3b60ae1530fa2704499":
- customerName = value;
- break;
- case "695deb1a3fbe995aeeb1b590":
- designPerson = value;
- break;
- }
- }
- }
- /*todo:给实体赋值*/
- YearPersonalConfirm yearPersonalConfirm = new YearPersonalConfirm();
- yearPersonalConfirm.setTaskId(taskId);
- yearPersonalConfirm.setTaskName(taskName);
- yearPersonalConfirm.setDesignPerson(designPerson);
- if("一级设计".equals(designlevel)){
- coefficient = 5;
- }else if("二级设计".equals(designlevel)){
- coefficient = 3;
- }else if("三级设计".equals(designlevel)){
- coefficient = 1;
- }else if("四级设计".equals(designlevel)){
- coefficient = 0;
- }
- yearPersonalConfirm.setCoefficient(coefficient);
- yearPersonalConfirm.setCustomerName(customerName);
- yearPersonalConfirm.setDesignLevel(designlevel);
- yearPersonalConfirm.setDeadline(deadlineTime);
- if(!designPerson.equals("")){
- department = UserGetDeprt(designPerson);
- }
- yearPersonalConfirm.setDepartment(department);
- //4、插入数据库
- QueryWrapper<YearPersonalConfirm> queryWrapper = new QueryWrapper<>();
- List<YearPersonalConfirm> YearPersonalConfirmList = null;
- try {
- queryWrapper.eq("task_id", taskId);
- YearPersonalConfirmList = yearPersonalConfirmMapper.selectList(queryWrapper);
- } catch (Exception e) {
- e.printStackTrace();
- }
- UpdateWrapper<YearPersonalConfirm> updateWrapper = new UpdateWrapper<>();
- updateWrapper.eq("task_id", taskId);
- if (YearPersonalConfirmList != null && YearPersonalConfirmList.size() > 0) {
- updateWrapper.set("task_name", taskName);
- updateWrapper.set("design_person", designPerson);
- updateWrapper.set("coefficient", coefficient);
- updateWrapper.set("customer_name", customerName);
- updateWrapper.set("design_level", designlevel);
- updateWrapper.set("deadline",deadlineTime);
- updateWrapper.set("department",department);
- yearPersonalConfirmMapper.update(null, updateWrapper);
- }else {
- int insert = yearPersonalConfirmMapper.insert(yearPersonalConfirm);
- Map<String, Object> response1 = new HashMap<>();
- if(insert > 0){
- response1.put("success", true);
- response1.put("message", "用户创建成功");
- response1.put("data", "");
- log.info("任务创建成功,任务名称:{},任务id:{}", yearPersonalConfirm.getTaskName(),yearPersonalConfirm.getTaskId());
- }
- }
- }
- }
- }
- }
- log.info("本年度个人确认稿数据、确认稿件数量、同期确认稿数量");
- return McR.success();
- }
- /*todo:员工每周任务*/
- @Scheduled(cron = "0 30 2 * * ?")
- @PostMapping("/employeeWeeklyTasks")
- @SneakyThrows
- McR employeeWeeklyTasks(){
- //1、统计符合条件的任务个数
- Map header = new HashMap<>();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- HashMap param = new HashMap();
- 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";
- param.put("q",q);
- String projectId = "6878b323386fac7ab9dbe5e9";
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
- Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
- int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//16
- //2、分页查询
- HashMap param1 = new HashMap();
- param1.put("pageSize",100);
- String pageToken = "";//初始值
- for (int i=0;i<result/100 + 1;i++) {
- ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
- param1.put("q", q);
- param1.put("pageToken", pageToken);
- String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
- List<String> batchIds = extractIdsFromJson(doGet1);
- allIds.addAll(batchIds);//添加到总列表
- ObjectMapper mapper = new ObjectMapper();
- String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
- if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
- pageToken = nextPageToken;
- } else {
- // 为空,不进行处理
- }
- //3、查询任务详情
- String deadlineTime_START = "";
- String deadlineTime_END = "";
- for (int j = 0; j < allIds.size(); j++) {
- String taskId1 = allIds.get(j);
- HashMap params3 = new HashMap();
- String status = "";//状态
- String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
- JSONObject response = JSON.parseObject(doneGet);
- JSONArray resultArray = response.getJSONArray("result");
- String targetName = "设计接";
- //这里只是遍历每一条任务是否完成status状态
- for(int n = 0;n < resultArray.size();n++){
- JSONObject node = resultArray.getJSONObject(n);
- String nodeName = node.getString("name");
- if("已完成".equals(nodeName)){
- status = node.getString("status");
- break;
- }
- }
- for (int k = 0; k < resultArray.size(); k++) {
- JSONObject node = resultArray.getJSONObject(k);
- String currentNodeId = node.getString("name");
- String indexOf = currentNodeId.substring(0,3);
- //抓取设计接单节点数据
- if (targetName.contains(indexOf)) {
- params3.put("taskId", taskId1);//allIds.get(j)
- String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
- String taskId = "";//任务id
- String taskName = "";//任务名称
- String manager = "";//负责人
- String time_start = "";//开始时间
- String time_end = "";//结束时间
- String task_type = "";//任务类型
- String department = "";//所属部门
- time_start = node.getString("startDate");
- time_end = node.getString("dueDate");
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
- SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- //【时间转换】TB中获取的时间为UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。
- String timeStr = "";
- if(time_start != null){
- timeStr = time_start.replace("Z", " UTC");
- }
- String timeStr_A = "";
- if(time_end != null){
- timeStr_A = time_end.replace("Z", " UTC");
- }
- try {
- if(timeStr != null){
- Date zhuangtaiDate = format.parse(timeStr);
- deadlineTime_START = defaultFormat.format(zhuangtaiDate);
- }
- if(timeStr_A != ""){
- Date zhuangtaiDate_A = format.parse(timeStr_A);
- deadlineTime_END = defaultFormat.format(zhuangtaiDate_A);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
- taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
- String type = new ObjectMapper().readTree(doGet3).get("result").get(0).get("sfcId").asText();
- switch (type) {
- case "6878b3b60d49d89e7955726f"://PPT效果图
- task_type = "PPT效果图单";
- break;
- case "6878b3c0669d175c3c6bc679"://打样机打样
- task_type = "打样机打样";
- break;
- case "6878b3ceb5ffcf500365d17a"://印刷机打样
- task_type = "印刷机打样";
- break;
- case "6878b3d8f40485da4c5f99a2"://确认稿单
- task_type = "确认稿单";
- break;
- case "6878b39a27ae5f3cac355fb9"://设计单
- task_type = "设计单";
- break;
- case "6878b3a4090e6872fd6b78c6"://设计修改单
- task_type = "设计修改单";
- break;
- case "6878b3ad9e17ac8a027c6d37"://设计扩版单
- task_type = "设计扩版单";
- break;
- }
- JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
- for (int p = 0; p < customfields.size(); p++) {
- JSONObject field = customfields.getJSONObject(p);
- String cfId = field.getString("cfId");
- JSONArray valueArray = field.getJSONArray("value");
- if (valueArray != null && !valueArray.isEmpty()) {
- //根据cfId匹配
- switch (cfId) {
- case "66bb1a56f7e230ed6843796e"://设计接单的负责人
- for (int a = 0; a < valueArray.size(); a++) {
- String value = valueArray.getJSONObject(a).getString("title");
- manager = value;
- department = UserGetDeprt(manager);
- /*todo:给实体赋值*/
- EmployeeWeeklyTasks employeeWeeklyTasks = new EmployeeWeeklyTasks();
- employeeWeeklyTasks.setTaskId(taskId);
- employeeWeeklyTasks.setTaskName(taskName);
- employeeWeeklyTasks.setManager(manager);
- employeeWeeklyTasks.setTaskType(task_type);
- employeeWeeklyTasks.setTimeEnd(deadlineTime_END);
- employeeWeeklyTasks.setTimeStart(deadlineTime_START);
- employeeWeeklyTasks.setStatus(status);
- employeeWeeklyTasks.setDepartment(department);
- //4、插入数据库
- QueryWrapper<EmployeeWeeklyTasks> queryWrapper = new QueryWrapper<>();
- List<EmployeeWeeklyTasks> EmployeeWeeklyTasksList = null;
- try {
- String finalManager = manager;
- queryWrapper.eq("task_id", taskId).and(q1 -> q1.eq("manager", finalManager));
- EmployeeWeeklyTasksList = employeeWeeklyTasksMapper.selectList(queryWrapper);
- } catch (Exception e) {
- e.printStackTrace();
- }
- UpdateWrapper<EmployeeWeeklyTasks> updateWrapper = new UpdateWrapper<>();
- updateWrapper.eq("task_id", taskId).eq("manager",manager);
- if (EmployeeWeeklyTasksList != null && EmployeeWeeklyTasksList.size() > 0) {
- updateWrapper.set("task_name", taskName);
- updateWrapper.set("manager", manager);
- updateWrapper.set("time_start", deadlineTime_START);
- updateWrapper.set("time_end", deadlineTime_END);
- updateWrapper.set("task_type", task_type);
- updateWrapper.set("status", status);
- updateWrapper.set("department",department);
- employeeWeeklyTasksMapper.update(null, updateWrapper);
- } else {
- int insert = employeeWeeklyTasksMapper.insert(employeeWeeklyTasks);
- Map<String, Object> response1 = new HashMap<>();
- if (insert > 0) {
- response1.put("success", true);
- response1.put("message", "用户创建成功");
- response1.put("data", "");
- log.info("任务创建成功,任务名称:{},任务id:{}", employeeWeeklyTasks.getTaskName(), employeeWeeklyTasks.getTaskId());
- }
- }
- }
- // manager = value;
- break;
- }
- }
- }
- }
- }
- }
- }
- log.info("员工每周工作内容已同步");
- return McR.success();
- }
- /*todo:年度季节品类打样数量*/
- @Scheduled(cron = "0 0 2 * * ?")
- @PostMapping("/annualSeasonalSample")
- @SneakyThrows
- McR annualSeasonalSample(){
- //1、统计符合条件的任务个数
- Map header = new HashMap<>();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- HashMap param = new HashMap();
- 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";
- param.put("q",q);
- String projectId = "6878b323386fac7ab9dbe5e9";
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
- Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
- int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//57
- //2、分页查询
- HashMap param1 = new HashMap();
- param1.put("pageSize",100);
- String pageToken = "";//初始值
- for (int i=0;i<result/100 + 1;i++) {
- ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
- param1.put("q", q);
- param1.put("pageToken", pageToken);
- String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
- List<String> batchIds = extractIdsFromJson(doGet1);
- allIds.addAll(batchIds);//添加到总列表
- ObjectMapper mapper = new ObjectMapper();
- String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
- if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
- pageToken = nextPageToken;
- } else {
- // 为空,不进行处理
- }
- //3、查询任务详情
- for (int j = 0; j < allIds.size(); j++) {
- String taskId1 = allIds.get(j);
- HashMap params3 = new HashMap();
- //补充:查询任务前先看下这个是否是新版本的工作流
- String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
- JSONObject response = JSON.parseObject(doneGet);
- JSONArray resultArray = response.getJSONArray("result");
- String targetName = "确认工";//确认工艺等级完成
- for (int k = 0; k < resultArray.size(); k++) {
- JSONObject node = resultArray.getJSONObject(k);
- String currentNodeId = node.getString("name");
- String indexOf = currentNodeId.substring(0,3);
- if (targetName.contains(indexOf)) {
- params3.put("taskId", allIds.get(j));
- String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
- String taskId = "";//任务id
- String taskName = "";//任务名称
- String customer = "";//客户
- String designType = "";//设计类别
- String designlevel = "";//设计等级
- taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
- taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
- JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
- for (int p = 0; p < customfields.size(); p++) {
- JSONObject field = customfields.getJSONObject(p);
- String cfId = field.getString("cfId");
- JSONArray valueArray = field.getJSONArray("value");
- if (valueArray != null && !valueArray.isEmpty()) {
- String value = valueArray.getJSONObject(0).getString("title");
- //根据cfId匹配
- switch (cfId){
- case "691c29c1f8cbae320a1c8e75":
- designlevel = value;
- break;
- case "687df3b60ae1530fa2704499":
- customer = value;
- break;
- case "687e0308e3f7ce8174a19cfc":
- designType = value;
- break;
- }
- }
- }
- /*todo:给实体赋值*/
- AnnualSeasonalSample annualSeasonalSample = new AnnualSeasonalSample();
- annualSeasonalSample.setTaskId(taskId);
- annualSeasonalSample.setTaskName(taskName);
- annualSeasonalSample.setCustomer(customer);
- annualSeasonalSample.setDesignType(designType);
- annualSeasonalSample.setDesignLevel(designlevel);
- //4、插入数据库
- QueryWrapper<AnnualSeasonalSample> queryWrapper = new QueryWrapper<>();
- List<AnnualSeasonalSample> AnnualSeasonalSampleList = null;
- try {
- queryWrapper.eq("task_id", taskId);
- AnnualSeasonalSampleList = annualSeasonalSampleMapper.selectList(queryWrapper);
- } catch (Exception e) {
- e.printStackTrace();
- }
- UpdateWrapper<AnnualSeasonalSample> updateWrapper = new UpdateWrapper<>();
- updateWrapper.eq("task_id", taskId);
- if (AnnualSeasonalSampleList != null && AnnualSeasonalSampleList.size() > 0) {
- updateWrapper.set("task_name", taskName);
- updateWrapper.set("customer", customer);
- updateWrapper.set("design_type", designType);
- updateWrapper.set("design_level", designlevel);
- annualSeasonalSampleMapper.update(null, updateWrapper);
- }else {
- int insert = annualSeasonalSampleMapper.insert(annualSeasonalSample);
- Map<String, Object> response1 = new HashMap<>();
- if(insert > 0){
- response1.put("success", true);
- response1.put("message", "用户创建成功");
- response1.put("data", "");
- log.info("任务创建成功,任务名称:{},任务id:{}", annualSeasonalSample.getTaskName(),annualSeasonalSample.getTaskId());
- }
- }
- }
- }
- }
- }
- log.info("年度季节品类打样数量同步完成");
- return McR.success();
- }
- /*todo:年度季节品类确认数量*/
- @Scheduled(cron = "0 0 4 * * ?")
- @PostMapping("/annualSeasonalCategory")
- @SneakyThrows
- McR annualSeasonalCategory(){
- //1、统计符合条件的任务个数
- Map header = new HashMap<>();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- HashMap param = new HashMap();
- 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";
- param.put("q",q);
- String projectId = "6878b323386fac7ab9dbe5e9";
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
- Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
- int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//6
- //2、分页查询
- HashMap param1 = new HashMap();
- param1.put("pageSize",100);
- String pageToken = "";//初始值
- for (int i=0;i<result/100 + 1;i++) {
- ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
- param1.put("q", q);
- param1.put("pageToken", pageToken);
- String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
- List<String> batchIds = extractIdsFromJson(doGet1);
- allIds.addAll(batchIds);//添加到总列表
- ObjectMapper mapper = new ObjectMapper();
- String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
- if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
- pageToken = nextPageToken;
- } else {
- // 为空,不进行处理
- }
- //3、查询任务详情
- for (int j = 0; j < allIds.size(); j++) {
- String taskId1 = allIds.get(j);
- HashMap params3 = new HashMap();
- //补充:查询任务前先看下这个是否是新版本的工作流
- String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
- JSONObject response = JSON.parseObject(doneGet);
- JSONArray resultArray = response.getJSONArray("result");
- String targetName = "确认工";//确认工艺等级完成
- for (int k = 0; k < resultArray.size(); k++) {
- JSONObject node = resultArray.getJSONObject(k);
- String currentNodeId = node.getString("name");
- String indexOf = currentNodeId.substring(0,3);
- if (targetName.contains(indexOf)) {
- params3.put("taskId", allIds.get(j));
- String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
- String taskId = "";//任务id
- String taskName = "";//任务名称
- String customer = "";//客户
- String designType = "";//设计类别
- String designlevel = "";//设计等级
- taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
- taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
- JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
- for (int p = 0; p < customfields.size(); p++) {
- JSONObject field = customfields.getJSONObject(p);
- String cfId = field.getString("cfId");
- JSONArray valueArray = field.getJSONArray("value");
- if (valueArray != null && !valueArray.isEmpty()) {
- String value = valueArray.getJSONObject(0).getString("title");
- //根据cfId匹配
- switch (cfId){
- case "691c29c1f8cbae320a1c8e75":
- designlevel = value;
- break;
- case "687df3b60ae1530fa2704499":
- customer = value;
- break;
- case "687e0308e3f7ce8174a19cfc":
- designType = value;
- break;
- }
- }
- }
- /*todo:给实体赋值*/
- AnnualSeasonalCategory annualSeasonalCategory = new AnnualSeasonalCategory();
- annualSeasonalCategory.setTaskId(taskId);
- annualSeasonalCategory.setTaskName(taskName);
- annualSeasonalCategory.setCustomer(customer);
- annualSeasonalCategory.setDesignType(designType);
- annualSeasonalCategory.setDesignLevel(designlevel);
- //4、插入数据库
- QueryWrapper<AnnualSeasonalCategory> queryWrapper = new QueryWrapper<>();
- List<AnnualSeasonalCategory> AnnualSeasonalCategoryList = null;
- try {
- queryWrapper.eq("task_id", taskId);
- AnnualSeasonalCategoryList = annualSeasonalCategoryMapper.selectList(queryWrapper);
- } catch (Exception e) {
- e.printStackTrace();
- }
- UpdateWrapper<AnnualSeasonalCategory> updateWrapper = new UpdateWrapper<>();
- updateWrapper.eq("task_id", taskId);
- if (AnnualSeasonalCategoryList != null && AnnualSeasonalCategoryList.size() > 0) {
- updateWrapper.set("task_name", taskName);
- updateWrapper.set("customer", customer);
- updateWrapper.set("design_type", designType);
- updateWrapper.set("design_level", designlevel);
- annualSeasonalCategoryMapper.update(null, updateWrapper);
- }else {
- int insert = annualSeasonalCategoryMapper.insert(annualSeasonalCategory);
- Map<String, Object> response1 = new HashMap<>();
- if(insert > 0){
- response1.put("success", true);
- response1.put("message", "用户创建成功");
- response1.put("data", "");
- log.info("任务创建成功,任务名称:{},任务id:{}", annualSeasonalCategory.getTaskName(),annualSeasonalCategory.getTaskId());
- }
- }
- }
- }
- }
- }
- log.info("年度季节品类确认数量同步完成");
- return McR.success();
- }
- /*todo:新工艺落地情况*/
- @Scheduled(cron = "0 30 1 * * ?")
- @SneakyThrows
- @PostMapping("/newprocessImplementation")
- McR newprocessImplementation(){
- //1、统计符合条件的任务个数
- Map header = new HashMap<>();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- HashMap param = new HashMap();
- 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";
- param.put("q",q);
- String projectId = "6878b323386fac7ab9dbe5e9";
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
- Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
- int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//个数 113
- //2、分页查询
- HashMap param1 = new HashMap();
- param1.put("pageSize",100);
- String pageToken = "";//初始值
- for (int i=0;i<result/100 + 1;i++) {
- ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
- param1.put("q", q);
- param1.put("pageToken", pageToken);
- String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
- List<String> batchIds = extractIdsFromJson(doGet1);
- allIds.addAll(batchIds);//添加到总列表
- ObjectMapper mapper = new ObjectMapper();
- String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
- if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
- pageToken = nextPageToken;
- } else {
- // 为空,不进行处理
- }
- //3、查询任务详情
- for (int j = 0; j < allIds.size(); j++) {
- String taskId1 = allIds.get(j);
- HashMap params3 = new HashMap();
- //补充:查询任务前先看下这个是否是新版本的工作流
- String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
- JSONObject response = JSON.parseObject(doneGet);
- JSONArray resultArray = response.getJSONArray("result");
- String targetName = "确认工";//确认工艺等级完成
- for (int k = 0; k < resultArray.size(); k++) {
- JSONObject node = resultArray.getJSONObject(k);
- String currentNodeId = node.getString("name");
- String indexOf = currentNodeId.substring(0,3);
- if (targetName.contains(indexOf)) {
- params3.put("taskId", allIds.get(j));
- String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
- String taskId = "";//任务id
- String taskName = "";//任务名称
- String customer = "";//客户
- String designType = "";//设计类别
- String designlevel = "";//设计等级
- String repetitionCount = "";//遍数
- taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
- taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
- JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
- for (int p = 0; p < customfields.size(); p++) {
- JSONObject field = customfields.getJSONObject(p);
- String cfId = field.getString("cfId");
- JSONArray valueArray = field.getJSONArray("value");
- if (valueArray != null && !valueArray.isEmpty()) {
- String value = valueArray.getJSONObject(0).getString("title");
- //根据cfId匹配
- switch (cfId){
- case "691c29c1f8cbae320a1c8e75":
- designlevel = value;
- break;
- case "687df3b60ae1530fa2704499":
- customer = value;
- break;
- case "687e0308e3f7ce8174a19cfc":
- designType = value;
- break;
- case "691c1e19bac224231d7b0994":
- repetitionCount = value;
- }
- }
- }
- /*todo:给实体赋值*/
- NewprocessImplementation newprocessImplementation = new NewprocessImplementation();
- newprocessImplementation.setTaskId(taskId);
- newprocessImplementation.setTaskName(taskName);
- newprocessImplementation.setCustomer(customer);
- newprocessImplementation.setDesignType(designType);
- newprocessImplementation.setDesignLevel(designlevel);
- newprocessImplementation.setRepetitionCount(repetitionCount);
- //4、插入数据库
- QueryWrapper<NewprocessImplementation> queryWrapper = new QueryWrapper<>();
- List<NewprocessImplementation> NewprocessImplementationList = null;
- try {
- queryWrapper.eq("task_id", taskId);
- NewprocessImplementationList = newprocessImplementationMapper.selectList(queryWrapper);
- } catch (Exception e) {
- e.printStackTrace();
- }
- UpdateWrapper<NewprocessImplementation> updateWrapper = new UpdateWrapper<>();
- updateWrapper.eq("task_id", taskId);
- if (NewprocessImplementationList != null && NewprocessImplementationList.size() > 0) {
- updateWrapper.set("task_name", taskName);
- updateWrapper.set("customer", customer);
- updateWrapper.set("design_type", designType);
- updateWrapper.set("design_level", designlevel);
- updateWrapper.set("repetition_count",repetitionCount);
- newprocessImplementationMapper.update(null, updateWrapper);
- }else {
- int insert = newprocessImplementationMapper.insert(newprocessImplementation);
- Map<String, Object> response1 = new HashMap<>();
- if(insert > 0){
- response1.put("success", true);
- response1.put("message", "用户创建成功");
- response1.put("data", "");
- log.info("任务创建成功,任务名称:{},任务id:{}", newprocessImplementation.getTaskName(),newprocessImplementation.getTaskId());
- }
- }
- }
- }
- }
- }
- log.info("新工艺落地情况数据已同步");
- return McR.success();
- }
- /*todo:设计部月确认稿数量*/
- @Scheduled(cron = "0 0 1 * * ?")
- @SneakyThrows
- @PostMapping("/designdeparttMonthConfirm")
- McR DesigndeparttMonthConfirm(){
- //1、统计符合条件的任务个数
- Map header = new HashMap<>();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- HashMap param = new HashMap();
- 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";
- param.put("q",q);
- String projectId = "6878b323386fac7ab9dbe5e9";
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
- Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
- int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//个数 26
- //2、分页查询
- HashMap param1 = new HashMap();
- param1.put("pageSize",100);
- String pageToken = "";//初始值
- for (int i=0;i<result/100 + 1;i++) {
- ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
- param1.put("q", q);
- param1.put("pageToken", pageToken);
- String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header, param1);
- List<String> batchIds = extractIdsFromJson(doGet1);
- allIds.addAll(batchIds);//添加到总列表
- ObjectMapper mapper = new ObjectMapper();
- String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
- if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
- pageToken = nextPageToken;
- } else {
- // 为空,不进行处理
- }
- //3、查询任务详情
- String deadlineTime_END = "";
- for (int j = 0; j < allIds.size(); j++) {
- String taskId1 = allIds.get(j);
- HashMap params3 = new HashMap();
- //补充:查询任务前先看下这个是否是新版本的工作流
- String doneGet = UtilHttp.doGet("https://open.teambition.com/api/v3/task/" + taskId1 + "/node/list", header, new HashMap());
- JSONObject response = JSON.parseObject(doneGet);
- JSONArray resultArray = response.getJSONArray("result");
- String targetName = "确认工";//确认工艺等级完成
- for (int k = 0; k < resultArray.size(); k++) {
- JSONObject node = resultArray.getJSONObject(k);
- String currentNodeId = node.getString("name");
- String indexOf = currentNodeId.substring(0,3);
- if (targetName.contains(indexOf)) {
- params3.put("taskId", allIds.get(j));
- String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header, params3);
- String taskId = "";//任务id
- String taskName = "";//任务名称
- String customer = "";//客户
- String designType = "";//设计类别
- String designlevel = "";//设计等级
- String time_end = "";//结束时间
- time_end = node.getString("dueDate");
- if(time_end != null){
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
- SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- //【时间转换】TB中获取的时间为UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间
- String timeStr_A = time_end.replace("Z", " UTC");
- try {
- Date zhuangtaiDate_A = format.parse(timeStr_A);
- deadlineTime_END = defaultFormat.format(zhuangtaiDate_A);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- taskId = new ObjectMapper().readTree(doGet3).get("result").get(0).get("id").asText();
- taskName = new ObjectMapper().readTree(doGet3).get("result").get(0).get("content").asText();
- JSONArray customfields = JSON.parseObject(doGet3).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
- for (int p = 0; p < customfields.size(); p++) {
- JSONObject field = customfields.getJSONObject(p);
- String cfId = field.getString("cfId");
- JSONArray valueArray = field.getJSONArray("value");
- if (valueArray != null && !valueArray.isEmpty()) {
- String value = valueArray.getJSONObject(0).getString("title");
- //根据cfId匹配
- switch (cfId){
- case "691c29c1f8cbae320a1c8e75":
- designlevel = value;
- break;
- case "687df3b60ae1530fa2704499":
- customer = value;
- break;
- case "687e0308e3f7ce8174a19cfc":
- designType = value;
- break;
- }
- }
- }
- /*todo:给实体赋值*/
- DesigndeparttMonthConfirm designdeparttMonthConfirm = new DesigndeparttMonthConfirm();
- designdeparttMonthConfirm.setTaskId(taskId);
- designdeparttMonthConfirm.setTaskName(taskName);
- designdeparttMonthConfirm.setCustomer(customer);
- designdeparttMonthConfirm.setDesignType(designType);
- designdeparttMonthConfirm.setDesignLevel(designlevel);
- designdeparttMonthConfirm.setDateLineEnd(deadlineTime_END);
- //4、插入数据库
- QueryWrapper<DesigndeparttMonthConfirm> queryWrapper = new QueryWrapper<>();
- List<DesigndeparttMonthConfirm> DesigndeparttMonthConfirmList = null;
- try {
- queryWrapper.eq("task_id", taskId);
- DesigndeparttMonthConfirmList = designdeparttMonthConfirmMapper.selectList(queryWrapper);
- } catch (Exception e) {
- e.printStackTrace();
- }
- UpdateWrapper<DesigndeparttMonthConfirm> updateWrapper = new UpdateWrapper<>();
- updateWrapper.eq("task_id", taskId);
- if (DesigndeparttMonthConfirmList != null && DesigndeparttMonthConfirmList.size() > 0) {
- updateWrapper.set("task_name", taskName);
- updateWrapper.set("customer", customer);
- updateWrapper.set("design_type", designType);
- updateWrapper.set("design_level", designlevel);
- updateWrapper.set("date_line_end",deadlineTime_END);
- designdeparttMonthConfirmMapper.update(null, updateWrapper);
- }else {
- int insert = designdeparttMonthConfirmMapper.insert(designdeparttMonthConfirm);
- Map<String, Object> response1 = new HashMap<>();
- if(insert > 0){
- response1.put("success", true);
- response1.put("message", "用户创建成功");
- response1.put("data", "");
- log.info("任务创建成功,任务名称:{},任务id:{}", designdeparttMonthConfirm.getTaskName(),designdeparttMonthConfirm.getTaskId());
- }
- }
- }
- }
- }
- }
- log.info("设计部月确认稿数量数据已同步");
- return McR.success();
- }
- /*todo:文件来源变更统计*/
- @SneakyThrows
- @PostMapping("/changedocumentsource")
- McR changedocumentsource(){
- //1、统计符合条件的任务个数
- Map header = new HashMap<>();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- HashMap param = new HashMap();
- String q = "cf:687df8813d5081f8c81cf375 != null";
- param.put("q",q);
- String projectId = "6878b323386fac7ab9dbe5e9";
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/v3/project/" + projectId + "/task/count", (Map) header, (Map) param);
- Matcher m = Pattern.compile("\"result\":(\\d+)").matcher(doGet);
- int result = m.find() ? Integer.parseInt(m.group(1)) : 0;//个数4300
- //2、分页查询
- HashMap param1 = new HashMap();
- param1.put("pageSize",100);
- String pageToken = "";//初始值
- for (int i=0;i<result/100 + 1;i++) {
- ArrayList<String> allIds = new ArrayList<>();//todo:->>>>>>>>>全部任务id存在allIds
- param1.put("q", q);
- param1.put("pageToken", pageToken);
- Map header2 = new HashMap<>();
- header2.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token2 = tbService.AppAccessToken();
- Object token2 = Token2.getData();
- header2.put("Authorization","Bearer " + token2);
- header2.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header2.put("X-Tenant-Type","organization");
- String doGet1 = UtilHttp.doGet("https://open.teambition.com/api/v3/project/6878b323386fac7ab9dbe5e9/task/query", header2, param1);
- List<String> batchIds = extractIdsFromJson(doGet1);
- allIds.addAll(batchIds);//添加到总列表
- ObjectMapper mapper = new ObjectMapper();
- String nextPageToken = mapper.readTree(doGet1).get("nextPageToken").asText();
- if (nextPageToken != null && !nextPageToken.trim().isEmpty()) {
- pageToken = nextPageToken;
- } else {
- // 为空,不进行处理
- }
- //3、列出任务动态(taskid && actions = “customfield.update.v2”)
- for (int j = 0; j < allIds.size(); j++) {
- String renwutime = "";
- HashMap params3 = new HashMap();
- params3.put("actions", "customfield.update.v2");
- params3.put("pageSize",100);
- Map header3 = new HashMap<>();
- header3.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token3 = tbService.AppAccessToken();
- Object token3 = Token3.getData();
- header3.put("Authorization","Bearer " + token3);
- header3.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header3.put("X-Tenant-Type","organization");
- String doGet3 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/"+ allIds.get(j) +"/activity/list", header3, params3);
- System.out.println("doGet3" + doGet3);
- JsonNode resultNode = new ObjectMapper().readTree(doGet3).get("result");
- if(resultNode == null || resultNode.isEmpty() ){
- //为空不做处理
- }else {
- for (JsonNode item : resultNode) {
- String contentStr = item.get("content").asText();
- ObjectMapper objectMapper = new ObjectMapper();
- JsonNode content = objectMapper.readTree(contentStr);
- JsonNode customfieldName = content.get("customfieldName");
- if (customfieldName != null && "文件来源".equals(customfieldName.asText())) {
- //写入数据库
- /*todo:给实体赋值*/
- String taskId = allIds.get(j);//任务id
- String taskName = "";//任务名称
- String renwuTime = "";//创建时间
- String customer = "";//客户名称
- String ywPerson = "";//业务人员
- String zdrPerson = "";//制单人
- String zyjl = "";//业务经理
- String designcatogry = "";//设计类别
- HashMap param_A = new HashMap();
- param_A.put("taskId",taskId);
- String doGet4 = UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", header3, param_A);//查询任务详情
- JSONArray customfields = JSON.parseObject(doGet4).getJSONArray("result").getJSONObject(0).getJSONArray("customfields");
- for (int p = 0; p < customfields.size(); p++) {
- JSONObject field = customfields.getJSONObject(p);
- String cfId = field.getString("cfId");
- JSONArray valueArray = field.getJSONArray("value");
- if (valueArray != null && !valueArray.isEmpty()) {
- String value = valueArray.getJSONObject(0).getString("title");
- //根据cfId匹配
- switch (cfId){
- case "687df3b60ae1530fa2704499":
- customer = value;//客户名称
- break;
- case "688191972ab6c4f412ea2bb9":
- ywPerson = value;//业务人员
- break;
- case "687df458b9c2f9f90865c13b":
- zyjl = value;//业务经理
- break;
- case "687e0308e3f7ce8174a19cfc":
- designcatogry = value;//设计类别
- break;
- case "688191a2d18cef625eccade6":
- zdrPerson = value;//制单人
- break;
- }
- }
- }
- ObjectMapper objectMapper4 = new ObjectMapper();
- JsonNode rootNode = objectMapper4.readTree(doGet4);
- for(JsonNode resultNode4 : rootNode.path("result")) {
- taskName = resultNode4.path("content").asText();//任务名称
- renwuTime = resultNode4.path("created").asText();//创建时间
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
- SimpleDateFormat defaultFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- //【时间转换】TB中获取的时间为UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。
- String timeStr = renwuTime.replace("Z", " UTC");
- try {
- Date zhuangtaiDate = format.parse(timeStr);
- renwutime = defaultFormat.format(zhuangtaiDate);
- } catch (Exception e) {
- e.printStackTrace();
- }
- // String creatorId = resultNode4.path("creatorId").asText();//创建人id
- // List<String> involveMembers = new ArrayList<>();
- // involveMembers.add(creatorId);
- // zdrPerson = tbService.TBtoDinguserId(involveMembers);//创建人
- }
- ChangeDocumentSource changeDocumentSource = new ChangeDocumentSource();
- changeDocumentSource.setTaskId(taskId);
- changeDocumentSource.setTaskName(taskName);
- changeDocumentSource.setRenwuTime(renwutime);
- changeDocumentSource.setCustomer(customer);
- changeDocumentSource.setYwPerson(ywPerson);
- changeDocumentSource.setZdrPerson(zdrPerson);
- changeDocumentSource.setZyjl(zyjl);
- changeDocumentSource.setDesigncatogry(designcatogry);
- //4、插入数据库
- QueryWrapper<ChangeDocumentSource> queryWrapper = new QueryWrapper<>();
- List<ChangeDocumentSource> changeDocumentSourceList = null;
- try {
- queryWrapper.eq("task_id", taskId);
- changeDocumentSourceList = changeDocumentSourceMapper.selectList(queryWrapper);
- } catch (Exception e) {
- e.printStackTrace();
- }
- UpdateWrapper<ChangeDocumentSource> updateWrapper = new UpdateWrapper<>();
- updateWrapper.eq("task_id", taskId);
- if (changeDocumentSourceList != null && changeDocumentSourceList.size() > 0) {
- updateWrapper.set("renwu_time", renwutime);
- updateWrapper.set("customer",customer);
- updateWrapper.set("yw_person",ywPerson);
- updateWrapper.set("zdr_person",zdrPerson);
- updateWrapper.set("zyjl",zyjl);
- updateWrapper.set("designcatogry",designcatogry);
- changeDocumentSourceMapper.update(null, updateWrapper);
- }else {
- int insert = changeDocumentSourceMapper.insert(changeDocumentSource);
- Map<String, Object> response = new HashMap<>();
- if(insert > 0){
- response.put("success", true);
- response.put("message", "用户创建成功");
- response.put("data", "");
- log.info("任务创建成功,任务名称:{},任务id:{}", changeDocumentSource.getTaskName(),changeDocumentSource.getTaskId());
- }
- }
- break;//跳出循环,开始下一个任务
- }
- }
- }
- }
- }
- System.out.println("[任务动态同步完毕!]");
- return McR.success();
- }
- /*todo:个人月度成功率*/
- @SneakyThrows
- @PostMapping("/personalmonthlySuccessrate")
- McR personalmonthlySuccessrate(){
- return McR.success();
- }
- /*todo:人员获取部门*/
- @SneakyThrows
- @PostMapping("/UserGetDeprt")
- String UserGetDeprt(@RequestParam String User){
- Map header = new HashMap<>();
- header.put("x-operator-id","622ee3450cf3bb5e1a486f1f");
- McR Token = tbService.AppAccessToken();
- Object token = Token.getData();
- header.put("Authorization","Bearer " + token);
- header.put("X-Tenant-Id","61a8c26719c3b5ffe9c4cffb");
- header.put("X-Tenant-Type","organization");
- HashMap param = new HashMap();
- param.put("query",User);
- String doGet = UtilHttp.doGet("https://open.teambition.com/api/org/member/search", (Map) header, (Map) param);
- JSONObject jsonObject = JSON.parseObject(doGet);
- JSONArray resultArray = jsonObject.getJSONArray("result");
- String userId = "";
- String value = "";
- if (resultArray != null && !resultArray.isEmpty()) {
- JSONObject firstUser = resultArray.getJSONObject(0);
- userId = firstUser.getString("userId");
- System.out.println("提取到的userId: " + userId);
- List<String> involveMembers = new ArrayList<>();
- involveMembers.add(userId);
- HashMap param2 = new HashMap();
- param2.put("tbUserIds",involveMembers);
- String s = UtilHttp.doGet("https://open.teambition.com/api/idmap/dingtalk/getDingUserId", header, param2);
- ObjectMapper objectMapper = new ObjectMapper();
- var rootNode = objectMapper.readTree(s);
- List<String> userIdList = objectMapper.convertValue(
- rootNode.get("result"),
- new TypeReference<List<Map<String, String>>>() {
- }
- )
- .stream()
- .map(map -> map.get("dingtalkUserId"))
- .collect(Collectors.toList());
- System.out.println(userIdList);
- HashMap head = new HashMap();
- McR Token2 = tbService.OuNuoXinAccessToken();
- Object Data = Token2.getData();
- head.put("x-acs-dingtalk-access-token",Data);
- HashMap boddy = new HashMap();
- boddy.put("userIdList",userIdList);
- boddy.put("fieldFilterList", Arrays.asList("sys00-mainDept"));
- boddy.put("appAgentId","4115325431");
- boddy.put("text2SelectConvert",true);
- String ddt = UtilHttp.doPost("https://api.dingtalk.com/v1.0/hrm/rosters/lists/query",head,null,boddy);
- // 使用Fastjson解析
- JSONObject jsonObj = JSON.parseObject(ddt);
- JSONArray resultArray2 = jsonObj.getJSONArray("result");
- if (resultArray2 != null && !resultArray2.isEmpty()) {
- JSONObject firstResult = resultArray2.getJSONObject(0);
- JSONArray fieldDataList = firstResult.getJSONArray("fieldDataList");
- if (fieldDataList != null && !fieldDataList.isEmpty()) {
- // 遍历fieldDataList找到主部门字段(如果有多个字段的话)
- for (int i = 0; i < fieldDataList.size(); i++) {
- JSONObject fieldData = fieldDataList.getJSONObject(i);
- String fieldCode = fieldData.getString("fieldCode");
- // 如果是主部门字段
- if ("sys00-mainDept".equals(fieldCode)) {
- JSONArray fieldValueList = fieldData.getJSONArray("fieldValueList");
- if (fieldValueList != null && !fieldValueList.isEmpty()) {
- JSONObject firstValue = fieldValueList.getJSONObject(0);
- value = firstValue.getString("value");
- System.out.println("提取到的部门: " + value);
- }
- break;
- }
- }
- }
- }
- }
- return value;
- }
- }
|