From cfe0b79fbea0fb1d7a5a796e71ada7d3b7812046 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期一, 15 十二月 2025 22:31:33 +0800
Subject: [PATCH] feat: 企业微信发送微信小程序cetd

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java |  100 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 100 insertions(+), 0 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java
index 8615f04..6d511f2 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/QyWechatServiceImpl.java
@@ -65,6 +65,30 @@
         }
     }
 
+    @Override
+    public boolean sendNotifyMessage(Long userId, String title, String content, String appId, String businessUrl) {
+        try {
+            // 妫�鏌ユ湇鍔℃槸鍚﹀惎鐢�
+            if (!isEnabled()) {
+                log.info("浼佷笟寰俊鏈嶅姟鏈惎鐢紝璺宠繃娑堟伅鍙戦��");
+                return false;
+            }
+
+            // 鑾峰彇鐢ㄦ埛鐨勪紒涓氬井淇D
+            String qyUserId = getQyUserIdByUserId(userId);
+            if (StringUtils.isEmpty(qyUserId)) {
+                log.warn("鐢ㄦ埛{}鏈粦瀹氫紒涓氬井淇D锛屾棤娉曞彂閫佹秷鎭�", userId);
+                return false;
+            }
+
+            // 鍙戦�佹枃鏈秷鎭�
+            return sendTextMessage(qyUserId, title, content, appId, businessUrl);
+        } catch (Exception e) {
+            log.error("浼佷笟寰俊娑堟伅鍙戦�佸紓甯革紝userId={}", userId, e);
+            return false;
+        }
+    }
+
     /**
      * 鍙戦�佷紒涓氬井淇℃枃鏈秷鎭�
      */
@@ -101,6 +125,7 @@
             article.setTitle(title);
             article.setDescription(content);
             article.setUrl(notifyUrl);
+
             // 璁剧疆榛樿鍥剧墖URL锛屾偍鍙互鏍规嵁闇�瑕佷慨鏀�
             
 
@@ -141,6 +166,81 @@
         }
     }
 
+    @Override
+    public boolean sendTextMessage(String qyUserId, String title, String content, String appId, String businessUrl) {
+        try {
+            // 妫�鏌ユ湇鍔℃槸鍚﹀惎鐢�
+            if (!isEnabled()) {
+                log.info("浼佷笟寰俊鏈嶅姟鏈惎鐢紝璺宠繃娑堟伅鍙戦��");
+                return false;
+            }
+
+            // 鑾峰彇浼佷笟寰俊閰嶇疆
+            String corpId = configService.selectConfigByKey("qy_wechat.corp_id");
+            String corpSecret = configService.selectConfigByKey("qy_wechat.miniprogram_secret");
+
+            if (StringUtils.isEmpty(corpId) || StringUtils.isEmpty(corpSecret)) {
+                log.error("浼佷笟寰俊閰嶇疆涓嶅畬鏁达紝缂哄皯corpId鎴朿orpSecret");
+                return false;
+            }
+
+            // 鑾峰彇AccessToken
+            String accessToken = qyWechatAccessTokenService.getQyMiniAccessToken(corpId, corpSecret);
+            if (StringUtils.isEmpty(accessToken)) {
+                log.error("鑾峰彇浼佷笟寰俊AccessToken澶辫触");
+                return false;
+            }
+
+            // 鏋勯�犺姹俇RL
+            String url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + accessToken;
+
+            // 鏋勯�犳枃绔犲璞�
+            QyWechatArticle article = new QyWechatArticle();
+            article.setTitle(title);
+            article.setDescription(content);
+            article.setAppid(appId);
+            article.setPagepath(businessUrl);
+
+            // 璁剧疆榛樿鍥剧墖URL锛屾偍鍙互鏍规嵁闇�瑕佷慨鏀�
+
+
+            // 鏋勯�犺姹傚弬鏁�
+            Map<String, Object> params = new HashMap<>();
+            params.put("touser", qyUserId);
+            params.put("msgtype", "news");
+            params.put("agentid", Integer.parseInt(configService.selectConfigByKey("qywechat.miniprogram.agentid")));
+
+            // 鏋勯�犳枃绔犲垪琛�
+            List<QyWechatArticle> articles = new ArrayList<>();
+            articles.add(article);
+            params.put("news", Collections.singletonMap("articles", articles));
+
+            // 鍙戦�丠TTP POST璇锋眰
+            String response = sendHttpPostRequest(url, params);
+
+            if (StringUtils.isEmpty(response)) {
+                log.error("鍙戦�佷紒涓氬井淇℃秷鎭け璐ワ紝鍝嶅簲涓虹┖");
+                return false;
+            }
+
+            // 瑙f瀽鍝嶅簲缁撴灉
+            QyWechatResponse result = parseResponse(response);
+
+            if (result != null && result.getErrcode() == 0) {
+                log.info("浼佷笟寰俊娑堟伅鍙戦�佹垚鍔燂紝鐢ㄦ埛ID: {}", qyUserId);
+                return true;
+            } else {
+                log.error("浼佷笟寰俊娑堟伅鍙戦�佸け璐ワ紝閿欒鐮�: {}, 閿欒淇℃伅: {}",
+                        result != null ? result.getErrcode() : "unknown",
+                        result != null ? result.getErrmsg() : response);
+                return false;
+            }
+        } catch (Exception e) {
+            log.error("浼佷笟寰俊鏂囨湰娑堟伅鍙戦�佸紓甯革紝qyUserId={}", qyUserId, e);
+            return false;
+        }
+    }
+
     /**
      * 鑾峰彇鐢ㄦ埛鐨勪紒涓氬井淇D
      */

--
Gitblit v1.9.1