Przeglądaj źródła

灵明光子v1.0

wzy 10 miesięcy temu
rodzic
commit
cbd95afd26

+ 32 - 1
mjava-lingmingguangzi/src/main/java/com/malk/lingmingguangzi/controller/LingmingguangziController.java

@@ -5,8 +5,13 @@ import com.malk.server.common.McR;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+import java.util.Objects;
+
 @RestController
 @Slf4j
 public class LingmingguangziController {
@@ -19,10 +24,36 @@ public class LingmingguangziController {
     }
 
     /**
-     * 获取客户回收问卷数量
+     * 获取车载客户回收问卷数量
      */
     @GetMapping("/getCustomerQuestionnaireCount")
     public McR getVehicleCustomerCount(Long start, Long end) {
         return lingmingguangziService.getCustomerQuestionnaireCount(start, end);
     }
+
+    /**
+     * 获取消费客户回收问卷列表
+     * @param start
+     * @param end
+     * @return
+     */
+    @GetMapping("/getCustomerQuestionnaireCount2")
+    public McR getCustomerQuestionnaireCount2(Long start, Long end) {
+        return lingmingguangziService.getCustomerQuestionnaireCount2(start, end);
+    }
+
+    @GetMapping("/getTbStageDetails")
+    public McR getTbStageDetails(String stageName) {
+        return lingmingguangziService.getTbStageDetails(stageName);
+    }
+
+    @PostMapping("/addCustomer")
+    public McR addCustomer(@RequestBody Map map) {
+        return lingmingguangziService.addCustomer(map);
+    }
+
+    @PostMapping("/updateCustomer")
+    public McR updateCustomer(@RequestBody Map map) {
+        return lingmingguangziService.updateCustomer(map);
+    }
 }

+ 9 - 0
mjava-lingmingguangzi/src/main/java/com/malk/lingmingguangzi/service/LingmingguangziService.java

@@ -2,6 +2,8 @@ package com.malk.lingmingguangzi.service;
 
 import com.malk.server.common.McR;
 
+import java.util.Map;
+
 public interface LingmingguangziService {
     McR test();
 
@@ -11,4 +13,11 @@ public interface LingmingguangziService {
      */
     McR getCustomerQuestionnaireCount(Long start, Long end);
 
+    McR getTbStageDetails(String stageName);
+
+    McR getCustomerQuestionnaireCount2(Long start, Long end);
+
+    McR addCustomer(Map map);
+
+    McR updateCustomer(Map map);
 }

+ 411 - 44
mjava-lingmingguangzi/src/main/java/com/malk/lingmingguangzi/service/LingmingguangziServiceImpl.java

@@ -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;
+            }
+        }
+    }
+
 }

+ 8 - 3
mjava-lingmingguangzi/src/main/resources/application-dev.yml

@@ -49,12 +49,17 @@ dingtalk:
 
 # teambition
 teambition:
-  AppID:
-  AppSecret:
-  TenantId:
+  AppID: 66beeeb8d53f4bb370c135a6
+  AppSecret: rFmIOAPtWjEKt7TkRZWFbBh0YxSY5GfC
+  TenantId: 5f4c9efbb019fd31e3ef327c
   OperatorId:    # 公共账号, 需要有操作权限 [牧语]
 # aliwork
 aliwork:
   appType: APP_MOIYIC856NRIBCMXEXVD
   systemToken: G9666BC1BUHLKS20E7YQRATFDE4F39EOK5QWL06
 
+erp:
+  url: http://10.12.22.201:9999/
+  username: CRM
+  password: LMGZCRM2024
+