123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- package com.szwl.service.impl;
- import com.alibaba.fastjson.JSONObject;
- import com.szwl.constant.ConfigConsts;
- import com.szwl.model.bean.WeChatTemplateMsg;
- import com.szwl.model.entity.TAdmin;
- import com.szwl.model.entity.TWechat;
- import com.szwl.mapper.TWechatMapper;
- import com.szwl.service.TAdminService;
- import com.szwl.service.TWechatService;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.data.redis.core.StringRedisTemplate;
- import org.springframework.http.ResponseEntity;
- import org.springframework.stereotype.Service;
- import org.springframework.web.client.RestTemplate;
- import javax.annotation.Resource;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.URL;
- import java.net.URLConnection;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.concurrent.TimeUnit;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author wuhs
- * @since 2023-05-22
- */
- @Slf4j
- @Service
- public class TWechatServiceImpl extends ServiceImpl<TWechatMapper, TWechat> implements TWechatService {
- @Autowired
- TAdminService adminService;
- @Resource
- private StringRedisTemplate redisTemplate;
- private static final String SZ_ACCESS_TOKEN_KEY = "sz_wechat_access_token";
- private static final String SC_ACCESS_TOKEN_KEY = "sc_wechat_access_token";
- /**
- * 缓存1个半小时(90分钟)
- */
- private static final long EXPIRATION_TIME = 90 * 60;
- @Override
- public void sendNoworkMessage(String openId, String clientId, String name, String ifForeign, String companyType) {
- // 模板参数
- Map<String, WeChatTemplateMsg> sendMag = new HashMap();
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String alarmTime = format.format(new Date());
- if(name.length() > 20) {
- name = name.substring(0, 16) + "...";
- }
- if (StringUtils.isEmpty(ifForeign) || ifForeign.equals("0")) {
- // 国内
- sendMag.put("thing11", new WeChatTemplateMsg(name));
- sendMag.put("character_string14", new WeChatTemplateMsg(clientId.substring(clientId.length()-6)));
- sendMag.put("thing4", new WeChatTemplateMsg("严重"));
- sendMag.put("time5", new WeChatTemplateMsg(alarmTime));
- sendMag.put("thing6", new WeChatTemplateMsg("机器可能出现断网或突然断电,请及时处理!"));
- } else {
- // 国外
- sendMag.put("thing11", new WeChatTemplateMsg(name));
- sendMag.put("character_string14", new WeChatTemplateMsg(clientId.substring(clientId.length()-6)));
- sendMag.put("thing4", new WeChatTemplateMsg("Serious"));
- sendMag.put("time5", new WeChatTemplateMsg(alarmTime));
- sendMag.put("thing6", new WeChatTemplateMsg("Power/Network loss."));
- }
- sendWechatMessage(openId, sendMag, companyType);
- }
- @Override
- public void sendAlarmMessage(String openId, String clientId, String name, String companyType, String alarmContent, Date occurrenceTime) {
- // 模板参数
- Map<String, WeChatTemplateMsg> sendMag = new HashMap();
- // 转换时间为String类型
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String alarmTime = format.format(occurrenceTime);
- // 模版参数
- if(name.length() > 20) {
- sendMag.put("thing11", new WeChatTemplateMsg(name.substring(0, 16) + "..."));
- } else {
- sendMag.put("thing11", new WeChatTemplateMsg(name));
- }
- sendMag.put("character_string14", new WeChatTemplateMsg(clientId.substring(clientId.length()-6)));
- sendMag.put("thing4", new WeChatTemplateMsg("高"));
- sendMag.put("time5", new WeChatTemplateMsg(alarmTime));
- sendMag.put("thing6", new WeChatTemplateMsg(alarmContent));
- sendWechatMessage(openId, sendMag, companyType);
- }
- @Override
- public String getAccessToken(String companyType) {
- String url= "";
- String accessToken = "";
- if(StringUtils.isEmpty(companyType) || companyType.equals("0")) {
- url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
- + ConfigConsts.SZ_WX_SUB_APP_ID + "&secret=" + ConfigConsts.SZ_WX_APP_SECRET;
- TAdmin admin = adminService.getById(2738L);
- admin.setApiKey(accessToken);
- adminService.updateById(admin);
- } else {
- url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
- + ConfigConsts.SC_WX_SUB_APP_ID + "&secret=" + ConfigConsts.SC_WX_APP_SECRET;
- TAdmin admin = adminService.getById(2739L);
- admin.setApiKey(accessToken);
- adminService.updateById(admin);
- }
- PrintWriter out = null;
- BufferedReader in = null;
- String line;
- StringBuffer stringBuffer = new StringBuffer();
- try {
- URL realUrl = new URL(url);
- // 打开和URL之间的连接
- URLConnection conn = realUrl.openConnection();
- // 设置通用的请求属性 设置请求格式
- //设置返回类型
- conn.setRequestProperty("contentType", "text/plain");
- //设置请求类型
- conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
- //设置超时时间
- conn.setConnectTimeout(1000);
- conn.setReadTimeout(1000);
- conn.setDoOutput(true);
- conn.connect();
- // 获取URLConnection对象对应的输出流
- out = new PrintWriter(conn.getOutputStream());
- // flush输出流的缓冲
- out.flush();
- // 定义BufferedReader输入流来读取URL的响应 设置接收格式
- in = new BufferedReader(
- new InputStreamReader(conn.getInputStream(), "UTF-8"));
- while ((line = in.readLine()) != null) {
- stringBuffer.append(line);
- }
- JSONObject jsonObject = JSONObject.parseObject(stringBuffer.toString());
- log.info("获取token:{}",jsonObject.toString());
- accessToken = jsonObject.getString("access_token");
- if(StringUtils.isEmpty(companyType) || companyType.equals("0")) {
- TAdmin admin = adminService.getById(2738L);
- admin.setApiKey(accessToken);
- adminService.updateById(admin);
- } else {
- TAdmin admin = adminService.getById(2739L);
- admin.setApiKey(accessToken);
- adminService.updateById(admin);
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- //使用finally块来关闭输出流、输入流
- try {
- if (out != null) {
- out.close();
- }
- if (in != null) {
- in.close();
- }
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- return accessToken;
- }
- /**
- * 获取accessToken推送消息
- * @param openId
- * @param sendMag
- * @param companyType
- * @return
- */
- public void sendWechatMessage(String openId, Map<String, WeChatTemplateMsg> sendMag, String companyType) {
- String url = "";
- String accessToken = "";
- try {
- if(StringUtils.isEmpty(companyType) || companyType.equals("0")) {
- TAdmin admin = adminService.getById(2738L);
- accessToken = admin.getApiKey();
- } else {
- TAdmin admin = adminService.getById(2739L);
- accessToken = admin.getApiKey();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- if(StringUtils.isEmpty(accessToken)) {
- accessToken = getAccessToken(companyType);
- }
- // 推送消息
- RestTemplate restTemplate = new RestTemplate();
- Map<String, Object> sendBody = new HashMap<>();
- sendBody.put("touser", openId);
- sendBody.put("topcolor", "#FF0000");
- sendBody.put("data", sendMag);
- if(StringUtils.isEmpty(companyType) || companyType.equals("0")) {
- sendBody.put("template_id", ConfigConsts.SZ_TEMPLATE_ID);
- sendBody.put("url", "http://szwlh.sunzee.com.cn/shenze/");
- } else {
- sendBody.put("template_id", ConfigConsts.SC_TEMPLATE_ID);
- sendBody.put("url", "http://sevencloud.com.cn/sc/");
- }
- String sendUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken;
- ResponseEntity<String> forEntity = restTemplate.postForEntity(sendUrl, sendBody, String.class);
- JSONObject jsonObject = JSONObject.parseObject(forEntity.getBody());
- String messageCode = jsonObject.getString("errcode");
- String msgId = jsonObject.getString("msgid");
- System.out.println("messageCode : " + messageCode + ", msgId: " +msgId);
- log.info("微信推送结果:{}","messageCode : " + messageCode + ", msgId: " +msgId);
- }
- }
|