实现功能:
首先对状态进行判断,如果为1发送消息,如果为2发送微信消息.
对发送的微信消息,都存储到map集合里,
package com.sinosoft.springbootplus.demandConfirm.application.service.impl;
import com.sinosoft.springbootplus.demandConfirm.application.service.HqDemandTurnDownService;
import com.sinosoft.springbootplus.demandConfirm.domain.entity.HqDemandTurnDowm;
import com.sinosoft.springbootplus.demandConfirm.domain.mapper.HqDemandTurnDownMapper;
import com.sinosoft.springbootplus.demandConfirm.utils.ConstantUtil;
import com.sinosoft.springbootplus.mybatis.service.impl.BaseServiceImpl;
import com.sinosoft.springbootplus.publish.MessagePublistener;
import com.sinosoft.springbootplus.sendMessage.service.JwBjSendWxinfohqfwService;
import com.sinosoft.springbootplus.sendMessage.vo.TemplateDatahqfw;
import com.sinosoft.springbootplus.util.MapperUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* <pre>
* 驳回意见表 服务实现类
* </pre>
*
* @author 李佳锴
* @since 2021-12-2
*/
@Slf4j
@Service
public class HqDemandTurnDownServiceImpl extends BaseServiceImpl<HqDemandTurnDownMapper, HqDemandTurnDowm> implements HqDemandTurnDownService {
private HqDemandTurnDownMapper hqDemandTurnDownMapper;
private MessagePublistener messagePublistener;
private JwBjSendWxinfohqfwService jwBjSendWxinfoService;
HqDemandTurnDownServiceImpl (HqDemandTurnDownMapper hqDemandTurnDownMapper,MessagePublistener messagePublistener,JwBjSendWxinfohqfwService jwBjSendWxinfoService){
this.hqDemandTurnDownMapper =hqDemandTurnDownMapper;
this.messagePublistener = messagePublistener;
this.jwBjSendWxinfoService = jwBjSendWxinfoService;
}
private static final String INFO_MSG = "保障单驳回查看[%s]";
private static final String INFO_CONTENT = "请对保障单驳回进行查看";
@Transactional(rollbackFor = Exception.class)
@Override
public boolean saveHqDemandTurn(HqDemandTurnDowm hqDemandTurnDowm) throws Exception {
List styleList = hqDemandTurnDowm.getStyleList();
if (styleList.contains("1")){
Map<String, String> data = new HashMap<>();
data.put("confirmId", hqDemandTurnDowm.getConfirmId().toString());
data.put("remark", INFO_CONTENT);
String hqfwTask = String.format(INFO_MSG, hqDemandTurnDowm.getConfirmName());
log.info("发送代办:[{}]", hqfwTask);
messagePublistener.publishTask("hqsq" + hqDemandTurnDowm.getConfirmName(), "保障单驳回查看", hqfwTask,
"hqsq", MapperUtils.mapToJson(data), "hqsq", Long.valueOf(hqDemandTurnDowm.getTeachAssistant()), hqDemandTurnDowm.getTeachAssistant());
}
if (styleList.contains("2")){
Map<String, TemplateDatahqfw> param = new HashMap<>();
param.put("first",new TemplateDatahqfw("您有一条保障单信息需要处理,请及时查阅!","#696969"));
param.put("keyword1",new TemplateDatahqfw("保障单驳回查看","#696969"));
// param.put("keyword2",new TemplateData(messageInfo.getSendName(),"#696969"));
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(new Date());
param.put("keyword2",new TemplateDatahqfw(dateString,"#696969"));
param.put("remark",new TemplateDatahqfw("如果您已经处理,请忽略此消息","#696969"));
List<String> openIdList = new ArrayList<String>();
String openId = ConstantUtil.open_id;
openIdList.add(openId);
jwBjSendWxinfoService.senTempMsg2(openIdList,ConstantUtil.messageTemplate,param);
}
String join =String.join(",",styleList);
hqDemandTurnDowm.setMessage(join);
return super.save(hqDemandTurnDowm);
}
}
发送消息用到的类:
package com.sinosoft.springbootplus.demandConfirm.utils;
/**
* 微信常量定义
* 版权:(C) 版权所有 2015-2018 中科软科技股份有限公司
* <功能名称>
* <详细描述>
* @author mc
* @version 1.0
* @创建时间 2021年12月30日
* @修改时间 2021年12月30日
*/
public class ConstantUtil {
// 公众号开发者APPID //wx44357760369b2941
public final static String app_id = "wx3f8ed97f6f8b1bd5";
//openid
public final static String open_id = "oUVkX1G1Uu8GxPwt9_APF0wdDcOE";
// 公众号开发者密码 343a376ae2ec2b9180c203e5f624368c
public final static String app_secret = "a8564e2df91c8aa345d67580f462cf79";
// 凭证获取(GET)
public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
// 获取用户openid集合
public final static String listopen_id = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID";
//获取用户信息
public final static String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";
//新建用户模版信息
public final static String addtemplateUrl = "https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN";
//删除用户模版信息
public final static String deltemplateUrl = "https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=ACCESS_TOKEN";
//删除用户模版信息
public final static String sendtemplateUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
//消息模版信息
public final static String messageTemplate = "q6OVAlZVQHxoZpgGrJLuhjl3GRW_olIaJIprnkb-IPs";
}
package com.sinosoft.springbootplus.demandConfirm.utils;
import com.sinosoft.springbootplus.demandConfirm.domain.entity.Token;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.io.*;
import java.net.ConnectException;
import java.net.URL;
public class CommonUtil {
private static Logger log = LoggerFactory.getLogger(CommonUtil.class);
/**
* 发送https请求
*
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
*/
public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
JSONObject jsonObject = null;
try {
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 设置请求方式(GET/POST)
conn.setRequestMethod(requestMethod);
// 当outputStr不为null时向输出流写数据
if (null != outputStr) {
OutputStream outputStream = conn.getOutputStream();
// 注意编码格式
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 从输入流读取返回内容
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
// 释放资源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
conn.disconnect();
jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
log.error("连接超时:{}", ce);
} catch (Exception e) {
log.error("https请求异常:{}", e);
}
return jsonObject;
}
/**
* 获取接口访问凭证
*
* @param appid 凭证
* @param appsecret 密钥
* @return
*/
public static Token getToken(String appid, String appsecret) {
Token token = null;
String requestUrl = ConstantUtil.token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
// 发起GET请求获取凭证
JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
if (null != jsonObject) {
try {
token = new Token();
token.setAccessToken(jsonObject.getString("access_token"));
token.setExpiresIn(jsonObject.getInt("expires_in"));
} catch (JSONException e) {
token = null;
// 获取token失败
log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
}
}
return token;
}
/**
* URL编码(utf-8)
*
* @param source
* @return
*/
public static String urlEncodeUTF8(String source) {
String result = source;
try {
result = java.net.URLEncoder.encode(source, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
}