| @@ -113,6 +113,13 @@ public class WxMsgRecordController extends BaseController { | |||||
| msg.setTenantId(wxMsgRecord.getTenantId()); | msg.setTenantId(wxMsgRecord.getTenantId()); | ||||
| msg.updateTenantInfo(tenantEntity); | msg.updateTenantInfo(tenantEntity); | ||||
| mqBaseProducer.sendMessage(msg, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); | 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(); | return new ResultData(); | ||||
| @@ -35,6 +35,8 @@ public class MqBaseConsumer { | |||||
| @Autowired | @Autowired | ||||
| private FmInsideCouponVerifyMsgServiceImpl fmInsideCouponVerifyMsgService; | private FmInsideCouponVerifyMsgServiceImpl fmInsideCouponVerifyMsgService; | ||||
| @Autowired | @Autowired | ||||
| private FmInsideOrderRefundMsgServiceImpl fmInsideOrderRefundMsgService; | |||||
| @Autowired | |||||
| private FmInsideCLoginMsgServiceImpl fmInsideCLoginMsgService; | private FmInsideCLoginMsgServiceImpl fmInsideCLoginMsgService; | ||||
| @Autowired | @Autowired | ||||
| private MqBaseProducer mqBaseProducer; | private MqBaseProducer mqBaseProducer; | ||||
| @@ -91,6 +93,10 @@ public class MqBaseConsumer { | |||||
| // 内部消息 - 券核销 | // 内部消息 - 券核销 | ||||
| FmInsideCouponVerifyMsg msg = (FmInsideCouponVerifyMsg)JsonUtil.readValue(message,FmInsideCouponVerifyMsg.class); | FmInsideCouponVerifyMsg msg = (FmInsideCouponVerifyMsg)JsonUtil.readValue(message,FmInsideCouponVerifyMsg.class); | ||||
| fmInsideCouponVerifyMsgService.send(msg); | 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())) { | } else if(EnumMsgRecordType.INSIDE_C_LOGIN.getCode().equals(baseMsg.getMsgType())) { | ||||
| // 内部消息 - c端登录 | // 内部消息 - c端登录 | ||||
| FmInsideCLoginMsg msg = (FmInsideCLoginMsg)JsonUtil.readValue(message,FmInsideCLoginMsg.class); | FmInsideCLoginMsg msg = (FmInsideCLoginMsg)JsonUtil.readValue(message,FmInsideCLoginMsg.class); | ||||
| @@ -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; | |||||
| } | |||||
| @@ -38,6 +38,9 @@ public enum EnumMsgModel { | |||||
| COUPON_CARD_SEND(30, "系统发卡"), | COUPON_CARD_SEND(30, "系统发卡"), | ||||
| INVEST_REMIND(31, "招商预约提醒"), | INVEST_REMIND(31, "招商预约提醒"), | ||||
| COUPON_ORDER_SUCCESS(32,"购买成功提醒"), | |||||
| COUPON_ORDER_REFUND(33,"提交退款提醒"), | |||||
| ; | ; | ||||
| public static EnumMsgModel getEnum(Integer code) { | public static EnumMsgModel getEnum(Integer code) { | ||||
| @@ -20,6 +20,7 @@ public enum EnumMsgRecordType { | |||||
| INSIDE_NOTIFY_REFUND_SUCCESS(104, "微信退款回调"), | INSIDE_NOTIFY_REFUND_SUCCESS(104, "微信退款回调"), | ||||
| COUPON_STOCK(105, "券库存更新"), | COUPON_STOCK(105, "券库存更新"), | ||||
| CASH_OUT(106,"商户提现"), | CASH_OUT(106,"商户提现"), | ||||
| INSIDE_ORDER_REFUND(107, "退款提交成功"), | |||||
| ; | ; | ||||
| public static EnumMsgRecordType getEnum(Integer code) { | public static EnumMsgRecordType getEnum(Integer code) { | ||||
| @@ -2,9 +2,7 @@ package com.iformall.service; | |||||
| import com.github.pagehelper.PageInfo; | import com.github.pagehelper.PageInfo; | ||||
| import com.iformall.common.ResultData; | 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.EnumPayType; | ||||
| import com.iformall.enums.EnumPayWay; | import com.iformall.enums.EnumPayWay; | ||||
| @@ -100,4 +98,5 @@ public interface WxRefundOrderService { | |||||
| boolean hasRefundOrder(Long orderId, Integer status); | boolean hasRefundOrder(Long orderId, Integer status); | ||||
| void actionAfterCouponOrder(WxCouponOrder couponOrder, WxOrder rOrder, WxCoupon coupon, WxCUserBasicInfo basicInfo); | |||||
| } | } | ||||
| @@ -17,6 +17,7 @@ import javax.servlet.http.HttpServletRequest; | |||||
| import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
| import com.iformall.domain.po.*; | import com.iformall.domain.po.*; | ||||
| import com.iformall.domain.po.msg.WxMsgRecord; | |||||
| import com.iformall.domain.vo.*; | import com.iformall.domain.vo.*; | ||||
| import com.iformall.enums.*; | import com.iformall.enums.*; | ||||
| import com.iformall.service.*; | import com.iformall.service.*; | ||||
| @@ -1865,7 +1866,34 @@ public class WxOrderServiceImpl implements WxOrderService { | |||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| logger.error("订单发券:" + e.getMessage(),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<String, String> 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 | @Override | ||||
| @@ -10,9 +10,13 @@ import com.iformall.common.IdWorker; | |||||
| import com.iformall.common.Result; | import com.iformall.common.Result; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.domain.po.*; | 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.enums.*; | ||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| import com.iformall.mapper.*; | import com.iformall.mapper.*; | ||||
| import com.iformall.mq.MqBaseProducer; | |||||
| import com.iformall.pay.WxPay; | import com.iformall.pay.WxPay; | ||||
| import com.iformall.pay.WxPayment; | import com.iformall.pay.WxPayment; | ||||
| import com.iformall.pay.WxRefundOrderP; | import com.iformall.pay.WxRefundOrderP; | ||||
| @@ -92,6 +96,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| @Autowired | @Autowired | ||||
| WxBatchOrderMapper wxBatchOrderMapper; | WxBatchOrderMapper wxBatchOrderMapper; | ||||
| @Autowired | |||||
| private MqBaseProducer mqBaseProducer; | |||||
| private boolean isMerchantOrder(WxOrder wxOrder, Long merchantId) { | private boolean isMerchantOrder(WxOrder wxOrder, Long merchantId) { | ||||
| if (wxOrder.getType().equals(EnumOrderType.COUPON.getCode())) { | if (wxOrder.getType().equals(EnumOrderType.COUPON.getCode())) { | ||||
| @@ -345,6 +353,14 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| if (refundResult.isSuccess()) { | if (refundResult.isSuccess()) { | ||||
| record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); | record.setRefundOrderStatus(EnumRefundStatus.REFUND_REQ_SUCCESS.getCode()); | ||||
| wxRefundOrderMapper.updateById(record); | wxRefundOrderMapper.updateById(record); | ||||
| //通知用户 | |||||
| try { | |||||
| sendInsideOrderRefundMsg(wxCouponOrder,rOrder); | |||||
| } catch (Exception e) { | |||||
| logger.error("订单成功通知用户error:" + e.getMessage(),e); | |||||
| } | |||||
| return new ResultData(Result.SUCCESS, "退款订单申请成功", refundResult.getData()); | return new ResultData(Result.SUCCESS, "退款订单申请成功", refundResult.getData()); | ||||
| }else { | }else { | ||||
| throw new MallinkException(refundResult.getCode(), refundResult.getMsg()); | 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 | @Override | ||||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | ||||
| public ResultData createRefundOrderFromMicroPay(WxAppinfo appInfo, Long orderId, EnumPayType payType, Long bUserId) { | 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; | 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<String, String> 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"); | |||||
| // } | |||||
| } | |||||
| } | } | ||||
| @@ -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); | |||||
| } | |||||
| } | |||||