Forráskód Böngészése

集成飞书卡片消息完成现有的消息推送处理

yurk 2 éve
szülő
commit
07e2160dcd

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/constant/Constant.java

@@ -37,4 +37,25 @@ public class Constant {
 
     public static final String[] EXPENSE_TYPES = {"材料费","办公用品","培训费","打印费","快递费","制作费","律师费","水费","电费","团建费","其他",
                                         "城市间交通费","住宿费","伙食补助费","市内交通费","其他差旅费","项目外包费","劳务外包费","其他外包费"};
+
+    //项目报告审核通知
+    public static final String[] PROJECT_REPORT_CHECK = {"审核结果","项目名称","填报人员","工作日期"};
+    //工作日报漏填提醒
+    public static final String[] WORK_REPORT_MISSING_FILLING = {"提示"};
+    //新任务通知
+    public static final String[] NEW_TASK = {"任务内容"};
+    //日报待审核提醒
+    public static final String[] REPORT_WAIT_CHECK = {"待审核数量"};
+    //日报审核通过提醒
+    public static final String[] REPORT_CHECK_PASS = {"审核人","日期"};
+    //日报审核通过提醒(带评价)
+    public static final String[] REPORT_CHECK_PASS_WITH_APPRAISE = {"审核人","评价","日期"};
+    //任务进展通知
+    public static final String[] TASK_EVOLVE= {"项目名称","任务名称","进展内容","任务状态"};
+    //费用报销待审核提醒
+    public static final String[] EXPENSE_REIMBURSEMENT_WAIT_CHECK= {"报销人","填报日期","票据类型","金额","备注"};
+    //员工请假待审核
+    public static final String[] LEAVE_WAIT_CHECK= {"请假人","请假类型","请假时间","备注"};
+    //请假审核通知
+    public static final String[] LEAVE_CHECK= {"审核结果","审核人","请假时间","备注"};
 }

+ 7 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java

@@ -15,7 +15,9 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -256,12 +258,11 @@ public class UserController {
         FeishuInfo feishuInfo = feishuInfoService.getById("F171770056");
         List<String> userIds=new ArrayList<>();
         userIds.add("ou_8b2f204be465c53024a4687a88b7ece8");
-        List<String> templateVariableDetail=new ArrayList<>();
-        templateVariableDetail.add("通过");
-        templateVariableDetail.add("测试项目");
-        templateVariableDetail.add("闵元凯");
-        templateVariableDetail.add("2023-03-02");
-        feishuInfoService.batchSendCardMessage(feishuInfo,userIds,"项目报告审核通知",templateVariableDetail);
+        Map<String,String> templateVariableDetail=new HashMap<>();
+        templateVariableDetail.put("审核人","Yurk");
+        templateVariableDetail.put("评价","干的不错");
+        templateVariableDetail.put("日期","2023-03-08");
+        feishuInfoService.batchSendCardMessage(feishuInfo,userIds,"日报审核通过提醒(带评价)",templateVariableDetail,"http://worktime.ttkuaiban.com");
         return httpRespMsg;
     }
 

+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/FeishuInfoService.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.management.platform.util.HttpRespMsg;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -31,5 +32,7 @@ public interface FeishuInfoService extends IService<FeishuInfo> {
 
     JSONArray getUserInfoWithDepartment(FeishuInfo feishuInfo, String feishuDeptid, String pageToken);
 
-    void batchSendCardMessage(FeishuInfo feishuInfo, List<String> userIds, String sendTypeName, List<String> templateVariableDetail) throws Exception;
+    void batchSendCardTemplateMessage(FeishuInfo feishuInfo, List<String> userIds, String sendTypeName, List<String> templateVariableDetail) throws Exception;
+
+    void batchSendCardMessage(FeishuInfo feishuInfo, List<String> userIds, String sendTypeName, Map<String, String> templateVariableDetail, String pushUrl) throws Exception;
 }

+ 94 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FeishuInfoServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.gson.JsonObject;
+import com.management.platform.constant.Constant;
 import com.management.platform.entity.FeishuInfo;
 import com.management.platform.entity.FeishuSend;
 import com.management.platform.entity.User;
@@ -286,9 +287,11 @@ public class FeishuInfoServiceImpl extends ServiceImpl<FeishuInfoMapper, FeishuI
                 }
                 return result;
         }
-
+        /**
+         * 批量发送卡片模板消息 需要配置模板获取模板上线后的模板id
+        * */
         @Override
