lfx 2 weeks ago
parent
commit
f6468e765c

+ 1 - 1
mjava-paineng/src/main/resources/application-dev.yml

@@ -62,7 +62,7 @@ teambition:
   AppID: 6800a99731585ad0dc02e73e
   AppSecret: n7L8Zz1g4Ss6eprjTDqORRDhVtOUpREK
   TenantId: 5e448b27e9642b000154a48d        # 管理后台 - 企业xx - 企业ID
-  OperatorId: 606797179      # 公共账号, 需要有操作权限 [牧语]
+  OperatorId: 680ae50c4e5918c09ae563f2      # 公共账号, 需要有操作权限 [牧语]
 
 #
 aliwork:

+ 1 - 1
mjava-paineng/src/main/resources/application-prod.yml

@@ -37,7 +37,7 @@ teambition:
   AppID: 6800a99731585ad0dc02e73e
   AppSecret: n7L8Zz1g4Ss6eprjTDqORRDhVtOUpREK
   TenantId: 5e448b27e9642b000154a48d        # 管理后台 - 企业xx - 企业ID
-  OperatorId: 606797179      # 公共账号, 需要有操作权限 [牧语]
+  OperatorId: 680ae50c4e5918c09ae563f2      # 公共账号, 需要有操作权限 [牧语]
 
 #
 aliwork:

+ 2 - 2
mjava-paineng/src/test/java/com/malk/poc/AwTbTest.java

