From 1c7f8ccf40c19d4f9fddacec162e1209b711f7ce Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期一, 07 七月 2025 13:49:00 +0800
Subject: [PATCH] 设备点检业务流程增加企业微信消息推送

---
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java |  183 ++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 162 insertions(+), 21 deletions(-)

diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java
index 4eab929..f98789b 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/ThirdAppWechatEnterpriseServiceImpl.java
@@ -1,5 +1,6 @@
 package org.jeecg.modules.system.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -14,6 +15,7 @@
 import com.jeecg.qywx.api.user.vo.User;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
+import org.flowable.common.engine.impl.util.CollectionUtil;
 import org.jeecg.common.api.dto.message.MessageDTO;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.util.JwtUtil;
@@ -23,6 +25,9 @@
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.config.JeecgBaseConfig;
 import org.jeecg.config.thirdapp.ThirdAppConfig;
+import org.jeecg.modules.qywx.message.MessageAPI;
+import org.jeecg.modules.qywx.message.vo.TemplateCard;
+import org.jeecg.modules.qywx.message.vo.TemplateCardEntity;
 import org.jeecg.modules.system.entity.*;
 import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper;
 import org.jeecg.modules.system.mapper.SysUserMapper;
@@ -31,6 +36,7 @@
 import org.jeecg.modules.system.service.*;
 import org.jeecg.modules.system.vo.thirdapp.JwDepartmentTreeVo;
 import org.jeecg.modules.system.vo.thirdapp.SyncInfoVo;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.dao.DuplicateKeyException;
@@ -39,6 +45,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.UUID;
 import java.util.stream.Collectors;
 
 /**
@@ -383,7 +390,7 @@
             return syncInfo;
         }
         // 鑾峰彇浼佷笟寰俊鎵�鏈夌殑鐢ㄦ埛
-        List<User> qwUsersList = JwUserAPI.getDetailUsersByDepartid("1", null, null, accessToken);
+        List<User> qwUsersList = JwUserAPI.getDetailUsersByDepartid("1433010418", null, null, accessToken);
         if (qwUsersList == null) {
             syncInfo.addFailInfo("浼佷笟寰俊鐢ㄦ埛鍒楄〃鏌ヨ澶辫触锛�");
             return syncInfo;
@@ -398,10 +405,10 @@
              * 2. 鏈湴琛ㄩ噷娌℃湁锛屽氨鍏堢敤鎵嬫満鍙峰垽鏂紝涓嶉�氳繃鍐嶇敤username鍒ゆ柇銆�
              */
             SysThirdAccount sysThirdAccount = sysThirdAccountService.getOneByThirdUserId(qwUser.getUserid(), THIRD_TYPE);
-            List<SysUser> collect = sysUsersList.stream().filter(user -> (qwUser.getMobile().equals(user.getPhone()) || qwUser.getUserid().equals(user.getUsername()))
+            List<SysUser> collect = sysUsersList.stream().filter(user -> qwUser.getUserid().equals(user.getUsername())
                                                                 ).collect(Collectors.toList());
 
-            if (collect != null && collect.size() > 0) {
+            if (CollectionUtil.isNotEmpty(collect)) {
                 SysUser sysUserTemp = collect.get(0);
                 // 寰幆鍒版璇存槑鐢ㄦ埛鍖归厤鎴愬姛锛岃繘琛屾洿鏂版搷浣�
                 SysUser updateSysUser = this.qwUserToSysUser(qwUser, sysUserTemp);
@@ -413,7 +420,7 @@
                     this.syncUserCollectErrInfo(e, qwUser, syncInfo);
                 }
 
-                this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser.getUserid());
+                this.thirdAccountSaveOrUpdate(sysThirdAccount, updateSysUser.getId(), qwUser);
                 // 鏇存柊瀹屾垚锛岀洿鎺ヨ烦鍒颁笅涓�娆″閮ㄥ惊鐜户缁�
             }else{
                 // 娌″尮閰嶅埌鐢ㄦ埛鍒欒蛋鏂板閫昏緫
@@ -425,7 +432,7 @@
                 } catch (Exception e) {
                     this.syncUserCollectErrInfo(e, qwUser, syncInfo);
                 }