-        public void batchSendCardMessage(FeishuInfo feishuInfo,List<String> userIds,String sendTypeName,List<String> templateVariableDetail) throws Exception {
+        public void batchSendCardTemplateMessage(FeishuInfo feishuInfo,List<String> userIds,String sendTypeName,List<String> templateVariableDetail) throws Exception {
                 if(feishuInfo.getExpireTime().isBefore(LocalDateTime.now())){
                         String tenantAccessToken = getTenantAccessToken(feishuInfo.getAppId());
                         feishuInfo.setAccessToken(tenantAccessToken);
@@ -330,4 +333,93 @@ public class FeishuInfoServiceImpl extends ServiceImpl<FeishuInfoMapper, FeishuI
                 }
         }
 
+
+        /**
+         * 批量发送卡片消息
+         * */
+        @Override
+        public void batchSendCardMessage(FeishuInfo feishuInfo, List<String> userIds,String sendTypeName, Map<String,String> templateVariableDetail,String pushUrl) throws Exception {
+                if(feishuInfo.getExpireTime().isBefore(LocalDateTime.now())){
+                        String tenantAccessToken = getTenantAccessToken(feishuInfo.getAppId());
+                        feishuInfo.setAccessToken(tenantAccessToken);
+                }
+                String[] cardDetail=new String[]{};
+                switch (sendTypeName){
+                        case "项目报告审核通知":cardDetail= Constant.PROJECT_REPORT_CHECK;
+                                break;
+                        case "工作日报漏填提醒":cardDetail= Constant.WORK_REPORT_MISSING_FILLING;
+                                break;
+                        case "新任务通知":cardDetail= Constant.NEW_TASK;
+                                break;
+                        case "日报待审核提醒":cardDetail= Constant.REPORT_WAIT_CHECK;
+                                break;
+                        case "日报审核通过提醒(带评价)":cardDetail= Constant.REPORT_CHECK_PASS_WITH_APPRAISE;
+                                break;
+                        case "日报审核通过提醒":cardDetail= Constant.REPORT_CHECK_PASS;
+                                break;
+                        case "任务进展通知":cardDetail= Constant.TASK_EVOLVE;
+                                break;
+                        case "费用报销待审核提醒":cardDetail= Constant.EXPENSE_REIMBURSEMENT_WAIT_CHECK;
+                                break;
+                        case "员工请假待审核":cardDetail= Constant.LEAVE_WAIT_CHECK;
+                                break;
+                        case "请假审核通知":cardDetail= Constant.LEAVE_CHECK;
+                                break;
+                }
+                String url = BATCH_SEND_MESSAGE;
+                HttpHeaders headers = new HttpHeaders();
+                RestTemplate restTemplate = new RestTemplate();
+                MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+                headers.setContentType(type);
+                headers.add("Authorization","Bearer "+feishuInfo.getAccessToken());
+                JSONObject requestMap=new JSONObject();
+                JSONObject card=new JSONObject();
+                JSONObject config=new JSONObject();
+                JSONArray elements=new JSONArray();
+                config.put("wide_screen_mode",true);
+                card.put("config",config);
+                for (int i = 0; i < cardDetail.length; i++) {
+                        JSONObject element=new JSONObject();
+                        element.put("tag","div");
+                        JSONObject text=new JSONObject();
+                        text.put("content",cardDetail[i]+":"+templateVariableDetail.get(cardDetail[i]));
+                        text.put("tag","plain_text");
+                        element.put("text",text);
+                        elements.add(element);
+                }
+                JSONObject element1=new JSONObject();
+                element1.put("tag","action");
+                JSONArray actions=new JSONArray();
+                JSONObject jb=new JSONObject();
+                jb.put("tag","button");
+                JSONObject text=new JSONObject();
+                text.put("tag","plain_text");
+                text.put("content","点击查看");
+                jb.put("text",text);
+                jb.put("type","primary");
+                JSONObject multiUrl=new JSONObject();
+                multiUrl.put("url",pushUrl);
+                jb.put("multi_url",multiUrl);
+                actions.add(jb);
+                element1.put("actions",actions);
+                elements.add(element1);
+                card.put("elements",elements);
+                JSONObject header=new JSONObject();
+                header.put("template","blue");
+                JSONObject title=new JSONObject();
+                title.put("content","工时管家 \n"+sendTypeName);
+                title.put("tag","plain_text");
+                header.put("title",title);
+                card.put("header",header);
+                requestMap.put("card",card);
+                requestMap.put("open_ids",userIds);
+                requestMap.put("msg_type","interactive");
+                HttpEntity<JSONObject> httpEntity = new HttpEntity<>(requestMap, headers);
+                ResponseEntity<String> ResponseEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity, String.class);
+                if (ResponseEntity.getStatusCode() == HttpStatus.OK) {
+                        String resp = ResponseEntity.getBody();
+                        System.out.println(resp);
+                }
+        }
+
 }