@@ -82,8 +82,8 @@ public class AwTbTest {
 
     @Test
     public void test1() {
-//        String id=tbClient.getUserId("5e698cca21f5ad70dfba7d2b",true);
-//        System.out.println(id);
+        String id=tbClient.getUserId("606797179",false);
+        System.out.println(id);
 //        System.out.println(tbClient.idMapQuery("5e698cca21f5ad70dfba7d2b",true));
 //        awClint.taskSatusUpdate(UtilMap.map("projectId, tfsId, taskId","6800dc6856d5edcfb1cd1fb5","6800dc69ac1d65fb13fd7476","6801bc870bebee5098f041a6"));
 //        awClint.createTask("ebba70b7-fe51-4510-820e-87dd3a7df8ec");

File diff suppressed because it is too large
+ 42 - 532
mjava-paizhi/src/main/java/com/malk/poc/controller/TBxYDController.java


+ 12 - 42
mjava-paizhi/src/main/java/com/malk/poc/server/AWServer.java

@@ -14,59 +14,29 @@ public class AWServer {
     /**
      * 任务卡片字段名称
      */
-    public static final String TASK_ROLE = "PDT项目角色"; // 资源名称
-    public static final String TASK_CODE = "任务编号";
+    public static final String TASK_ROLE = "项目角色"; // 资源名称
+    public static final String TASK_CODE = "编码";
+    public static final String TASK_APPROVE_ATTACHMENT = "材料填写";
+    public static final String TASK_APPROVE_LINK = "交付件审批";
+    public static final List<String> WORKFLOW_INITIAL = Arrays.asList("待处理");
+    public static final String PROJECT_PM_ROLE = "项目管理员";
+    public static final String PROJECT_PM_NAME = "项目经理";
+    public static final String PROJECT_ZJ_NAME = "项目总监";
     public static final String TASK_STAGE = "项目阶段";
+
+    public static final String WORKFLOW_APPROVE = "已提交";
+    // 暂时无用
+    public static final String TASK_TRANSMIT = "下达状态";
     public static final String TASK_STAGE_BLANK = "无TR评审节点";
     public static final String TASK_PRODUCT = "产品型号";
     public static final String TASK_PRODUCT_VERSION = "产品版本";
     public static final String TASK_WAFER = "wafer";
-
-    public static final String TASK_TRANSMIT = "下达状态";
-
-    // prd 23.02.29 字段从 预检项 变更为 技术检查项
     public static final String TASK_CHECK_LINK = "技术检查项";
     public static final String TASK_CHECK_STATUS = "技术检查项检查状态";
-
-    // prd 7.17 技术检查项确认状态
     public static final String TASK_CHECK_LINK_OK = "技术检查确认";
-
-    public static final String TASK_APPROVE_ATTACHMENT = "交付件";
     public static final String TASK_APPROVE_VERSION = "交付件版本";
-    public static final String TASK_APPROVE_LINK = "需求变更流程";
     public static final String TASK_APPROVE_STATE = "变更状态";
     public static final String TASK_APPROVE_DESC = "交付件描述";
-
-    // prd 8.6 产品型号、版本选择添加字段
     public static final String SELECT_TASK_PRODUCT = "选择产品型号";
     public static final String SELECT_TASK_PRODUCT_VERSION = "选择产品版本";
-
-    // ppExt: 注意不同任务类型名称唯一性, 如通用已完成不要使用
-    public static final String WORKFLOW_APPROVE = "已提交";
-    public static final List<String> WORKFLOW_INITIAL = Arrays.asList("未开始");
-
-    public static final String PROJECT_PM_ROLE = "项目管理员";
-    public static final String PROJECT_PM_NAME = "项目经理";
-
-    // 预检项不加载白名单 [项目模板/供复制项目]
-    public static final List<String> PROJECT_IGNORE_ID = Arrays.asList(
-            "65fac2fc386eb113f1adac83", // ak类正式模板
-            "65fac3af386eb113f1adacc0", // ak类迁移模板
-            "65f269605a2065ad7ad65d18"  // ak类复制项目
-    );
-
-    /**
-     * 艾为网关接口
-     */
-    private static final String appKey = "AW394034j";
-    private static final String secret = "RJbH7RMH3vllt4KDri303Mlw@df3434k";
-
-    public static String getToken() {
-
-        Map body = UtilMap.map("appKey, secret", appKey, secret);
-        String rsp = UtilHttp.doPost("https://apigateway.awinic.com/token/getToken", null, body, new HashMap());
-        Map result = (Map) JSON.parse(rsp);
-        return UtilMap.getString(result, "token");
-    }
-
 }

+ 73 - 0
mjava-paizhi/src/main/java/com/malk/poc/server/AWServerDev.java

@@ -0,0 +1,73 @@
+package com.malk.poc.server;
+
+import com.alibaba.fastjson.JSON;
+import com.malk.utils.UtilHttp;
+import com.malk.utils.UtilMap;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class AWServerDev {
+
+    /**
+     * 任务卡片字段名称
+     */
+    public static final String TASK_ROLE = "项目角色-IPD"; // 资源名称
+    public static final String TASK_CODE = "编码-IPD";
+    public static final String TASK_STAGE = "项目阶段";
+    public static final String TASK_STAGE_BLANK = "无TR评审节点";
+    public static final String TASK_PRODUCT = "产品型号";
+    public static final String TASK_PRODUCT_VERSION = "产品版本";
+    public static final String TASK_WAFER = "wafer";
+
+    public static final String TASK_TRANSMIT = "下达状态";
+
+    // prd 23.02.29 字段从 预检项 变更为 技术检查项
+    public static final String TASK_CHECK_LINK = "技术检查项";
+    public static final String TASK_CHECK_STATUS = "技术检查项检查状态";
+
+    // prd 7.17 技术检查项确认状态
+    public static final String TASK_CHECK_LINK_OK = "技术检查确认";
+
+    public static final String TASK_APPROVE_ATTACHMENT = "交付件模版-IPD";
+    public static final String TASK_APPROVE_VERSION = "交付件版本";
+    public static final String TASK_APPROVE_LINK = "交付件审批-IPD";
+    public static final String TASK_APPROVE_STATE = "变更状态";
+    public static final String TASK_APPROVE_DESC = "交付件描述";
+
+    // prd 8.6 产品型号、版本选择添加字段
+    public static final String SELECT_TASK_PRODUCT = "选择产品型号";
+    public static final String SELECT_TASK_PRODUCT_VERSION = "选择产品版本";
+
+    // ppExt: 注意不同任务类型名称唯一性, 如通用已完成不要使用
+    public static final String WORKFLOW_APPROVE = "已提交";
+    public static final List<String> WORKFLOW_INITIAL = Arrays.asList("待处理");
+
+    public static final String PROJECT_PM_ROLE = "项目管理员";
+    public static final String PROJECT_PM_NAME = "项目经理";
+    public static final String PROJECT_ZJ_NAME = "项目总监";
+
+    // 预检项不加载白名单 [项目模板/供复制项目]
+    public static final List<String> PROJECT_IGNORE_ID = Arrays.asList(
+            "65fac2fc386eb113f1adac83", // ak类正式模板
+            "65fac3af386eb113f1adacc0", // ak类迁移模板
+            "65f269605a2065ad7ad65d18"  // ak类复制项目
+    );
+
+    /**
+     * 艾为网关接口
+     */
+    private static final String appKey = "AW394034j";
+    private static final String secret = "RJbH7RMH3vllt4KDri303Mlw@df3434k";
+
+    public static String getToken() {
+
+        Map body = UtilMap.map("appKey, secret", appKey, secret);
+        String rsp = UtilHttp.doPost("https://apigateway.awinic.com/token/getToken", null, body, new HashMap());
+        Map result = (Map) JSON.parse(rsp);
+        return UtilMap.getString(result, "token");
+    }
+
+}

+ 28 - 0
mjava-paizhi/src/main/java/com/malk/poc/server/YdIpdForm.java

@@ -0,0 +1,28 @@
+package com.malk.poc.server;
+
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "aliwork.ipd")
+@Slf4j
+public class YdIpdForm {
+
+    private String project;
+
+    private String role;
+
+    private String template;
+
+    private String domain;
+
+    private String review;
+
+    private String reviewProcess;
+
+    private String approve;
+
+}

+ 19 - 0
mjava-paizhi/src/main/java/com/malk/poc/server/YdProject.java

@@ -0,0 +1,19 @@
+package com.malk.poc.server;
+
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "aliwork.project")
+@Slf4j
+public class YdProject {
+
+    private String appType;
+
+    private String systemToken;
+
+    private String projectFid;
+}

