From 2d213e2df5c896625395f65d50c8abb0bc78e36a Mon Sep 17 00:00:00 2001 From: liusheng <337615773@qq.com> Date: 星期一, 22 五月 2023 10:43:00 +0800 Subject: [PATCH] 微信公众号、钉钉代码提交 --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatController.java | 110 +++++++++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatService.java | 87 +++++++ ruoyi-admin/pom.xml | 13 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkController.java | 131 ++++++++++ ruoyi-admin/src/main/resources/application-druid.yml | 112 ++++---- ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkService.java | 127 ++++++++++ smartor/src/main/java/com/smartor/domain/WeChatSendVo.java | 33 ++ ruoyi-common/pom.xml | 43 ++ ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SendMessageIn.java | 22 + 9 files changed, 615 insertions(+), 63 deletions(-) diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 0a4e3e1..9d19762 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -68,6 +68,19 @@ <version>3.8.5</version> <scope>compile</scope> </dependency> + <!-- https://mvnrepository.com/artifact/net.glxn.qrgen/javase --> + <dependency> + <groupId>net.glxn.qrgen</groupId> + <artifactId>javase</artifactId> + <version>2.0</version> + </dependency> + <!-- https://mvnrepository.com/artifact/net.glxn.qrgen/core --> + <dependency> + <groupId>net.glxn.qrgen</groupId> + <artifactId>core</artifactId> + <version>2.0</version> + </dependency> + </dependencies> <build> diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkController.java new file mode 100644 index 0000000..2b5f8a3 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkController.java @@ -0,0 +1,131 @@ +package com.ruoyi.web.controller.smartor; + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.OapiGettokenRequest; +import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request; +import com.dingtalk.api.request.OapiUserListidRequest; +import com.dingtalk.api.response.OapiGettokenResponse; +import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response; +import com.dingtalk.api.response.OapiUserListidResponse; +import com.ruoyi.common.core.controller.BaseController; +import com.taobao.api.ApiException; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * 寰俊鎺ュ彛 + * + * @author liusheng + * @date 2023-05-15 + */ +@RestController +@RequestMapping("/smartor/dingtalk") +public class DingTalkController extends BaseController { + + @Value("appid") + private String dingAppid = "dingn8iip5ubj7clrrsv"; + + @Value("appSecret") + private String dingAppSecret = "qlEK8D3oOVwGPOTiBQIBYTqQVlAfy9S_qQizEQFjJdSScwemWFryg4gbneu-NqWD"; + + /** + * 鍙戦�侀拤閽夋秷鎭� + * + * @param mobile + * @param park + * @param alarmCode + * @param severityDesc + * @throws ApiException + */ + public void sendNotification(String mobile, String park, String alarmCode, String severityDesc) throws ApiException { + // Log.info("鍙戦�侀拤閽夐�氱煡"); + String accessToken = getAccessToken(); + if (StringUtils.isBlank(mobile)) { + return; + } + DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid"); + + OapiUserListidRequest request2 = new OapiUserListidRequest(); + request2.setDeptId(675909059L); // 璁剧疆瑕佽幏鍙栫殑閮ㄩ棬 ID锛岃繖閲屼互鏍归儴闂ㄤ负渚� + // 璁剧疆閮ㄩ棬 ID锛屽鏋滆幏鍙栨墍鏈夊憳宸ユ墜鏈哄彿锛屽彲浠ヨ缃负鏍归儴闂ㄧ殑 ID + OapiUserListidResponse response2 = client3.execute(request2, accessToken); + String body = response2.getBody(); + // 瑙f瀽涓篔SONObject + JSONObject jsonObject = JSONObject.parseObject(body); + // 鎻愬彇鍑篔SONArray + JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("result").getJSONArray("userid_list")); + // 灏咼SONArray杞负List鍒楄〃 + String str = JSONObject.toJSONString(jsonArray); + List<String> list = JSONObject.parseObject(str, List.class); + + //userid鏁扮粍 + for (String urid : list) { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); + OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); + request.setUseridList(urid); + request.setAgentId(1779052814L); + request.setToAllUser(false); + OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); + msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA()); + msg.getOa().setMessageUrl("www.baidu.com"); + msg.getOa().setPcMessageUrl("www.baidu.com"); + msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head()); + msg.getOa().getHead().setText("text"); + msg.getOa().getHead().setBgcolor("FFBBBBBB"); + msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body()); + msg.getOa().getBody().setContent("msg淇℃伅"); + OapiMessageCorpconversationAsyncsendV2Request.Form formPark = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + formPark.setKey(null); + formPark.setValue(null); + OapiMessageCorpconversationAsyncsendV2Request.Form formAlarmCode = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + formAlarmCode.setKey("宸ュ伐宸 "); + formAlarmCode.setValue(alarmCode); + OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + formSeverityDesc.setKey("鏋楄瑕佽瑕�"); + formSeverityDesc.setValue(severityDesc); + OapiMessageCorpconversationAsyncsendV2Request.Form formConner = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + formConner.setKey("鍘呭湪鍦�"); + ArrayList<OapiMessageCorpconversationAsyncsendV2Request.Form> objects = new ArrayList<>(); + objects.add(formPark); + objects.add(formSeverityDesc); + objects.add(formAlarmCode); + objects.add(formConner); + msg.getOa().getBody().setForm(objects); + msg.setMsgtype("oa"); + request.setMsg(msg); + // log.info("鑾峰彇鍙戦�侀�氱煡娑堟伅浣撳拰鑾峰彇鍙戦�侀�氱煡浜哄畬鎴�"); + OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request, accessToken); + // log.info("鍙戦�佹秷鎭槸鍚︽垚鍔�"+response.isSuccess()); + System.out.println(response.isSuccess()); + // log.info("娑堟伅浠诲姟ID"+response.getTaskId()); + System.out.println(response.getTaskId()); + } + } + + + /** + * 鑾峰彇 access_token + */ + private String getAccessToken() throws ApiException { + DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); + OapiGettokenRequest request = new OapiGettokenRequest(); + //Appkey + request.setAppkey(dingAppid); + //Appsecret + request.setAppsecret(dingAppSecret); + /*璇锋眰鏂瑰紡*/ + request.setHttpMethod("GET"); + OapiGettokenResponse response = client.execute(request); + return response.getAccessToken(); + } + +} + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkService.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkService.java new file mode 100644 index 0000000..d491ece --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkService.java @@ -0,0 +1,127 @@ +package com.ruoyi.web.controller.smartor; + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.OapiGettokenRequest; +import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request; +import com.dingtalk.api.request.OapiUserGetByMobileRequest; +import com.dingtalk.api.request.OapiUserListidRequest; +import com.dingtalk.api.response.*; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.taobao.api.ApiException; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class DingTalkService { + + /** + * 鑾峰彇AccessToken + * + * @return AccessToken + * @throws ApiException + */ + private static String getAccessToken() throws ApiException { + DefaultDingTalkClient client = + new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); + OapiGettokenRequest request = new OapiGettokenRequest(); + //Appkey + request.setAppkey("dingn8iip5ubj7clrrsv"); + //Appsecret + request.setAppsecret("qlEK8D3oOVwGPOTiBQIBYTqQVlAfy9S_qQizEQFjJdSScwemWFryg4gbneu-NqWD"); + /*璇锋眰鏂瑰紡*/ + request.setHttpMethod("GET"); + OapiGettokenResponse response = client.execute(request); + return response.getAccessToken(); + } + + public static void sendNotification(String mobile, String park, String alarmCode, String severityDesc) throws ApiException { + // Log.info("鍙戦�侀拤閽夐�氱煡"); + String accessToken = getAccessToken(); + if (StringUtils.isBlank(mobile)) { + return; + } + // DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid"); + DingTalkClient client3 = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid"); + + OapiUserListidRequest request2 = new OapiUserListidRequest(); + request2.setDeptId(675909059L); // 璁剧疆瑕佽幏鍙栫殑閮ㄩ棬 ID锛岃繖閲屼互鏍归儴闂ㄤ负渚� + // 璁剧疆閮ㄩ棬 ID锛屽鏋滆幏鍙栨墍鏈夊憳宸ユ墜鏈哄彿锛屽彲浠ヨ缃负鏍归儴闂ㄧ殑 ID + OapiUserListidResponse response2 = client3.execute(request2, accessToken); + String body = response2.getBody(); + // 瑙f瀽涓篔SONObject + JSONObject jsonObject = JSONObject.parseObject(body); + // 鎻愬彇鍑篔SONArray + JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("result").getJSONArray("userid_list")); + // 灏咼SONArray杞负List鍒楄〃 + String str = JSONObject.toJSONString(jsonArray); + List<String> list = JSONObject.parseObject(str,List.class); + + //鐢佃瘽鍙风爜鏁扮粍 + // String[] split = mobile.split(","); +// for (String s : split) { +// DingTalkClient client2 = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get_by_mobile"); +// OapiUserGetByMobileRequest req = new OapiUserGetByMobileRequest(); +// req.setMobile(s); +// req.setHttpMethod("GET"); +// OapiUserGetByMobileResponse rsp = client2.execute(req, accessToken); +// //鑾峰彇鍒癠rid灏辨槸鍦ㄥ叕鍙搁噷瑕佸彂閫佸埌閭d釜浜虹殑id +// String urid = rsp.getUserid(); + for (String urid : list) { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); + OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); + request.setUseridList(urid); + request.setAgentId(1779052814L); + request.setToAllUser(false); + OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); + msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA()); + msg.getOa().setMessageUrl("www.baidu.com"); + msg.getOa().setPcMessageUrl("www.baidu.com"); + msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head()); + msg.getOa().getHead().setText("text"); + msg.getOa().getHead().setBgcolor("FFBBBBBB"); + msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body()); + msg.getOa().getBody().setContent("msg淇℃伅"); + OapiMessageCorpconversationAsyncsendV2Request.Form formPark = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + formPark.setKey(null); + formPark.setValue(null); + OapiMessageCorpconversationAsyncsendV2Request.Form formAlarmCode = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + formAlarmCode.setKey("宸ュ伐宸 "); + formAlarmCode.setValue(alarmCode); + OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + formSeverityDesc.setKey("鏋楄瑕佽瑕�"); + formSeverityDesc.setValue(severityDesc); + OapiMessageCorpconversationAsyncsendV2Request.Form formConner = new OapiMessageCorpconversationAsyncsendV2Request.Form(); + formConner.setKey("鍘呭湪鍦�"); + ArrayList<OapiMessageCorpconversationAsyncsendV2Request.Form> objects = new ArrayList<>(); + objects.add(formPark); + objects.add(formSeverityDesc); + objects.add(formAlarmCode); + objects.add(formConner); + msg.getOa().getBody().setForm(objects); + msg.setMsgtype("oa"); + request.setMsg(msg); + // log.info("鑾峰彇鍙戦�侀�氱煡娑堟伅浣撳拰鑾峰彇鍙戦�侀�氱煡浜哄畬鎴�"); + OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request, accessToken); + // log.info("鍙戦�佹秷鎭槸鍚︽垚鍔�"+response.isSuccess()); + System.out.println(response.isSuccess()); + // log.info("娑堟伅浠诲姟ID"+response.getTaskId()); + System.out.println(response.getTaskId()); + } + } + + public static void main(String[] args) throws ApiException { +// String appId = "wx1c5243d2337753f4"; +// String appSecret = "84a2186a0d175e88345267c716516cd3"; +// WeChatService weChatService = new WeChatService(appId, appSecret); +// weChatService.sendMessageToFollowers("浣犲湪璇村暐鍛紵锛燂紵锛�"); +// // new com.smartor.controller.BaseSmsaccountController().sendMessageToFollowers("AIJSl-IF6M05NzaXofPYbT5wgSP3bWH7I9OBmvJqsaU","www.baidu.com"); + + sendNotification("17607179857", "1", "2", "3"); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SendMessageIn.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SendMessageIn.java new file mode 100644 index 0000000..e64c668 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SendMessageIn.java @@ -0,0 +1,22 @@ +package com.ruoyi.web.controller.smartor; + +import lombok.Data; + +import java.util.List; + +@Data +public class SendMessageIn { + + //娑堟伅绫诲瀷 + private String msgType; + //webhook + private String webhook; + //瀵嗛挜 + private String secret; + //鏂囨湰 + private String text; + //鎸囧畾瀵硅薄 + private List<String> mobileList; + //鏄惁鎺ㄩ�佹墍鏈変汉 + private boolean isAtAll; +} \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatController.java new file mode 100644 index 0000000..65210b2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatController.java @@ -0,0 +1,110 @@ +package com.ruoyi.web.controller.smartor; + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.controller.BaseController; +import com.smartor.domain.WeChatSendVo; +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.List; + +/** + * 寰俊鎺ュ彛 + * + * @author liusheng + * @date 2023-05-15 + */ +@RestController +@RequestMapping("/smartor/wechat") +public class WeChatController extends BaseController { + + @Value("appid") + private String appid = "wx1c5243d2337753f4"; + + @Value("appSecret") + private String appSecret = "84a2186a0d175e88345267c716516cd3"; + + /** + * 鑾峰彇妯℃澘淇℃伅 + * + * @return + */ + @GetMapping("/getTemplateList") + public JSONArray getTemplateList() { + String url = "https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=" + getAccessToken(); + OkHttpClient httpClient = new OkHttpClient(); + Request request = new Request.Builder().url(url).build(); + try { + Response response = httpClient.newCall(request).execute(); + JSONObject jsonObject = JSONObject.parseObject(response.body().string()); + return jsonObject.getJSONArray("template_list"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + + /** + * 寰俊鍏紬鍙蜂俊鎭彂閫� + * + * @param weChatSendVo + * @return + */ + @PostMapping("/sendMessageToFollowers") + public Boolean sendMessageToFollowers(@RequestBody WeChatSendVo weChatSendVo) { + WxMpService wxMpService; + wxMpService = new WxMpServiceImpl(); + wxMpService.setWxMpConfigStorage(new WxMpInMemoryConfigStorage()); + WxMpInMemoryConfigStorage wxMpConfigStorage = (WxMpInMemoryConfigStorage) wxMpService.getWxMpConfigStorage(); + wxMpConfigStorage.setAppId(appid); + wxMpConfigStorage.setSecret(appSecret); + try { + List<String> openIdList = wxMpService.getUserService().userList(null).getOpenids(); + for (String openId : openIdList) { + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder().toUser(openId).templateId(weChatSendVo.getTemplateId()).url(weChatSendVo.getUrl()).build(); + for (String key : weChatSendVo.getContent().keySet()) { + templateMessage.addData(new WxMpTemplateData(key, weChatSendVo.getContent().get(key).toString())); + } + wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage); + } + } catch (WxErrorException e) { + e.printStackTrace(); + } + return true; + } + + + + /** + * 鑾峰彇 access_token + */ + public String getAccessToken() { + String accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + appSecret; + OkHttpClient httpClient = new OkHttpClient(); + Request request = new Request.Builder().url(accessTokenUrl).build(); + try { + Response response = httpClient.newCall(request).execute(); + JSONObject jsonObject = JSONObject.parseObject(response.body().string()); + return jsonObject.getString("access_token"); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + // } + + +} + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatService.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatService.java new file mode 100644 index 0000000..076057d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatService.java @@ -0,0 +1,87 @@ +package com.ruoyi.web.controller.smartor; + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.smartor.domain.WeChatSendVo; +import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; +import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; +import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class WeChatService { + private WxMpService wxMpService; + + public WeChatService(String appId, String appSecret) { + wxMpService = new WxMpServiceImpl(); + wxMpService.setWxMpConfigStorage(new WxMpInMemoryConfigStorage()); + WxMpInMemoryConfigStorage wxMpConfigStorage = (WxMpInMemoryConfigStorage) wxMpService.getWxMpConfigStorage(); + wxMpConfigStorage.setAppId(appId); + wxMpConfigStorage.setSecret(appSecret); + } + + public void sendMessageToFollowers(String messageContent) { + try { + // 鑾峰彇鎵�鏈夊叧娉ㄨ�呯殑OpenID鍒楄〃 + List<String> openIdList = wxMpService.getUserService().userList(null).getOpenids(); + for (String openId : openIdList) { + WxMpKefuMessage wxMpKefuMessage = WxMpKefuMessage.TEXT().toUser(openId).content("鍒╂箹鍏紬鍙锋祴璇�").build(); +// try { +// boolean b = wxMpService.getKefuService().sendKefuMessage(wxMpKefuMessage); +// if(b==false){ +// continue; +// } +// }catch (WxErrorException e){ +// continue; +// } + + WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder().toUser(openId).templateId("oG3pJHPVWpE81DmZsua_2tKwgJ97r0qz37z56ns7NB4").url("www.baidu.com").build(); + templateMessage.addData(new WxMpTemplateData("{first", "浣犲ソ锛屾牴鎹綘鐨勮褰曚俊鎭紝涓轰綘鐢熸垚杩戞湡鐨勫悍澶嶆姤鍛�", "#FFB6C1")); + templateMessage.addData(new WxMpTemplateData("keyword1", "2023-05-15-2023-05-16", "#B95EA6")); + templateMessage.addData(new WxMpTemplateData("keyword2", "鍏辨祴閲忚绯�10娆★紝鍏朵腑姝e父7娆°�佸亸楂�2娆°�佸亸浣�1娆★紱骞冲潎姣忔棩楗鎽勫叆鐑噺1578澶у崱锛屽湪姣忔棩鐑噺鎺у埗鑼冨洿鍐咃紱骞冲潎姣忔棩鏁f1灏忔椂锛屾弧瓒冲悍澶嶉渶瑕�", "#173177")); + templateMessage.addData(new WxMpTemplateData("remark", "213456", "#87cefa")); +// templateMessage.addData(new WxMpTemplateData("low","AA","#FF6347")); +// templateMessage.addData(new WxMpTemplateData("scq_day","AA","#FF1493")); +// templateMessage.addData(new WxMpTemplateData("bir_day","AA","#FF00FF" )); +// templateMessage.addData(new WxMpTemplateData("daily_english_cn","AA","#800080")); +// templateMessage.addData(new WxMpTemplateData("daily_english_en","AA","#FFA500")); + wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage); + } + } catch (WxErrorException e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { +// String appId = "wx1c5243d2337753f4"; +// String appSecret = "84a2186a0d175e88345267c716516cd3"; +// WeChatService weChatService = new WeChatService(appId, appSecret); +// weChatService.sendMessageToFollowers("浣犲湪璇村暐鍛紵锛燂紵锛�"); +// // new com.smartor.controller.BaseSmsaccountController().sendMessageToFollowers("AIJSl-IF6M05NzaXofPYbT5wgSP3bWH7I9OBmvJqsaU","www.baidu.com"); + WeChatController weChatController = new WeChatController(); + JSONArray templateList = weChatController.getTemplateList(); + for (int i = 0; i < templateList.size(); i++) { + JSONObject template = templateList.getJSONObject(i); + System.out.println("Template ID: " + template.getString("template_id")); + System.out.println("Title: " + template.getString("title")); + System.out.println("Content: " + template.getString("content")); + System.out.println("==============================="); + WeChatSendVo weChatSendVo = new WeChatSendVo(); + weChatSendVo.setTemplateId(template.getString("template_id")); + Map<String, Object> map = new HashMap<>(); + map.put("first", "姝﹀櫒鐨勫崱"); + map.put("keyword1", "鐪嬫垜浠樻鐪嬫垜浠樻鏈紑鏀剧湅鎴戜粯娆�"); + map.put("keyword2", "12657698798797"); + map.put("remark", "鍟婂晩鎾掑晩鍟婂晩"); + weChatSendVo.setContent(map); + weChatController.sendMessageToFollowers(weChatSendVo); + } + + } +} diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index a48a07c..5f4187d 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -1,57 +1,59 @@ # 鏁版嵁婧愰厤缃� spring: - datasource: - type: com.alibaba.druid.pool.DruidDataSource - driverClassName: com.mysql.cj.jdbc.Driver - druid: - # 涓诲簱鏁版嵁婧� - master: - url: jdbc:mysql://116.62.18.175:6002/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 - username: hxsoft - password: Hxerp2000 - # 浠庡簱鏁版嵁婧� - slave: - # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴 - enabled: false - url: - username: - password: - # 鍒濆杩炴帴鏁� - initialSize: 5 - # 鏈�灏忚繛鎺ユ睜鏁伴噺 - minIdle: 10 - # 鏈�澶ц繛鎺ユ睜鏁伴噺 - maxActive: 20 - # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂� - maxWait: 60000 - # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 - timeBetweenEvictionRunsMillis: 60000 - # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 - minEvictableIdleTimeMillis: 300000 - # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 - maxEvictableIdleTimeMillis: 900000 - # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁� - validationQuery: SELECT 1 FROM DUAL - testWhileIdle: true - testOnBorrow: false - testOnReturn: false - webStatFilter: - enabled: true - statViewServlet: - enabled: true - # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂� - allow: - url-pattern: /druid/* - # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮� - login-username: ruoyi - login-password: 123456 - filter: - stat: - enabled: true - # 鎱QL璁板綍 - log-slow-sql: true - slow-sql-millis: 1000 - merge-sql: true - wall: - config: - multi-statement-allow: true \ No newline at end of file + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 涓诲簱鏁版嵁婧� + master: + url: jdbc:mysql://116.62.18.175:6002/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: hxsoft + password: Hxerp2000 + # 浠庡簱鏁版嵁婧� + slave: + # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴 + enabled: false + url: + username: + password: + # 鍒濆杩炴帴鏁� + initialSize: 5 + # 鏈�灏忚繛鎺ユ睜鏁伴噺 + minIdle: 10 + # 鏈�澶ц繛鎺ユ睜鏁伴噺 + maxActive: 20 + # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂� + maxWait: 60000 + # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 + timeBetweenEvictionRunsMillis: 60000 + # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + minEvictableIdleTimeMillis: 300000 + # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + maxEvictableIdleTimeMillis: 900000 + # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁� + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂� + allow: + url-pattern: /druid/* + # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮� + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 鎱QL璁板綍 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + appid : wxf50c5c72265188eb + appSecret : 7ab0a81392a96b157efa1df00f9cd939 \ No newline at end of file diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 684c142..b3237a4 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -52,24 +52,37 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> - + <!-- JSON宸ュ叿绫� --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> - + <!-- 鍔ㄦ�佹暟鎹簮 --> - <dependency> - <groupId>com.baomidou</groupId> - <artifactId>dynamic-datasource-spring-boot-starter</artifactId> - <version>3.5.2</version> - </dependency> + <dependency> + <groupId>com.baomidou</groupId> + <artifactId>dynamic-datasource-spring-boot-starter</artifactId> + <version>3.5.2</version> + </dependency> <!-- 闃块噷JSON瑙f瀽鍣� --> <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> + </dependency> + + <dependency> + <groupId>cn.hutool</groupId> + <artifactId>hutool-all</artifactId> + <version>5.4.0</version> + </dependency> + + + <dependency> + <groupId>com.github.binarywang</groupId> + <artifactId>weixin-java-mp</artifactId> + <version>3.0.0</version> </dependency> <!-- io甯哥敤宸ュ叿绫� --> @@ -131,7 +144,21 @@ <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> - + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>1.18.26</version> + </dependency> + <dependency> + <groupId>com.squareup.okhttp3</groupId> + <artifactId>okhttp</artifactId> + <version>4.10.0</version> + </dependency> + <dependency> + <groupId>com.aliyun</groupId> + <artifactId>alibaba-dingtalk-service-sdk</artifactId> + <version>2.0.0</version> + </dependency> </dependencies> </project> \ No newline at end of file diff --git a/smartor/src/main/java/com/smartor/domain/WeChatSendVo.java b/smartor/src/main/java/com/smartor/domain/WeChatSendVo.java new file mode 100644 index 0000000..8b35549 --- /dev/null +++ b/smartor/src/main/java/com/smartor/domain/WeChatSendVo.java @@ -0,0 +1,33 @@ +package com.smartor.domain; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.util.Map; + +@Data +public class WeChatSendVo { + + /** + * 妯℃澘ID + */ + @Excel(name = " 妯℃澘ID ") + String templateId; + + /** + * 鍙戦�佸唴瀹� + * [{ + * "first":"浣犲ソ锛屾牴鎹綘鐨勮褰曚俊鎭紝涓轰綘鐢熸垚杩戞湡鐨勫悍澶嶆姤鍛�", + * 鈥渒eyword1鈥濓細鈥�......鈥� + * }] + */ + @Excel(name = " 鍙戦�佸唴瀹� ") + Map<String, Object> content; + + /** + * 璺宠浆URL + */ + @Excel(name = " 璺宠浆URL ") + String url; + +} -- Gitblit v1.9.3