|
@@ -0,0 +1,584 @@
|
|
|
|
|
+package com.muzhi.shuchan.service.impl;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
+import com.aliyun.dingtalkyida_1_0.models.GetOpenUrlResponse;
|
|
|
|
|
+import com.aliyun.dingtalkyida_1_0.models.StartInstanceResponse;
|
|
|
|
|
+import com.aliyun.dingtalkyida_2_0.models.GetFormDataByIDResponse;
|
|
|
|
|
+import com.aliyun.tea.TeaException;
|
|
|
|
|
+import com.aliyun.teautil.models.RuntimeOptions;
|
|
|
|
|
+import com.muzhi.shuchan.common.R;
|
|
|
|
|
+import com.muzhi.shuchan.common.dingtalkyida.YiDaFormData;
|
|
|
|
|
+import com.muzhi.shuchan.common.fastjson.Util;
|
|
|
|
|
+import com.muzhi.shuchan.common.teambition.Idmap;
|
|
|
|
|
+import com.muzhi.shuchan.common.teambition.Project;
|
|
|
|
|
+import com.muzhi.shuchan.common.universal.Time;
|
|
|
|
|
+import com.muzhi.shuchan.entity.InvoiceItem;
|
|
|
|
|
+import com.muzhi.shuchan.service.AccessTokenService;
|
|
|
|
|
+import com.muzhi.shuchan.service.DingTalkService;
|
|
|
|
|
+import com.muzhi.shuchan.service.TeambitionService;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.w3c.dom.Document;
|
|
|
|
|
+import org.w3c.dom.Element;
|
|
|
|
|
+import org.w3c.dom.NodeList;
|
|
|
|
|
+import org.xml.sax.InputSource;
|
|
|
|
|
+
|
|
|
|
|
+import javax.xml.parsers.DocumentBuilder;
|
|
|
|
|
+import javax.xml.parsers.DocumentBuilderFactory;
|
|
|
|
|
+import javax.xml.xpath.XPath;
|
|
|
|
|
+import javax.xml.xpath.XPathConstants;
|
|
|
|
|
+import javax.xml.xpath.XPathFactory;
|
|
|
|
|
+import java.io.*;
|
|
|
|
|
+import java.net.HttpURLConnection;
|
|
|
|
|
+import java.net.MalformedURLException;
|
|
|
|
|
+import java.net.URL;
|
|
|
|
|
+import java.net.URLConnection;
|
|
|
|
|
+import java.nio.file.Files;
|
|
|
|
|
+import java.nio.file.Path;
|
|
|
|
|
+import java.nio.file.Paths;
|
|
|
|
|
+import java.nio.file.StandardCopyOption;
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+@Service
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+public class TeambitionServiceImpl implements TeambitionService {
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private AccessTokenService accessTokenService;
|
|
|
|
|
+
|
|
|
|
|
+ // 通用工具方法:如果不存在则添加
|
|
|
|
|
+ public static <T> void addIfAbsent(List<T> list, T element) {
|
|
|
|
|
+ if (!list.contains(element)) {
|
|
|
|
|
+ list.add(element);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 项目立项通过后创建TB项目信息
|
|
|
|
|
+ * 通过匹配项目模板创建
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param tbmbid TB模板id
|
|
|
|
|
+ * @param xmbh 项目编号
|
|
|
|
|
+ * @param xmmc 项目名称
|
|
|
|
|
+ * @param xmzq 项目周期
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param xmjlDingUserId 项目经理钉钉用户id
|
|
|
|
|
+ * @param ssbmDingDeptId 实施部门钉钉部门id
|
|
|
|
|
+ * @param pmoDingUserId PMO钉钉用户id
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param sjfzrDingUserId 商机负责人钉钉用户id
|
|
|
|
|
+ * @param jjfafzrDingUserId 解决方案负责人钉钉用户id
|
|
|
|
|
+ * @param ssfazDingUserId 【实施方案组】钉钉用户id
|
|
|
|
|
+ * @param ssjszDingUserId 【实施建设组】钉钉用户id
|
|
|
|
|
+ * @param zlcszDingUserId 【质量测试组】钉钉用户id
|
|
|
|
|
+ * @param ywwbzDingUserId 【运维维保组】钉钉用户id
|
|
|
|
|
+ * @param bzgfzDingUserId 【标准规范组】钉钉用户id
|
|
|
|
|
+ * @param sjyyzDingUserId 【数据运营组】钉钉用户id
|
|
|
|
|
+ * @param xqdjzDingUserId 【需求对接组】钉钉用户id
|
|
|
|
|
+ * @param zlsszDingUserId 【治理实施组】钉钉用户id
|
|
|
|
|
+ * @param sjaqzDingUserId 【数据安全组】钉钉用户id
|
|
|
|
|
+ * @param ptaqzDingUserId 【平台安全组】钉钉用户id
|
|
|
|
|
+ * @param wlaqzDingUserId 【网络安全组】钉钉用户id
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param sfwndlxjhxm 是否为年度立项计划项目
|
|
|
|
|
+ * @param xmlx 项目类型
|
|
|
|
|
+ * @param xmbq 项目标签
|
|
|
|
|
+ * @param xmxqly (项目)需求来源
|
|
|
|
|
+ * @param sfkslx 是否快速立项
|
|
|
|
|
+ * @param slid 实例id
|
|
|
|
|
+ *
|
|
|
|
|
+ * NOTE(TB模板id映射):
|
|
|
|
|
+ * 【数据运营 - 项目模板】:69031cec741ee887ba0aaa85
|
|
|
|
|
+ * 【等保服务 - 项目模板】:6904543acd44bbef88936163
|
|
|
|
|
+ * 【安全服务 - 项目模板】:690455ea7b2a84bef265dfa9
|
|
|
|
|
+ * 【开发类 - 项目模板】:690458c7c4e0c1ed239f22d1
|
|
|
|
|
+ * 【运维服务 - 项目模板】:69080c557899d5670762f632
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R createTeambitionProject(String tbmbid,
|
|
|
|
|
+ String xmbh, String xmmc, String xmzq,
|
|
|
|
|
+ String xmjlDingUserId, String ssbmDingDeptId, String pmoDingUserId,
|
|
|
|
|
+ String sjfzrDingUserId, String jjfafzrDingUserId,
|
|
|
|
|
+ String ssfazDingUserId, String ssjszDingUserId, String zlcszDingUserId, String ywwbzDingUserId,
|
|
|
|
|
+ String bzgfzDingUserId, String sjyyzDingUserId, String xqdjzDingUserId, String zlsszDingUserId,
|
|
|
|
|
+ String sjaqzDingUserId, String ptaqzDingUserId, String wlaqzDingUserId,
|
|
|
|
|
+ String sfwndlxjhxm, String xmlx, String xmbq, String xmxqly, String sfkslx,
|
|
|
|
|
+ String slid) {
|
|
|
|
|
+
|
|
|
|
|
+ /**项目立项通过后创建TB项目信息*/
|
|
|
|
|
+ log.info("项目立项通过后创建TB项目信息===");
|
|
|
|
|
+
|
|
|
|
|
+ log.info("TB模板id--->" + tbmbid);
|
|
|
|
|
+ log.info("项目编号--->" + xmbh);
|
|
|
|
|
+ log.info("项目名称--->" + xmmc);
|
|
|
|
|
+ log.info("项目周期--->" + xmzq);
|
|
|
|
|
+ log.info("项目经理钉钉用户id--->" + xmjlDingUserId);
|
|
|
|
|
+ log.info("实施部门钉钉部门id--->" + ssbmDingDeptId);
|
|
|
|
|
+ log.info("PMO钉钉用户id--->" + pmoDingUserId);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("商机负责人钉钉用户id--->" + sjfzrDingUserId);//单人
|
|
|
|
|
+ log.info("解决方案负责人钉钉用户id--->" + jjfafzrDingUserId);//单人
|
|
|
|
|
+
|
|
|
|
|
+ log.info("【实施方案组】钉钉用户id--->" + ssfazDingUserId);//多人
|
|
|
|
|
+ log.info("【实施建设组】钉钉用户id--->" + ssjszDingUserId);//多人
|
|
|
|
|
+ log.info("【质量测试组】钉钉用户id--->" + zlcszDingUserId);//多人
|
|
|
|
|
+ log.info("【运维维保组】钉钉用户id--->" + ywwbzDingUserId);//多人
|
|
|
|
|
+ log.info("【标准规范组】钉钉用户id--->" + bzgfzDingUserId);//多人
|
|
|
|
|
+ log.info("【数据运营组】钉钉用户id--->" + sjyyzDingUserId);//多人
|
|
|
|
|
+ log.info("【需求对接组】钉钉用户id--->" + xqdjzDingUserId);//多人
|
|
|
|
|
+ log.info("【治理实施组】钉钉用户id--->" + zlsszDingUserId);//多人
|
|
|
|
|
+ log.info("【数据安全组】钉钉用户id--->" + sjaqzDingUserId);//多人
|
|
|
|
|
+ log.info("【平台安全组】钉钉用户id--->" + ptaqzDingUserId);//多人
|
|
|
|
|
+ log.info("【网络安全组】钉钉用户id--->" + wlaqzDingUserId);//多人
|
|
|
|
|
+
|
|
|
|
|
+ log.info("是否为年度立项计划项目--->" + sfwndlxjhxm);
|
|
|
|
|
+ log.info("项目类型--->" + xmlx);
|
|
|
|
|
+ log.info("项目标签--->" + xmbq);
|
|
|
|
|
+ log.info("项目需求来源--->" + xmxqly);
|
|
|
|
|
+ log.info("是否快速立项--->" + sfkslx);
|
|
|
|
|
+ log.info("宜搭传参「实例id」--->" + slid);
|
|
|
|
|
+
|
|
|
|
|
+ String adminTBuserId = "68dd29dceeb2af5b9da833d6";
|
|
|
|
|
+
|
|
|
|
|
+ /*根据项目编号判断项目是否已经存在TB*/
|
|
|
|
|
+ //企业级自定义字段,项目编号:69b7a841922144cd6e83acc0
|
|
|
|
|
+ String tql = "isArchived = false AND cf:69b7a841922144cd6e83acc0 = " + xmbh;
|
|
|
|
|
+ JSONArray projectIdArray = Project.searchProjectIds(tql, accessTokenService.getAppToken());
|
|
|
|
|
+
|
|
|
|
|
+ if (xmbh.length() < 11){
|
|
|
|
|
+ log.error("项目编号长度小于11位,同步中断,请检查项目编号是否正确!");
|
|
|
|
|
+ return R.error().message("项目编号长度小于11位,同步中断,请检查项目编号是否正确!");
|
|
|
|
|
+ }else {
|
|
|
|
|
+ if (projectIdArray.size() > 0){
|
|
|
|
|
+ log.error("项目已存在TB,开始更新项目======");
|
|
|
|
|
+
|
|
|
|
|
+ /*更新项目时间周期*/
|
|
|
|
|
+ //TODO
|
|
|
|
|
+
|
|
|
|
|
+ /*更新项目概览字段*/
|
|
|
|
|
+ //TODO
|
|
|
|
|
+
|
|
|
|
|
+ /*更新项目成员*/
|
|
|
|
|
+ //TODO
|
|
|
|
|
+
|
|
|
|
|
+ }else {
|
|
|
|
|
+ log.info("项目不存在TB,开始创建项目======");
|
|
|
|
|
+ if (tbmbid == null || tbmbid.equals("")){
|
|
|
|
|
+ if (xmbq == null || xmbq.equals("")){
|
|
|
|
|
+ log.error("项目标签为空,请检查项目标签是否正确!");
|
|
|
|
|
+ /*更新项目档案-写入日志记录*/
|
|
|
|
|
+ Map formMap = new HashMap<>();
|
|
|
|
|
+ formMap.put("selectField_mn33fn3i", "推送失败");//推送TB状态
|
|
|
|
|
+ formMap.put("textField_mn33fn3n", "项目标签为空,请检查项目标签是否正确!");//推送日志信息
|
|
|
|
|
+ String formDataJson = JSON.toJSONString(formMap);
|
|
|
|
|
+ System.out.println("mapJson:" + formDataJson);
|
|
|
|
|
+
|
|
|
|
|
+ Map searchMap = new HashMap<>();
|
|
|
|
|
+ searchMap.put("key", "textField_mhvfugv3");
|
|
|
|
|
+ searchMap.put("value", xmbh);
|
|
|
|
|
+ searchMap.put("type", "TEXT");
|
|
|
|
|
+ searchMap.put("operator", "eq");
|
|
|
|
|
+ searchMap.put("componentName", "TextField");
|
|
|
|
|
+ List searchList = new ArrayList();
|
|
|
|
|
+ searchList.add(searchMap);
|
|
|
|
|
+ String searchCondition = JSON.toJSONString(searchList);
|
|
|
|
|
+ System.out.println("查询条件searchCondition:" + searchCondition);
|
|
|
|
|
+ YiDaFormData.createOrUpdateFormData("FORM-E82C76C732F34F8FBA318095ABA0F4DF1L3W", searchCondition, formDataJson, accessTokenService.getAccessToken());
|
|
|
|
|
+
|
|
|
|
|
+ return R.error().message("项目标签为空,请检查项目标签是否正确!");
|
|
|
|
|
+ }else {
|
|
|
|
|
+ if(xmbq.equals("数据运营")){
|
|
|
|
|
+ tbmbid = "69031cec741ee887ba0aaa85";
|
|
|
|
|
+ } else if (xmbq.equals("等保服务")){
|
|
|
|
|
+ tbmbid = "6904543acd44bbef88936163";
|
|
|
|
|
+ } else if (xmbq.equals("安全服务")) {
|
|
|
|
|
+ tbmbid = "690455ea7b2a84bef265dfa9";
|
|
|
|
|
+ } else if (xmbq.equals("软件开发")) {
|
|
|
|
|
+ tbmbid = "690458c7c4e0c1ed239f22d1";
|
|
|
|
|
+ } else if (xmbq.equals("运维服务")) {
|
|
|
|
|
+ tbmbid = "69080c557899d5670762f632";
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**通过IDMap查询TBuserId*/
|
|
|
|
|
+ log.info("调用【通过IDMap查询TBuserId】接口......");
|
|
|
|
|
+ //项目经理
|
|
|
|
|
+ String xmjlTbUserId = Idmap.getTbUserId(Util.getStringToList(xmjlDingUserId), accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(项目经理):" + xmjlTbUserId);
|
|
|
|
|
+ //PMO
|
|
|
|
|
+ String pmoTbUserId = Idmap.getTbUserId(Util.getStringToList(pmoDingUserId), accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(PMO):" + pmoTbUserId);
|
|
|
|
|
+ //实施部门
|
|
|
|
|
+ String ssbmTbDeptId = Idmap.getTeamIdByDingTeamId(Util.getStringToList(ssbmDingDeptId), accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBteamId(实施部门id):" + ssbmTbDeptId);
|
|
|
|
|
+ String teamName = Idmap.getTeamNameByTeamId(ssbmTbDeptId, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBteamName(实施部门名称):" + teamName);
|
|
|
|
|
+
|
|
|
|
|
+ //提取项目周期的开始和结束时间戳
|
|
|
|
|
+ //项目开始时间戳
|
|
|
|
|
+ String xmkssjStrLong = Util.getStringToIndexList(xmzq, 0);
|
|
|
|
|
+ long xmkssjLong = Long.parseLong(xmkssjStrLong);
|
|
|
|
|
+ String xmjssjStrLong = Util.getStringToIndexList(xmzq, 1);
|
|
|
|
|
+ long xmjssjLong = Long.parseLong(xmjssjStrLong);
|
|
|
|
|
+
|
|
|
|
|
+ if (tbmbid == null){
|
|
|
|
|
+ log.error("根据当前项目标签未匹配到TB模板id,同步中断!!!");
|
|
|
|
|
+ /*更新项目档案-写入日志记录*/
|
|
|
|
|
+ Map formMap = new HashMap<>();
|
|
|
|
|
+ formMap.put("selectField_mn33fn3i", "推送失败");//推送TB状态
|
|
|
|
|
+ formMap.put("textField_mn33fn3n", "❌根据当前项目标签未匹配到TB模板id,同步中断!!!");//推送日志信息
|
|
|
|
|
+ String formDataJson = JSON.toJSONString(formMap);
|
|
|
|
|
+ System.out.println("mapJson:" + formDataJson);
|
|
|
|
|
+
|
|
|
|
|
+ Map searchMap = new HashMap<>();
|
|
|
|
|
+ searchMap.put("key", "textField_mhvfugv3");
|
|
|
|
|
+ searchMap.put("value", xmbh);
|
|
|
|
|
+ searchMap.put("type", "TEXT");
|
|
|
|
|
+ searchMap.put("operator", "eq");
|
|
|
|
|
+ searchMap.put("componentName", "TextField");
|
|
|
|
|
+ List searchList = new ArrayList();
|
|
|
|
|
+ searchList.add(searchMap);
|
|
|
|
|
+ String searchCondition = JSON.toJSONString(searchList);
|
|
|
|
|
+ System.out.println("查询条件searchCondition:" + searchCondition);
|
|
|
|
|
+ YiDaFormData.createOrUpdateFormData("FORM-E82C76C732F34F8FBA318095ABA0F4DF1L3W", searchCondition, formDataJson, accessTokenService.getAccessToken());
|
|
|
|
|
+
|
|
|
|
|
+ return R.error().message("根据当前项目标签未匹配到TB模板id,同步中断!!!");
|
|
|
|
|
+ }else {
|
|
|
|
|
+ if (xmjlTbUserId == null){
|
|
|
|
|
+ log.error("通过IDMap查询TBuserId(项目经理)为空,同步中断!!!");
|
|
|
|
|
+ /*更新项目档案-写入日志记录*/
|
|
|
|
|
+ Map formMap = new HashMap<>();
|
|
|
|
|
+ formMap.put("selectField_mn33fn3i", "推送失败");//推送TB状态
|
|
|
|
|
+ formMap.put("textField_mn33fn3n", "❌通过IDMap查询TBuserId(项目经理)为空,同步中断!!!");//推送日志信息
|
|
|
|
|
+ String formDataJson = JSON.toJSONString(formMap);
|
|
|
|
|
+ System.out.println("mapJson:" + formDataJson);
|
|
|
|
|
+
|
|
|
|
|
+ Map searchMap = new HashMap<>();
|
|
|
|
|
+ searchMap.put("key", "textField_mhvfugv3");
|
|
|
|
|
+ searchMap.put("value", xmbh);
|
|
|
|
|
+ searchMap.put("type", "TEXT");
|
|
|
|
|
+ searchMap.put("operator", "eq");
|
|
|
|
|
+ searchMap.put("componentName", "TextField");
|
|
|
|
|
+ List searchList = new ArrayList();
|
|
|
|
|
+ searchList.add(searchMap);
|
|
|
|
|
+ String searchCondition = JSON.toJSONString(searchList);
|
|
|
|
|
+ System.out.println("查询条件searchCondition:" + searchCondition);
|
|
|
|
|
+ YiDaFormData.createOrUpdateFormData("FORM-E82C76C732F34F8FBA318095ABA0F4DF1L3W", searchCondition, formDataJson, accessTokenService.getAccessToken());
|
|
|
|
|
+
|
|
|
|
|
+ return R.error().message("通过IDMap查询TBuserId(项目经理)为空,同步中断!!!");
|
|
|
|
|
+ }else {
|
|
|
|
|
+ /*根据模板创建项目*/
|
|
|
|
|
+ String projectId = Project.createFromTemplate(xmmc, tbmbid, Time.getUtcToTimestamp(xmkssjLong), Time.getUtcToTimestamp(xmjssjLong), xmjlTbUserId, accessTokenService.getAppToken());
|
|
|
|
|
+ if (projectId != null){
|
|
|
|
|
+ log.info("【根据模板创建项目】成功,开始更新项目概览字段===");
|
|
|
|
|
+ /*更新项目概览字段*/
|
|
|
|
|
+ Project.updateProjectCustomField(null, xmjlTbUserId, projectId, "项目编号", xmbh, accessTokenService.getAppToken());
|
|
|
|
|
+ Project.updateProjectCustomField("成员组件", xmjlTbUserId, projectId, "项目经理", xmjlTbUserId, accessTokenService.getAppToken());
|
|
|
|
|
+ Project.updateProjectCustomField(null, xmjlTbUserId, projectId, "实施部门", teamName, accessTokenService.getAppToken());
|
|
|
|
|
+ Project.updateProjectCustomField("成员组件", xmjlTbUserId, projectId, "PMO", pmoTbUserId, accessTokenService.getAppToken());
|
|
|
|
|
+ Project.updateProjectCustomField(null, xmjlTbUserId, projectId, "是否为年度立项计划项目", sfwndlxjhxm, accessTokenService.getAppToken());
|
|
|
|
|
+ Project.updateProjectCustomField(null, xmjlTbUserId, projectId, "项目类型", xmlx, accessTokenService.getAppToken());
|
|
|
|
|
+ Project.updateProjectCustomField(null, xmjlTbUserId, projectId, "项目标签", xmbq, accessTokenService.getAppToken());
|
|
|
|
|
+ Project.updateProjectCustomField(null, xmjlTbUserId, projectId, "(项目)需求来源", xmxqly, accessTokenService.getAppToken());
|
|
|
|
|
+ Project.updateProjectCustomField(null, xmjlTbUserId, projectId, "是否快速立项", sfkslx, accessTokenService.getAppToken());
|
|
|
|
|
+
|
|
|
|
|
+ /*创建项目成员*/
|
|
|
|
|
+ log.info("【创建项目成员】开始===");
|
|
|
|
|
+ List listEmpAll = new ArrayList();
|
|
|
|
|
+ //数发子管理员//REMARK 固定每个项目中该账号都需要加入,并在创建项目后更新该账号为该项目【管理员】角色
|
|
|
|
|
+ addIfAbsent(listEmpAll, adminTBuserId);
|
|
|
|
|
+
|
|
|
|
|
+ //PMO
|
|
|
|
|
+ if (pmoTbUserId != null){
|
|
|
|
|
+ if (pmoTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, pmoTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //商机负责人
|
|
|
|
|
+ String sjfzrTbUserId = Idmap.getTbUserId(Util.getStringToList(sjfzrDingUserId), accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(商机负责人):" + sjfzrTbUserId);
|
|
|
|
|
+ if (sjfzrTbUserId != null){
|
|
|
|
|
+ if (sjfzrTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, sjfzrTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //解决方案负责人
|
|
|
|
|
+ String jjfafzrTbUserId = Idmap.getTbUserId(Util.getStringToList(jjfafzrDingUserId), accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(解决方案负责人):" + jjfafzrTbUserId);
|
|
|
|
|
+ if (jjfafzrTbUserId != null){
|
|
|
|
|
+ if (jjfafzrTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, jjfafzrTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //实施方案组
|
|
|
|
|
+ if (ssfazDingUserId != null){
|
|
|
|
|
+ List<String> list1 = JSON.parseArray(ssfazDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list1.size(); i++) {
|
|
|
|
|
+ String str = list1.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String ssfazTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(实施方案组):" + ssfazTbUserId);
|
|
|
|
|
+ if (ssfazTbUserId != null){
|
|
|
|
|
+ if (ssfazTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, ssfazTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //实施建设组
|
|
|
|
|
+ if (ssjszDingUserId != null){
|
|
|
|
|
+ List<String> list2 = JSON.parseArray(ssjszDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list2.size(); i++) {
|
|
|
|
|
+ String str = list2.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String ssjszTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(实施建设组):" + ssjszTbUserId);
|
|
|
|
|
+ if (ssjszTbUserId != null){
|
|
|
|
|
+ if (ssjszTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, ssjszTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //质量测试组
|
|
|
|
|
+ if (zlcszDingUserId != null){
|
|
|
|
|
+ List<String> list3 = JSON.parseArray(zlcszDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list3.size(); i++) {
|
|
|
|
|
+ String str = list3.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String zlcszTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(质量测试组):" + zlcszTbUserId);
|
|
|
|
|
+ if (zlcszTbUserId != null){
|
|
|
|
|
+ if (zlcszTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, zlcszTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //运维维保组
|
|
|
|
|
+ if (ywwbzDingUserId != null){
|
|
|
|
|
+ List<String> list4 = JSON.parseArray(ywwbzDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list4.size(); i++) {
|
|
|
|
|
+ String str = list4.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String ywwbzTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(运维维保组):" + ywwbzTbUserId);
|
|
|
|
|
+ if (ywwbzTbUserId != null){
|
|
|
|
|
+ if (ywwbzTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, ywwbzTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //标准规范组
|
|
|
|
|
+ if (bzgfzDingUserId != null){
|
|
|
|
|
+ List<String> list5 = JSON.parseArray(bzgfzDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list5.size(); i++) {
|
|
|
|
|
+ String str = list5.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String bzgfzTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(标准规范组):" + bzgfzTbUserId);
|
|
|
|
|
+ if (bzgfzTbUserId != null){
|
|
|
|
|
+ if (bzgfzTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, bzgfzTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //数据运营组
|
|
|
|
|
+ if (sjyyzDingUserId != null){
|
|
|
|
|
+ List<String> list6 = JSON.parseArray(sjyyzDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list6.size(); i++) {
|
|
|
|
|
+ String str = list6.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String sjyyzTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(数据运营组):" + sjyyzTbUserId);
|
|
|
|
|
+ if (sjyyzTbUserId != null){
|
|
|
|
|
+ if (sjyyzTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, sjyyzTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //需求对接组
|
|
|
|
|
+ if (xqdjzDingUserId != null){
|
|
|
|
|
+ List<String> list7 = JSON.parseArray(xqdjzDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list7.size(); i++) {
|
|
|
|
|
+ String str = list7.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String xqdjzTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(需求对接组):" + xqdjzTbUserId);
|
|
|
|
|
+ if (xqdjzTbUserId != null){
|
|
|
|
|
+ if (xqdjzTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, xqdjzTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //治理实施组
|
|
|
|
|
+ if (zlsszDingUserId != null){
|
|
|
|
|
+ List<String> list8 = JSON.parseArray(zlsszDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list8.size(); i++) {
|
|
|
|
|
+ String str = list8.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String zlsszTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(治理实施组):" + zlsszTbUserId);
|
|
|
|
|
+ if (zlsszTbUserId != null){
|
|
|
|
|
+ if (zlsszTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, zlsszTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //数据安全组
|
|
|
|
|
+ if (sjaqzDingUserId != null){
|
|
|
|
|
+ List<String> list9 = JSON.parseArray(sjaqzDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list9.size(); i++) {
|
|
|
|
|
+ String str = list9.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String sjaqzTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(数据安全组):" + sjaqzTbUserId);
|
|
|
|
|
+ if (sjaqzTbUserId != null){
|
|
|
|
|
+ if (sjaqzTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, sjaqzTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //平台安全组
|
|
|
|
|
+ if (ptaqzDingUserId != null){
|
|
|
|
|
+ List<String> list10 = JSON.parseArray(ptaqzDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list10.size(); i++) {
|
|
|
|
|
+ String str = list10.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String ptaqzTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(平台安全组):" + ptaqzTbUserId);
|
|
|
|
|
+ if (ptaqzTbUserId != null){
|
|
|
|
|
+ if (ptaqzTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, ptaqzTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //网络安全组
|
|
|
|
|
+ if (wlaqzDingUserId != null){
|
|
|
|
|
+ List<String> list11 = JSON.parseArray(wlaqzDingUserId, String.class);
|
|
|
|
|
+ for (int i = 0; i < list11.size(); i++) {
|
|
|
|
|
+ String str = list11.get(i);
|
|
|
|
|
+ System.out.println("获取到的多人数组内人员的钉钉id: " + str);
|
|
|
|
|
+ String wlaqzTbUserId = Idmap.getTbUserId(str, accessTokenService.getAppToken());
|
|
|
|
|
+ System.out.println("通过IDMap查询TBuserId(网络安全组):" + wlaqzTbUserId);
|
|
|
|
|
+ if (wlaqzTbUserId != null){
|
|
|
|
|
+ if (wlaqzTbUserId != xmjlTbUserId){
|
|
|
|
|
+ addIfAbsent(listEmpAll, wlaqzTbUserId);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ Project.createProjectMember(xmjlTbUserId, projectId, listEmpAll, accessTokenService.getAppToken());
|
|
|
|
|
+
|
|
|
|
|
+ /*获取该项目角色列表*/
|
|
|
|
|
+ JSONArray projectRoleList = Project.getProjectRoleList(projectId, accessTokenService.getAppToken());
|
|
|
|
|
+ String roleId = null;
|
|
|
|
|
+ if (projectRoleList.size() > 0 && projectRoleList != null && !projectRoleList.isEmpty()){
|
|
|
|
|
+ for (int i = 0; i < projectRoleList.size(); i++) {
|
|
|
|
|
+ JSONObject item = projectRoleList.getJSONObject(i);
|
|
|
|
|
+ if ("项目管理员".equals(item.getString("name"))) {
|
|
|
|
|
+ roleId = item.getString("id");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ System.out.println("该项目管理员角色的 id:" + roleId);
|
|
|
|
|
+ if (roleId != null){
|
|
|
|
|
+ /*修改项目成员的角色-将「数发子管理员」的账号在该项目中更新为该项目的【管理员】角色*/
|
|
|
|
|
+ Project.updateProjectRole(xmjlTbUserId,projectId,adminTBuserId,roleId,accessTokenService.getAppToken());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /*根据部门名称获取TB项目集id*/
|
|
|
|
|
+ String xmjMessage = null;
|
|
|
|
|
+ String programId = Idmap.getProgramIdByTeamName(teamName, accessTokenService.getAppToken());
|
|
|
|
|
+ if (programId != null && programId != ""){
|
|
|
|
|
+ log.info("根据部门名称获取TB项目集id成功,项目集ID:" + programId);
|
|
|
|
|
+ log.info("开始将当前项目添加至该项目集===");
|
|
|
|
|
+ /*添加项目到项目集*/
|
|
|
|
|
+ int projectToProjectSet = Project.createProjectToProjectSet(programId, projectId, adminTBuserId, accessTokenService.getAppToken());
|
|
|
|
|
+ if (projectToProjectSet == 200){
|
|
|
|
|
+ log.info("项目添加至项目集成功!");
|
|
|
|
|
+ xmjMessage = "✅项目添加至【"+teamName+"】项目集-->成功!";
|
|
|
|
|
+ }else {
|
|
|
|
|
+ log.info("项目添加至项目集失败!");
|
|
|
|
|
+ xmjMessage = "❌项目添加至【"+teamName+"】项目集-->失败!";
|
|
|
|
|
+ }
|
|
|
|
|
+ }else {
|
|
|
|
|
+ log.info("根据部门名称获取TB项目集id失败,请检查部门名称是否正确!现在将项目添加至默认项目集===");
|
|
|
|
|
+ String parentId = "69ccab946970d23e8d30ad55";//父项目集id,默认:上海数字产业发展有限公司
|
|
|
|
|
+ int projectToProjectSet = Project.createProjectToProjectSet(parentId, projectId, adminTBuserId, accessTokenService.getAppToken());
|
|
|
|
|
+ if (projectToProjectSet == 200){
|
|
|
|
|
+ log.info("项目添加至默认项目集成功!");
|
|
|
|
|
+ xmjMessage = "⚠️项目添加至【上海数字产业发展有限公司】默认项目集-->成功!";
|
|
|
|
|
+ }else {
|
|
|
|
|
+ log.info("项目添加至默认项目集失败!");
|
|
|
|
|
+ xmjMessage = "❌项目添加至【上海数字产业发展有限公司】默认项目集-->失败!";
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ log.info("项目立项通过后创建TB项目信息-->成功!");
|
|
|
|
|
+ /*更新项目档案-写入日志记录*/
|
|
|
|
|
+ Map formMap = new HashMap<>();
|
|
|
|
|
+ formMap.put("selectField_mn33fn3i", "推送成功");//推送TB状态
|
|
|
|
|
+ formMap.put("textField_mn33fn3n", "✅项目启动通过后创建TB项目信息-->成功!" + xmjMessage);//推送日志信息
|
|
|
|
|
+ formMap.put("textField_mn3cf6t4", projectId);//TB项目ID
|
|
|
|
|
+ String formDataJson = JSON.toJSONString(formMap);
|
|
|
|
|
+ System.out.println("mapJson:" + formDataJson);
|
|
|
|
|
+
|
|
|
|
|
+ Map searchMap = new HashMap<>();
|
|
|
|
|
+ searchMap.put("key", "textField_mhvfugv3");
|
|
|
|
|
+ searchMap.put("value", xmbh);
|
|
|
|
|
+ searchMap.put("type", "TEXT");
|
|
|
|
|
+ searchMap.put("operator", "eq");
|
|
|
|
|
+ searchMap.put("componentName", "TextField");
|
|
|
|
|
+ List searchList = new ArrayList();
|
|
|
|
|
+ searchList.add(searchMap);
|
|
|
|
|
+ String searchCondition = JSON.toJSONString(searchList);
|
|
|
|
|
+ System.out.println("查询条件searchCondition:" + searchCondition);
|
|
|
|
|
+ YiDaFormData.createOrUpdateFormData("FORM-E82C76C732F34F8FBA318095ABA0F4DF1L3W", searchCondition, formDataJson, accessTokenService.getAccessToken());
|
|
|
|
|
+
|
|
|
|
|
+ return R.ok().message("项目立项通过后创建TB项目信息-->成功!");
|
|
|
|
|
+ }else {
|
|
|
|
|
+ log.error("【根据模板创建项目】失败,同步中断!!!");
|
|
|
|
|
+ /*更新项目档案-写入日志记录*/
|
|
|
|
|
+ Map formMap = new HashMap<>();
|
|
|
|
|
+ formMap.put("selectField_mn33fn3i", "推送失败");//推送TB状态
|
|
|
|
|
+ formMap.put("textField_mn33fn3n", "❌【根据模板创建项目】失败,同步中断!!!");//推送日志信息
|
|
|
|
|
+ String formDataJson = JSON.toJSONString(formMap);
|
|
|
|
|
+ System.out.println("mapJson:" + formDataJson);
|
|
|
|
|
+
|
|
|
|
|
+ Map searchMap = new HashMap<>();
|
|
|
|
|
+ searchMap.put("key", "textField_mhvfugv3");
|
|
|
|
|
+ searchMap.put("value", xmbh);
|
|
|
|
|
+ searchMap.put("type", "TEXT");
|
|
|
|
|
+ searchMap.put("operator", "eq");
|
|
|
|
|
+ searchMap.put("componentName", "TextField");
|
|
|
|
|
+ List searchList = new ArrayList();
|
|
|
|
|
+ searchList.add(searchMap);
|
|
|
|
|
+ String searchCondition = JSON.toJSONString(searchList);
|
|
|
|
|
+ System.out.println("查询条件searchCondition:" + searchCondition);
|
|
|
|
|
+ YiDaFormData.createOrUpdateFormData("FORM-E82C76C732F34F8FBA318095ABA0F4DF1L3W", searchCondition, formDataJson, accessTokenService.getAccessToken());
|
|
|
|
|
+
|
|
|
|
|
+ return R.error().message("【根据模板创建项目】失败,同步中断!!!");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return R.ok().message("项目立项通过后创建/更新TB项目信息-->执行结束!");
|
|
|
|
|
+ }
|
|
|
|
|
+}
|