+ 8 - 102
mjava-paizhi/src/main/java/com/malk/poc/service/AWClint.java

@@ -8,45 +8,11 @@ import java.util.Map;
 
 public interface AWClint {
 
-    /**
-     * 交付物审批
-     */
-    Map doApprove(Map data, boolean isChange);
-
-    /**
-     * 交付物审批变更发起
-     */
-    void changeApprove(String taskId, String instanceId, String title);
-
-    /**
-     * 交付物审批回调
-     */
-    void approved(Map data);
-
-    /**
-     * 检查项check
-     */
-    Map doCheck(String taskId, boolean isTask);
-
-    /**
-     * 检查项回调
-     */
-    void checked(Map data);
-
-    /**
-     * 同步项目主数据
-     */
-    Map syncProject(String projectCode);
 
     /**
      * 通过模板创建项目 [templateId 为空, 触发项目类型匹配]
      */
-    void createProject(String projectCode, String templateId,String tbProjectId);
-
-    /**
-     * 项目主数据增量更新
-     */
-    void updateProject(String projectCode);
+    void createProject(String projectCode, String templateId,String tbProjectId,String user);
 
     /**
      * 分配项目角色 prd 若是一人直接指定, 多人情况下忽略
@@ -57,80 +23,20 @@ public interface AWClint {
 
     void updateLcb(String projectCode);
 
-    /**
-     * 项目迁移: 删除依赖项
-     */
-    void removeDependencies(String projectId, List<String> trNode);
-
-    /**
-     * 增量同步crm基线
-     */
-    void syncBaseLineForCRM(String projectId);
-
-    /**
-     * 全量同步crm基线
-     */
-    void syncBaseLineForCRM();
-
-    /**
-     * 修改任务自定义字段内容
-     *
-     * @param projectId 1. 若为空, 触发全量修改; 2. 仅修改非未完成任务
-     */
-    void batchUpdate(String fieldName, String preName, String modifyName, String projectId);
-
-    /**
-     * 同步预检项 [实现]
-     *
-     * @param srcParam          [appType, formUuid, systemToken]
-     * @param compIds           映射表: 当前组件, 来源组件
-     * @param taskCompId        任务号, 忽略为空记录
-     * @param codeCompId        来源表唯一标识
-     * @param checkType         预检项分类(TR评审要素表、经验库、IC技术检查表)
-     * @param associationCompId 预检项分类对应关联组件
-     */
-    void syncCheckList(YDParam srcParam, Map<String, ?> compIds, String taskCompId, String codeCompId, String checkType, String associationCompId);
-
-    /**
-     * 同步预检项 [通用]
-     *
-     * @param type 预检项分类(0-经验库、1-IC技术检查表, 2-TR评审要素表)
-     */
-    void syncCheckList(int type);
-
-    /**
-     * 知识库版本管理
-     */
-    void approveVersion(String taskId, String pCode);
-
-    /**
-     * 获取主数据中产品列表
-     */
-    List<Map> getProductList(String projectId, String q);
-
-    /**
-     * 获取主数据中产品版本
-     */
-    List<Map> getProductList(String projectId, String q, String taskId);
+    void taskSatusUpdate(Map data);
 
     /**
-     * 选择产品\版本后, 回调更新对应原文本字段, 兼容之前字段逻辑
+     * 交付物审批
      */
-    void custFieldUpdate(JSONObject data);
+    Map doApprove(Map data);
 
     /**
-     * 检查项导出, 全部检查项左关联已提交数据
+     * 检查项回调
      */
-    List<Map> exportCheckList(String pCode, String proType);
+    void checked(Map data);
 
     /**
-     * 任务NA校验, 一二级不允许NA
+     * 交付物审批回调
      */
-    void taskLevelValidate(Map data);
-
-    void taskSatusUpdate(Map data);
-
-    void test();
-
-    void tmp();
+    void approved(Map data);
 }

