|
@ -21,16 +21,21 @@ import com.alibaba.fastjson.JSON; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.epmet.commons.tools.constant.NumConstant; |
|
|
import com.epmet.commons.tools.constant.NumConstant; |
|
|
import com.epmet.commons.tools.enums.EnvEnum; |
|
|
import com.epmet.commons.tools.enums.EnvEnum; |
|
|
|
|
|
import com.epmet.commons.tools.exception.RenException; |
|
|
import com.epmet.commons.tools.exception.ValidateException; |
|
|
import com.epmet.commons.tools.exception.ValidateException; |
|
|
|
|
|
import com.epmet.commons.tools.utils.ConvertUtils; |
|
|
import com.epmet.commons.tools.utils.HttpClientManager; |
|
|
import com.epmet.commons.tools.utils.HttpClientManager; |
|
|
|
|
|
import com.epmet.commons.tools.utils.Result; |
|
|
import com.epmet.commons.tools.validator.ValidatorUtils; |
|
|
import com.epmet.commons.tools.validator.ValidatorUtils; |
|
|
import com.epmet.constant.WxmpMessageConstant; |
|
|
import com.epmet.constant.WxmpMessageConstant; |
|
|
import com.epmet.dao.WxmpResiUserSubscribeDao; |
|
|
import com.epmet.dao.WxmpResiUserSubscribeDao; |
|
|
import com.epmet.dao.WxmpTemplateMsgSubscribeStatusDao; |
|
|
import com.epmet.dao.WxmpTemplateMsgSubscribeStatusDao; |
|
|
import com.epmet.dao.WxmpWorkUserSubscribeDao; |
|
|
import com.epmet.dao.WxmpWorkUserSubscribeDao; |
|
|
|
|
|
import com.epmet.dto.form.GetTemplateListFormDTO; |
|
|
import com.epmet.dto.form.StaffBasicInfoFormDTO; |
|
|
import com.epmet.dto.form.StaffBasicInfoFormDTO; |
|
|
import com.epmet.dto.form.UserBasicInfoFormDTO; |
|
|
import com.epmet.dto.form.UserBasicInfoFormDTO; |
|
|
import com.epmet.dto.form.WxSubscribeMessageFormDTO; |
|
|
import com.epmet.dto.form.WxSubscribeMessageFormDTO; |
|
|
|
|
|
import com.epmet.dto.result.GetTemplateListResultDTO; |
|
|
import com.epmet.entity.WxmpMsgSendRecordEntity; |
|
|
import com.epmet.entity.WxmpMsgSendRecordEntity; |
|
|
import com.epmet.entity.WxmpTemplateMsgSubscribeStatusEntity; |
|
|
import com.epmet.entity.WxmpTemplateMsgSubscribeStatusEntity; |
|
|
import com.epmet.exception.WxSubscribeException; |
|
|
import com.epmet.exception.WxSubscribeException; |
|
@ -60,225 +65,258 @@ import java.util.Map; |
|
|
*/ |
|
|
*/ |
|
|
@Service |
|
|
@Service |
|
|
public class WxmpMessageServiceImpl implements WxmpMessageService { |
|
|
public class WxmpMessageServiceImpl implements WxmpMessageService { |
|
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
|
|
private Logger logger = LoggerFactory.getLogger(getClass()); |
|
|
|
|
|
|
|
|
@Autowired |
|
|
@Autowired |
|
|
private WxmpTemplateMsgSubscribeStatusDao msgSubscribeStatusDao; |
|
|
private WxmpTemplateMsgSubscribeStatusDao msgSubscribeStatusDao; |
|
|
|
|
|
|
|
|
@Autowired |
|
|
@Autowired |
|
|
private EpmetUserOpenFeignClient epmetUserOpenFeignClient; |
|
|
private EpmetUserOpenFeignClient epmetUserOpenFeignClient; |
|
|
|
|
|
|
|
|
@Autowired |
|
|
@Autowired |
|
|
private WxmpMessageRedis wxmpMessageRedis; |
|
|
private WxmpMessageRedis wxmpMessageRedis; |
|
|
|
|
|
|
|
|
@Resource |
|
|
@Resource |
|
|
private WxmpResiUserSubscribeDao wxmpResiUserSubscribeDao; |
|
|
private WxmpResiUserSubscribeDao wxmpResiUserSubscribeDao; |
|
|
|
|
|
|
|
|
@Resource |
|
|
@Resource |
|
|
private WxmpWorkUserSubscribeDao wxmpWorkUserSubscribeDao; |
|
|
private WxmpWorkUserSubscribeDao wxmpWorkUserSubscribeDao; |
|
|
|
|
|
|
|
|
@Autowired |
|
|
@Autowired |
|
|
private WxmpMsgSendRecordService wxmpMsgSendRecordService; |
|
|
private WxmpMsgSendRecordService wxmpMsgSendRecordService; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @Description 保存系统授权信息 |
|
|
* @return void |
|
|
* @return void |
|
|
* @Description 保存系统授权信息 |
|
|
* @author wxz |
|
|
* @author wxz |
|
|
* @date 2020.10.21 17:29 |
|
|
* @date 2020.10.21 17:29 |
|
|
*/ |
|
|
*/ |
|
|
@Override |
|
|
@Override |
|
|
public void saveSysAuthorizeInfo(String customerId, String clientType, String alwaysVisit, String subscribeStatus, String userId) { |
|
|
public void saveSysAuthorizeInfo(String customerId, String clientType, String alwaysVisit, String subscribeStatus, String userId) { |
|
|
WxmpTemplateMsgSubscribeStatusEntity userSubscribeStatusEntity = msgSubscribeStatusDao.getUserSubscribeStatusEntity(userId, customerId, clientType); |
|
|
WxmpTemplateMsgSubscribeStatusEntity userSubscribeStatusEntity = msgSubscribeStatusDao.getUserSubscribeStatusEntity(userId, customerId, clientType); |
|
|
if (userSubscribeStatusEntity != null) { |
|
|
if (userSubscribeStatusEntity != null) { |
|
|
userSubscribeStatusEntity.setAlwaysVisit(alwaysVisit); |
|
|
userSubscribeStatusEntity.setAlwaysVisit(alwaysVisit); |
|
|
userSubscribeStatusEntity.setSubscribeStatus(subscribeStatus); |
|
|
userSubscribeStatusEntity.setSubscribeStatus(subscribeStatus); |
|
|
msgSubscribeStatusDao.updateById(userSubscribeStatusEntity); |
|
|
msgSubscribeStatusDao.updateById(userSubscribeStatusEntity); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
userSubscribeStatusEntity = new WxmpTemplateMsgSubscribeStatusEntity(); |
|
|
userSubscribeStatusEntity = new WxmpTemplateMsgSubscribeStatusEntity(); |
|
|
userSubscribeStatusEntity.setCustomerId(customerId); |
|
|
userSubscribeStatusEntity.setCustomerId(customerId); |
|
|
userSubscribeStatusEntity.setClientType(clientType); |
|
|
userSubscribeStatusEntity.setClientType(clientType); |
|
|
userSubscribeStatusEntity.setAlwaysVisit(alwaysVisit); |
|
|
userSubscribeStatusEntity.setAlwaysVisit(alwaysVisit); |
|
|
userSubscribeStatusEntity.setSubscribeStatus(subscribeStatus); |
|
|
userSubscribeStatusEntity.setSubscribeStatus(subscribeStatus); |
|
|
userSubscribeStatusEntity.setUserId(userId); |
|
|
userSubscribeStatusEntity.setUserId(userId); |
|
|
msgSubscribeStatusDao.insert(userSubscribeStatusEntity); |
|
|
msgSubscribeStatusDao.insert(userSubscribeStatusEntity); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @param msgList |
|
|
* @param msgList |
|
|
* @return void |
|
|
* @return void |
|
|
* @Description 发送订阅消息 |
|
|
* @Description 发送订阅消息 |
|
|
* @Author liushaowen |
|
|
* @Author liushaowen |
|
|
* @Date 2020/10/21 15:34 |
|
|
* @Date 2020/10/21 15:34 |
|
|
*/ |
|
|
*/ |
|
|
@Override |
|
|
@Override |
|
|
public void sendWxSubscribeMessage(List<WxSubscribeMessageFormDTO> msgList) { |
|
|
public void sendWxSubscribeMessage(List<WxSubscribeMessageFormDTO> msgList) { |
|
|
logger.info("待发送订阅消息数量:{}", msgList.size()); |
|
|
logger.info("待发送订阅消息数量:{}", msgList.size()); |
|
|
int succecssCount = 0; |
|
|
int succecssCount = 0; |
|
|
for (WxSubscribeMessageFormDTO msg : msgList) { |
|
|
for (WxSubscribeMessageFormDTO msg : msgList) { |
|
|
try { |
|
|
try { |
|
|
String userId = msg.getUserId(); |
|
|
String userId = msg.getUserId(); |
|
|
String clientType = msg.getClientType(); |
|
|
String clientType = msg.getClientType(); |
|
|
String customerId = msg.getCustomerId(); |
|
|
String customerId = msg.getCustomerId(); |
|
|
String templateId = msg.getTemplateId(); |
|
|
String templateId = null; |
|
|
String openId = null; |
|
|
String openId = null; |
|
|
//通过userId获取openId
|
|
|
//通过userId获取openId
|
|
|
try { |
|
|
try { |
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
UserBasicInfoFormDTO userBasicInfoFormDTO = new UserBasicInfoFormDTO(); |
|
|
UserBasicInfoFormDTO userBasicInfoFormDTO = new UserBasicInfoFormDTO(); |
|
|
userBasicInfoFormDTO.setUserId(userId); |
|
|
userBasicInfoFormDTO.setUserId(userId); |
|
|
openId = epmetUserOpenFeignClient.getUserBasicInfo(userBasicInfoFormDTO).getData().getOpenId(); |
|
|
openId = epmetUserOpenFeignClient.getUserBasicInfo(userBasicInfoFormDTO).getData().getOpenId(); |
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
StaffBasicInfoFormDTO staffBasicInfoFormDTO = new StaffBasicInfoFormDTO(); |
|
|
StaffBasicInfoFormDTO staffBasicInfoFormDTO = new StaffBasicInfoFormDTO(); |
|
|
staffBasicInfoFormDTO.setStaffId(userId); |
|
|
staffBasicInfoFormDTO.setStaffId(userId); |
|
|
openId = epmetUserOpenFeignClient.getStaffBasicInfo(staffBasicInfoFormDTO).getData().getOpenId(); |
|
|
openId = epmetUserOpenFeignClient.getStaffBasicInfo(staffBasicInfoFormDTO).getData().getOpenId(); |
|
|
} else { |
|
|
} else { |
|
|
throw new WxSubscribeException("clientType有误",openId); |
|
|
throw new WxSubscribeException("clientType有误", "", openId); |
|
|
} |
|
|
} |
|
|
}catch (Exception e){ |
|
|
} catch (Exception e) { |
|
|
throw new WxSubscribeException("连接User服务失败",""); |
|
|
throw new WxSubscribeException("连接User服务失败", "", ""); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (StringUtils.isBlank(openId)){ |
|
|
if (StringUtils.isBlank(openId)) { |
|
|
throw new WxSubscribeException("openId获取失败",""); |
|
|
throw new WxSubscribeException("openId获取失败", "", ""); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//获取accessToken
|
|
|
//获取accessToken
|
|
|
StringBuilder key = new StringBuilder(msg.getCustomerId()).append(":").append(msg.getClientType()); |
|
|
StringBuilder key = new StringBuilder(msg.getCustomerId()).append(":").append(msg.getClientType()); |
|
|
Map<String, Object> authorizerRefreshToken = new HashMap<>(); |
|
|
Map<String, Object> authorizerRefreshToken = new HashMap<>(); |
|
|
try { |
|
|
try { |
|
|
authorizerRefreshToken = wxmpMessageRedis.getAuthorizerRefreshToken(key.toString()); |
|
|
authorizerRefreshToken = wxmpMessageRedis.getAuthorizerRefreshToken(key.toString()); |
|
|
}catch (Exception e){ |
|
|
} catch (Exception e) { |
|
|
throw new WxSubscribeException("连接缓存服务器失败",openId); |
|
|
throw new WxSubscribeException("连接缓存服务器失败", "", openId); |
|
|
} |
|
|
} |
|
|
String accessToken = (String) authorizerRefreshToken.get(WxmpMessageConstant.AUTHORIZER_ACCESS_TOKEN); |
|
|
String accessToken = (String) authorizerRefreshToken.get(WxmpMessageConstant.AUTHORIZER_ACCESS_TOKEN); |
|
|
if (StringUtils.isBlank(accessToken)) { |
|
|
if (StringUtils.isBlank(accessToken)) { |
|
|
throw new WxSubscribeException("accessToken获取失败",openId); |
|
|
throw new WxSubscribeException("accessToken获取失败", "", openId); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//判断用户是否有次数
|
|
|
//获取模板id
|
|
|
Integer count = null; |
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
templateId = wxmpResiUserSubscribeDao.getResiSubscribeTemplateId(openId, templateId, customerId); |
|
|
count = wxmpResiUserSubscribeDao.getResiSubscribeInfo(openId, templateId, customerId); |
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
templateId = wxmpWorkUserSubscribeDao.getWorkSubscribeTemplateId(openId, templateId, customerId); |
|
|
count = wxmpWorkUserSubscribeDao.getWorkSubscribeInfo(openId, templateId, customerId); |
|
|
} |
|
|
} |
|
|
if (StringUtils.isBlank(templateId)) { |
|
|
if (count == null) { |
|
|
throw new WxSubscribeException("获取模板id失败", "", openId); |
|
|
//用户未订阅
|
|
|
} |
|
|
throw new WxSubscribeException("用户未订阅",openId); |
|
|
|
|
|
} |
|
|
|
|
|
if (count == 0) { |
|
|
|
|
|
throw new WxSubscribeException("用户可用额度不足",openId); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//发送消息
|
|
|
//判断用户是否有次数
|
|
|
JSONObject jsonObject = new JSONObject(); |
|
|
Integer count = null; |
|
|
JSONObject data = new JSONObject(); |
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
//必填项
|
|
|
count = wxmpResiUserSubscribeDao.getResiSubscribeInfo(openId, templateId, customerId); |
|
|
jsonObject.put(WxmpMessageConstant.ACCESS_TOKEN, accessToken); |
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
jsonObject.put(WxmpMessageConstant.TOUSER, openId); |
|
|
count = wxmpWorkUserSubscribeDao.getWorkSubscribeInfo(openId, templateId, customerId); |
|
|
jsonObject.put(WxmpMessageConstant.TEMPLATE_ID, templateId); |
|
|
} |
|
|
data.put(WxmpMessageConstant.TITLE, new JSONObject().put("value", "您有一条" + msg.getBehaviorType())); |
|
|
if (count == null) { |
|
|
data.put(WxmpMessageConstant.MESSAGE_CONTENT, new JSONObject().put("value", msg.getMessageContent())); |
|
|
//用户未订阅
|
|
|
data.put(WxmpMessageConstant.MESSAGE_TIME, new JSONObject().put("value", msg.getMessageTime())); |
|
|
throw new WxSubscribeException("用户未订阅", templateId, openId); |
|
|
jsonObject.put(WxmpMessageConstant.DATA, data); |
|
|
} |
|
|
EnvEnum envEnum = EnvEnum.getCurrentEnv(); |
|
|
if (count == 0) { |
|
|
//选填项
|
|
|
throw new WxSubscribeException("用户可用额度不足", templateId, openId); |
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
} |
|
|
jsonObject.put(WxmpMessageConstant.PAGE, WxmpMessageConstant.PAGE_RESI); |
|
|
|
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.PAGE, WxmpMessageConstant.PAGE_WORK); |
|
|
|
|
|
} |
|
|
|
|
|
//开发环境
|
|
|
|
|
|
if ("dev".equals(envEnum.getCode())){ |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.MINIPROGRAM_STATE, WxmpMessageConstant.STATE_DEV); |
|
|
|
|
|
} |
|
|
|
|
|
//测试环境
|
|
|
|
|
|
if ("test".equals(envEnum.getCode())){ |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.MINIPROGRAM_STATE, WxmpMessageConstant.STATE_TEST); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String resultStr = HttpClientManager.getInstance().sendPostByJSON(WxmpMessageConstant.SEND_MESSAGE + accessToken, JSON.toJSONString(jsonObject)).getData(); |
|
|
//发送消息
|
|
|
Map<String, Object> resultMap = JSON.parseObject(resultStr, Map.class); |
|
|
JSONObject jsonObject = new JSONObject(); |
|
|
Object errcode = resultMap.get(WxmpMessageConstant.ERR_CODE); |
|
|
JSONObject data = new JSONObject(); |
|
|
if (errcode.equals(NumConstant.ZERO)) { |
|
|
//必填项
|
|
|
//发送成功
|
|
|
jsonObject.put(WxmpMessageConstant.ACCESS_TOKEN, accessToken); |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.TOUSER, openId); |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.TEMPLATE_ID, templateId); |
|
|
|
|
|
data.put(WxmpMessageConstant.TITLE, new JSONObject().put("value", ("您有一条" + msg.getBehaviorType()).substring(0, WxmpMessageConstant.TITLE_LIMIT))); |
|
|
|
|
|
data.put(WxmpMessageConstant.MESSAGE_CONTENT, new JSONObject().put("value", msg.getMessageContent().substring(0, WxmpMessageConstant.MESSAGE_CONTENT_LIMIT))); |
|
|
|
|
|
data.put(WxmpMessageConstant.MESSAGE_TIME, new JSONObject().put("value", new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()))); |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.DATA, data); |
|
|
|
|
|
EnvEnum envEnum = EnvEnum.getCurrentEnv(); |
|
|
|
|
|
//选填项
|
|
|
|
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.PAGE, WxmpMessageConstant.PAGE_RESI); |
|
|
|
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.PAGE, WxmpMessageConstant.PAGE_WORK); |
|
|
|
|
|
} |
|
|
|
|
|
//开发环境
|
|
|
|
|
|
if ("dev".equals(envEnum.getCode())) { |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.MINIPROGRAM_STATE, WxmpMessageConstant.STATE_DEV); |
|
|
|
|
|
} |
|
|
|
|
|
//测试环境
|
|
|
|
|
|
if ("test".equals(envEnum.getCode())) { |
|
|
|
|
|
jsonObject.put(WxmpMessageConstant.MINIPROGRAM_STATE, WxmpMessageConstant.STATE_TEST); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
//订阅条数-1
|
|
|
String resultStr = HttpClientManager.getInstance().sendPostByJSON(WxmpMessageConstant.SEND_MESSAGE + accessToken, JSON.toJSONString(jsonObject)).getData(); |
|
|
int decrease = 0; |
|
|
Map<String, Object> resultMap = JSON.parseObject(resultStr, Map.class); |
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
Object errcode = resultMap.get(WxmpMessageConstant.ERR_CODE); |
|
|
decrease = wxmpResiUserSubscribeDao.decreaseResiSubscribeCount(openId, templateId, customerId, 1); |
|
|
if (errcode.equals(NumConstant.ZERO)) { |
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
//发送成功
|
|
|
decrease = wxmpWorkUserSubscribeDao.decreaseWorkSubscribeCount(openId, templateId, customerId, 1); |
|
|
|
|
|
} |
|
|
|
|
|
if (decrease == 0) { |
|
|
|
|
|
logger.error("消息{}发送成功但订阅条数-1失败", JSON.toJSONString(msg)); |
|
|
|
|
|
} |
|
|
|
|
|
//存表
|
|
|
|
|
|
int saveRes = wxmpMsgSendRecordService.saveRecord(initRecord(msg,openId,WxmpMessageConstant.SUCCESS)); |
|
|
|
|
|
if (saveRes == 0) { |
|
|
|
|
|
logger.error("消息{}发送成功但存入记录表失败", JSON.toJSONString(msg)); |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
//发送失败
|
|
|
|
|
|
//用户拒绝,需清空订阅表条数,修改订阅状态
|
|
|
|
|
|
if (errcode.equals(WxmpMessageConstant.USER_REFUSED)) { |
|
|
|
|
|
int clear = 0; |
|
|
|
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
|
|
|
clear = wxmpResiUserSubscribeDao.clearResiSubscribeCount(openId, templateId, customerId); |
|
|
|
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
|
|
|
clear = wxmpWorkUserSubscribeDao.clearWorkSubscribeCount(openId, templateId, customerId); |
|
|
|
|
|
} |
|
|
|
|
|
if (clear == 0) { |
|
|
|
|
|
logger.error("消息{}发送失败且清空订阅条数失败", JSON.toJSONString(msg)); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//抛出错误
|
|
|
//订阅条数-1
|
|
|
throw new WxSubscribeException(String.valueOf(resultMap.get(WxmpMessageConstant.ERR_MSG)),openId); |
|
|
int decrease = 0; |
|
|
} |
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
|
|
|
decrease = wxmpResiUserSubscribeDao.decreaseResiSubscribeCount(openId, templateId, customerId, 1); |
|
|
|
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
|
|
|
decrease = wxmpWorkUserSubscribeDao.decreaseWorkSubscribeCount(openId, templateId, customerId, 1); |
|
|
|
|
|
} |
|
|
|
|
|
if (decrease == 0) { |
|
|
|
|
|
logger.error("消息{}发送成功但订阅条数-1失败", JSON.toJSONString(msg)); |
|
|
|
|
|
} |
|
|
|
|
|
//存表
|
|
|
|
|
|
int saveRes = wxmpMsgSendRecordService.saveRecord(initRecord(msg, templateId, openId, WxmpMessageConstant.SUCCESS)); |
|
|
|
|
|
if (saveRes == 0) { |
|
|
|
|
|
logger.error("消息{}发送成功但存入记录表失败", JSON.toJSONString(msg)); |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
//发送失败
|
|
|
|
|
|
//用户拒绝,需清空订阅表条数,修改订阅状态
|
|
|
|
|
|
if (errcode.equals(WxmpMessageConstant.USER_REFUSED)) { |
|
|
|
|
|
int clear = 0; |
|
|
|
|
|
if (WxmpMessageConstant.RESI.equals(clientType)) { |
|
|
|
|
|
clear = wxmpResiUserSubscribeDao.clearResiSubscribeCount(openId, templateId, customerId); |
|
|
|
|
|
} else if (WxmpMessageConstant.WORK.equals(clientType)) { |
|
|
|
|
|
clear = wxmpWorkUserSubscribeDao.clearWorkSubscribeCount(openId, templateId, customerId); |
|
|
|
|
|
} |
|
|
|
|
|
if (clear == 0) { |
|
|
|
|
|
logger.error("消息{}发送失败且清空订阅条数失败", JSON.toJSONString(msg)); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
succecssCount++; |
|
|
//抛出错误
|
|
|
} catch (Exception e) { |
|
|
throw new WxSubscribeException(String.valueOf(resultMap.get(WxmpMessageConstant.ERR_MSG)),templateId, openId); |
|
|
String errMsg = e.getMessage(); |
|
|
} |
|
|
//ValidateException错误信息为getMsg
|
|
|
|
|
|
|
|
|
succecssCount++; |
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
String errMsg = e.getMessage(); |
|
|
|
|
|
//ValidateException错误信息为getMsg
|
|
|
// if (StringUtils.isBlank(errMsg) && e instanceof ValidateException) {
|
|
|
// if (StringUtils.isBlank(errMsg) && e instanceof ValidateException) {
|
|
|
// errMsg = ((ValidateException) e).getMsg();
|
|
|
// errMsg = ((ValidateException) e).getMsg();
|
|
|
// }
|
|
|
// }
|
|
|
if (e instanceof WxSubscribeException){ |
|
|
if (e instanceof WxSubscribeException) { |
|
|
//存表
|
|
|
//存表
|
|
|
WxmpMsgSendRecordEntity wxmpMsgSendRecordEntity = initRecord(msg, ((WxSubscribeException) e).getOpenId(), WxmpMessageConstant.ERROR); |
|
|
WxmpMsgSendRecordEntity wxmpMsgSendRecordEntity = initRecord(msg, ((WxSubscribeException) e).getTemplateId(), ((WxSubscribeException) e).getOpenId(), WxmpMessageConstant.ERROR); |
|
|
wxmpMsgSendRecordEntity.setReason(errMsg); |
|
|
wxmpMsgSendRecordEntity.setReason(errMsg); |
|
|
int saveRes = wxmpMsgSendRecordService.saveRecord(wxmpMsgSendRecordEntity); |
|
|
int saveRes = wxmpMsgSendRecordService.saveRecord(wxmpMsgSendRecordEntity); |
|
|
if (saveRes == 0) { |
|
|
if (saveRes == 0) { |
|
|
logger.error("消息{}发送失败且存入记录表失败", JSON.toJSONString(msg)); |
|
|
logger.error("消息{}发送失败且存入记录表失败", JSON.toJSONString(msg)); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
logger.error("消息:{}发送失败,原因是:{}", JSON.toJSONString(msg), errMsg); |
|
|
logger.error("消息:{}发送失败,原因是:{}", JSON.toJSONString(msg), errMsg); |
|
|
continue; |
|
|
continue; |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
logger.info("{}条消息中的{}条发送成功", msgList.size(), succecssCount); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//初始化记录对象
|
|
|
|
|
|
private WxmpMsgSendRecordEntity initRecord(WxSubscribeMessageFormDTO msg, String templateId, String openId, String status) { |
|
|
|
|
|
WxmpMsgSendRecordEntity wxmpMsgSendRecordEntity = new WxmpMsgSendRecordEntity(); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setCustomerId(msg.getCustomerId()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setClientType(msg.getClientType()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setTemplateId(templateId); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setUserId(msg.getUserId()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setWxOpenId(openId); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setBehaviorType(msg.getBehaviorType()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setTitle("您有一条" + msg.getBehaviorType()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setMessageContent(msg.getMessageContent()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setMessageTime(new Date()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setResult(status); |
|
|
|
|
|
return wxmpMsgSendRecordEntity; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* @return |
|
|
|
|
|
* @Description 居民端、工作端-获取客户小程序模板列表 |
|
|
|
|
|
* @author sun |
|
|
|
|
|
*/ |
|
|
|
|
|
@Override |
|
|
|
|
|
public List<GetTemplateListResultDTO> templateList(GetTemplateListFormDTO formDTO) { |
|
|
|
|
|
GetTemplateListFormDTO dto = ConvertUtils.sourceToTarget(formDTO, GetTemplateListFormDTO.class); |
|
|
|
|
|
String url = "https://epmet-cloud.elinkservice.cn/api/third/personaltemplate/templatelist"; |
|
|
|
|
|
//String url = "http://localhost:8080/api/third/personaltemplate/templatelist";
|
|
|
|
|
|
String data = HttpClientManager.getInstance().sendPostByJSON(url, JSON.toJSONString(dto)).getData(); |
|
|
|
|
|
logger.info("ThirdLoginServiceImpl.getUserWeChat:httpclient->url:"+url+",结果->"+data); |
|
|
|
|
|
JSONObject toResult = JSON.parseObject(data); |
|
|
|
|
|
Result mapToResult = ConvertUtils.mapToEntity(toResult, Result.class); |
|
|
|
|
|
if (null != toResult.get("code")) { |
|
|
|
|
|
mapToResult.setCode(((Integer) toResult.get("code")).intValue()); |
|
|
} |
|
|
} |
|
|
logger.info("{}条消息中的{}条发送成功", msgList.size(), succecssCount); |
|
|
if (!mapToResult.success()) { |
|
|
} |
|
|
logger.error("调用epmet_third服务获取小程序消息订阅模板数据失败"); |
|
|
//初始化记录对象
|
|
|
throw new RenException(mapToResult.getCode()); |
|
|
private WxmpMsgSendRecordEntity initRecord(WxSubscribeMessageFormDTO msg, String openId, String status){ |
|
|
|
|
|
WxmpMsgSendRecordEntity wxmpMsgSendRecordEntity = new WxmpMsgSendRecordEntity(); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setCustomerId(msg.getCustomerId()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setClientType(msg.getClientType()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setTemplateId(msg.getTemplateId()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setUserId(msg.getUserId()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setWxOpenId(openId); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setBehaviorType(msg.getBehaviorType()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setTitle("您有一条" + msg.getBehaviorType()); |
|
|
|
|
|
wxmpMsgSendRecordEntity.setMessageContent(msg.getMessageContent()); |
|
|
|
|
|
try { |
|
|
|
|
|
wxmpMsgSendRecordEntity.setMessageTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(msg.getMessageTime())); |
|
|
|
|
|
} catch (ParseException e) { |
|
|
|
|
|
wxmpMsgSendRecordEntity.setMessageTime(new Date()); |
|
|
|
|
|
} |
|
|
} |
|
|
wxmpMsgSendRecordEntity.setResult(status); |
|
|
List<GetTemplateListResultDTO> resultList = (List<GetTemplateListResultDTO>) mapToResult.getData(); |
|
|
return wxmpMsgSendRecordEntity; |
|
|
return resultList; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|