-                this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser.getUserid());
+                this.thirdAccountSaveOrUpdate(sysThirdAccount, newSysUser.getId(), qwUser);
             }
         }
         return syncInfo;
@@ -447,6 +454,20 @@
             sysThirdAccount.setThirdType(THIRD_TYPE);
         }
         sysThirdAccount.setThirdUserId(qwUserId);
+        sysThirdAccountService.saveOrUpdate(sysThirdAccount);
+    }
+
+    private void thirdAccountSaveOrUpdate(SysThirdAccount sysThirdAccount, String sysUserId, User qwUser) {
+        if (sysThirdAccount == null) {
+            sysThirdAccount = new SysThirdAccount();
+            sysThirdAccount.setThirdUserId(qwUser.getUserid());
+            sysThirdAccount.setRealname(qwUser.getName());
+            sysThirdAccount.setThirdUserUuid(qwUser.getUserid());
+            sysThirdAccount.setStatus(1);
+            sysThirdAccount.setDelFlag(0);
+            sysThirdAccount.setThirdType(THIRD_TYPE);
+        }
+        sysThirdAccount.setSysUserId(sysUserId);
         sysThirdAccountService.saveOrUpdate(sysThirdAccount);
     }
 
@@ -643,22 +664,23 @@
         if (oConvertUtils.isEmpty(sysUser.getWorkNo())) {
             sysUser.setWorkNo(qwUser.getUserid());
         }
-        try {
-            sysUser.setSex(Integer.parseInt(qwUser.getGender()));
-        } catch (NumberFormatException ignored) {
-        }
+        //浼佷笟寰俊鎺ュ彛鏇存柊鍚庯紝涓嶅湪杩斿洖 鎬у埆銆侀偖绠便�佹墜鏈哄彿鐮� 瀛楁
+        //try {
+        //    sysUser.setSex(Integer.parseInt(qwUser.getGender()));
+        //} catch (NumberFormatException ignored) {
+        //}
         // 鍥犱负鍞竴閿害鏉熺殑鍘熷洜锛屽鏋滃師鏁版嵁鍜屾棫鏁版嵁鐩稿悓锛屽氨涓嶆洿鏂�
-        if (oConvertUtils.isNotEmpty(qwUser.getEmail()) && !qwUser.getEmail().equals(sysUser.getEmail())) {
-            sysUser.setEmail(qwUser.getEmail());
-        } else {
-            sysUser.setEmail(null);
-        }
+        //if (oConvertUtils.isNotEmpty(qwUser.getEmail()) && !qwUser.getEmail().equals(sysUser.getEmail())) {
+        //    sysUser.setEmail(qwUser.getEmail());
+        //} else {
+        //    sysUser.setEmail(null);
+        //}
         // 鍥犱负鍞竴閿害鏉熺殑鍘熷洜锛屽鏋滃師鏁版嵁鍜屾棫鏁版嵁鐩稿悓锛屽氨涓嶆洿鏂�
-        if (oConvertUtils.isNotEmpty(qwUser.getMobile()) && !qwUser.getMobile().equals(sysUser.getPhone())) {
-            sysUser.setPhone(qwUser.getMobile());
-        } else {
-            sysUser.setPhone(null);
-        }
+        //if (oConvertUtils.isNotEmpty(qwUser.getMobile()) && !qwUser.getMobile().equals(sysUser.getPhone())) {
+        //    sysUser.setPhone(qwUser.getMobile());
+        //} else {
+        //    sysUser.setPhone(null);
+        //}
 
         // 鍚敤/绂佺敤鎴愬憳锛堢姸鎬侊級锛岃鍒欎笉鍚岋紝闇�瑕佽浆鎹�
         // 浼佷笟寰俊瑙勫垯锛�1琛ㄧず鍚敤鎴愬憳锛�0琛ㄧず绂佺敤鎴愬憳
