liusheng
2023-05-22 2d213e2df5c896625395f65d50c8abb0bc78e36a
微信公众号、钉钉代码提交
已添加6个文件
已修改3个文件
554 ■■■■■ 文件已修改
ruoyi-admin/pom.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkController.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkService.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SendMessageIn.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatController.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatService.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/pom.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/WeChatSendVo.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
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();
        // è§£æžä¸ºJSONObject
        JSONObject jsonObject = JSONObject.parseObject(body);
        // æå–出JSONArray
        JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("result").getJSONArray("userid_list"));
        // å°†JSONArray转为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("工工工a ");
            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();
    }
}
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();
        // è§£æžä¸ºJSONObject
        JSONObject jsonObject = JSONObject.parseObject(body);
        // æå–出JSONArray
        JSONArray jsonArray = new JSONArray(jsonObject.getJSONObject("result").getJSONArray("userid_list"));
        // å°†JSONArray转为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);
//            //获取到Urid就是在公司里要发送到那个人的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("工工工a ");
            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");
    }
}
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;
}
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;
        }
    }
    //  }
}
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次,其中正常7次、偏高2次、偏低1次;平均每日饮食摄入热量1578大卡,在每日热量控制范围内;平均每日散步1小时,满足康复需要", "#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);
        }
    }
}
ruoyi-admin/src/main/resources/application-druid.yml
@@ -55,3 +55,5 @@
                wall:
                    config:
                        multi-statement-allow: true
  appid : wxf50c5c72265188eb
  appSecret : 7ab0a81392a96b157efa1df00f9cd939
ruoyi-common/pom.xml
@@ -72,6 +72,19 @@
            <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常用工具类 -->
        <dependency>
            <groupId>commons-io</groupId>
@@ -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>
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":"你好,根据你的记录信息,为你生成近期的康复报告",
     * â€œkeyword1”:“......”
     * }]
     */
    @Excel(name = " å‘送内容 ")
    Map<String, Object> content;
    /**
     * è·³è½¬URL
     */
    @Excel(name = " è·³è½¬URL ")
    String url;
}