Browse Source

[主动注券][新增]:主动注券增加公众号模板消息

release_toaliyun_real
Stormeye Wu 7 years ago
parent
commit
92b1e826a8
2 changed files with 127 additions and 27 deletions
  1. +1
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java
  2. +126
    -27
      mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java

+ 1
- 0
mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java View File

@@ -11,6 +11,7 @@ public enum EnumTemplateType {
VERIFY_FAIL(2, "核销失败消息"), // 小程序
AUDIT_MESSAGE(101, "公众号审核结果通知"), // 公众号
VERIFY_RESULT(102, "公众号卡券核销通知"), // 公众号
GIFT_MESSAGE(103, "公众号购票成功通知"), // 公众号
;

public static EnumTemplateType getEnum(Integer code) {


+ 126
- 27
mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java View File

@@ -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();


Loading…
Cancel
Save