ソースを参照

Merge branch 'master' of https://mc.cloudpure.cn/cloudpure/mjava-awinic

pruple_boy 9 ヶ月 前
コミット
69a451f123

+ 32 - 8
mjava-aiwei/src/main/java/com/malk/aiwei/controller/TBxYDController.java

@@ -5,6 +5,8 @@ package com.malk.aiwei.controller;
  */
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.aiwei.server.YDSearch;
 import com.malk.aiwei.service.AWClint;
 import com.malk.delegate.McDelegate;
 import com.malk.server.aliwork.YDConf;
@@ -20,16 +22,10 @@ import com.malk.utils.UtilMap;
 import com.malk.utils.UtilServlet;
 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.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Slf4j
 @RestController
@@ -288,6 +284,34 @@ public class TBxYDController {
         return McR.success();
     }
 
+    /**
+     * 获取主数据产品列表
+     */
+    @GetMapping("product/list")
+    Map getProductList(@RequestParam Map param) {
+        System.out.println(JSONObject.toJSONString(param));
+//        String projectId="65f2855b5a2065ad7ad7d084";
+        String projectId=UtilMap.getString(param,"projectId");
+        String q=UtilMap.getString(param,"q");
+        String objectId=UtilMap.getString(param,"objectId");
+        List result=awClint.getProductList(projectId,q);
+        return UtilMap.map("options",result);
+    }
+
+    /**
+     * 获取主数据产品版本
+     */
+    @GetMapping("product/version")
+    Map getProductVersionList(@RequestParam Map param) {
+        System.out.println(JSONObject.toJSONString(param));
+//        String projectId="65f2855b5a2065ad7ad7d084";
+        String projectId=UtilMap.getString(param,"projectId");
+        String q=UtilMap.getString(param,"q");
+        String objectId=UtilMap.getString(param,"objectId");
+        List result=awClint.getProductList(projectId,q,objectId);
+        return UtilMap.map("options",result);
+    }
+
     //////// test ////////
 
     @Autowired

+ 4 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/delegate/TBDelegate.java

@@ -34,6 +34,10 @@ public class TBDelegate implements TBEvent {
         if ("v3.task.taskflowstatus.update".equals(eventName)) {
             JSONObject data = eventJson.getJSONObject("data");
             awClint.doApprove(data, false);
+        }else  if ("v3.task.customfield.update".equals(eventName)) {
+            JSONObject data = eventJson.getJSONObject("data");
+            System.out.println("1"+JSONObject.toJSONString(data));
+            awClint.custFieldUpdate(data);
         }
     }
 

+ 4 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/server/AWServer.java

