|
@@ -1,15 +1,28 @@
|
|
|
package com.malk.lingmingguangzi.service;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.http.HttpRequest;
|
|
|
+import cn.hutool.http.HttpResponse;
|
|
|
+import cn.hutool.http.HttpUtil;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.auth0.jwt.JWT;
|
|
|
+import com.auth0.jwt.algorithms.Algorithm;
|
|
|
import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
|
import com.malk.server.common.McR;
|
|
|
import com.malk.server.dingtalk.DDR_New;
|
|
|
+import com.malk.server.teambition.TBConf;
|
|
|
+import com.malk.server.teambition.TBR;
|
|
|
import com.malk.service.aliwork.YDClient;
|
|
|
+import com.malk.service.teambition.TBClient;
|
|
|
+import com.malk.utils.UtilHttp;
|
|
|
import com.malk.utils.UtilMap;
|
|
|
+import com.malk.utils.UtilToken;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.util.*;
|
|
@@ -23,6 +36,42 @@ public class LingmingguangziServiceImpl implements LingmingguangziService {
|
|
|
@Autowired
|
|
|
private YDConf ydConf;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private TBConf tbConf;
|
|
|
+
|
|
|
+ @Value(value = "${erp.url}")
|
|
|
+ private String erpUrl;
|
|
|
+
|
|
|
+ @Value(value = "${erp.username}")
|
|
|
+ private String userName;
|
|
|
+
|
|
|
+ @Value(value = "${erp.password}")
|
|
|
+ private String password;
|
|
|
+
|
|
|
+ private final Object $lock = new Object[0];
|
|
|
+
|
|
|
+ private static final Long EXPIRES_IN = 7200000L;
|
|
|
+
|
|
|
+ private static final String TASK_URL_PREFIX = "https://www.teambition.com/project/65bb53546a74a42e2d608f05/tasks/view/65bb5354a0d7b85bc253f863/task/";
|
|
|
+
|
|
|
+ private static final Map<String,String> STAGES = new HashMap<>();
|
|
|
+
|
|
|
+ private static final Map<String,String> TAGS = new HashMap<>();
|
|
|
+
|
|
|
+ static {
|
|
|
+ STAGES.put("666fff1ec8e7e2eaab75bd81", "TR评审");//TR评审
|
|
|
+ STAGES.put("666fff1ebe648654141a5b8b", "TO评审");//TR评审
|
|
|
+ STAGES.put("666fff6fa0f1ab8063960627", "EV评审");//EV评审
|
|
|
+ STAGES.put("666fff883a26df9ebce13918", "DV评审");//DV评审
|
|
|
+ STAGES.put("666fffd4976f23a2d7cf13e1", "PV评审");//PV评审
|
|
|
+ STAGES.put("666ffff2592db27f2d342d02", "MP评审");//MP评审
|
|
|
+
|
|
|
+ TAGS.put("667002dff456184e9dc794a4", "消费(必选)");//消费(必选)
|
|
|
+ TAGS.put("6670028d536f774f09d300f5", "消费(可选)");//消费(可选)
|
|
|
+ TAGS.put("6670027cb986d723e63be2a5", "车载(必选)");//车载(必选)
|
|
|
+ TAGS.put("667002667e0222a2169802dc", "车载(可选)");//车载(可选)
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public McR test() {
|
|
|
log.info("test");
|
|
@@ -34,30 +83,12 @@ public class LingmingguangziServiceImpl implements LingmingguangziService {
|
|
|
YDParam.YDParamBuilder ydParamBuilder = YDParam.builder()
|
|
|
.formUuid("FORM-5CC9748D283C49FC8C8A86EE0529730A4I1D");
|
|
|
|
|
|
- YDParam.YDParamBuilder ydParamBuilder2 = YDParam.builder()
|
|
|
- .formUuid("FORM-36BF81FD5E43496FABB060190302A7615WBT");
|
|
|
-
|
|
|
- YDParam.YDParamBuilder ydParamBuilder3 = YDParam.builder()
|
|
|
- .formUuid("FORM-7AB4677010554E81BAA0AC26A46F1940PTIR");
|
|
|
-
|
|
|
- YDParam.YDParamBuilder ydParamBuilder4 = YDParam.builder()
|
|
|
- .formUuid("FORM-06A0188FF4E840CA82CBE51604C8C0D6SYTU");
|
|
|
-
|
|
|
if (start != null && end != null){
|
|
|
String startDate = DateUtil.format(new Date(start), "yyyy-MM-dd HH:mm:ss");
|
|
|
String endDate = DateUtil.format(DateUtil.offsetDay(new Date(end),1), "yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
ydParamBuilder.createFromTimeGMT(startDate);
|
|
|
ydParamBuilder.createToTimeGMT(endDate);
|
|
|
-
|
|
|
- ydParamBuilder2.createFromTimeGMT(startDate);
|
|
|
- ydParamBuilder2.createToTimeGMT(endDate);
|
|
|
-
|
|
|
- ydParamBuilder3.createFromTimeGMT(startDate);
|
|
|
- ydParamBuilder3.createToTimeGMT(endDate);
|
|
|
-
|
|
|
- ydParamBuilder4.createFromTimeGMT(startDate);
|
|
|
- ydParamBuilder4.createToTimeGMT(endDate);
|
|
|
}
|
|
|
|
|
|
//车载--------------------------------------------
|
|
@@ -82,42 +113,378 @@ public class LingmingguangziServiceImpl implements LingmingguangziService {
|
|
|
result.put("orderCustomerCount", orderCustomerCount);
|
|
|
result.put("strategicCustomerCount", strategicCustomerCount);
|
|
|
|
|
|
- //消费----------------------------------------------
|
|
|
- Set<String> customerSet = new HashSet<>();
|
|
|
- //商务端
|
|
|
- DDR_New ddrNew1 = ydClient.queryData(ydParamBuilder2.build(), YDConf.FORM_QUERY.retrieve_list);
|
|
|
- List<Map> dataList1 = (List<Map>) ddrNew1.getData();
|
|
|
+ return McR.success(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public McR getCustomerQuestionnaireCount2(Long start, Long end) {
|
|
|
+ YDParam.YDParamBuilder ydParamBuilder = YDParam.builder()
|
|
|
+ .formUuid("FORM-D4587ABF101246F6B17635C8CB178B6BGTAW");
|
|
|
+
|
|
|
+ if (start != null && end != null){
|
|
|
+ String startDate = DateUtil.format(new Date(start), "yyyy-MM-dd HH:mm:ss");
|
|
|
+ String endDate = DateUtil.format(DateUtil.offsetDay(new Date(end),1), "yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
- for (Map data : dataList1) {
|
|
|
+ ydParamBuilder.createFromTimeGMT(startDate);
|
|
|
+ ydParamBuilder.createToTimeGMT(endDate);
|
|
|
+ }
|
|
|
+ //商务端
|
|
|
+ DDR_New ddrNew = ydClient.queryData(ydParamBuilder.build(), YDConf.FORM_QUERY.retrieve_list);
|
|
|
+ List<Map> dataList = (List<Map>) ddrNew.getData();
|
|
|
+ int businessCustomerCount = 0;
|
|
|
+ int technologyCustomerCount = 0;
|
|
|
+ int qualityCustomerCount = 0;
|
|
|
+ for (Map data : dataList) {
|
|
|
Map formData = (Map) data.get("formData");
|
|
|
- String customer = String.valueOf(formData.get("textField_lwq1vxnj"));
|
|
|
- System.out.println(customer);
|
|
|
- customerSet.add(customer);
|
|
|
+ String project = formData.get("selectField_lwragwwz").toString();//项目
|
|
|
+ switch (project) {
|
|
|
+ case "交付":businessCustomerCount++;break;
|
|
|
+ case "技术":technologyCustomerCount++;break;
|
|
|
+ case "质量":qualityCustomerCount++;break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- //技术端
|
|
|
- DDR_New ddrNew2 = ydClient.queryData(ydParamBuilder3.build(), YDConf.FORM_QUERY.retrieve_list);
|
|
|
- List<Map> dataList2 = (List<Map>) ddrNew2.getData();
|
|
|
+ Map<String,Integer> result = new HashMap<>();
|
|
|
+ result.put("businessCustomerCount",businessCustomerCount);
|
|
|
+ result.put("technologyCustomerCount",technologyCustomerCount);
|
|
|
+ result.put("qualityCustomerCount",qualityCustomerCount);
|
|
|
|
|
|
- for (Map data : dataList2) {
|
|
|
- Map formData = (Map) data.get("formData");
|
|
|
- String customer = String.valueOf(formData.get("textField_lwq1vxnj"));
|
|
|
- System.out.println(customer);
|
|
|
- customerSet.add(customer);
|
|
|
+ return McR.success(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public McR addCustomer(Map map) {
|
|
|
+ if (Objects.isNull(map.get("formInstId"))){
|
|
|
+ return McR.errorParam("formInstId不能为空");
|
|
|
}
|
|
|
+ String formInstId = map.get("formInstId").toString();
|
|
|
|
|
|
- //质量端
|
|
|
- DDR_New ddrNew3 = ydClient.queryData(ydParamBuilder4.build(), YDConf.FORM_QUERY.retrieve_list);
|
|
|
- List<Map> dataList3 = (List<Map>) ddrNew3.getData();
|
|
|
+ Map formData = ydClient.queryData(YDParam.builder().formInstId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
|
|
|
|
|
|
- for (Map data : dataList3) {
|
|
|
- Map formData = (Map) data.get("formData");
|
|
|
- String customer = String.valueOf(formData.get("textField_lwq1vxnj"));
|
|
|
- System.out.println(customer);
|
|
|
- customerSet.add(customer);
|
|
|
+ Map<String,Object> body = new HashMap<>();
|
|
|
+ body.put("customerCode", formData.get("textField_lwpqbm7a").toString());
|
|
|
+ body.put("customerName", formData.get("textField_lwpqbm7b").toString());
|
|
|
+
|
|
|
+ String recCondition = formData.get("selectField_lwpqbm7r").toString();
|
|
|
+ switch (recCondition){
|
|
|
+ case "货到收款": body.put("recConditionCode", "SKTJ01_SYS");break;
|
|
|
+ case "30天后收款":body.put("recConditionCode", "SKTJ02_SYS");break;
|
|
|
+ case "月结30天":body.put("recConditionCode", "SKTJ03_SYS");break;
|
|
|
+ case "多到期日(按金额)":body.put("recConditionCode", "SKTJ04_SYS");break;
|
|
|
+ }
|
|
|
+
|
|
|
+ String payCurrency = formData.get("selectField_lwpqbm7s").toString();
|
|
|
+ switch (payCurrency){
|
|
|
+ case "人民币": body.put("payCurrencyCode", "PRE001");break;
|
|
|
+ case "香港元":body.put("payCurrencyCode", "PRE002");break;
|
|
|
+ case "欧元":body.put("payCurrencyCode", "PRE003");break;
|
|
|
+ case "日本日元":body.put("payCurrencyCode", "PRE004");break;
|
|
|
+ case "新台币元":body.put("payCurrencyCode", "PRE005");break;
|
|
|
+ case "英镑":body.put("payCurrencyCode", "PRE006");break;
|
|
|
+ case "美元":body.put("payCurrencyCode", "PRE007");break;
|
|
|
+ }
|
|
|
+ //客户简称
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7c"))){
|
|
|
+ body.put("customerShortName", formData.get("textField_lwpqbm7c").toString());
|
|
|
+ }
|
|
|
+ //客户英文名
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7d"))){
|
|
|
+ body.put("customerEnglishName", formData.get("textField_lwpqbm7d").toString());
|
|
|
+ }
|
|
|
+ //地址
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7t"))){
|
|
|
+ body.put("address", formData.get("textField_lwpqbm7t").toString());
|
|
|
+ }
|
|
|
+ //联系人
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7u"))){
|
|
|
+ body.put("linkMan", formData.get("textField_lwpqbm7u").toString());
|
|
|
+ }
|
|
|
+ //联系电话
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7v"))){
|
|
|
+ body.put("linkNumber", formData.get("textField_lwpqbm7v").toString());
|
|
|
+ }
|
|
|
+ //内/外销
|
|
|
+ if (Objects.nonNull(formData.get("selectField_lwpqbm82"))){
|
|
|
+ String makCustomerType = formData.get("selectField_lwpqbm82").toString();
|
|
|
+ switch (makCustomerType){
|
|
|
+ case "001": body.put("makCustomerType", "001");break;
|
|
|
+ case "002":body.put("makCustomerType", "002");break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //备注
|
|
|
+ if (Objects.nonNull(formData.get("textareaField_lwpqbm7x"))){
|
|
|
+ body.put("comments", formData.get("textareaField_lwpqbm7x").toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> result = post(erpUrl + "pws/mak/makCustomer/add", null, getHeader(), body);
|
|
|
+
|
|
|
+ if ((boolean) result.get("success")){
|
|
|
+ return McR.success();
|
|
|
+ }else {
|
|
|
+ return McR.errorUnknown(result.get("message").toString());
|
|
|
}
|
|
|
- result.put("consumption",customerSet.size());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public McR updateCustomer(Map map) {
|
|
|
+ if (Objects.isNull(map.get("formInstId"))){
|
|
|
+ return McR.errorParam("formInstId不能为空");
|
|
|
+ }
|
|
|
+ String formInstId = map.get("formInstId").toString();
|
|
|
+
|
|
|
+ Map formData = ydClient.queryData(YDParam.builder().formInstId(formInstId).build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
|
|
|
+
|
|
|
+ Map<String,Object> body = new HashMap<>();
|
|
|
+ body.put("customerCode", formData.get("textField_lwpqbm7a").toString());
|
|
|
+ body.put("customerName", formData.get("textField_lwpqbm7b").toString());
|
|
|
+
|
|
|
+ String recCondition = formData.get("selectField_lwpqbm7r").toString();
|
|
|
+ switch (recCondition){
|
|
|
+ case "货到收款": body.put("recConditionCode", "SKTJ01_SYS");break;
|
|
|
+ case "30天后收款":body.put("recConditionCode", "SKTJ02_SYS");break;
|
|
|
+ case "月结30天":body.put("recConditionCode", "SKTJ03_SYS");break;
|
|
|
+ case "多到期日(按金额)":body.put("recConditionCode", "SKTJ04_SYS");break;
|
|
|
+ }
|
|
|
+
|
|
|
+ String payCurrency = formData.get("selectField_lwpqbm7s").toString();
|
|
|
+ switch (payCurrency){
|
|
|
+ case "人民币": body.put("payCurrencyCode", "PRE001");break;
|
|
|
+ case "香港元":body.put("payCurrencyCode", "PRE002");break;
|
|
|
+ case "欧元":body.put("payCurrencyCode", "PRE003");break;
|
|
|
+ case "日本日元":body.put("payCurrencyCode", "PRE004");break;
|
|
|
+ case "新台币元":body.put("payCurrencyCode", "PRE005");break;
|
|
|
+ case "英镑":body.put("payCurrencyCode", "PRE006");break;
|
|
|
+ case "美元":body.put("payCurrencyCode", "PRE007");break;
|
|
|
+ }
|
|
|
+ //客户简称
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7c"))){
|
|
|
+ body.put("customerShortName", formData.get("textField_lwpqbm7c").toString());
|
|
|
+ }
|
|
|
+ //客户英文名
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7d"))){
|
|
|
+ body.put("customerEnglishName", formData.get("textField_lwpqbm7d").toString());
|
|
|
+ }
|
|
|
+ //地址
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7t"))){
|
|
|
+ body.put("address", formData.get("textField_lwpqbm7t").toString());
|
|
|
+ }
|
|
|
+ //联系人
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7u"))){
|
|
|
+ body.put("linkMan", formData.get("textField_lwpqbm7u").toString());
|
|
|
+ }
|
|
|
+ //联系电话
|
|
|
+ if (Objects.nonNull(formData.get("textField_lwpqbm7v"))){
|
|
|
+ body.put("linkNumber", formData.get("textField_lwpqbm7v").toString());
|
|
|
+ }
|
|
|
+ //内/外销
|
|
|
+ if (Objects.nonNull(formData.get("selectField_lwpqbm82"))){
|
|
|
+ String makCustomerType = formData.get("selectField_lwpqbm82").toString();
|
|
|
+ switch (makCustomerType){
|
|
|
+ case "001": body.put("makCustomerType", "001");break;
|
|
|
+ case "002":body.put("makCustomerType", "002");break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //备注
|
|
|
+ if (Objects.nonNull(formData.get("textareaField_lwpqbm7x"))){
|
|
|
+ body.put("comments", formData.get("textareaField_lwpqbm7x").toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> result = put(erpUrl + "pws/mak/makCustomer/customEdit", null, getHeader(), body);
|
|
|
+ if ((boolean) result.get("success")){
|
|
|
+ return McR.success();
|
|
|
+ }else {
|
|
|
+ return McR.errorUnknown(result.get("message").toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private Map<String,String> getHeader(){
|
|
|
+ Map<String, Object> map = post(erpUrl + "pws/sys/mLogin", null, null,UtilMap.map("username, password",userName,password));
|
|
|
+
|
|
|
+ if (Objects.nonNull(map.get("result"))){
|
|
|
+ Map<String,Object> result = (Map<String,Object>) map.get("result");
|
|
|
+ if (Objects.nonNull(result.get("token"))){
|
|
|
+ Map<String, String> header = new HashMap<>();
|
|
|
+ header.put("X-Access-Token", result.get("token").toString());
|
|
|
+ return header;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 封装GET请求
|
|
|
+ *
|
|
|
+ * @param url 请求的URL
|
|
|
+ * @param params 请求参数
|
|
|
+ * @param headers 请求头
|
|
|
+ * @return 响应内容
|
|
|
+ */
|
|
|
+ public static Map<String, Object> get(String url, Map<String, Object> params, Map<String, String> headers) {
|
|
|
+ log.info("GET 请求url:{}, 请求参数:{}, 请求头:{}", url, params, headers);
|
|
|
+ HttpRequest get = HttpUtil.createGet(url);
|
|
|
+ if (params!= null){
|
|
|
+ get.form(params);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (headers!= null){
|
|
|
+ get.addHeaders(headers);
|
|
|
+ }
|
|
|
+ HttpResponse response = get.execute();
|
|
|
+ Map<String,Object> result = JSONUtil.toBean(response.body(), Map.class);
|
|
|
+ log.info("响应结果: {}", result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 封装POST请求
|
|
|
+ *
|
|
|
+ * @param url 请求的URL
|
|
|
+ * @param params 请求参数
|
|
|
+ * @param headers 请求头
|
|
|
+ * @param body 请求体
|
|
|
+ * @return 响应内容
|
|
|
+ */
|
|
|
+ public static Map<String, Object> post(String url, Map<String, Object> params, Map<String, String> headers, Map<String, Object> body) {
|
|
|
+ log.info("POST 请求url:{}, 请求参数:{}, 请求头:{}, 请求体:{}", url, params, headers, body);
|
|
|
+ HttpRequest request = HttpUtil.createPost(url);
|
|
|
+ if (params != null) {
|
|
|
+ request.form(params);
|
|
|
+ }
|
|
|
+ if (headers != null) {
|
|
|
+ request.addHeaders(headers);
|
|
|
+ }
|
|
|
+ if (body != null) {
|
|
|
+ request.body(JSONUtil.toJsonStr(body), "application/json");
|
|
|
+ }
|
|
|
+ HttpResponse response = request.execute();
|
|
|
+ Map<String,Object> result = JSONUtil.toBean(response.body(), Map.class);
|
|
|
+ log.info("响应结果: {}", result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Map<String, Object> put(String url, Map<String, Object> params, Map<String, String> headers, Map<String, Object> body) {
|
|
|
+ log.info("PUT 请求url:{}, 请求参数:{}, 请求头:{}, 请求体:{}", url, params, headers, body);
|
|
|
+ HttpRequest request = HttpRequest.put(url);
|
|
|
+ if (params != null) {
|
|
|
+ request.form(params);
|
|
|
+ }
|
|
|
+ if (headers != null) {
|
|
|
+ request.addHeaders(headers);
|
|
|
+ }
|
|
|
+ if (body != null) {
|
|
|
+ request.body(JSONUtil.toJsonStr(body), "application/json");
|
|
|
+ }
|
|
|
+ HttpResponse response = request.execute();
|
|
|
+ Map<String,Object> result = JSONUtil.toBean(response.body(), Map.class);
|
|
|
+ log.info("响应结果: {}", result);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public McR getTbStageDetails(String stageName) {
|
|
|
+ Map<String, Object> result = new HashMap<>();
|
|
|
+ //查询子任务信息
|
|
|
+ for (String stage : STAGES.keySet()) {
|
|
|
+ if (STAGES.get(stage).equals(stageName)){
|
|
|
+ Map<String,Object> stageDetail = new HashMap<>();
|
|
|
+ TBR tbr = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", initHeaderToken(), UtilMap.map("parentTaskId", stage), TBR.class);
|
|
|
+ List<Map<String, Object>> task = (List<Map<String, Object>>) tbr.getResult();
|
|
|
+ List<Map<String, Object>> list = new ArrayList<>();
|
|
|
+ for (Map<String,Object> subTask : task) {
|
|
|
+ Map<String,Object> taskDetail = new HashMap<>();
|
|
|
+ String content = subTask.get("content").toString();
|
|
|
+ taskDetail.put("content", content);
|
|
|
+ taskDetail.put("url", TASK_URL_PREFIX + subTask.get("id"));
|
|
|
+ //查询子任务状态
|
|
|
+ String tfsId = subTask.get("tfsId").toString();
|
|
|
+ TBR tbr3 = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/65bb53546a74a42e2d608f05/taskflowstatus/search", initHeaderToken(), UtilMap.map("tfsIds",tfsId), TBR.class);
|
|
|
+ List<Map<String, Object>> result3 = (List<Map<String, Object>>) tbr3.getResult();
|
|
|
+ String state = result3.get(0).get("name").toString();
|
|
|
+ taskDetail.put("state", state);
|
|
|
+
|
|
|
+ List<Map<String,Object>> customfields = (List<Map<String,Object>>) subTask.get("customfields");
|
|
|
+ taskDetail.put("dept", "");
|
|
|
+ taskDetail.put("part", "");
|
|
|
+ taskDetail.put("area", "");
|
|
|
+ taskDetail.put("file", "");
|
|
|
+ taskDetail.put("file2", "");
|
|
|
+ if (!customfields.isEmpty()){
|
|
|
+ for (Map<String, Object> customfield : customfields) {
|
|
|
+ String cfId = customfield.get("cfId").toString();
|
|
|
+ List<Map<String, Object>> value = (List<Map<String, Object>>) customfield.get("value");
|
|
|
+ if (!value.isEmpty()){
|
|
|
+ String title = value.get(0).get("title").toString();
|
|
|
+ switch (cfId){
|
|
|
+ case "666feed723d86af4c9c9f3c6":taskDetail.put("dept", title);break;//责任部门/角色
|
|
|
+ case "666fef0f5b836a19902b47bf":taskDetail.put("part", title);break;//评审要素
|
|
|
+ case "666fef06cdcac0bbc164930e":taskDetail.put("area", title);break;//评审领域
|
|
|
+ case "668def21d56d44adafe00d56":taskDetail.put("file", title);break;//交付件
|
|
|
+ case "668df08b82ff76cefacfec99":taskDetail.put("file2", title);break;//交付件2
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ taskDetail.put("carTag", "");
|
|
|
+ taskDetail.put("payTag", "");
|
|
|
+ List<String> tagIds = (List<String>) subTask.get("tagIds");
|
|
|
+ if (!tagIds.isEmpty()){
|
|
|
+ for (String tagId : tagIds) {
|
|
|
+ if (TAGS.containsKey(tagId)) {
|
|
|
+ if (TAGS.get(tagId).contains("车载")){
|
|
|
+ taskDetail.put("carTag", TAGS.get(tagId).substring(3,5));
|
|
|
+ }else if (TAGS.get(tagId).contains("消费")){
|
|
|
+ taskDetail.put("payTag", TAGS.get(tagId).substring(3,5));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ list.add(taskDetail);
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取任务状态
|
|
|
+ TBR tbr2 = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/task/query", initHeaderToken(), UtilMap.map("taskId", stage), TBR.class);
|
|
|
+ List<Map<String, Object>> result2 = (List<Map<String, Object>>) tbr2.getResult();
|
|
|
+ String tfsId = result2.get(0).get("tfsId").toString();
|
|
|
+
|
|
|
+ TBR tbr3 = (TBR) UtilHttp.doGet("https://open.teambition.com/api/v3/project/65bb53546a74a42e2d608f05/taskflowstatus/search", initHeaderToken(), UtilMap.map("tfsIds", tfsId), TBR.class);
|
|
|
+ List<Map<String, Object>> result3 = (List<Map<String, Object>>) tbr3.getResult();
|
|
|
+ String state = result3.get(0).get("name").toString();
|
|
|
+
|
|
|
+ stageDetail.put("list",list);
|
|
|
+ stageDetail.put("state", state);
|
|
|
+ result.put(STAGES.get(stage), stageDetail);
|
|
|
+ }
|
|
|
+ }
|
|
|
return McR.success(result);
|
|
|
}
|
|
|
+
|
|
|
+ private Map<String, String> initHeaderToken() {
|
|
|
+ Map header = new HashMap();
|
|
|
+ header.put("Authorization", this.getAccessToken());
|
|
|
+ header.put("X-Tenant-Id", this.tbConf.getTenantId());
|
|
|
+ header.put("X-Tenant-Type", "organization");
|
|
|
+ return header;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String getAccessToken() {
|
|
|
+ synchronized(this.$lock) {
|
|
|
+ String accessToken = UtilToken.get("invalid-token-teambition");
|
|
|
+ if (StringUtils.isNotBlank(accessToken)) {
|
|
|
+ return accessToken;
|
|
|
+ } else {
|
|
|
+ Algorithm algorithm = Algorithm.HMAC256(this.tbConf.getAppSecret());
|
|
|
+ long timestamp = System.currentTimeMillis();
|
|
|
+ Date issuedAt = new Date(timestamp);
|
|
|
+ Date expiresAt = new Date(timestamp + EXPIRES_IN);
|
|
|
+ accessToken = JWT.create().withClaim("_appId", this.tbConf.getAppID()).withIssuedAt(issuedAt).withExpiresAt(expiresAt).sign(algorithm);
|
|
|
+ log.info("响应token, {}", accessToken);
|
|
|
+ UtilToken.put("invalid-token-teambition", accessToken, EXPIRES_IN);
|
|
|
+ return accessToken;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|