diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/msg/WxMsgRecordController.java b/mallinkAdmin/src/main/java/com/iformall/controller/msg/WxMsgRecordController.java index e82fd9c2c..5b8550da0 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/msg/WxMsgRecordController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/msg/WxMsgRecordController.java @@ -113,6 +113,13 @@ public class WxMsgRecordController extends BaseController { msg.setTenantId(wxMsgRecord.getTenantId()); msg.updateTenantInfo(tenantEntity); mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + }else if(EnumMsgRecordType.INSIDE_ORDER_REFUND.getCode().equals(wxMsgRecord.getMsgType())){ + //内部消息 - 下订单成功 + FmInsideOrderRefundMsg msg = (FmInsideOrderRefundMsg) JsonUtil.readValue(wxMsgRecord.getMsgJson(),FmInsideOrderRefundMsg.class); + msg.setMsgType(wxMsgRecord.getMsgType()); + msg.setReceiver(wxMsgRecord.getReceiver()); + msg.updateTenantInfo(tenantEntity); + mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); } } return new ResultData(); diff --git a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java index 0b8238b59..5fcb54ac3 100644 --- a/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java +++ b/mallinkMQConsumer/src/main/java/com/iformall/mq/MqBaseConsumer.java @@ -35,6 +35,8 @@ public class MqBaseConsumer { @Autowired private FmInsideCouponVerifyMsgServiceImpl fmInsideCouponVerifyMsgService; @Autowired + private FmInsideOrderRefundMsgServiceImpl fmInsideOrderRefundMsgService; + @Autowired private FmInsideCLoginMsgServiceImpl fmInsideCLoginMsgService; @Autowired private MqBaseProducer mqBaseProducer; @@ -91,6 +93,10 @@ public class MqBaseConsumer { // 内部消息 - 券核销 FmInsideCouponVerifyMsg msg = (FmInsideCouponVerifyMsg)JsonUtil.readValue(message,FmInsideCouponVerifyMsg.class); fmInsideCouponVerifyMsgService.send(msg); + } else if(EnumMsgRecordType.INSIDE_ORDER_REFUND.getCode().equals(baseMsg.getMsgType())){ + //内部消息 - 退款申请成功 + FmInsideOrderRefundMsg msg = (FmInsideOrderRefundMsg) JsonUtil.readValue(message,FmInsideOrderRefundMsg.class); + fmInsideOrderRefundMsgService.send(msg); } else if(EnumMsgRecordType.INSIDE_C_LOGIN.getCode().equals(baseMsg.getMsgType())) { // 内部消息 - c端登录 FmInsideCLoginMsg msg = (FmInsideCLoginMsg)JsonUtil.readValue(message,FmInsideCLoginMsg.class); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideOrderRefundMsg.java b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideOrderRefundMsg.java new file mode 100644 index 000000000..2e64490cb --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideOrderRefundMsg.java @@ -0,0 +1,21 @@ +package com.iformall.domain.po.msg; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class FmInsideOrderRefundMsg extends BaseMsg{ + + @io.swagger.annotations.ApiModelProperty(value = "租户ID", name = "tenantId") + private String tenantId; + @io.swagger.annotations.ApiModelProperty(value="父租户id",name="parentTenantId") + private String parentTenantId; + @io.swagger.annotations.ApiModelProperty(value = "", name = "couponOrderId") + private Long couponOrderId; + @io.swagger.annotations.ApiModelProperty(value = "退款订单ID", name = "orderId") + private Long orderId; + +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java index 9e45aef4e..a8c1cac59 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java @@ -38,6 +38,9 @@ public enum EnumMsgModel { COUPON_CARD_SEND(30, "系统发卡"), INVEST_REMIND(31, "招商预约提醒"), + + COUPON_ORDER_SUCCESS(32,"购买成功提醒"), + COUPON_ORDER_REFUND(33,"提交退款提醒"), ; public static EnumMsgModel getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java index 75a6c6dfe..43f29ffd4 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgRecordType.java @@ -20,6 +20,7 @@ public enum EnumMsgRecordType { INSIDE_NOTIFY_REFUND_SUCCESS(104, "微信退款回调"), COUPON_STOCK(105, "券库存更新"), CASH_OUT(106,"商户提现"), + INSIDE_ORDER_REFUND(107, "退款提交成功"), ; public static EnumMsgRecordType getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java index ba2f4f042..96ddb878f 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java @@ -2,9 +2,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; -import com.iformall.domain.po.WxAppinfo; -import com.iformall.domain.po.WxMerchantBUser; -import com.iformall.domain.po.WxRefundOrder; +import com.iformall.domain.po.*; import com.iformall.enums.EnumPayType; import com.iformall.enums.EnumPayWay; @@ -100,4 +98,5 @@ public interface WxRefundOrderService { boolean hasRefundOrder(Long orderId, Integer status); + void actionAfterCouponOrder(WxCouponOrder couponOrder, WxOrder rOrder, WxCoupon coupon, WxCUserBasicInfo basicInfo); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 0281faf4c..a18ec168c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -17,6 +17,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.domain.vo.*; import com.iformall.enums.*; import com.iformall.service.*; @@ -1865,7 +1866,34 @@ public class WxOrderServiceImpl implements WxOrderService { } catch (Exception e) { logger.error("订单发券:" + e.getMessage(),e); } - + //通知用户 + try { + sendMsgAfterCouponOrderSuccess(order,coupon,user); + } catch (Exception e) { + logger.error("订单成功通知用户error:" + e.getMessage(),e); + } + } + + private void sendMsgAfterCouponOrderSuccess(WxOrder order,WxCoupon coupon, WxCUserBasicInfo user) { + // 发送短信 +// if(EnumPayWay.PAY_WAY_TT.getCode().equals(order.getPayVendor())){ + logger.info("订单成功短信通知start"); + //券名 + String name = coupon.getTitle(); + //找出用户手机号 + String phone = user.getPhone(); + Map msgReplaceMap = new HashMap(); + msgReplaceMap.put("name", name); + + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.updateTenantInfo(order); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.COUPON_ORDER_SUCCESS.getCode()); + wxMsgRecord.setReceiver(phone); + wxMsgRecord.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + logger.info("订单成功短信通知end"); +// } } @Override diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java index 717107afe..5fa87c4f4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -10,9 +10,13 @@ import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.common.ResultData; import com.iformall.domain.po.*; +import com.iformall.domain.po.msg.FmInsideOrderRefundMsg; +import com.iformall.domain.po.msg.FmInsideOrderSuccessMsg; +import com.iformall.domain.po.msg.WxMsgRecord; import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; +import com.iformall.mq.MqBaseProducer; import com.iformall.pay.WxPay; import com.iformall.pay.WxPayment; import com.iformall.pay.WxRefundOrderP; @@ -92,6 +96,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { @Autowired WxBatchOrderMapper wxBatchOrderMapper; + + @Autowired + private MqBaseProducer mqBaseProducer; + private boolean isMerchantOrder(WxOrder wxOrder, Long merchantId) { if (wxOrder.getType().equals(EnumOrderType.COUPON.getCode())) { @@ -345,6 +353,14 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { if (refundResult.isSuccess()) { record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); wxRefundOrderMapper.updateById(record); + + //通知用户 + try { + sendInsideOrderRefundMsg(wxCouponOrder,rOrder); + } catch (Exception e) { + logger.error("订单成功通知用户error:" + e.getMessage(),e); + } + return new ResultData(Result.SUCCESS, "退款订单申请成功", refundResult.getData()); }else { throw new MallinkException(refundResult.getCode(), refundResult.getMsg()); @@ -352,6 +368,16 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } + private void sendInsideOrderRefundMsg(WxCouponOrder wxCouponOrder, WxOrder rOrder) { + FmInsideOrderRefundMsg orderRefund = new FmInsideOrderRefundMsg(); + orderRefund.setMsgType(EnumMsgRecordType.INSIDE_ORDER_REFUND.getCode()); + orderRefund.updateTenantInfo(wxCouponOrder); + orderRefund.setCouponOrderId(wxCouponOrder.getId()); + orderRefund.setOrderId(rOrder.getId()); + logger.info(">>>>>>>>>>>send sendInsideOrderRefundMsg :"+orderRefund); + mqBaseProducer.sendMessage(orderRefund, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + } + @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) public ResultData createRefundOrderFromMicroPay(WxAppinfo appInfo, Long orderId, EnumPayType payType, Long bUserId) { @@ -729,4 +755,28 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { return wxRefundOrderMapper.selectCount(new QueryWrapper(order)) > 0 ? true : false; } + @Override + public void actionAfterCouponOrder(WxCouponOrder couponOrder, WxOrder rOrder, WxCoupon coupon, WxCUserBasicInfo user) { + // 发送短信 +// if(EnumPayWay.PAY_WAY_TT.getCode().equals(couponOrder.getPayVendor())){ + logger.info("订单成功短信通知start"); + //券名 + String name = coupon.getTitle(); + //找出用户手机号 + String phone = user.getPhone(); + Map msgReplaceMap = new HashMap(); + msgReplaceMap.put("name", name); + + WxMsgRecord wxMsgRecord = new WxMsgRecord(); + wxMsgRecord.updateTenantInfo(couponOrder); + wxMsgRecord.setMsgType(EnumMsgRecordType.SMS.getCode()); + wxMsgRecord.setModelType(EnumMsgModel.COUPON_ORDER_REFUND.getCode()); + wxMsgRecord.setReceiver(phone); + wxMsgRecord.setDynamicContentMap(msgReplaceMap); + mqBaseProducer.sendMessage(wxMsgRecord, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); + logger.info("订单成功短信通知end"); +// } + } + + } diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideOrderRefundMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideOrderRefundMsgServiceImpl.java new file mode 100644 index 000000000..8503092e7 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideOrderRefundMsgServiceImpl.java @@ -0,0 +1,75 @@ +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.FmInsideOrderRefundMsg; +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 FmInsideOrderRefundMsgServiceImpl implements MsgSendService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + private WxOrderService orderService; + + @Autowired + private WxRefundOrderService refundOrderService; + + @Autowired + private WxCUserBasicInfoService userService; + + @Autowired + private WxCouponService couponService; + + @Autowired + private WxCouponOrderService couponOrderService; + + @Autowired + private WxCouponChannelService couponChannelService; + + + @Override + public void send(BaseMsg baseMsg) throws Exception{ + FmInsideOrderRefundMsg msg = (FmInsideOrderRefundMsg)baseMsg; + + WxCouponOrder couponOrder = couponOrderService.getById(msg.getCouponOrderId(), msg.getTenantId()); + if(couponOrder == null) { + logger.error("卷订单未找到: " + msg.getOrderId()); + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "订单未找到" + msg.getOrderId()); + } + + WxCUserBasicInfo user = userService.getById(couponOrder.getCUserId(),couponOrder.getFinalTenantId()); + if(user == null) { + logger.error("用户未找到: " + couponOrder.getCUserId()); + throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "用户未找到" + couponOrder.getCUserId()); + } + + WxOrder rOrder = orderService.getById(msg.getOrderId(),msg.getTenantId()); + if(rOrder == null) { + logger.error("退款订单未找到: " + msg.getOrderId()); + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "订单未找到" + msg.getOrderId()); + } + + WxCoupon coupon = couponService.getById(couponOrder.getCouponId(),couponOrder.getTenantId()); + if(coupon == null) { + logger.error("券未找到" + couponOrder.getCouponId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL.getCode(), "券未找到" + couponOrder.getCouponId()); + } + + // 提交退款后处理 + refundOrderService.actionAfterCouponOrder(couponOrder, rOrder, coupon, user); + } +}