|
@@ -0,0 +1,192 @@
|
|
|
|
+package com.care.common.service.impl;
|
|
|
|
+
|
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
|
+import com.care.client.config.PlatformOfficialConfig;
|
|
|
|
+import com.care.client.config.PlatformPinanbaoConfig;
|
|
|
|
+import com.care.client.config.WxConfig;
|
|
|
|
+import com.care.client.dto.MpTemplateMsgDTO;
|
|
|
|
+import com.care.client.dto.TemplateDataDTO;
|
|
|
|
+import com.care.client.dto.WxUniformTemplateDTO;
|
|
|
|
+import com.care.client.vo.WxAccessTokenVO;
|
|
|
|
+import com.care.common.cache.RedisKeyConstant;
|
|
|
|
+import com.care.common.cache.RedisUtil;
|
|
|
|
+import com.care.common.service.WxTemplateService;
|
|
|
|
+import com.care.common.util.*;
|
|
|
|
+import com.google.common.collect.Maps;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import javax.annotation.Resource;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.concurrent.locks.Lock;
|
|
|
|
+import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
+
|
|
|
|
+@Service
|
|
|
|
+@Slf4j
|
|
|
|
+public class WxTemplateServiceImpl implements WxTemplateService {
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ private RedisUtil redisUtil;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ private PlatformPinanbaoConfig platformPinanbaoConfig;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ private PlatformOfficialConfig platformOfficialConfig;
|
|
|
|
+
|
|
|
|
+// @Resource
|
|
|
|
+// private CareOfficialMemberInfoService careOfficialMemberInfoService;
|
|
|
|
+
|
|
|
|
+ private Lock lock = new ReentrantLock();
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public WxAccessTokenVO processAccessToken() {
|
|
|
|
+ WxAccessTokenVO wxAccessTokenVO = new WxAccessTokenVO();
|
|
|
|
+ WxConfig wxConfig = platformPinanbaoConfig.wxConfig();
|
|
|
|
+ if (StringUtils.isBlank(wxConfig.getAppId()) || StringUtils.isBlank(wxConfig.getSecret())) {
|
|
|
|
+ log.error("缺少必要参数");
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ //得到对象锁
|
|
|
|
+ lock.lock();
|
|
|
|
+ if (redisUtil.hasKey(RedisKeyConstant.YUANSERVICE_ACCESSTOKEN + "text")) {
|
|
|
|
+ wxAccessTokenVO.setAccessToken(ObjectUtils.toString(redisUtil.get(RedisKeyConstant.YUANSERVICE_ACCESSTOKEN + "text")));
|
|
|
|
+ } else {
|
|
|
|
+ wxAccessTokenVO = WxTemplateUtil.getAccessToken(wxConfig.getAppId(), wxConfig.getSecret());
|
|
|
|
+ if (wxAccessTokenVO == null || StringUtils.isBlank(wxAccessTokenVO.getAccessToken())) {
|
|
|
|
+ log.error("未获取到AccessToekn");
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ redisUtil.set(RedisKeyConstant.YUANSERVICE_ACCESSTOKEN + "text", wxAccessTokenVO.getAccessToken(),60 * 100);
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ log.error("获取AccessToken出现错误", e);
|
|
|
|
+ } finally {
|
|
|
|
+ //释放锁
|
|
|
|
+ lock.unlock();
|
|
|
|
+ }
|
|
|
|
+ return wxAccessTokenVO;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean sendTemplateMsg(String openId, String templateId, Map<String, TemplateDataDTO> dataMap) {
|
|
|
|
+ if (StringUtils.isBlank(openId)) {
|
|
|
|
+ throw new IllegalArgumentException("参数 openId 为空");
|
|
|
|
+ }
|
|
|
|
+ if (StringUtils.isBlank(templateId)) {
|
|
|
|
+ throw new IllegalArgumentException("参数 templateId 为空");
|
|
|
|
+ }
|
|
|
|
+ if (dataMap == null) {
|
|
|
|
+ dataMap = Maps.newHashMap();
|
|
|
|
+ }
|
|
|
|
+ WxAccessTokenVO wxAccessTokenVO = processAccessToken();
|
|
|
|
+ if (wxAccessTokenVO == null) {
|
|
|
|
+ throw new RuntimeException("获取AccessToken出错");
|
|
|
|
+ }
|
|
|
|
+// CareOfficialMemberInfo byUnionId = careOfficialMemberInfoService.findByUnionId(unionId);
|
|
|
|
+// if (byUnionId == null) {
|
|
|
|
+// throw new RuntimeException("用户 unionId: " + unionId + " 未找到相应公众号关注信息");
|
|
|
|
+// }
|
|
|
|
+ WxUniformTemplateDTO wxUniformTemplateDTO = new WxUniformTemplateDTO();
|
|
|
|
+ wxUniformTemplateDTO.setTouser(openId);
|
|
|
|
+
|
|
|
|
+ WxConfig wxConfig = platformOfficialConfig.officialConfig();
|
|
|
|
+
|
|
|
|
+ MpTemplateMsgDTO mpTemplateMsgDTO = new MpTemplateMsgDTO();
|
|
|
|
+ mpTemplateMsgDTO.setAppid(wxConfig.getAppId());
|
|
|
|
+ mpTemplateMsgDTO.setTemplate_id(templateId);
|
|
|
|
+ mpTemplateMsgDTO.setData(dataMap);
|
|
|
|
+ wxUniformTemplateDTO.setMp_template_msg(mpTemplateMsgDTO);
|
|
|
|
+
|
|
|
|
+ // 发送消息模板
|
|
|
|
+ JSONObject jsonObject = WxTemplateUtil.sendTemplateMsg(wxUniformTemplateDTO, wxAccessTokenVO.getAccessToken());
|
|
|
|
+ if (jsonObject != null && "0".equals(jsonObject.getStr("errcode"))) {
|
|
|
|
+ return Boolean.TRUE;
|
|
|
|
+ }
|
|
|
|
+ return Boolean.FALSE;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public boolean sendTemplateMsg(String openId, String templateId, String miniprogramAppid, String miniprogramPage, Map<String, TemplateDataDTO> dataMap) {
|
|
|
|
+ if (StringUtils.isBlank(openId)) {
|
|
|
|
+ throw new IllegalArgumentException("参数 openId 为空");
|
|
|
|
+ }
|
|
|
|
+ if (StringUtils.isBlank(templateId)) {
|
|
|
|
+ throw new IllegalArgumentException("参数 templateId 为空");
|
|
|
|
+ }
|
|
|
|
+ if (StringUtils.isBlank(miniprogramAppid)) {
|
|
|
|
+ throw new IllegalArgumentException("参数 miniprogramAppid 为空");
|
|
|
|
+ }
|
|
|
|
+ if (StringUtils.isBlank(miniprogramPage)) {
|
|
|
|
+ throw new IllegalArgumentException("参数 miniprogramPage 为空");
|
|
|
|
+ }
|
|
|
|
+ if (dataMap == null) {
|
|
|
|
+ dataMap = Maps.newHashMap();
|
|
|
|
+ }
|
|
|
|
+ WxAccessTokenVO wxAccessTokenVO = processAccessToken();
|
|
|
|
+ if (wxAccessTokenVO == null) {
|
|
|
|
+ throw new RuntimeException("获取AccessToken出错");
|
|
|
|
+ }
|
|
|
|
+// CareOfficialMemberInfo byUnionId = careOfficialMemberInfoService.findByUnionId(unionId);
|
|
|
|
+// if (byUnionId == null) {
|
|
|
|
+// throw new RuntimeException("用户 unionId: " + unionId + " 未找到相应公众号关注信息");
|
|
|
|
+// }
|
|
|
|
+ WxUniformTemplateDTO wxUniformTemplateDTO = new WxUniformTemplateDTO();
|
|
|
|
+ wxUniformTemplateDTO.setTouser(openId);
|
|
|
|
+
|
|
|
|
+ WxConfig wxConfig = platformOfficialConfig.officialConfig();
|
|
|
|
+ MpTemplateMsgDTO mpTemplateMsgDTO = new MpTemplateMsgDTO();
|
|
|
|
+ mpTemplateMsgDTO.setAppid(wxConfig.getAppId());
|
|
|
|
+ mpTemplateMsgDTO.setTemplate_id(templateId);
|
|
|
|
+ mpTemplateMsgDTO.setData(dataMap);
|
|
|
|
+
|
|
|
|
+ Map<String, String> miniprogramMap = Maps.newHashMap();
|
|
|
|
+ miniprogramMap.put("appid", miniprogramAppid);
|
|
|
|
+ miniprogramMap.put("page", miniprogramPage);
|
|
|
|
+ mpTemplateMsgDTO.setMiniprogram(miniprogramMap);
|
|
|
|
+
|
|
|
|
+ wxUniformTemplateDTO.setMp_template_msg(mpTemplateMsgDTO);
|
|
|
|
+
|
|
|
|
+ // 发送消息模板
|
|
|
|
+ JSONObject jsonObject = WxTemplateUtil.sendTemplateMsg(wxUniformTemplateDTO, wxAccessTokenVO.getAccessToken());
|
|
|
|
+ if (jsonObject != null && "0".equals(jsonObject.getStr("errcode"))) {
|
|
|
|
+ return Boolean.TRUE;
|
|
|
|
+ }
|
|
|
|
+ return Boolean.FALSE;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+// @Override
|
|
|
|
+// public boolean sendTemplateMsg(String unionId, String templateId, Map<String, TemplateDataDTO> dataMap) {
|
|
|
|
+// if (StringUtils.isBlank(unionId)) {
|
|
|
|
+// throw new IllegalArgumentException("参数 unionId 为空");
|
|
|
|
+// }
|
|
|
|
+// if (StringUtils.isBlank(templateId)) {
|
|
|
|
+// throw new IllegalArgumentException("参数 templateId 为空");
|
|
|
|
+// }
|
|
|
|
+// if (dataMap == null) {
|
|
|
|
+// dataMap = Maps.newHashMap();
|
|
|
|
+// }
|
|
|
|
+// WxAccessTokenVO wxAccessTokenVO = processAccessToken();
|
|
|
|
+// if (wxAccessTokenVO == null) {
|
|
|
|
+// throw new RuntimeException("获取AccessToken出错");
|
|
|
|
+// }
|
|
|
|
+// CareOfficialMemberInfo byUnionId = careOfficialMemberInfoService.findByUnionId(unionId);
|
|
|
|
+// if (byUnionId == null) {
|
|
|
|
+// throw new RuntimeException("用户 unionId: " + unionId + " 未找到相应公众号关注信息");
|
|
|
|
+// }
|
|
|
|
+// WxTemplateDTO wxTemplateDTO = new WxTemplateDTO();
|
|
|
|
+// wxTemplateDTO.setTouser(byUnionId.getOpenId());
|
|
|
|
+// wxTemplateDTO.setTemplate_id(templateId);
|
|
|
|
+// wxTemplateDTO.setData(dataMap);
|
|
|
|
+// // 发送消息模板
|
|
|
|
+// JSONObject jsonObject = WxTemplateUtil.sendTemplateMsg(wxTemplateDTO, wxAccessTokenVO.getAccessToken());
|
|
|
|
+// if (jsonObject != null && "0".equals(jsonObject.getStr("errcode"))) {
|
|
|
|
+// return Boolean.TRUE;
|
|
|
|
+// }
|
|
|
|
+// return Boolean.FALSE;
|
|
|
|
+// }
|
|
|
|
+
|
|
|
|
+}
|