@@ -34,6 +34,10 @@ public class AWServer {
     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("未完成", "待处理");

+ 88 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/server/YDSearch.java

@@ -0,0 +1,88 @@
+package com.malk.aiwei.server;
+
+import lombok.Data;
+
+@Data
+public class YDSearch {
+
+    // YidaSearch yidaSearch=new YidaSearch("textField_lk7v5k5f",contract.getContractNo(),"同步合同档案台账", YidaSearch.Type.TEXT_FIELD,YidaSearch.Operator.EQ);
+
+
+    private String key;
+    private Object value;
+    // 组件值类型
+    private String type;
+    // 操作符
+    private String operator;
+    // 组件名称
+    private String componentName;
+    // 查询子表使用
+    private String parentId;
+
+    public YDSearch(String key, Object value, String type, String operator, String componentName){
+        this.key=key;
+        this.value=value;
+        this.type=type;
+        this.operator=operator;
+        this.componentName=componentName;
+    }
+
+    public YDSearch(String key, Object value, Type type, Operator operator, String componentName, String parentId) {
+        this.key = key;
+        this.value = value;
+        this.type = type.type;
+        this.operator = operator.operator;
+        this.componentName = componentName;
+        this.parentId = parentId;
+    }
+
+    public YDSearch(String key, Object value, String componentName, Type type, Operator operator){
+        this.key=key;
+        this.value=value;
+        this.type=type.type;
+        this.operator=operator.operator;
+        this.componentName=componentName;
+    }
+
+    // 缺少来这里找 https://open.dingtalk.com/document/orgapp-server/use-the-filter-conditions-in-the-form-data-management-for
+    public enum Type{
+        TEXT_FIELD("TEXT"),
+        TEXTAREA_FIELD("TEXT"),
+        NUMBER_FIELD("DOUBLE"),
+        RATE_FIELD("DOUBLE"),
+        RADIO_FIELD("ARRAY"),
+        CHECKBOX_FIELD("ARRAY"),
+        MULTISELECT_FIELD("ARRAY"),
+        CASCADESELECT_FIELD("STRING"),
+        DATE_FIELD("DOUBLE"),
+        CASCADEDATE_FIELD("DOUBLE"),
+        IMAGE_FIELD("TEXT"),
+        ATTACHMENT_FIELD("TEXT"),
+        EMPLOYEE_FIELD("STRING"),
+        DEPARTMENTSELECT_FIELD("ARRAY");
+
+        public final String type;
+
+        Type(String type){
+            this.type=type;
+        }
+    }
+
+    public enum Operator{
+        EQ("eq"),
+        LIKE("like"),
+        GT("gt"),
+        GE("ge"),
+        LT("lt"),
+        LE("le"),
+        BETWEEN("between"),
+        CONTAINS("contains");
+
+        public final String operator;
+
+        Operator(String operator){
+            this.operator=operator;
+        }
+    }
+
+}

+ 7 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/service/AWClint.java

@@ -1,5 +1,6 @@
 package com.malk.aiwei.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.malk.server.aliwork.YDParam;
 
 import java.util.List;
@@ -106,4 +107,10 @@ public interface AWClint {
     void test();
 
     void tmp();
+
+    List<Map> getProductList(String projectId,String q);
+
+    List<Map> getProductList(String projectId,String q,String taskId);
+
+    void custFieldUpdate(JSONObject data);
 }

+ 118 - 1
mjava-aiwei/src/main/java/com/malk/aiwei/service/impl/AWImplClient.bak

@@ -109,4 +109,121 @@ public Map doCheck(String taskId, boolean isTask) {
             Map body2 = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_LINK, result);
             tbClient.updateTaskCustomField(String.valueOf(data.get("taskId")), tbConf.getOperatorId(), body2);
             _updateApproveField(UtilMap.getString(data, "taskId"), new ArrayList<>(), result, title, "已提交", AWServer.TASK_CHECK_LINK);
-        }
+        }
+
+
+
+
+
+
+
+public Map doCheck(String taskId, boolean isTask) {
+
+        log.info("检查项check {}, isTask {}", taskId, isTask);
+        Map taskData = _getTaskFieldMap(taskId, AWServer.TASK_CODE, AWServer.TASK_CHECK_LINK, AWServer.TASK_ROLE, AWServer.TASK_STAGE, AWServer.TASK_CHECK_STATUS, AWServer.TASK_PRODUCT, AWServer.TASK_PRODUCT_VERSION);
+        Map rTask = UtilMap.getMap(taskData, "task");
+        String pCode = UtilMap.getString(rTask, "projectId");
+        if (AWServer.PROJECT_IGNORE_ID.contains(pCode)) {
+            return UtilMap.map("result", "模板/复用项目");
+        }
+        String checkLink = UtilMap.getString(taskData, AWServer.TASK_CHECK_LINK);
+        /// prd 7.17 预检项任务ID与当前任务ID不匹配,判定为非法, 无需重新刷新
+        if (isTask) {
+            if (!(checkLink.contains("?taskId=") && !checkLink.contains(taskId))) {
+                /// prd 预检项持续维护需要重新匹配, 任务号和主数据判定为非法, 无需重新刷新
+                if (StringUtils.isNotBlank(checkLink) && !AWServer.TASK_CHECK_LINK_OK.equals(checkLink)) {
+                    return UtilMap.map("result", "链接已加载");
+                }
+            }
+        }
+        // prd 非未完成任务若是未配置预检项状态, 忽略更新
+        if (isTask && !_getWorkFlowStatusList(pCode, AWServer.WORKFLOW_INITIAL).contains(rTask.get("tfsId"))) {
+            return UtilMap.map("result", "任务已执行");
+        }
+        // prd 7.17 creatorId 创建人修改为 执行人 executorId
+        String executorId = UtilMap.getString(rTask, "executorId");
+        String tCode = UtilMap.getString(taskData, AWServer.TASK_CODE);
+
+        String resultTitle = "", resultUrl = "";
+        List<Map> tList = null;
+        Map rProject = null;
+        if (StringUtils.isBlank(tCode)) {
+            resultTitle = "无任务编码";
+        } else {
+            List<Map> pList = ydService.queryDataList_FormData(_matchFormUuid("PROJECT"), UtilMap.map("textField_lqxtykce", pCode));
+            pList = pList.stream().filter(item -> pCode.equals(item.get("textField_lqxtykce"))).collect(Collectors.toList());
+            if (pList.size() == 0) {
+                resultTitle = "未匹配到项目主数据";
+            } else {
+                rProject = pList.get(0);
+                String proType = UtilMap.getString(rProject, "textField_ltwcq7s6");
+                tList = ydService.queryFormData_all(YDParam.builder()
+                        .formUuid(_matchFormUuid("CHECK"))
+                        .searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_lrncf4hk, radioField_lrnddfq6", tCode, "启用")))
+                        .build());
+                // prd 多模板适配: [任务号 + 项目类型]
+                tList = tList.stream().filter(item -> tCode.equals(item.get("selectField_lrncf4hk")) && UtilMap.getList(item, "multiSelectField_ltwjre9s").contains(proType)).collect(Collectors.toList());
+                if (tList.size() == 0) {
+                    resultTitle = "未配置预检项";
+                } else {
+                    resultTitle = AWServer.TASK_CHECK_LINK_OK;
+                    resultUrl = _matchFormUuid("DOMAIN") + ydConf.getAppType() + "/workbench/" + _matchFormUuid("RECORD") + "?taskId=" + taskId;
+                }
+            }
+        }
+        log.info("检查项结果, {},{}", resultTitle, resultUrl);
+        String result = resultTitle.equals(AWServer.TASK_CHECK_LINK_OK) ? resultUrl : resultTitle;
+        if (isTask) {
+            if (!result.equals(checkLink)) {
+                Map body = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_LINK, result);
+                tbClient.updateTaskCustomField(taskId, tbConf.getOperatorId(), body);
+                // prd 7.17 技术检查项从未匹配到更新,刷新检查状态为空
+                if (resultTitle.equals(AWServer.TASK_CHECK_LINK_OK) && (checkLink.equals("未配置预检项") || checkLink.equals(""))) {
+                    Map body2 = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_STATUS);
+                    tbClient.updateTaskCustomField(taskId, tbConf.getOperatorId(), body2);
+                }
+//                _updateApproveField(taskId, new ArrayList<>(), resultUrl, resultTitle, "待提交", AWServer.TASK_CHECK_LINK);
+            }
+            // prd 未配置预检项更新为已检查, 避免完成任务完成触发必填校验 [ppExt 避免重复写入, 重复写入TB会重复记录日志
+            if (!resultTitle.equals(AWServer.TASK_CHECK_LINK_OK) && !taskData.get(AWServer.TASK_CHECK_STATUS).equals("已检查")) {
+                Map body = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_STATUS, "已检查");
+                tbClient.updateTaskCustomField(taskId, tbConf.getOperatorId(), body);
+            }
+            return UtilMap.map("result", result);
+        }
+        // prd 7.17 添加执行人为空校验
+        McException.assertAccessException(StringUtils.isBlank(executorId), "执行人不能为空!");
+        McException.assertAccessException(!resultTitle.equals("技术检查确认"), resultTitle);
+
+        Map formData = UtilMap.map("selectField_lqxuswzd, textField_lrndwu00, textField_lr3dlwsa, textField_lr3er4qb", tCode, pCode, taskId, executorId);
+        // 项目信息
+        formData.putAll(UtilMap.map("selectField_lqxuswze, textField_lrndwu07, textField_lqxuc9m4", UtilMap.getString(rProject, "textField_lrj7vnxb"), UtilMap.getString(rProject, "textareaField_lrj7vnxl"), UtilMap.getString(rProject, "textField_lqxtykcd")));
+        // 任务信息 [TBManager 操作]
+        Map<String, String> extra = (Map) tbClient.idMapQuery(executorId, "dingTalk-user", ddConf.getCorpId()).get(0).get("extra");
+        // ppExt: TB映射钉钉信息仅返回 userId, 人员组件返回前端展示需要 name. 通过页面公式临时自动加载, 可通过TB接口或钉钉用户接口查询
+        formData.putAll(UtilMap.map("textField_lrndwu09, textField_lrndwu0a, textField_lrndwu0b, employeeField_lrndwu0e, textField_lvbrueqs, textField_lvbrueqt", rTask.get("content"), taskData.get(AWServer.TASK_STAGE), taskData.get(AWServer.TASK_ROLE), Arrays.asList(UtilMap.map("value, name", extra.get("userId"), extra.get("userId"))), taskData.get(AWServer.TASK_PRODUCT), taskData.get(AWServer.TASK_PRODUCT_VERSION)));
+        // 返回检查项
+        formData.put("tableField_lqxxgj4s", tList.stream().map(item -> {
+            item.put("associationFormField_lrrnem5r", YDConf.associationForm(ydConf.getAppType(), _matchFormUuid("CHECK"), UtilMap.getString(item, "instanceId"), UtilMap.getString(item, "textField_lrnd3h0r"), "", false));
+            return item;
+        }).collect(Collectors.toList()));
+        // prd 7.17 技术检查项需要匹配userId
+        formData.put("userId", extra.get("userId"));
+        return formData;
+    }
+
+    /**
+     * 检查项回调
+     */
+    @Override
+    public void checked(Map data) {
+
+        log.info("检查项回调, {}", data);
+        String title = UtilMap.getString(data, "title");
+        Map body = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_STATUS, "已检查");
+        tbClient.updateTaskCustomField(String.valueOf(data.get("taskId")), tbConf.getOperatorId(), body);
+        String result = _matchFormUuid("DOMAIN") + ydConf.getAppType() + "/formDetail?formInstId=" + data.get("formInstId");
+        Map body2 = TBConf.assembleCustomFieldName(AWServer.TASK_CHECK_LINK, result);
+        tbClient.updateTaskCustomField(String.valueOf(data.get("taskId")), tbConf.getOperatorId(), body2);
+//        _updateApproveField(UtilMap.getString(data, "taskId"), new ArrayList<>(), result, title, "已提交", AWServer.TASK_CHECK_LINK);
+    }

