From 92b1e826a8dfcc4cfc14bb668acb1fc12e2f287e Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Tue, 23 Apr 2019 22:03:29 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=B8=BB=E5=8A=A8=E6=B3=A8=E5=88=B8][?= =?UTF-8?q?=E6=96=B0=E5=A2=9E]:=E4=B8=BB=E5=8A=A8=E6=B3=A8=E5=88=B8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=AC=E4=BC=97=E5=8F=B7=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/iformall/enums/EnumTemplateType.java | 1 + .../service/impl/WxCouponSendServiceImpl.java | 153 ++++++++++++++---- 2 files changed, 127 insertions(+), 27 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java b/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java index 06150bb75..a8c3a7e47 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumTemplateType.java @@ -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) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java index fd73e7917..e9427e485 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java @@ -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 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 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 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();