sgj
5 小时以前 4b2b0ec05306c285cff9f95064cf70b5e6e37516
添加微信消息推送工具类
已添加3个文件
已修改1个文件
302 ■■■■■ 文件已修改
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/Template.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/data/TemplateParam.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SnapReplyService.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/WxUtil.java 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 {
    /**
     * æŽ¥æ”¶è€…openid
     */
    private String touser;
    /**
     * æ¨¡æ¿id
     */
    private String template_id;
    /**
     * è¯¦æƒ…路径
     */
    private String url;
    /**
     * æ ‡é¢˜é¢œè‰²
     */
    private String topcolor;
    /**
     * æ•°æ®
     */
    private Map<String, TemplateParam> data;
}
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;
    }
}
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("微信:推送成功;");
    }
}
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 {
    /**
     * å…¬ä¼—号调用全局接口的标识ACCESS_TOKEN缓存key
     */
    public static final String ACCESS_TOKEN = "ACCESS_TOKEN";
    /**
     * æ¨¡æ¿æ¶ˆæ¯å‘送url
     */
    public static final String TEMPLATE_URL =
            "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
    /**
     * èŽ·å–access_token的接口地址(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");
            //将accessToken存入缓存,有效时长为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);
    }
}