diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java index 6ce0fdbae..92eec461f 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxCouponOrderController.java @@ -5,11 +5,11 @@ import com.iformall.common.ErrorCode; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.WxCouponOrder; +import com.iformall.domain.po.WxMerchantBUser; import com.iformall.domain.vo.WxCouponOrderCVo; -import com.iformall.enums.EnumCouponChannelActivityStatus; -import com.iformall.enums.EnumCouponOrderValidStatus; import com.iformall.exception.MallinkException; import com.iformall.service.WxCouponOrderService; +import com.iformall.service.WxMerchantBUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -32,6 +32,9 @@ public class WxCouponOrderController extends BaseController { @Autowired private WxCouponOrderService wxCouponOrderService; + @Autowired + private WxMerchantBUserService wxMerchantBUserService; + @ApiOperation("分页列表接口") @GetMapping("list") @ApiImplicitParams({ @@ -136,9 +139,21 @@ public class WxCouponOrderController extends BaseController { } } + WxCouponOrder wxCouponOrder = wxCouponOrderService.getById(couponOrderId); + if (wxCouponOrder == null) { + logger.error("券ID不存在:" + couponOrderId); + return new ResultData(ErrorCode.COUPON_ORDER_IS_NULL); + } + + WxMerchantBUser wxMerchantBUser = wxMerchantBUserService.getById(getUserId()); + if (wxMerchantBUser == null) { + logger.error("核销员ID不存在:" + getUserId()); + throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "核销员ID不存在或者无权限"); + } + WxCouponOrder couponOrder = null; try { - couponOrder = wxCouponOrderService.verify(couponOrderId, getUser().getId()); + couponOrder = wxCouponOrderService.verify(wxCouponOrder, wxMerchantBUser); } catch (MallinkException e) { logger.error("核销异常: " + e.getMessage()); return new ResultData(e.getErrorCode(), e.getMessage()); @@ -147,36 +162,8 @@ public class WxCouponOrderController extends BaseController { return new ResultData(ErrorCode.VERIFY_ERROR, e.getMessage()); } - if (couponOrder != null) { - try { - // 核销分账 - wxCouponOrderService.shareAfterVerify(couponOrder, getUser().getMerchantId()); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - try { - // 核销补贴 - wxCouponOrderService.subsidyAfterVerify(couponOrder, getUser().getMerchantId()); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - boolean bSentCoupon = false; - - // 核销发券 - try { - bSentCoupon = wxCouponOrderService.sendCouponAfterVerify(couponOrder, getUser()); - } catch (Exception e) { - logger.error(e.getMessage()); - } - - // 核销发模板消息 - try { - wxCouponOrderService.sendVerifyMsg(couponOrder, getUser(), bSentCoupon); - } catch (Exception e) { - logger.error("核销发送消息发生错误:"+e.getMessage()); - } + if(couponOrder != null) { + wxCouponOrderService.sendInsideCouponVerifyMsg(couponOrder, wxMerchantBUser); } return new ResultData(couponOrder); diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java index 569781bca..8f8577d51 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java @@ -32,6 +32,8 @@ public class MqBaseConsumer { private SendWeappUniformMsgServiceImpl sendWeappUniformMsgService; @Autowired private FmInsideOrderSuccessMsgServiceImpl fmInsideOrderSuccessMsgService; + @Autowired + private FmInsideCouponVerifyMsgServiceImpl fmInsideCouponVerifyMsgService; public void doMessage(String message) { log.info("received message: {}", message); @@ -68,6 +70,10 @@ public class MqBaseConsumer { // 内部消息 - 下订单成功 FmInsideOrderSuccessMsg msg = (FmInsideOrderSuccessMsg)JsonUtil.readValue(message,FmInsideOrderSuccessMsg.class); fmInsideOrderSuccessMsgService.send(msg); + } else if(EnumMsgRecordType.INSIDE_COUPON_VERIFY.getCode().equals(baseMsg.getMsgType())) { + // 内部消息 - 券核销 + FmInsideCouponVerifyMsg msg = (FmInsideCouponVerifyMsg)JsonUtil.readValue(message,FmInsideCouponVerifyMsg.class); + fmInsideCouponVerifyMsgService.send(msg); } baseMsg.setMsgStatus(EnumMsgRecordStatus.CONSUME_SUCC.getCode()); wxMsgRecordMapper.update(baseMsg); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCouponVerifyMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCouponVerifyMsg.java new file mode 100644 index 000000000..880fd5c81 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideCouponVerifyMsg.java @@ -0,0 +1,19 @@ +package com.iformall.domain.po.msg; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class FmInsideCouponVerifyMsg extends BaseMsg{ + private static final long serialVersionUID = 1L; + + @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value = "券包ID", name = "couponOrderId") + private Long couponOrderId; + @io.swagger.annotations.ApiModelProperty(value = "B端用户ID", name = "bUserId") + private Long bUserId; +} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/MpAppMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/MpAppMsg.java index 0dea4f57a..54429f151 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/msg/MpAppMsg.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/MpAppMsg.java @@ -1,6 +1,5 @@ package com.iformall.domain.po.msg; -import com.iformall.domain.po.msg.BaseMsg; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java index b5c5445db..c41c94487 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java @@ -13,6 +13,7 @@ public enum EnumMsgRecordType { SMART_APP_UNIFORM(7, "小程序统一消息"), WEBSOCKET_APP(8, "小程序websocket"), INSIDE_ORDER_SUCCESS(100, "下订单成功"), + INSIDE_COUPON_VERIFY(101, "券核销"), ; public static EnumMsgRecordType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java index 9a90ce41a..20c02ef6c 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxCouponOrderMapper.java @@ -12,19 +12,25 @@ import java.util.Map; public interface WxCouponOrderMapper extends CommonMapper { + List findList(WxCouponOrder wxCouponOrder); + + List findListOfOrderedByDate(Map dateMap); + List findListOfVerifiedByDate(Map dateMap); + + List findExpiredFreeCouponOrderByValidDate(); + + List findExpiredCouponOrderByValidDate(); + + // 券包核销 + int updateVerifyCouponOrder(WxCouponOrder wxCouponOrder); + //统一的计数接口 int findCount(WxCouponOrder wxCouponOrder); //统一额度统计接口 int queryPriceTotal(WxCouponOrder wxCouponOrder); - - List findList(WxCouponOrder wxCouponOrder); - List findCarListOfCUser(WxCouponOrder wxCouponOrder); - List findListOfOrderedByDate(Map dateMap); - List findListOfVerifiedByDate(Map dateMap); - List findListOfOrderedByDateForBUser(Map dateMap); List findListOfVerifiedByDateForBUser(Map dateMap); @@ -57,9 +63,6 @@ public interface WxCouponOrderMapper extends CommonMapper { List queryForSceneRepotyHistoryOrdered(HashMap params); - List findExpiredFreeCouponOrderByValidDate(); - - List findExpiredCouponOrderByValidDate(); //// 卡相关接口 List findCardListOfCUser(WxCardCVo wxCardCVo); diff --git a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java index 9314b254b..4ca99cc6b 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxCouponOrderService.java @@ -48,10 +48,23 @@ public interface WxCouponOrderService { /** * 根据主键couponOrderId(券码)核销 * - * @param couponOrderId - * @param bUserId 核销人(登录用户) + * @param couponOrder + * @param bUser 核销人(登录用户) + */ + WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser); + + /** + * 核销后发送消息 + */ + void sendInsideCouponVerifyMsg(WxCouponOrder couponOrder, WxMerchantBUser bUser); + + /** + * 核销后处理 + * + * @param couponOrder + * @param bUser 核销人(登录用户) */ - WxCouponOrder verify(Long couponOrderId, Long bUserId); + void actionAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser); /** * 核销发券 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index efe35eb30..77cfed67c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -11,9 +11,7 @@ import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.dto.WxSharingOrderDto; 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.SmartAppMsg; +import com.iformall.domain.po.msg.*; import com.iformall.domain.vo.*; import com.iformall.enums.*; import com.iformall.exception.MallinkException; @@ -276,61 +274,96 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public WxCouponOrder verify(Long couponOrderId, Long bUserId) { + public WxCouponOrder verify(WxCouponOrder couponOrder, WxMerchantBUser bUser) { - WxCouponOrder wxCouponOrder = wxCouponOrderMapper.selectByPrimaryKey(couponOrderId); - if (wxCouponOrder == null) { - logger.error("券ID不存在:" + couponOrderId); - throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); - } - - WxMerchantBUser wxMerchantBUser = wxMerchantBUserMapper.selectByPrimaryKey(bUserId.longValue()); - if (wxMerchantBUser == null) { - logger.error("核销员ID不存在:" + bUserId); - throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); - } - - WxCoupon wxCoupon = wxCouponMapper.selectByPrimaryKey(wxCouponOrder.getCouponId()); + // 1. 获取券信息 + WxCoupon wxCoupon = wxCouponMapper.selectByPrimaryKey(couponOrder.getCouponId()); if (wxCoupon == null) { - logger.error("券: coupon-" + wxCoupon.getId() + "不存在" + "couponOrder-" + wxCouponOrder.getId()); + logger.error("券: coupon-" + wxCoupon.getId() + "不存在" + "couponOrder-" + couponOrder.getId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); - }else { - WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); - wxCouponMerchant.setProductId(wxCoupon.getId()); - wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); - List couponMerchantList = wxCouponMerchantMapper.findList(wxCouponMerchant); - if (!couponMerchantList.stream().anyMatch(cm->cm.getMerchantId().equals(wxMerchantBUser.getMerchantId()))){ - logger.error("券: coupon-" + wxCoupon.getId() + "核销: couponMerchantId-" + wxMerchantBUser.getMerchantId()); - throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); - } } + // 2. 检查适用门店 + WxCouponMerchant wxCouponMerchant = new WxCouponMerchant(); + wxCouponMerchant.setProductId(wxCoupon.getId()); + wxCouponMerchant.setStatus(EnumCouponMerchantStatus.COUPON_MERCHANT_STATUS_VALID.getCode()); + List couponMerchantList = wxCouponMerchantMapper.findList(wxCouponMerchant); + if (!couponMerchantList.stream().anyMatch(cm->cm.getMerchantId().equals(bUser.getMerchantId()))){ + logger.error("券: coupon-" + wxCoupon.getId() + "核销: couponMerchantId-" + bUser.getMerchantId()); + throw new MallinkException(ErrorCode.VERIFY_COUPON_ORDER_MERCHANT_IS_NULL); + } - if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { - logger.error("已过期: couponOrder-" + wxCouponOrder.getId()); + // 3. 券包状态检查 + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_OVER_TIME.getCode()) { + logger.error("已过期: couponOrder-" + couponOrder.getId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); } - if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()) { - logger.error("已退款: couponOrder-" + wxCouponOrder.getId()); + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()) { + logger.error("已退款: couponOrder-" + couponOrder.getId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_INVALID); } - if (wxCouponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { - logger.error("已经核销过的券: couponOrder-" + wxCouponOrder.getId()); + if (couponOrder.getCouponOrderStatus() == EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()) { + logger.error("已经核销过的券: couponOrder-" + couponOrder.getId()); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); } + int num = 0; try { - wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 - wxCouponOrder.setbUserId(wxMerchantBUser.getId()); - wxCouponOrder.setUpdateDate(new Date()); - wxCouponOrderMapper.updateByPrimaryKeySelective(wxCouponOrder); + couponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode()); //1核销 + couponOrder.setbUserId(bUser.getId()); + couponOrder.setUpdateDate(new Date()); + num = wxCouponOrderMapper.updateVerifyCouponOrder(couponOrder); } catch (Exception e) { - logger.error("db failed: couponOrder-" + wxCouponOrder.getId() + ", e:" + e.getMessage()); + logger.error("db failed: couponOrder-" + couponOrder.getId() + ", e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + if(num != 1) { + logger.error("核销异常:updatete num " + num); + throw new MallinkException(ErrorCode.VERIFY_ERROR.getCode(), "updatete num " + num); + } + return couponOrder; + } - return wxCouponOrder; + @Override + public void sendInsideCouponVerifyMsg(WxCouponOrder couponOrder, WxMerchantBUser bUser) { + FmInsideCouponVerifyMsg verifyMsg = new FmInsideCouponVerifyMsg(); + verifyMsg.setMsgType(EnumMsgRecordType.INSIDE_COUPON_VERIFY.getCode()); + verifyMsg.setTenantId(couponOrder.getTenantId()); + verifyMsg.setCouponOrderId(couponOrder.getId()); + verifyMsg.setBUserId(bUser.getId()); + mqBaseProducer.sendMessage(verifyMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } + @Override + public void actionAfterVerify(WxCouponOrder couponOrder, WxMerchantBUser bUser) { + try { + // 核销分账 + shareAfterVerify(couponOrder, bUser.getMerchantId()); + } catch (Exception e) { + logger.error(e.getMessage()); + } + + try { + // 核销补贴 + subsidyAfterVerify(couponOrder, bUser.getMerchantId()); + } catch (Exception e) { + logger.error(e.getMessage()); + } + + boolean bSentCoupon = false; + + // 核销发券 + try { + bSentCoupon = sendCouponAfterVerify(couponOrder, bUser); + } catch (Exception e) { + logger.error(e.getMessage()); + } + // 核销发模板消息 + try { + sendVerifyMsg(couponOrder, bUser, bSentCoupon); + } catch (Exception e) { + logger.error("核销发送消息发生错误:"+e.getMessage()); + } } @Override @@ -510,6 +543,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { // 6. get payOrder info if(StringUtils.isBlank(order.getFormId())) { + // formId为空,获取prepayId WxPayOrder payOrder = null; WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.setTenantId(couponOrder.getTenantId()); @@ -557,129 +591,154 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { StringUtils.isNotBlank(user.getMpOpenId()) && user.getMpSubscribe().equals(EnumUserIsSubscribe.YES.getCode())) { // 已关注公众号 - /** - * 卡券核销通知 - * {{first.DATA}} - * 卡券类型:{{keyword1.DATA}} - * 卡券号码:{{keyword2.DATA}} - * 核销时间:{{keyword3.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.VERIFY_RESULT.getCode()); - mpAppMsg.setTemplateDataList(Lists.newArrayList( - new WxMpTemplateData("first", "商家"+merchant.getName()+"的券被核销", "#173177"), - new WxMpTemplateData("keyword1", EnumCouponType.getEnum(coupon.getType()).getMessage(), "#173177"), - new WxMpTemplateData("keyword2", couponOrder.getId().toString(), "#173177"), - new WxMpTemplateData("keyword3", dateFormat.format(new Date()), "#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); - } + doVerifyMpMsg(couponOrder, coupon, merchant, user, dateFormat, gotopage); return; } 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.VERIFY_RESULT.getCode()); - appUniformMsg.setPagePath(gotopage); - appUniformMsg.setUrl("http://iformall.com"); - appUniformMsg.setMpAppId(weappInfo.getAuthorizerAppid()); - appUniformMsg.setTemplateDataList(Lists.newArrayList( - new WxMaTemplateData("first", "商家"+merchant.getName()+"的券被核销", "#173177"), - new WxMaTemplateData("keyword1", EnumCouponType.getEnum(coupon.getType()).getMessage(), "#173177"), - new WxMaTemplateData("keyword2", couponOrder.getId().toString(), "#173177"), - new WxMaTemplateData("keyword3", dateFormat.format(new Date()), "#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); - } - } + doVerifyAppUniformMsg(couponOrder, coupon, merchant, user, dateFormat, gotopage); } // 9. 微信小程序-模板消息 SmartAppMsg smartAppMsg; if (bUsed) { //mq发送小程序消息 - 核销成功消息 - /** - * 核销成功消息 - * 核销金额 {{keyword1.DATA}} - * 商家名称 {{keyword2.DATA}} - * 商品 {{keyword3.DATA}} - * 商品描述 {{keyword4.DATA}} - * 订单金额 {{keyword5.DATA}} - * 核销时间 {{keyword6.DATA}} - * 温馨提示 {{keyword7.DATA}} - */ - smartAppMsg = new SmartAppMsg(); - smartAppMsg.setMsgType(EnumMsgRecordType.SMART_APP.getCode()); - smartAppMsg.setAppId(user.getAppId()); - smartAppMsg.setTenantId(couponOrder.getTenantId()); - smartAppMsg.setTemplateType(EnumTemplateType.VERIFY_SUCCESS.getCode()); - smartAppMsg.setGotopage(gotopage); - smartAppMsg.setTo(user.getOpenId()); - smartAppMsg.setFormId(formId); - smartAppMsg.setTemplateDataList(Lists.newArrayList( - new WxMaTemplateData("keyword1", coupon.getPriceStr() + "元", "#173177"), - new WxMaTemplateData("keyword2", merchant.getName(), "#173177"), - new WxMaTemplateData("keyword3", coupon.getTitle(), "#173177"), - new WxMaTemplateData("keyword4", couponDetail, "#173177"), - new WxMaTemplateData("keyword5", coupon.getSalePriceStr() + "元", "#173177"), - new WxMaTemplateData("keyword6", dateFormat.format(new Date()), "#173177"), - new WxMaTemplateData("keyword7", notes, "#173177"))); - smartAppMsg.setEmphasisKeyword("keyword1.DATA"); + doVerifySuccessMsg(couponOrder, formId, coupon, merchant, user, dateFormat, couponDetail, gotopage, notes); } else { // mq发送小程序消息 - 核销失败消息 - /** - * 核销失败消息 - * 商品名称 {{keyword1.DATA}} - * 核销时间 {{keyword2.DATA}} - * 失败原因 {{keyword3.DATA}} - * 备注 {{keyword4.DATA}} - */ - smartAppMsg = new SmartAppMsg(); - smartAppMsg.setMsgType(EnumMsgRecordType.SMART_APP.getCode()); - smartAppMsg.setAppId(user.getAppId()); - smartAppMsg.setTenantId(couponOrder.getTenantId()); - smartAppMsg.setTemplateType(EnumTemplateType.VERIFY_FAIL.getCode()); - smartAppMsg.setGotopage(gotopage); - smartAppMsg.setTo(user.getOpenId()); - smartAppMsg.setReceiver(user.getOpenId()); - smartAppMsg.setFormId(formId); - smartAppMsg.setTemplateDataList(Lists.newArrayList( - new WxMaTemplateData("keyword1", coupon.getTitle(), "#173177"), - new WxMaTemplateData("keyword2", dateFormat.format(new Date()), "#173177"), - new WxMaTemplateData("keyword3", "未知"), - new WxMaTemplateData("keyword4", couponDetail))); - smartAppMsg.setEmphasisKeyword("keyword1.DATA"); + doVerifyFailMsg(couponOrder, formId, coupon, user, dateFormat, couponDetail, gotopage); + } + + + } + + private void doVerifyMpMsg(WxCouponOrder couponOrder, WxCoupon coupon, WxMerchant merchant, WxCUser user, SimpleDateFormat dateFormat, String gotopage) { + /** + * 卡券核销通知 + * {{first.DATA}} + * 卡券类型:{{keyword1.DATA}} + * 卡券号码:{{keyword2.DATA}} + * 核销时间:{{keyword3.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.VERIFY_RESULT.getCode()); + mpAppMsg.setTemplateDataList(Lists.newArrayList( + new WxMpTemplateData("first", "商家"+merchant.getName()+"的券被核销", "#173177"), + new WxMpTemplateData("keyword1", EnumCouponType.getEnum(coupon.getType()).getMessage(), "#173177"), + new WxMpTemplateData("keyword2", couponOrder.getId().toString(), "#173177"), + new WxMpTemplateData("keyword3", dateFormat.format(new Date()), "#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); + } + } + + private void doVerifyAppUniformMsg(WxCouponOrder couponOrder, WxCoupon coupon, WxMerchant merchant, WxCUser user, SimpleDateFormat dateFormat, String gotopage) { + 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.VERIFY_RESULT.getCode()); + appUniformMsg.setPagePath(gotopage); + appUniformMsg.setUrl("http://iformall.com"); + appUniformMsg.setMpAppId(weappInfo.getAuthorizerAppid()); + appUniformMsg.setTemplateDataList(Lists.newArrayList( + new WxMaTemplateData("first", "商家"+merchant.getName()+"的券被核销", "#173177"), + new WxMaTemplateData("keyword1", EnumCouponType.getEnum(coupon.getType()).getMessage(), "#173177"), + new WxMaTemplateData("keyword2", couponOrder.getId().toString(), "#173177"), + new WxMaTemplateData("keyword3", dateFormat.format(new Date()), "#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); + } + } + } + + private void doVerifySuccessMsg(WxCouponOrder couponOrder, String formId, WxCoupon coupon, WxMerchant merchant, WxCUser user, SimpleDateFormat dateFormat, String couponDetail, String gotopage, String notes) { + SmartAppMsg smartAppMsg; /** + * 核销成功消息 + * 核销金额 {{keyword1.DATA}} + * 商家名称 {{keyword2.DATA}} + * 商品 {{keyword3.DATA}} + * 商品描述 {{keyword4.DATA}} + * 订单金额 {{keyword5.DATA}} + * 核销时间 {{keyword6.DATA}} + * 温馨提示 {{keyword7.DATA}} + */ + smartAppMsg = new SmartAppMsg(); + smartAppMsg.setMsgType(EnumMsgRecordType.SMART_APP.getCode()); + smartAppMsg.setAppId(user.getAppId()); + smartAppMsg.setTenantId(couponOrder.getTenantId()); + smartAppMsg.setTemplateType(EnumTemplateType.VERIFY_SUCCESS.getCode()); + smartAppMsg.setGotopage(gotopage); + smartAppMsg.setTo(user.getOpenId()); + smartAppMsg.setFormId(formId); + smartAppMsg.setTemplateDataList(Lists.newArrayList( + new WxMaTemplateData("keyword1", coupon.getPriceStr() + "元", "#173177"), + new WxMaTemplateData("keyword2", merchant.getName(), "#173177"), + new WxMaTemplateData("keyword3", coupon.getTitle(), "#173177"), + new WxMaTemplateData("keyword4", couponDetail, "#173177"), + new WxMaTemplateData("keyword5", coupon.getSalePriceStr() + "元", "#173177"), + new WxMaTemplateData("keyword6", dateFormat.format(new Date()), "#173177"), + new WxMaTemplateData("keyword7", notes, "#173177"))); + smartAppMsg.setEmphasisKeyword("keyword1.DATA"); + + try { + mqBaseProducer.sendMessage(smartAppMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } catch (Exception e) { + logger.error("支付通知发送失败: " + e.getMessage()); + throw new MallinkException(ErrorCode.TEMPLATE_SEND_FAILED); } + } + + private void doVerifyFailMsg(WxCouponOrder couponOrder, String formId, WxCoupon coupon, WxCUser user, SimpleDateFormat dateFormat, String couponDetail, String gotopage) { + SmartAppMsg smartAppMsg; /** + * 核销失败消息 + * 商品名称 {{keyword1.DATA}} + * 核销时间 {{keyword2.DATA}} + * 失败原因 {{keyword3.DATA}} + * 备注 {{keyword4.DATA}} + */ + smartAppMsg = new SmartAppMsg(); + smartAppMsg.setMsgType(EnumMsgRecordType.SMART_APP.getCode()); + smartAppMsg.setAppId(user.getAppId()); + smartAppMsg.setTenantId(couponOrder.getTenantId()); + smartAppMsg.setTemplateType(EnumTemplateType.VERIFY_FAIL.getCode()); + smartAppMsg.setGotopage(gotopage); + smartAppMsg.setTo(user.getOpenId()); + smartAppMsg.setReceiver(user.getOpenId()); + smartAppMsg.setFormId(formId); + smartAppMsg.setTemplateDataList(Lists.newArrayList( + new WxMaTemplateData("keyword1", coupon.getTitle(), "#173177"), + new WxMaTemplateData("keyword2", dateFormat.format(new Date()), "#173177"), + new WxMaTemplateData("keyword3", "未知"), + new WxMaTemplateData("keyword4", couponDetail))); + smartAppMsg.setEmphasisKeyword("keyword1.DATA"); try { - mqBaseProducer.sendMessage(smartAppMsg, EnumMsgMqTopic.DEFAULT.getCode(),EnumMsgMqTag.DEFAULT.getCode(),EnumMsgMqKey.DEFAULT.getCode()); + mqBaseProducer.sendMessage(smartAppMsg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); } catch (Exception e) { logger.error("支付通知发送失败: " + e.getMessage()); throw new MallinkException(ErrorCode.TEMPLATE_SEND_FAILED); 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 e26439fdb..e5707a19e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponSendServiceImpl.java @@ -234,23 +234,28 @@ public class WxCouponSendServiceImpl implements WxCouponSendService { try { couponOrder = wxOrderService.sendFreeCouponToUser(cUserId, send.getCouponId()); if (couponOrder != null) { + bRet = true; + wxCouponActionLogService.addOne(tenantId, send.getCouponId(), couponOrder.getId(), type.getCode(), send.getId()); + + // 查找cUser + WxCUser user = wxCUserMapper.selectByPrimaryKey(cUserId); + if(user == null) { + continue; + } + + // 发送消息 + if(couponOrder != null) { + sendMsgForSendCoupon(tenantId, send, couponOrder, user); + } + bRet = true; } } catch (Exception e) { logger.error(e.getMessage()); } - // 查找cUser - WxCUser user = wxCUserMapper.selectByPrimaryKey(cUserId); - if(user == null) { - continue; - } - // 发送消息 - if(couponOrder != null) { - sendMsgForSendCoupon(tenantId, send, couponOrder, user); - } } return bRet; diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java new file mode 100644 index 000000000..c76b9ea04 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideCouponVerifyMsgServiceImpl.java @@ -0,0 +1,48 @@ +package com.iformall.service.msg.impl; + +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.BaseMsg; +import com.iformall.domain.po.msg.FmInsideCouponVerifyMsg; +import com.iformall.domain.po.msg.FmInsideOrderSuccessMsg; +import com.iformall.exception.MallinkException; +import com.iformall.service.*; +import com.iformall.service.msg.MsgSendService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + * @author Stormeye Wu + * @date 2019/5/10 + */ +@Service +public class FmInsideCouponVerifyMsgServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxCouponOrderService couponOrderService; + + @Autowired + private WxMerchantBUserService merchantBUserService; + + @Override + public void send(BaseMsg baseMsg) throws Exception{ + FmInsideCouponVerifyMsg msg = (FmInsideCouponVerifyMsg)baseMsg; + WxCouponOrder couponOrder = couponOrderService.getById(msg.getCouponOrderId()); + if(couponOrder == null) { + logger.error("券包ID未找到: " + msg.getCouponOrderId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL.getCode(), "券包ID未找到" + msg.getCouponOrderId()); + } + + WxMerchantBUser user = merchantBUserService.getById(msg.getBUserId()); + if(user == null) { + logger.error("用户未找到: " + msg.getBUserId()); + throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "用户未找到" + msg.getBUserId()); + } + + couponOrderService.actionAfterVerify(couponOrder, user); + } +} diff --git a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml index e35a56e61..642bdfbda 100644 --- a/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxCouponOrderMapper.xml @@ -95,6 +95,14 @@ + + update wx_coupon_order + set `coupon_order_status` = #{couponOrderStatus}, + `b_user_id` = #{bUserId}, + `update_date` = #{updateDate} + where `tenant_id`=#{tenantId} and id=#{id} and `b_user_id` is null + +