+ 83 - 1
mjava-aiwei/src/main/java/com/malk/aiwei/service/impl/AWImplClient.java

@@ -2,8 +2,10 @@ package com.malk.aiwei.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
 import com.malk.aiwei.server.AWServer;
+import com.malk.aiwei.server.YDSearch;
 import com.malk.aiwei.service.AWClint;
 import com.malk.aiwei.service.AwDingService;
 import com.malk.server.aliwork.YDConf;
@@ -47,7 +49,7 @@ public class AWImplClient implements AWClint {
     // 单据环境映射
     private String _matchFormUuid(String code) {
         Map<String, String> formUuid = UtilMap.empty();
-        if (UtilEnv.getActiveProfile().equals(UtilEnv.ENV_PROD)) {
+        if (UtilEnv.getActiveProfile().equals(UtilEnv.ENV_PROD)||UtilEnv.getActiveProfile().equals(UtilEnv.ENV_TEST)) {
             formUuid.put("DENTRY", "FORM-BD73A57B62EA4153B896C9BB3EA14D28GWSQ");                // 文件夹/文件版本记录
             formUuid.put("PERMISSION", "FORM-3380221DFDF84FBD8BCF503198294257TFWB");            // 文件夹权限
             formUuid.put("REVIEW", "FORM-812FD46AF391449A8F206EDB3221B38840UQ");                // 交付物审批记录
@@ -1724,6 +1726,86 @@ public class AWImplClient implements AWClint {
 //        this.tmp_617();
     }
 
+    @Override
+    public List<Map> getProductList(String projectId, String q) {
+        // 获取主数据中产品列表
+        return getProductData(projectId,q,"textField_lhsxurnt",null);
+
+    }
+
+    @Override
+    public List<Map> getProductList(String projectId, String q, String taskId) {
+        Map taskData = _getTaskFieldMap(taskId, AWServer.TASK_PRODUCT);
+//        Map rTask = UtilMap.getMap(taskData, "task");
+        String tCode = UtilMap.getString(taskData, AWServer.TASK_PRODUCT);
+        McException.assertAccessException(StringUtils.isBlank(tCode), "请先选择产品型号!");
+        // 获取主数据中产品版本
+        return getProductData(projectId,q,"textField_lo2ludkv",tCode);
+    }
+
+    @Override
+    public void custFieldUpdate(JSONObject data) {
+        List<Map> list=tbClient.queryTaskDetail(data.getString("taskId"),"","");
+        McException.assertAccessException(list==null||list.size()<1, "未匹配到任务!");
+        Map rTask =list.get(0);
+        Map<String, String> proData = getProjectCFID(UtilMap.getString(rTask,"projectId"), Arrays.asList(AWServer.SELECT_TASK_PRODUCT, AWServer.SELECT_TASK_PRODUCT_VERSION));
+        if(data.getString("customfieldId").equals(proData.get(AWServer.SELECT_TASK_PRODUCT))){
+            // 更新自定义字段--产品型号
+            Map body = null;
+            if(data.getJSONArray("customfieldValue").size()<1){
+                body=TBConf.assembleCustomFieldName(AWServer.TASK_PRODUCT);
+            }else{
+                body=TBConf.assembleCustomFieldName(AWServer.TASK_PRODUCT, data.getJSONArray("customfieldValue").getJSONObject(0).getString("title"));
+            }
+            tbClient.updateTaskCustomField(data.getString("taskId"), tbConf.getOperatorId(), body);
+        }else if(data.getString("customfieldId").equals(proData.get(AWServer.SELECT_TASK_PRODUCT_VERSION))){
+            // 更新自定义字段--产品版本
+            Map body = null;
+            if(data.getJSONArray("customfieldValue").size()<1){
+                body=TBConf.assembleCustomFieldName(AWServer.TASK_PRODUCT_VERSION);
+            }else{
+                body=TBConf.assembleCustomFieldName(AWServer.TASK_PRODUCT_VERSION, data.getJSONArray("customfieldValue").getJSONObject(0).getString("title"));
+            }
+            tbClient.updateTaskCustomField(data.getString("taskId"), tbConf.getOperatorId(), body);
+        }
+    }
+
+    private List<Map> getProductData(String projectId,String q,String qKey,String tCode){
+        // 校验项目号
+        YDSearch ytbProjectId=new YDSearch("textField_lqxtykce",projectId,"TB项目编号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ);
+        List<Map> tbProjectList =(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-141E21DF183846028E21727CE43CD1C75CLZ")
+                .appType("APP_R5EBUF2FPN3Y8DRF93M4").systemToken("ON566NC1VNIHPANP9TNVHB3TBIWS3E0TUZ5RLF3")
+                .searchCondition(JSONObject.toJSONString(Arrays.asList(ytbProjectId)))
+                .pageSize(10).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+
+        McException.assertAccessException(tbProjectList==null||tbProjectList.size()<1, "未匹配到主数据!");
+        String pId=UtilMap.getString(UtilMap.getMap(tbProjectList.get(0),"formData"),"textField_lrj7vnxb");
+        McException.assertAccessException(StringUtils.isBlank(pId), "未匹配到主数据!");
+
+        YDSearch ydSearch=new YDSearch("textField_lha7mqbs","G","物料子类", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ);
+        YDSearch ydSearch2=new YDSearch("textField_lha7mqbn",pId,"项目号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ);
+        YDSearch ydSearch3=new YDSearch(qKey,q,"产品料号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.LIKE);
+        List qList=Arrays.asList(ydSearch,ydSearch2,ydSearch3);
+        if(tCode!=null){
+            YDSearch ydSearch4=new YDSearch("textField_lhsxurnt",tCode,"产品料号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ);
+            qList=Arrays.asList(ydSearch,ydSearch2,ydSearch3,ydSearch4);
+        }
+        List<Map> list =(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-4W8667D17CAAGFXI9VO0J9J7RFNL2QDFL7AHLJ")
+                .appType("APP_QBWQITQBSPJNYTUTNPDK").systemToken("8F966HB12J27MQJM6V4IQDYHYTPA2G4GTZGCLN1")
+                .searchCondition(JSONObject.toJSONString(qList))
+                .pageSize(100).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+        List<Map> result=new ArrayList<>();
+        Map<String,String> keyMap=new HashMap<>();
+        for (Map map:list){
+            String data=UtilMap.getString(UtilMap.getMap(map,"formData"),qKey);
+            if(!StringUtils.isBlank(data)&&!keyMap.containsKey(data)){
+                result.add(UtilMap.map("title",data));
+                keyMap.put(data,data);
+            }
+        }
+        return result;
+    }
+
     /// tmp: 6.18 临时修改权限
     private void tmp618() {
         // 知识库返回根节点 rootNodeId, 即根目录的 dentryUuid, 可添加整个知识库编辑权限, 通过知识库创建者赋权

+ 45 - 0
mjava-aiwei/src/main/resources/application-local.yml

@@ -0,0 +1,45 @@
+# 环境配置
+server:
+  port: 9001
+  servlet:
+    context-path: /api/aiwei
+
+# condition
+spel:
+  scheduling: false        # 定时任务是否执行
+  multiSource: false       # 是否多数据源配置
+
+spring:
+  # database
+  datasource:
+    hikari:
+      connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci           # SqlServer, Oracle 无需设置类型
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    username: root
+    password: mu123
+    url: jdbc:mysql://127.0.0.1:3306/mjava?serverTimezone=Asia/Shanghai&useUnicode=yes&characterEncoding=UTF-8&useSSL=true
+  jpa:
+    database: MYSQL
+    database-platform: org.hibernate.dialect.MySQL57Dialect
+
+# dingtalk
+dingtalk:
+  agentId: 2848797049
+  appKey: dingbqy1qugrihao43dl
+  appSecret: UUaTKTWgLdduHvMSl0ipm19f_PDarHLHqnpz4vFZXjkkmFNmfWuwoPF1evjIRwvd
+  corpId: ding5fcad818b0d9f62c35c2f4657eb6378f
+  aesKey:
+  token:
+  operator: "0249EDD1-754E-44C8-87F0-255B0E32021F"   # OA管理员账号
+
+# aliwork
+aliwork:
+  appType: "APP_R5EBUF2FPN3Y8DRF93M4"
+  systemToken: "ON566NC1VNIHPANP9TNVHB3TBIWS3E0TUZ5RLF3"
+
+# teambition
+teambition:
+  AppID: 66b1dabf408d68cc7f672ecd
+  AppSecret: ZNRGnvMGW3n6qtmsZId8G2YUrVWxMNQF
+  TenantId: 623ef800ad6674f7257f0eae                # 管理后台 - 企业xx - 企业ID
+  OperatorId: 6503d14c2efed4b3063f3952              # 公共账号, 需要有操作权限 [x]

+ 15 - 8
mjava-aiwei/src/main/resources/application-test.yml

@@ -1,6 +1,6 @@
 # 环境配置
 server:
-  port: 9023
+  port: 9001
   servlet:
     context-path: /api/aiwei
 
@@ -24,15 +24,22 @@ spring:
 
 # dingtalk
 dingtalk:
-  agentId: 2691784047
-  appKey: dinghbynhnd2dbgypmsa
-  appSecret: Kl5Xw8x0TlEIlvcJuUkYZD18UTTShJmfdKrAIpY8oX-Q_tazyUKA28nQh7dG5-mq
-  corpId: ding321c72787fffc78b35c2f4657eb6378f
+  agentId: 2848797049
+  appKey: dingbqy1qugrihao43dl
+  appSecret: UUaTKTWgLdduHvMSl0ipm19f_PDarHLHqnpz4vFZXjkkmFNmfWuwoPF1evjIRwvd
+  corpId: ding5fcad818b0d9f62c35c2f4657eb6378f
   aesKey:
   token:
-  operator: ""   # OA管理员账号
+  operator: "0249EDD1-754E-44C8-87F0-255B0E32021F"   # OA管理员账号
 
 # aliwork
 aliwork:
-  appType: "APP_H7WUJTKB448F9IBDC6C4"
-  systemToken: "DHA66081DN6GRFNC6GTRW5NIJS082ZF0UN9PLLF"
+  appType: "APP_R5EBUF2FPN3Y8DRF93M4"
+  systemToken: "ON566NC1VNIHPANP9TNVHB3TBIWS3E0TUZ5RLF3"
+
+# teambition
+teambition:
+  AppID: 66b5cec1dbcd57b14046af05
+  AppSecret: jyd7DVu3MGYwzt562qPmLAaacV65FIyQ
+  TenantId: 658e7239b580fdc87e4a7ca4                # 管理后台 - 企业xx - 企业ID
+  OperatorId: 667e8282df3131f8e588526e              # 公共账号, 需要有操作权限 [x]

+ 83 - 0
mjava-aiwei/src/test/java/com/malk/aiwei/AwTbTest.java

@@ -0,0 +1,83 @@
+package com.malk.aiwei;
+
+import com.alibaba.fastjson.JSONObject;
+import com.malk.aiwei.server.YDSearch;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.dingtalk.DDR_New;
+import com.malk.server.teambition.TBConf;
+import com.malk.service.aliwork.YDClient;
+import com.malk.service.teambition.TBClient;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.assertj.core.util.Strings;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.*;
+
+@Slf4j
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class AwTbTest {
+
+    @Autowired
+    private TBClient tbClient;
+    @Autowired
+    private TBConf tbConf;
+
+    @Test
+    public void test(){
+        List<String> users=Arrays.asList("5f3a250040ce230ba377bf3c","5e698cca21f5ad70dfba7d2b","616fb6f78ad4104a10515809");
+        String programId ="662a69aceda740b4e63d3976";
+//        tbClient.createProgramMember(programId,tbConf.getOperatorId(),users);
+        List addUsers=new ArrayList();
+        for (String userId:users){
+            List resut=tbClient.queryProgramMember(programId,tbConf.getOperatorId(), UtilMap.map("userIds", userId));
+            if (resut.size() < 1) addUsers.add(userId);
+        }
+        log.info("需要添加到项目集的userId:{}",tbClient);
+        if (addUsers.size() > 0) tbClient.createProgramMember(programId,tbConf.getOperatorId(),addUsers);
+    }
+
+    @Autowired
+    private YDClient ydClient;
+
+    // this.initOptions("FORM-IQ8666B1PL275QG5BSSDG6ZD9X3Q29X881HCL4", JSON.stringify({'textField_ljsd7bjn':value}), //
+    //    "8F966HB12J27MQJM6V4IQDYHYTPA2G4GTZGCLN1", "APP_QBWQITQBSPJNYTUTNPDK",
+    //    'yida_pub_account', "selectField_lchafcgt", "selectField_lchafcgt", "selectField_lywdbrk1", 100);
+
+
+
+    @Test
+    public void adad(){
+//        YDSearch ydSearch=new YDSearch("textField_lha7mqbs","G","物料子类", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ);
+//        YDSearch ydSearch2=new YDSearch("textField_lha7mqbn","A2443","项目号", YDSearch.Type.TEXT_FIELD,YDSearch.Operator.EQ);
+//        List<Map> list =(List<Map>) ydClient.queryData(YDParam.builder().formUuid("FORM-4W8667D17CAAGFXI9VO0J9J7RFNL2QDFL7AHLJ")
+//                .appType("APP_QBWQITQBSPJNYTUTNPDK").systemToken("8F966HB12J27MQJM6V4IQDYHYTPA2G4GTZGCLN1")
+//                .searchCondition(JSONObject.toJSONString(Arrays.asList(ydSearch,ydSearch2)))
+//                .pageSize(100).build(), YDConf.FORM_QUERY.retrieve_list).getData();
+//        List<Map> result=new ArrayList<>();
+//        Map<String,String> keyMap=new HashMap<>();
+//        for (Map map:list){
+//            String data=UtilMap.getString(UtilMap.getMap(map,"formData"),("textField_lhsxurnt"));
+//            if(!StringUtils.isBlank(data)&&!keyMap.containsKey(data)){
+//                result.add(UtilMap.map("title",data));
+//            }
+//        }
+//        print(result);
+        DDR_New ddr_new = ydClient.queryData(YDParam.builder()
+                .appType("APP_QBWQITQBSPJNYTUTNPDK").systemToken("8F966HB12J27MQJM6V4IQDYHYTPA2G4GTZGCLN1")
+                .pageSize(100)
+                .build(), YDConf.FORM_QUERY.retrieve_forms);
+        print(ddr_new);
+    }
+    private void print(Object o){
+        System.out.println(JSONObject.toJSONString(o));
+    }
+
+}

+ 60 - 0
mjava-aiwei/src/test/java/testLocal.java

@@ -0,0 +1,60 @@
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.malk.aiwei.Boot;
+import com.malk.server.aliwork.YDConf;
+import com.malk.server.aliwork.YDParam;
+import com.malk.server.dingtalk.DDR_New;
+import com.malk.service.aliwork.YDClient;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author floe
+ * @date 2024/7/22 22:29
+ */
+@Slf4j
+@SpringBootTest(classes = Boot.class)
+@RunWith(SpringRunner.class)
+public class testLocal {
+
+    @Autowired
+    private YDClient ydClient;
+
+
+
+    @Test
+    public void test(){
+        String token="Bearer ".concat(getToken());
+        List<String> ids= FileUtil.readLines("/home/ids.txt","utf-8");
+//        List<String> ids= Arrays.asList("66697d643f7c5aef23f3a326###FINST-TM966BD1ISXM7XLDC9AGM4N92MDV325WL1YYLV9B","6699cef58e173e99e22d8de4###FINST-MBC668915E4NNTTUAFIFSDQZTPYT2T3WIV0ZLBF6");
+        for (int i = 0; i < ids.size(); i++) {
+            String result=HttpUtil.createPost("https://apigateway.awinic.com/sys/teambition/api/aiwei/do-check?taskId="+ids.get(i).split("###")[0])
+                    .header("authorization",token).execute().body();
+            System.out.println(result);
+            JSONObject resultObj=JSONObject.parseObject(result);
+            if(!resultObj.getBoolean("success")){
+                continue;
+            }
+            JSONObject data=resultObj.getJSONObject("data");
+            data.remove("tableField_lqxxgj4s");
+            data.remove("userId");
+            ydClient.operateData(YDParam.builder().updateFormDataJson(JSONObject.toJSONString(data)).formInstanceId(ids.get(i).split("###")[1]).build()
+             , YDConf.FORM_OPERATION.update);
+        }
+    }
+
+    private String getToken(){
+        String a=HttpUtil.post("https://apigateway.awinic.com/token/getToken", JSONObject.toJSONString(UtilMap.map("appKey, secret","AW394034j","RJbH7RMH3vllt4KDri303Mlw@df3434k")));
+        System.out.println(a);
+        return JSONObject.parseObject(a).getJSONObject("data").getString("token");
+    }
+}