File diff suppressed because it is too large
+ 294 - 1427
mjava-paizhi/src/main/java/com/malk/poc/service/impl/AWImplClient.java


+ 30 - 17
mjava-paizhi/src/main/resources/application-dev.yml

@@ -2,7 +2,7 @@
 server:
   port: 9001
   servlet:
-    context-path: /api/paineng
+    context-path: /api/paizhi
 
 # condition
 spel:
@@ -38,33 +38,46 @@ spring:
 # filepath
 file:
   path:
-    file: /Users/malk/server/_Tool/var/mjava/tmp/file/
-    image: /Users/malk/server/_Tool/var/mjava/tmp/image/
-    tmp: /Users/malk/server/_Tool/var/mjava/tmp/
+    file: /home/it/server/ipt/file/
+    image: /home/it/server/ipt/image/
+    tmp: /home/it/server/ipt/tmp/
   source:
-    fonts: /Users/malk/server/_Tool/fonts/simsun.ttc
+    fonts: /home/it/server/ipt/fonts/simsun.ttc
 logging:
   file:
-    path: /Users/malk/server/_Tool/var/mjava/log
+    path: /home/it/server/ipt/log
 
+# dingtalk
 # dingtalk
 dingtalk:
-  agentId: 3288641544
-  appKey: dingqbryerfateuj6ody
-  appSecret: FVyZxdRxBiulGMSZeFzZVAzKtBYFMWXpHW6nmfLzk4cCEcotyewRrihk7_Okpsl0
-  corpId: ding6d0de5f5de58a80c35c2f4657eb6378f
+  agentId: 3771823929
+  appKey: dingaf61sbyhpqt7ajyp
+  appSecret: u__ASvI-1f6liwSg3Yg-OtFEw3VM_VnM0Mg2D4ed0cyzJEx-oqN1CM0j67pR4dby
+  corpId: dingbad3366d22cd504335c2f4657eb6378f
   aesKey:
   token:
