Browse Source

Merge remote-tracking branch 'origin/master'

pruple_boy 1 year ago
parent
commit
cacfea81bf

+ 9 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/service/AwDingService.java

@@ -0,0 +1,9 @@
+package com.malk.aiwei.service;
+
+import java.util.Map;
+
+public interface AwDingService {
+
+    void saveGroup(Map upMap,Map formData);
+
+}

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

@@ -1,9 +1,11 @@
 package com.malk.aiwei.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.malk.aiwei.server.AWServer;
 import com.malk.aiwei.service.AWClint;
+import com.malk.aiwei.service.AwDingService;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McException;
@@ -35,6 +37,9 @@ public class AWImplClient implements AWClint {
     @Autowired
     private YDConf ydConf;
 
+    @Autowired
+    private AwDingService awDingService;
+
     // 项目主数据表
     String _matchFormUuid(String code) {
         Map<String, String> formUuid = UtilMap.empty();
@@ -471,6 +476,8 @@ public class AWImplClient implements AWClint {
         String projectId = UtilMap.getString(formData, "textField_lqxtykce");
         log.info("项目主数据, {}, {}", projectId, formData);
         if (StringUtils.isBlank(projectId)) {
+            Map upMap=UtilMap.map("textField_lqxtykce", projectId);
+            awDingService.saveGroup(upMap,formData);
 
             // prd 多模板适配: [templateId 为空, 触发项目类型匹配]
             if (StringUtils.isBlank(templateId)) {
@@ -485,7 +492,7 @@ public class AWImplClient implements AWClint {
             projectId = UtilMap.getString(result, "id");
             ydClient.operateData(YDParam.builder()
                     .formInstanceId(UtilMap.getString(formData, "formInstanceId"))
-                    .updateFormDataJson(JSON.toJSONString(UtilMap.map("textField_lqxtykce", projectId)))
+                    .updateFormDataJson(JSON.toJSONString(upMap))
                     .build(), YDConf.FORM_OPERATION.update);
         }
         _syncProjectRole(formData, projectId);

+ 79 - 0
mjava-aiwei/src/main/java/com/malk/aiwei/service/impl/AwDingServiceImpl.java

@@ -0,0 +1,79 @@
+package com.malk.aiwei.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.malk.aiwei.service.AwDingService;
+import com.malk.service.dingtalk.DDClient;
+import com.malk.service.dingtalk.DDClient_Group;
+import com.malk.utils.UtilEnv;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Slf4j
+@Service
+public class AwDingServiceImpl implements AwDingService {
+
+    @Autowired
+    private DDClient_Group ddClient_group;
+    @Autowired
+    private DDClient ddClient;
+
+    String _matchFormData(String code) {
+        Map<String, String> formUuid = UtilMap.empty();
+        if (true || UtilEnv.getActiveProfile().equals(UtilEnv.ENV_PROD)) {
+            formUuid.put("OWNER_USER_ID", "153620324221442254");// todo 需要替换艾为tbmanager userId
+            formUuid.put("TEMPLATE_ID", "17d5c0fc-79f8-43bf-86ab-bad1e254ec2d");// todo 需要在艾为组织创建场景群模板,并替换模板ID
+        } else {
+            formUuid.put("OWNER_USER_ID", "153620324221442254");
+            formUuid.put("TEMPLATE_ID", "17d5c0fc-79f8-43bf-86ab-bad1e254ec2d");
+        }
+        return formUuid.get(code);
+    }
+
+    @Override
+    public void saveGroup(Map upMap, Map formData) {
+        try {
+            String ddGroupId=String.valueOf(formData.get("textField_luqvxhec"));// 群ID
+            List<Map> list= (List<Map>) formData.get("tableField_lqxtykcf");// 项目角色子表单
+            String newUsers="";
+            for (Map map:list){
+                newUsers=newUsers.concat(String.join(",",UtilMap.getList(map,"employeeField_lqxtykch_id"))).concat(",");
+            }
+            newUsers=newUsers.substring(0,newUsers.length()-1);
+            if(StrUtil.isBlank(ddGroupId)){
+                String name=String.valueOf(formData.get("textField_lqxtykcd")).concat("项目群");// todo 这里是群名称
+                ddGroupId=ddClient_group.createGroupByTemp(ddClient.getAccessToken(),name,_matchFormData("TEMPLATE_ID"),_matchFormData("OWNER_USER_ID"),newUsers);
+                // 创建群
+                upMap.put("textField_luqvxhec",ddGroupId);// 群ID
+                upMap.put("textField_luqvxhed",newUsers);// 群成员ID
+            }else{
+                // 判断并更新群成员
+                String oldUsers=String.valueOf(formData.get("textField_luqvxhed"));
+                // 删除群成员
+                List delList=findDifferentElements(Arrays.asList(oldUsers.split(",")),Arrays.asList(newUsers.split(",")));
+                if(delList.size()>0){
+                    ddClient_group.delGroupUser(ddClient.getAccessToken(),ddGroupId,String.join(",",delList));
+                }
+                // 新增群成员
+                List addList=findDifferentElements(Arrays.asList(newUsers.split(",")),Arrays.asList(oldUsers.split(",")));
+                if(addList.size()>0){
+                    ddClient_group.addGroupUser(ddClient.getAccessToken(),ddGroupId,String.join(",",addList));
+                }
+                upMap.put("textField_luqvxhed",newUsers);// 群成员ID
+            }
+        }catch (Exception e){
+            log.error("创建钉钉项目群异常了,{}",e);
+            e.printStackTrace();
+        }
+    }
+
+    private List findDifferentElements(List firstArray,List secondArray){
+        Set<T> set1 = new HashSet<>(firstArray);
+        set1.removeAll(secondArray);
+        return new ArrayList<>(set1);
+    }
+}

+ 15 - 0
mjava/src/main/java/com/malk/service/dingtalk/DDClient_Group.java

@@ -0,0 +1,15 @@
+package com.malk.service.dingtalk;
+
+import java.util.Map;
+
+public interface DDClient_Group {
+
+    Map createGroup(String access_token, Map param);
+
+    String createGroupByTemp(String access_token, String title, String template_id, String owner_user_id, String user_ids);
+
+    Boolean addGroupUser(String access_token, String open_conversation_id, String user_ids);
+
+    Boolean delGroupUser(String access_token, String open_conversation_id, String user_ids);
+
+}

+ 40 - 0
mjava/src/main/java/com/malk/service/dingtalk/impl/DDImplClient_Group.java

@@ -0,0 +1,40 @@
+package com.malk.service.dingtalk.impl;
+
+import com.malk.server.dingtalk.DDR;
+import com.malk.service.dingtalk.DDClient_Group;
+import com.malk.utils.UtilMap;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+@Service
+@Slf4j
+public class DDImplClient_Group implements DDClient_Group {
+
+    @Override
+    public Map createGroup(String access_token,Map body) {
+        Map param = UtilMap.map("access_token", access_token);
+        return (Map) DDR.doPost("https://oapi.dingtalk.com/topapi/im/chat/scenegroup/create", null, param, body).getResult();
+    }
+
+    @Override
+    public String createGroupByTemp(String access_token, String title, String template_id, String owner_user_id, String user_ids) {
+        Map body = UtilMap.map("title, template_id, owner_user_id, user_ids",title,template_id,owner_user_id,user_ids);
+        return String.valueOf(createGroup(access_token,body).get("open_conversation_id"));
+    }
+
+    @Override
+    public Boolean addGroupUser(String access_token, String open_conversation_id, String user_ids) {
+        Map param = UtilMap.map("access_token", access_token);
+        Map body = UtilMap.map("open_conversation_id, user_ids",open_conversation_id,user_ids);
+        return DDR.doPost("https://oapi.dingtalk.com/topapi/im/chat/scenegroup/member/add", null, param, body).isSuccess();
+    }
+
+    @Override
+    public Boolean delGroupUser(String access_token, String open_conversation_id, String user_ids) {
+        Map param = UtilMap.map("access_token", access_token);
+        Map body = UtilMap.map("open_conversation_id, user_ids",open_conversation_id,user_ids);
+        return DDR.doPost("https://oapi.dingtalk.com/topapi/im/chat/scenegroup/member/delete", null, param, body).isSuccess();
+    }
+}