@@ -822,7 +844,7 @@
             String userId = announcement.getUserIds();
             String[] userIds = null;
             if(oConvertUtils.isNotEmpty(userId)){
-                userIds = userId.substring(0, (userId.length() - 1)).split(",");
+                userIds = userId.substring(0, userId.length()).split(",");
             }else{
                 LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<>();
                 queryWrapper.eq(SysAnnouncementSend::getAnntId, announcement.getId());
@@ -857,7 +879,126 @@
         return JwMessageAPI.sendTextCardMessage(textCard, accessToken);
     }
 
-    private String getTouser(String origin, boolean toAll) {
+    /**
+     * 鍙戦�佹ā鏉垮崱鐗囨秷鎭紙涓氬姟娴佺▼璋冪敤姝ゆ柟娉曪級
+     * @param templateCard
+     * @param verifyConfig
+     * @return
+     */
+    public JSONObject sendTemplateCardMsg(TemplateCard templateCard, boolean verifyConfig) {
+        if (verifyConfig && !thirdAppConfig.isWechatEnterpriseEnabled()) {
+            return null;
+        }
+        String accessToken = this.getAppAccessToken();
+        if (accessToken == null) {
+            return null;
+        }
+        templateCard.setAgentid(thirdAppConfig.getWechatEnterprise().getAgentIdInt());
+        return MessageAPI.sendTemplateCardMessage(templateCard, accessToken);
+    }
+
+    /**
+     * 鍙戦�佹ā鏉垮崱鐗囨秷鎭紙娑堟伅娴嬭瘯璋冪敤姝ゆ柟娉曪級
+     *
+     * @return
+     */
+    public JSONObject sendTemplateCardMsg(SysAnnouncement announcement, boolean verifyConfig) {
+        if (verifyConfig && !thirdAppConfig.isWechatEnterpriseEnabled()) {
+            return null;
+        }
+        String accessToken = this.getAppAccessToken();
+        if (accessToken == null) {
+            return null;
+        }
+
+        TemplateCard templateCard = new TemplateCard();
+        templateCard.setAgentid(thirdAppConfig.getWechatEnterprise().getAgentIdInt());
+        boolean isToAll = CommonConstant.MSG_TYPE_ALL.equals(announcement.getMsgType());
+        String usernameString = "";
+        if (!isToAll) {
+            // 灏唘serId杞负username
+            String userId = announcement.getUserIds();
+            String[] userIds = null;
+            if (oConvertUtils.isNotEmpty(userId)) {
+                userIds = userId.substring(0, userId.length()).split(",");
+            } else {
+                LambdaQueryWrapper<SysAnnouncementSend> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(SysAnnouncementSend::getAnntId, announcement.getId());
+                SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendMapper.selectOne(queryWrapper);
+                userIds = new String[]{sysAnnouncementSend.getUserId()};
+            }
+
+            LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.in(SysUser::getId, userIds);
+            List<SysUser> userList = userMapper.selectList(queryWrapper);
+            List<String> usernameList = userList.stream().map(SysUser::getUsername).collect(Collectors.toList());
+            usernameString = String.join(",", usernameList);
+        }
+        templateCard.setTouser(this.getTouser(usernameString, isToAll));
+
+        TemplateCardEntity templateCardEntity = new TemplateCardEntity();
+        templateCard.setTemplate_card(templateCardEntity);
+        templateCardEntity.setTask_id(UUID.randomUUID().toString().replaceAll("-", ""));
+        TemplateCardEntity.Source source = new TemplateCardEntity.Source();
+        source.setIcon_url("https://www.jeecg.org/logo.png");
+        source.setDesc("璁惧绠$悊娴嬭瘯");
+        templateCardEntity.setSource(source);
+        TemplateCardEntity.MainTitle mainTitle = new TemplateCardEntity.MainTitle();
+        mainTitle.setTitle("璁惧鍛ㄤ繚");
+        //mainTitle.setDesc("璁惧鍛ㄤ繚淇℃伅");
+        templateCardEntity.setMain_title(mainTitle);
+        templateCardEntity.setSub_title_text("璁惧鍛ㄤ繚娴佺▼璇︽儏");
+        List<TemplateCardEntity.HorizontalContent> horizontalContentList = getHorizontalContents();
+        templateCardEntity.setHorizontal_content_list(horizontalContentList);
+        TemplateCardEntity.CardAction cardAction = new TemplateCardEntity.CardAction();
+        cardAction.setType(1);
+        cardAction.setUrl("https://houjie.xalxzn.com:8866/h5");
+        templateCardEntity.setCard_action(cardAction);
+        TemplateCardEntity.ActionMenu actionMenu = new TemplateCardEntity.ActionMenu();
+        actionMenu.setDesc("鏇村");
+        actionMenu.setAction_list(cn.hutool.core.collection.CollectionUtil
+                .newArrayList(new TemplateCardEntity.ActionMenu.ActionList("鎺ユ敹鎺ㄩ��", "A"),
+                        new TemplateCardEntity.ActionMenu.ActionList("涓嶅啀鎺ㄩ��", "B")));
+        templateCardEntity.setAction_menu(actionMenu);
+        //templateCardEntity.setJump_list(cn.hutool.core.collection.CollectionUtil
+        //        .newArrayList(new TemplateCardEntity.Jump(1, "浼佷笟寰俊瀹樼綉", "https://work.weixin.qq.com")));
+        //TemplateCardEntity.CardImage cardImage = new TemplateCardEntity.CardImage();
+        //cardImage.setUrl("https://www.jeecg.org/logo.png");
+        //templateCardEntity.setCard_image(cardImage);
+        return MessageAPI.sendTemplateCardMessage(templateCard, accessToken);
+    }
+
+    @NotNull
+    private static List<TemplateCardEntity.HorizontalContent> getHorizontalContents() {
+        List<TemplateCardEntity.HorizontalContent> horizontalContentList = new ArrayList<>();
+        TemplateCardEntity.HorizontalContent content1 = new TemplateCardEntity.HorizontalContent();
+        content1.setKeyname("娴佺▼鎻忚堪");
+        content1.setValue("宸ュ崟鍙�:WMCR2025050011;璁惧缂栧彿:031-41杩涜璁惧鍛ㄤ繚");
+        horizontalContentList.add(content1);
+        TemplateCardEntity.HorizontalContent content2 = new TemplateCardEntity.HorizontalContent();
+        content2.setKeyname("涔嬪墠澶勭悊浜�");
+        content2.setValue("绠$悊鍛�");
+        horizontalContentList.add(content2);
+        TemplateCardEntity.HorizontalContent content3 = new TemplateCardEntity.HorizontalContent();
+        content3.setKeyname("鍓嶉┍鑺傜偣");
+        content3.setValue("鍛ㄤ繚棰嗗彇");
+        horizontalContentList.add(content3);
+        TemplateCardEntity.HorizontalContent content4 = new TemplateCardEntity.HorizontalContent();
+        content4.setKeyname("褰撳墠鑺傜偣");
+        content4.setValue("鍛ㄤ繚鎵ц");
+        horizontalContentList.add(content4);
+        TemplateCardEntity.HorizontalContent content5 = new TemplateCardEntity.HorizontalContent();
+        content5.setKeyname("宸ュ崟鍙�");
+        content5.setValue("WMCR2025050011");
+        horizontalContentList.add(content5);
+        TemplateCardEntity.HorizontalContent content6 = new TemplateCardEntity.HorizontalContent();
+        content6.setKeyname("璁惧缂栧彿");
+        content6.setValue("031-41");
+        horizontalContentList.add(content6);
+        return horizontalContentList;
+    }
+
+    public String getTouser(String origin, boolean toAll) {
         if (toAll) {
             return "@all";
         } else {

--
Gitblit v1.9.3