-  operator: "095358016629044412"   # OA管理员账号
+  operator: "481671103"   # OA管理员账号
 
 # teambition
 teambition:
-  AppID: 6800a99731585ad0dc02e73e
-  AppSecret: n7L8Zz1g4Ss6eprjTDqORRDhVtOUpREK
-  TenantId: 5e448b27e9642b000154a48d        # 管理后台 - 企业xx - 企业ID
-  OperatorId: 5e698cca21f5ad70dfba7d2b      # 公共账号, 需要有操作权限 [牧语]
+  AppID: 68107a6db8acaf13d5c9c39c
+  AppSecret: E9Jsnrm220AiDSCoca3VqioWr7iqRtfx
+  TenantId: 61a57d86ea9aa2f22415088e        # 管理后台 - 企业xx - 企业ID
+  OperatorId: 681045fe3496ce1cc8f71f1b      # 公共账号, 需要有操作权限 [牧语]
 
 #
 aliwork:
-  appType: "APP_QDJP8Y2EK6PJ602502TR"
-  systemToken: "CRD66J71IPNU4PBHFUS2T73H5UXJ3CRJX1L9MIA"
+  appType: "APP_H2HQQ5I9E0HHGHAY7KSL"
+  systemToken: "1W9669D1HQZUJCB5D3Q8S5T6XUXZ2EL3V42AMYQ1"
+  ipd:
+    project: FORM-2CC97D2F8D7D4F7C925538CC5758755DOA4W
+    role: FORM-75352DBED6A1472ABCDE25AF48489FEB3QTM
+    template: FORM-0884C1B6DF974AF095870D57118DDAB7YYES
+    review: FORM-96BDC0DF9DC64C288BA8BEE767BE7D261N3O
+    reviewProcess: TPROC--HXD667B1IOZUXORI783MN703YP3D34Y3V42AMQ1
+    approve: FORM-320FFE1AD1254C1ABBCB25BC2143C423UAN5
+    domain: https://iujjsn.aliwork.com/
+  project:
+    appType: "APP_FJSLK9BJ20K1NL3G2PUW"
+    systemToken: "JB966E91RQZUKPPFFNOKBB86G3GH38VSN42AMGV"
+    projectFid: FORM-4E24A9F61D794C9ABE71AD470120F17BOA1R

+ 24 - 12
mjava-paizhi/src/main/resources/application-prod.yml

@@ -2,7 +2,7 @@
 server:
   port: 9001
   servlet:
-    context-path: /api/paineng
+    context-path: /api/paizhi
 
 # condition
 spel:
@@ -24,22 +24,34 @@ spring:
 
 # dingtalk
 dingtalk:
-  agentId: 3288641544
-  appKey: dingqbryerfateuj6ody
-  appSecret: FVyZxdRxBiulGMSZeFzZVAzKtBYFMWXpHW6nmfLzk4cCEcotyewRrihk7_Okpsl0
-  corpId: ding6d0de5f5de58a80c35c2f4657eb6378f
+  agentId: 3771823929
+  appKey: dingaf61sbyhpqt7ajyp
+  appSecret: u__ASvI-1f6liwSg3Yg-OtFEw3VM_VnM0Mg2D4ed0cyzJEx-oqN1CM0j67pR4dby
+  corpId: dingbad3366d22cd504335c2f4657eb6378f
   aesKey:
   token:
-  operator: "095358016629044412"   # OA管理员账号
+  operator: "481671103"   # OA管理员账号
 
 # teambition
 teambition:
-  AppID: 6800a99731585ad0dc02e73e
-  AppSecret: n7L8Zz1g4Ss6eprjTDqORRDhVtOUpREK
-  TenantId: 5e448b27e9642b000154a48d        # 管理后台 - 企业xx - 企业ID
-  OperatorId: 5e698cca21f5ad70dfba7d2b      # 公共账号, 需要有操作权限 [牧语]
+  AppID: 68107a6db8acaf13d5c9c39c
+  AppSecret: E9Jsnrm220AiDSCoca3VqioWr7iqRtfx
+  TenantId: 61a57d86ea9aa2f22415088e        # 管理后台 - 企业xx - 企业ID
+  OperatorId: 681045fe3496ce1cc8f71f1b      # 公共账号, 需要有操作权限 [牧语]
 
 #
 aliwork:
-  appType: "APP_QDJP8Y2EK6PJ602502TR"
-  systemToken: "CRD66J71IPNU4PBHFUS2T73H5UXJ3CRJX1L9MIA"
+  appType: "APP_H2HQQ5I9E0HHGHAY7KSL"
+  systemToken: "1W9669D1HQZUJCB5D3Q8S5T6XUXZ2EL3V42AMYQ1"
+  ipd:
+    project: FORM-2CC97D2F8D7D4F7C925538CC5758755DOA4W
+    role: FORM-75352DBED6A1472ABCDE25AF48489FEB3QTM
+    template: FORM-0884C1B6DF974AF095870D57118DDAB7YYES
+    review: FORM-96BDC0DF9DC64C288BA8BEE767BE7D261N3O
+    reviewProcess: TPROC--HXD667B1IOZUXORI783MN703YP3D34Y3V42AMQ1
+    approve: FORM-320FFE1AD1254C1ABBCB25BC2143C423UAN5
+    domain: https://iujjsn.aliwork.com/
+  project:
+    appType: "APP_FJSLK9BJ20K1NL3G2PUW"
+    systemToken: "JB966E91RQZUKPPFFNOKBB86G3GH38VSN42AMGV"
+    projectFid: FORM-4E24A9F61D794C9ABE71AD470120F17BOA1R

+ 12 - 0
mjava-paizhi/src/test/java/com/malk/poc/AwTbTest.java

@@ -16,6 +16,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @SpringBootTest
@@ -89,6 +90,17 @@ public class AwTbTest {
 //        awClint.createTask("ebba70b7-fe51-4510-820e-87dd3a7df8ec");
 //        awClint.updateLcb("PLP2532");
 //        tbClient.createGanttBaseline("680203eb0c97ae535f407bf2","测试_20250422",null);
+        awClint.doApprove(UtilMap.map("taskId, title","682bec44071938ca64f1e799, 交付件审批"));
+//        awClint.updateProjectRole("68358a72783ab42791dd0aa8", Arrays.asList("D0"),"","");
+//        Map data=tbClient.queryTaskDetail("68358a73ba1c60f44981c09b","","").get(0);
+//        Map data = tbClient.updateTaskDueDate("68358a73ba1c60f44981c09b","2025-05-28 12:00:00",tbConf.getOperatorId());
+//        System.out.println(data);
+
+        try {
+            Thread.sleep(10000);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
     }
 
 }

+ 6 - 0
mjava/src/main/java/com/malk/server/teambition/TBConf.java

@@ -77,6 +77,12 @@ public class TBConf {
         return body;
     }
 
+    public static Map assembleCustomField(String fieldValue, List value) {
+        Map body = UtilMap.map("customfieldName", fieldValue);
+        body.put("value", (Object) value);
+        return body;
+    }
+
     public static Map assembleCustomFieldName(String fieldValue, String value) {
         return assembleCustomField("customfieldName", fieldValue, value, null);
     }

+ 17 - 3
mjava/src/main/java/com/malk/service/teambition/TBClient.java

