|
|
|
@@ -1,10 +1,15 @@ |
|
|
|
package com.iformall.service.impl; |
|
|
|
|
|
|
|
import cn.binarywang.wx.miniapp.bean.WxMaTemplateData; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.github.pagehelper.PageHelper; |
|
|
|
import com.github.pagehelper.PageInfo; |
|
|
|
import com.google.common.collect.Lists; |
|
|
|
import com.iformall.common.ErrorCode; |
|
|
|
import com.iformall.common.IdWorker; |
|
|
|
import com.iformall.domain.po.*; |
|
|
|
import com.iformall.domain.po.msg.AppUniformMsg; |
|
|
|
import com.iformall.domain.po.msg.MpAppMsg; |
|
|
|
import com.iformall.domain.po.msg.WxMsgRecord; |
|
|
|
import com.iformall.domain.vo.WxCouponSendVo; |
|
|
|
import com.iformall.enums.*; |
|
|
|
@@ -13,6 +18,8 @@ import com.iformall.mapper.*; |
|
|
|
import com.iformall.mq.MqBaseProducer; |
|
|
|
import com.iformall.service.*; |
|
|
|
import com.iformall.utils.DateUtils; |
|
|
|
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
@@ -20,6 +27,7 @@ import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Propagation; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
import java.util.Date; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.List; |
|
|
|
@@ -53,6 +61,8 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { |
|
|
|
WxCUserMapper wxCUserMapper; |
|
|
|
@Autowired |
|
|
|
WxAppinfoService wxAppinfoService; |
|
|
|
@Autowired |
|
|
|
WxAuthorizerInfoMapper authorizerInfoMapper; |
|
|
|
|
|
|
|
@Override |
|
|
|
public PageInfo<WxCouponSendVo> listAsPage(WxCouponSend record, Integer pageIndex, Integer pageSize) { |
|
|
|
@@ -230,39 +240,128 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error(e.getMessage()); |
|
|
|
} |
|
|
|
// 发送短信 |
|
|
|
if (send.getSendSms().equals(EnumCouponSendSms.YES.getCode())) { |
|
|
|
logger.info("》》》》》》》》》》》"); |
|
|
|
logger.info("场景投放发送短信开始"); |
|
|
|
logger.info("》》》》》》》》》》》"); |
|
|
|
//券名 |
|
|
|
String title = send.getTitle(); |
|
|
|
//找出用户手机号 |
|
|
|
WxCUser user = wxCUserMapper.selectByPrimaryKey(cUserId); |
|
|
|
String phone = user.getPhone(); |
|
|
|
//小程序名称 |
|
|
|
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(tenantId); |
|
|
|
String appName = appInfo.getName(); |
|
|
|
Map<String, String> msgReplaceMap = new HashMap(); |
|
|
|
msgReplaceMap.put("title", title); |
|
|
|
msgReplaceMap.put("app", appName); |
|
|
|
|
|
|
|
WxMsgRecord wxMsgRecord = new WxMsgRecord(); |
|
|
|
wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); |
|
|
|
wxMsgRecord.setModelType(EnumMsgModel.COUPON_SEND.getCode()); |
|
|
|
wxMsgRecord.setReceiver(phone); |
|
|
|
wxMsgRecord.setTenantId(tenantId); |
|
|
|
wxMsgRecord.setDynamicContentMap(msgReplaceMap); |
|
|
|
mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); |
|
|
|
logger.info("》》》》》》》》》》》"); |
|
|
|
logger.info("场景投放发送短信结束"); |
|
|
|
logger.info("》》》》》》》》》》》"); |
|
|
|
|
|
|
|
// 查找cUser |
|
|
|
WxCUser user = wxCUserMapper.selectByPrimaryKey(cUserId); |
|
|
|
if(user == null) { |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 发送消息 |
|
|
|
if(couponOrder != null) { |
|
|
|
sendMsgForSendCoupon(tenantId, send, couponOrder, user); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return bRet; |
|
|
|
} |
|
|
|
|
|
|
|
private void sendMsgForSendCoupon(String tenantId, WxCouponSend send, WxCouponOrder couponOrder, WxCUser user) { |
|
|
|
// 发送 公众号 模板消息 |
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); |
|
|
|
String gotopage = "pages/couponorder/index/index"; |
|
|
|
// 7. 公众号消息 |
|
|
|
if(StringUtils.isNotBlank(user.getMpAppId()) && |
|
|
|
StringUtils.isNotBlank(user.getMpOpenId()) && |
|
|
|
user.getMpSubscribe().equals(EnumUserIsSubscribe.YES.getCode())) { |
|
|
|
// 已关注公众号 |
|
|
|
/** |
|
|
|
* 购票成功通知 |
|
|
|
* {first.DATA}} |
|
|
|
* 订单号:{{keyword1.DATA}} |
|
|
|
* 兑换券:{{keyword2.DATA}} |
|
|
|
* 订单详情:{{keyword3.DATA}} |
|
|
|
* 有效期至:{{keyword4.DATA}} |
|
|
|
* 购买数量:{{keyword5.DATA}} |
|
|
|
* {{remark.DATA}} |
|
|
|
*/ |
|
|
|
MpAppMsg mpAppMsg = new MpAppMsg(); |
|
|
|
mpAppMsg.setMsgType(EnumMsgRecordType.PUBLIC.getCode()); |
|
|
|
mpAppMsg.setAppId(user.getMpAppId()); |
|
|
|
mpAppMsg.setTo(user.getMpOpenId()); |
|
|
|
mpAppMsg.setMiniAppId(user.getAppId()); |
|
|
|
mpAppMsg.setMiniPagePath(gotopage); |
|
|
|
mpAppMsg.setTenantId(couponOrder.getTenantId()); |
|
|
|
mpAppMsg.setTemplateType(EnumTemplateType.GIFT_MESSAGE.getCode()); |
|
|
|
mpAppMsg.setTemplateDataList(Lists.newArrayList( |
|
|
|
new WxMpTemplateData("first", "您有新的惊喜,请点详情查看", "#173177"), |
|
|
|
new WxMpTemplateData("keyword1", String.valueOf(couponOrder.getOrderId()), "#173177"), |
|
|
|
new WxMpTemplateData("keyword2", couponOrder.getId().toString(), "#173177"), |
|
|
|
new WxMpTemplateData("keyword3", send.getTitle(), "#173177"), |
|
|
|
new WxMpTemplateData("keyword4", dateFormat.format(couponOrder.getExpiredTime()), "#173177"), |
|
|
|
new WxMpTemplateData("keyword5", "1", "#173177"), |
|
|
|
new WxMpTemplateData("remark", "更多惊喜等您来!", "#173177") |
|
|
|
)); |
|
|
|
|
|
|
|
try { |
|
|
|
mqBaseProducer.sendMessage(mpAppMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("购票成功-公众号-模板消息发送失败: " + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.MP_TEMPLATE_SEND_FAILED); |
|
|
|
} |
|
|
|
} else { |
|
|
|
// 可能未关注公众号, 用户可能收不到 |
|
|
|
// 8. 微信小程序-统一消息 |
|
|
|
// 获取小程序关联的服务号 |
|
|
|
WxAuthorizerInfo authQ = new WxAuthorizerInfo(); |
|
|
|
authQ.setAuthorizerAppid(user.getAppId()); |
|
|
|
authQ.setTenantId(user.getTenantId()); |
|
|
|
WxAuthorizerInfo weappInfo = authorizerInfoMapper.findMp(authQ); |
|
|
|
if(weappInfo != null) { |
|
|
|
AppUniformMsg appUniformMsg = new AppUniformMsg(); |
|
|
|
appUniformMsg.setMsgType(EnumMsgRecordType.SMART_APP_UNIFORM.getCode()); |
|
|
|
appUniformMsg.setAppId(user.getAppId()); |
|
|
|
appUniformMsg.setTo(user.getOpenId()); |
|
|
|
appUniformMsg.setTemplateType(EnumTemplateType.GIFT_MESSAGE.getCode()); |
|
|
|
appUniformMsg.setPagePath(gotopage); |
|
|
|
appUniformMsg.setUrl("http://iformall.com"); |
|
|
|
appUniformMsg.setMpAppId(weappInfo.getAuthorizerAppid()); |
|
|
|
appUniformMsg.setTemplateDataList(Lists.newArrayList( |
|
|
|
new WxMaTemplateData("first", "您有新的惊喜,请点详情查看", "#173177"), |
|
|
|
new WxMaTemplateData("keyword1", String.valueOf(couponOrder.getOrderId()), "#173177"), |
|
|
|
new WxMaTemplateData("keyword2", couponOrder.getId().toString(), "#173177"), |
|
|
|
new WxMaTemplateData("keyword3", send.getTitle(), "#173177"), |
|
|
|
new WxMaTemplateData("keyword4", dateFormat.format(couponOrder.getExpiredTime()), "#173177"), |
|
|
|
new WxMaTemplateData("keyword5", "1", "#173177"), |
|
|
|
new WxMaTemplateData("remark", "更多惊喜等您来!", "#173177") |
|
|
|
)); |
|
|
|
try { |
|
|
|
mqBaseProducer.sendMessage(appUniformMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("核销-公众号-模板消息发送失败: " + e.getMessage()); |
|
|
|
throw new MallinkException(ErrorCode.UNIFORM_SEND_FAILED); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 发送短信 |
|
|
|
if (send.getSendSms().equals(EnumCouponSendSms.YES.getCode())) { |
|
|
|
logger.info("》》》》》》》》》》》"); |
|
|
|
logger.info("场景投放发送短信开始"); |
|
|
|
logger.info("》》》》》》》》》》》"); |
|
|
|
//券名 |
|
|
|
String title = send.getTitle(); |
|
|
|
//找出用户手机号 |
|
|
|
String phone = user.getPhone(); |
|
|
|
//小程序名称 |
|
|
|
WxAppinfo appInfo = wxAppinfoService.getCAppInfo(tenantId); |
|
|
|
String appName = appInfo.getName(); |
|
|
|
Map<String, String> msgReplaceMap = new HashMap(); |
|
|
|
msgReplaceMap.put("title", title); |
|
|
|
msgReplaceMap.put("app", appName); |
|
|
|
|
|
|
|
WxMsgRecord wxMsgRecord = new WxMsgRecord(); |
|
|
|
wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); |
|
|
|
wxMsgRecord.setModelType(EnumMsgModel.COUPON_SEND.getCode()); |
|
|
|
wxMsgRecord.setReceiver(phone); |
|
|
|
wxMsgRecord.setTenantId(tenantId); |
|
|
|
wxMsgRecord.setDynamicContentMap(msgReplaceMap); |
|
|
|
mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); |
|
|
|
logger.info("》》》》》》》》》》》"); |
|
|
|
logger.info("场景投放发送短信结束"); |
|
|
|
logger.info("》》》》》》》》》》》"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void updateStatusByCouponId(Long couponId, String tenantId, int status) { |
|
|
|
WxCouponSend wxCouponSend = new WxCouponSend(); |
|
|
|
|