From 4b2b0ec05306c285cff9f95064cf70b5e6e37516 Mon Sep 17 00:00:00 2001
From: sgj <1442489573@qq.com>
Date: 星期三, 15 四月 2026 11:14:52 +0800
Subject: [PATCH] 添加微信消息推送工具类
---
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/WxUtil.java | 181 ++++++++++++++++++++++++++++++
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/Template.java | 41 ++++++
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/TemplateParam.java | 24 ++++
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapReplyService.java | 56 +++++++++
4 files changed, 301 insertions(+), 1 deletions(-)
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/Template.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/Template.java
new file mode 100644
index 0000000..61731c5
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/Template.java
@@ -0,0 +1,41 @@
+package com.fzzy.igds.data;
+
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * 妯℃澘娑堟伅绫�
+ *
+ * @author chen
+ */
+@Data
+public class Template {
+
+ /**
+ * 鎺ユ敹鑰卭penid
+ */
+ private String touser;
+
+ /**
+ * 妯℃澘id
+ */
+ private String template_id;
+
+ /**
+ * 璇︽儏璺緞
+ */
+ private String url;
+
+ /**
+ * 鏍囬棰滆壊
+ */
+ private String topcolor;
+
+ /**
+ * 鏁版嵁
+ */
+ private Map<String, TemplateParam> data;
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/TemplateParam.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/TemplateParam.java
new file mode 100644
index 0000000..cf8d5b6
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/data/TemplateParam.java
@@ -0,0 +1,24 @@
+package com.fzzy.igds.data;
+
+
+import lombok.Data;
+
+/**
+ * 妯℃澘娑堟伅鏁版嵁绫�
+ * @author chen
+ */
+@Data
+public class TemplateParam {
+
+ private String value;
+
+ private String color;
+
+ public TemplateParam() {
+ }
+
+ public TemplateParam(String value, String color) {
+ this.value = value;
+ this.color = color;
+ }
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapReplyService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapReplyService.java
index bea91cd..7d134f6 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapReplyService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapReplyService.java
@@ -8,6 +8,7 @@
import com.fzzy.igds.domain.SnapReply;
import com.fzzy.igds.mapper.SnapReplyMapper;
import com.fzzy.igds.utils.ContextUtil;
+import com.fzzy.igds.utils.WxUtil;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -22,6 +23,8 @@
@Resource
private SnapReplyMapper snapReplyMapper;
+ @Resource
+ private WxUtil weChatUtil;
/**
@@ -53,7 +56,7 @@
}
public void listPageByListDept(Page<SnapReply> page, IgdsBaseParam param, List<String> listDept) {
- if( listDept == null || listDept.isEmpty()){
+ if (listDept == null || listDept.isEmpty()) {
return;
}
@@ -166,4 +169,55 @@
return snapReplyMapper.deleteById(snapReply) > 0 ? BaseResp.success() : BaseResp.error("鍒犻櫎澶辫触");
}
+
+
+ /**
+ * 鍙戦�佽鍛婂埌寰俊
+ * @param deptId
+ */
+ public BaseResp sendNotice(String deptId){
+ //todo 鏈畬鎴�
+ if(StringUtils.isEmpty(deptId)){
+ return BaseResp.error("璇烽�夋嫨搴撳尯");
+ }
+
+
+// //闇�瑕佹帹閫佺殑鐢ㄦ埛
+// List<SysUser> users= new ArrayList<>();
+// String res = "";
+// //閬嶅巻鐢ㄦ埛锛屽彂閫佸井淇℃秷鎭�
+// for (SysUser user : users) {
+// if(StringUtils.isNotEmpty(user.getOpenId())){
+// boolean b = weChatUtil.sendMessage(
+// user.getOpenId(),
+// snapReply.getId(),
+// snapReply.getCompanyId(),
+// "搴撳尯鍛婅鎵瑰娴嬭瘯鎺ㄩ��",
+// snapReply.getDeptId(),
+// snapReply.getContent(),
+// DateFormatUtils.format(snapReply.getCreateTime(),"yyyy-MM-dd HH:mm:ss"),
+// "",
+// "",
+// user.getUserName());
+// if(!b){
+// res += user.getUserName() + "鐢ㄦ埛寰俊鎺ㄩ�佸け璐�,";
+// return BaseResp.error(res);
+//
+// }
+// }else{
+// log.debug("------鐢ㄦ埛openid涓嶅瓨鍦紝涓嶈繘琛屾帹閫�------");
+// res += user.getUserName() + "鐢ㄦ埛鏈粦瀹�,";
+// return BaseResp.error(res);
+//
+// }
+// }
+// if(StringUtils.isEmpty(res)){
+// return BaseResp.success("寰俊:鎺ㄩ�佹垚鍔�;");
+// }else{
+// return BaseResp.error("寰俊:"+res+";");
+// }
+ return BaseResp.success("寰俊:鎺ㄩ�佹垚鍔�;");
+
+ }
+
}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/WxUtil.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/WxUtil.java
new file mode 100644
index 0000000..2dbc4f5
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/WxUtil.java
@@ -0,0 +1,181 @@
+package com.fzzy.igds.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fzzy.igds.data.ConfigData;
+import com.fzzy.igds.data.Template;
+import com.fzzy.igds.data.TemplateParam;
+import com.ruoyi.common.core.redis.RedisCache;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+
+@Slf4j
+@Component
+public class WxUtil {
+
+ /**
+ * 鍏紬鍙疯皟鐢ㄥ叏灞�鎺ュ彛鐨勬爣璇咥CCESS_TOKEN缂撳瓨key
+ */
+ public static final String ACCESS_TOKEN = "ACCESS_TOKEN";
+
+ /**
+ * 妯℃澘娑堟伅鍙戦�乽rl
+ */
+ public static final String TEMPLATE_URL =
+ "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
+
+ /**
+ * 鑾峰彇access_token鐨勬帴鍙e湴鍧�(GET , 2000娆�/澶�)
+ */
+ public static final String ACCESS_TOKEN_URL =
+ "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ @Autowired
+ private ConfigData configData;
+
+ @Resource
+ private RedisCache redisCache;
+
+
+
+ /**
+ * 鍙戦�佹ā鏉挎秷鎭�
+ * @param openid 鐢ㄦ埛openid
+ * @param warnId 璀﹀憡id
+ * @param companyId 缁勭粐id
+ * @param title 璀﹀憡鏍囬
+ * @param keyword1 璀﹀憡瀵硅薄
+ * @param keyword2 璀﹀憡绫诲瀷
+ * @param keyword3 璀﹀憡鏃堕棿
+ * @param keyword4 璀﹀憡鍐呭
+ * @param remark 璀﹀憡璇︽儏
+ * @return
+ */
+ public boolean sendMessage(String openid, String warnId, String companyId, String title,
+ String keyword1, String keyword2, String keyword3,
+ String keyword4,String remark, String userName){
+
+ Template tem = new Template();
+ tem.setTemplate_id(configData.getWxTempId());
+ tem.setTopcolor("#FF0000");
+
+ tem.setTouser(openid);
+ tem.setUrl(configData.getWxServeUrl() + "/wx/view-gateway?state=warn-detail1&id=" + warnId + "&companyId=" + companyId + "&userName=" + userName);
+
+ Map<String, TemplateParam> params = new HashMap<>();
+ params.put("first",new TemplateParam(title,"#173177"));
+ //璀﹀憡瀵硅薄
+ params.put("keyword1",new TemplateParam( keyword1, "#173177"));
+ //璀﹀憡绫诲瀷
+ params.put("keyword2",new TemplateParam( keyword2, "#173177"));
+ //璀﹀憡鏃堕棿
+ params.put("keyword3",new TemplateParam( keyword3, "#173177"));
+ //璀﹀憡鍐呭
+ params.put("keyword4",new TemplateParam( keyword4, "#173177"));
+ params.put("remark",new TemplateParam( remark, "#173177"));
+
+ tem.setData(params);
+ log.debug("------寰俊閫氱煡寮�濮嬫帹閫�------");
+ //鎺ㄩ�佹秷鎭�
+ return sendTemplateMsg(tem);
+ }
+
+
+
+ /**
+ * 鎺ㄩ�佹ā鏉挎秷鎭�
+ *
+ * @param template
+ * @return
+ */
+ public boolean sendTemplateMsg(Template template) {
+ //鑾峰彇AccessToken
+ String accessToken = getAccessToken();
+ if(StringUtils.isEmpty(accessToken)){
+ log.debug("------鑾峰彇AccessToken澶辫触------");
+ return false;
+ }
+
+ boolean flag = false;
+ String url = WxUtil.TEMPLATE_URL.replace("ACCESS_TOKEN",accessToken);
+ String str = JSONObject.toJSONString(template);
+ JSONObject jsonObject = doPost(url, str);
+ if (jsonObject != null) {
+ int errorCode = jsonObject.getIntValue("errcode");
+ String errorMessage = jsonObject.getString("errmsg");
+ if (errorCode == 0) {
+ log.debug("鎺ㄩ�佸井淇℃秷鎭垚鍔燂細" + str);
+ flag = true;
+ } else {
+ log.info("妯℃澘娑堟伅鍙戦�佸け璐},{}", errorCode, errorMessage);
+ log.error("ACCESS_TOKEN:" + accessToken);
+ flag = false;
+ }
+ }
+
+ log.debug("鎺ㄩ�佸井淇℃秷鎭け璐ワ紒" );
+ return flag;
+ }
+
+ /**
+ * 鑾峰彇鍏ㄥ眬AccessToken
+ *
+ * @return
+ */
+ public String getAccessToken() {
+
+ //鍏堜粠缂撳瓨鑾峰彇锛岃嫢涓嶅瓨鍦ㄥ垯閫氳繃鎺ュ彛鑾峰彇
+ String accessToken = (String)redisCache.getCacheObject(WxUtil.ACCESS_TOKEN);
+ if(StringUtils.isNotEmpty(accessToken)){
+ return accessToken;
+ }
+
+ //璇锋眰鑾峰彇AccessToken鐨勫井淇℃帴鍙�
+ String resp = doGet(WxUtil.ACCESS_TOKEN_URL.replace("APPID",
+ configData.getWxAppId()).replace("APPSECRET", configData.getWxSecret()));
+ JSONObject json = JSONObject.parseObject(resp);
+ if (json != null) {
+ //鑾峰彇accessToken
+ accessToken = json.getString("access_token");
+ //鑾峰彇accessToken鏈夋晥鏃堕暱锛屼负7200s
+ int expiresIn = json.getIntValue("expires_in");
+ //灏哸ccessToken瀛樺叆缂撳瓨锛屾湁鏁堟椂闀夸负expiresIn锛屽嵆2灏忔椂
+ redisCache.setCacheObject(WxUtil.ACCESS_TOKEN, accessToken,expiresIn, TimeUnit.SECONDS);
+ return accessToken;
+ }
+ log.error("鑾峰彇access_token澶辫触");
+ return null;
+ }
+ /**
+ * post璇锋眰
+ * @param url
+ * @param data
+ * @return
+ */
+ public JSONObject doPost(String url, String data){
+ ResponseEntity<JSONObject> jsonObject = restTemplate.postForEntity(url, data, JSONObject.class);
+ return jsonObject.getBody();
+ }
+
+ /**
+ * get璇锋眰
+ *
+ * @param url
+ * @return
+ */
+ public String doGet(String url) {
+ return restTemplate.getForObject(url, String.class);
+ }
+}
--
Gitblit v1.9.3