@@ -264,13 +264,27 @@ public interface TBClient {
      */
     Map updateTag(String projectTagId, Map param);
 
+    /**
+     * 创建项目分组
+     *
+     * @apiNote https://open.teambition.com/docs/apis/6363b54f912d20d3b567d83b
+     */
+    Map addTag(String name, String parentId);
+
 
     /**
      * 查询项目集
      *
      * @apiNote https://open.teambition.com/docs/apis/6501ad17912d20d3b5086630
      */
-    List<Map> queryProgramList(String programIds);
+    List<Map> queryProgramList(String programIds,String q);
+
+    /**
+     * 创建项目集
+     *
+     * @apiNote https://open.teambition.com/docs/apis/64e810ff912d20d3b58fa614
+     */
+    Map createProgramList(String name, String parentId);
 
     /**
      * 查询项目集 [ppExt: post请求, 获取全量项目集后, 通过name匹配. get请求内id必填, 名称查询无实际用途] - 分页返回上限数量为50
@@ -284,7 +298,7 @@ public interface TBClient {
      *
      * @apiNote https://open.teambition.com/docs/apis/64e810fe912d20d3b58f9ff9
      */
-    List<Map> upsertProgramProject(String programId, List<String> projectIds, String operatorId);
+    Map upsertProgramProject(String programId, List<String> projectIds, String operatorId);
 
     /**
      * 查询项目概览自定义字段列表
@@ -296,7 +310,7 @@ public interface TBClient {
     /**
      * 更新项目概览自定义字段值 [参考任务自定义字段更新]
      *
-     * @apiNote https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a49d9d
+     * @apiNote https://open.teambition.com/docs/apis/6321c6d1912d20d3b5a49d3f
      */
     Map updateProjectStatusField(String projectId, String operatorId, Map body);
 

+ 18 - 4
mjava/src/main/java/com/malk/service/teambition/impl/TBClientImpl.java

@@ -393,12 +393,26 @@ public class TBClientImpl implements TBClient {
     }
 
     @Override
-    public List<Map> queryProgramList(String programIds) {
-        Map param = UtilMap.map("programIds", programIds);
+    public Map addTag(String name, String parentId) {
+        Map param = UtilMap.map("organizationId, name, parentId",tbConf.getTenantId(), name,parentId);
+        TBR tbr = (TBR) UtilHttp.doPost(tbConf.getApiHost() + "/v3/project-tag/create", initHeaderToken(tbConf.getOperatorId()),null, param, TBR.class);
+        return (Map) tbr.getResult();
+    }
+
+    @Override
+    public List<Map> queryProgramList(String programIds,String q) {
+        Map param = UtilMap.map("programIds, q", programIds,q);
         TBR tbr = (TBR) UtilHttp.doGet(tbConf.getApiHost() + "/v3/program/query", initHeaderToken(), param, TBR.class);
         return (List<Map>) tbr.getResult();
     }
 
+    @Override
+    public Map createProgramList(String name, String parentId) {
+        Map param = UtilMap.map("organizationId, name, parentId",tbConf.getTenantId(), name,parentId);
+        TBR tbr = (TBR) UtilHttp.doPost(tbConf.getApiHost() + "/v3/program/create", initHeaderToken(tbConf.getOperatorId()),null, param, TBR.class);
+        return (Map) tbr.getResult();
+    }
+
     @Override
     public List<Map> queryProgramList_all() {
         TBR tbr = (TBR) UtilHttp.doPost(tbConf.getApiHost() + "/v3/program/query", initHeaderToken(), null, null, TBR.class);
@@ -406,9 +420,9 @@ public class TBClientImpl implements TBClient {
     }
 
     @Override
-    public List<Map> upsertProgramProject(String programId, List<String> projectIds, String operatorId) {
+    public Map upsertProgramProject(String programId, List<String> projectIds, String operatorId) {
         TBR tbr = (TBR) UtilHttp.doPost(tbConf.getApiHost() + "v3/program/" + programId + "/project/create", initHeaderToken(operatorId), UtilMap.map("projectIds", projectIds), TBR.class);
-        return (List<Map>) tbr.getResult();
+        return (Map) tbr.getResult();
     }
 
     @Override

+ 1 - 1
mjava/src/main/resources/application.yml

@@ -14,7 +14,7 @@ spel:
 # 资源配置
 spring:
   profiles:
-    active: prod
+    active: dev
   # 热部署
   devtools:
     restart: