diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java index 5a05d0a43..fc4a16334 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxCouponOrderController.java @@ -100,29 +100,17 @@ public class WxCouponOrderController extends BaseController { logger.error("券ID不存在:" + couponOrderId); throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); } - - WxAppinfo appinfoQ = new WxAppinfo(); - appinfoQ.updateTenantInfo(getTenantInfo()); - appinfoQ.setPlat(EnumPayWay.getEnum(wxCouponOrder.getPayVendor()).getPlat().getCode()); -// appinfoQ.setType(EnumAppType.B.getCode()); - appinfoQ.setType(EnumAppType.C.getCode()); - PageInfo appinfoPageInfo = wxAppinfoService.listAsPage(appinfoQ, 1, 1); - if (appinfoPageInfo.getList().size() > 0) { - WxAppinfo appinfo = appinfoPageInfo.getList().get(0); - if (appinfo != null) { - try { - wxRefundOrderService.createRefundOrder(appinfo, couponOrderId, EnumPayType.PAY_ADMIN_REFUND, null,getUserId()); - return new ResultData(); - } catch (MallinkException e) { - logger.error(e.getMessage(),e); - return new ResultData(e.getErrorCode(), e.getMessage()); - } catch (Exception e) { - logger.error(e.getMessage(),e); - return new ResultData(ErrorCode.REFUND_ORDER_ERROR); - } - } + + try { + wxRefundOrderService.createRefundOrder(getTenantInfo(), wxCouponOrder.getOrderId(), EnumPayType.PAY_ADMIN_REFUND, null,getUserId()); + return new ResultData(); + } catch (MallinkException e) { + logger.error(e.getMessage(),e); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage(),e); + return new ResultData(ErrorCode.REFUND_ORDER_ERROR); } - return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), "AppInfo获取失败"); } @GetMapping("exportData") diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxRefundOrderController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxRefundOrderController.java index 43be19cb3..78549e87b 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxRefundOrderController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxRefundOrderController.java @@ -63,17 +63,8 @@ public class WxRefundOrderController extends BaseController { throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); } - WxMerchantBUser bUser = getLoginBUser(); - - WxAppinfo appinfo = new WxAppinfo(); - appinfo.updateTenantInfo(getTenantInfo()); - //appinfo.setType(EnumAppType.B.getCode()); - appinfo.setPlat(EnumPayWay.getEnum(wxCouponOrder.getPayVendor()).getPlat().getCode()); - appinfo.setType(EnumAppType.C.getCode()); - appinfo = wxAppinfoService.getList(appinfo).get(0); -// WxAppinfo appinfo = getAppInfo(bUser.getAppId()); try { - ResultData rd = wxRefundOrderService.createRefundOrder(appinfo, couponOrderId, EnumPayType.PAY_B_REFUND, bUser, null); + ResultData rd = wxRefundOrderService.createRefundOrder(getTenantInfo(), wxCouponOrder.getOrderId(), EnumPayType.PAY_B_REFUND, getLoginBUser(), null); return rd; } catch (MallinkException e) { logger.error(e.getMessage()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index 558d5059d..d41087690 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -55,6 +55,12 @@ public class WxOrderController extends BaseController { @Autowired private OrderSnapshotService orderSnapshotService; + @Autowired + private WxAppinfoService wxAppinfoService; + + @Autowired + private WxRefundOrderService wxRefundOrderService; + @Autowired @Qualifier("couponDetailRedisTemplate") RedisTemplate cdRedisTemplate; @@ -567,4 +573,34 @@ public class WxOrderController extends BaseController { } + @ApiOperation(value = "退券退款", notes = "{\"orderId\":\"string\"}") + @PostMapping("/refund") + public ResultData refund(@RequestBody Map paramMap) { + logger.debug("[" + getIpAddr() + "] WxOrderController::refund"); + logger.info(paramMap.toString()); + String orderIdStr = paramMap.get("orderId"); + if (StringUtils.isBlank(orderIdStr)) { + logger.error("orderId不能为空: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + Long orderId = 0L; + try { + orderId = Long.valueOf(orderIdStr); + } catch (NumberFormatException e) { + logger.error("orderId参数不正确: " + paramMap.toString()); + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL); + } + + try { + wxRefundOrderService.createRefundOrder(getTenantInfo(), orderId, EnumPayType.PAY_ADMIN_REFUND, null,null); + return new ResultData(); + } catch (MallinkException e) { + logger.error(e.getMessage(),e); + return new ResultData(e.getErrorCode(), e.getMessage()); + } catch (Exception e) { + logger.error(e.getMessage(),e); + return new ResultData(ErrorCode.REFUND_ORDER_ERROR); + } + } + } diff --git a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java index d7e29795b..58fb469d3 100644 --- a/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java +++ b/mallinkPosApi/src/main/java/com/iformall/service/impl/PosServiceImpl.java @@ -2498,87 +2498,108 @@ public class PosServiceImpl implements PosService { final Long posOrderId, final Integer orderAmount, final Date posOrderTime, final String orderCreateSn ) { // 1. 查找正向订单 - WxOrder orderQ = new WxOrder(); - orderQ.updateTenantInfo(buUser); - orderQ.setType(EnumOrderType.POSPAY.getCode()); - orderQ.setCUserId(memId); - orderQ.setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); - orderQ.setPosOrderId(posOrderId); + WxOrder wxOrder = new WxOrder(); + wxOrder.updateTenantInfo(buUser); + wxOrder.setType(EnumOrderType.POSPAY.getCode()); + wxOrder.setCUserId(memId); + wxOrder.setPaymentType(EnumPayType.PAY_PAYMENT.getCode()); + wxOrder.setPosOrderId(posOrderId); try { - orderQ = orderMapper.selectOne(new QueryWrapper<>(orderQ)); + wxOrder = orderMapper.selectOne(new QueryWrapper<>(wxOrder)); } catch (Exception e) { throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); } - if (orderQ == null) { + if (wxOrder == null) { logger.error(ErrorCode.POS_ORDER_NOT_FOUND.getMessage()); throw new MallinkException(ErrorCode.POS_ORDER_NOT_FOUND); } - - // 2. 查找是否有退款订单 - WxOrder refundQ = new WxOrder(); - refundQ.updateTenantInfo(buUser); - refundQ.setType(EnumOrderType.POSPAY.getCode()); - refundQ.setCUserId(memId); - refundQ.setPosOrderId(posOrderId); - refundQ.setOrderNumber(orderQ.getOrderNumber()); - try { - refundQ = orderMapper.selectOne(new QueryWrapper<>(refundQ)); - } catch (Exception e) { - logger.error("sql error ",e); - } - if (refundQ != null) { - logger.error(ErrorCode.POS_ORDER_HAD_SYNCED.getMessage()); - throw new MallinkException(ErrorCode.POS_ORDER_HAD_SYNCED); + if(!EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode().equals(wxOrder.getOrderStatus())){ + logger.error("交易订单状态不支持退款:" + EnumOrderStatus.getEnum(wxOrder.getOrderStatus()).getMessage()); + throw new MallinkException(ErrorCode.ORDER_PAY_REFUND_FAIL); } - // 3. 创建退款订单 - final IdWorker idWorker = IdWorker.get(); - - - WxBatchOrder border =new WxBatchOrder(); - border.setId(idWorker.nextId()); - border.setCUserId(memId); - border.updateTenantInfo(buUser); - border.setPayment(orderAmount); - border.setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); - border.setOrderType(EnumComposeOrder.SINGLE.getCode()); - border.setCreateDate(new Date()); - wxBatchOrderMapper.insert(border); - - - Long orderId = idWorker.nextId(); - WxOrder order = new WxOrder(); - - Date curr = new Date(); + WxOrder updWxOrder = new WxOrder(); + updWxOrder.setId(wxOrder.getId()); + updWxOrder.updateTenantInfo(wxOrder); + updWxOrder.setPaymentType(EnumPayType.PAY_POS_REFUND.getCode()); String bodyStr = "POS退款, 金额: " + orderAmount; - order.setId(orderId); - order.updateTenantInfo(buUser); - order.setType(EnumOrderType.POSPAY.getCode()); - order.setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); - order.setProductId(buUser.getId()); - order.setCUserId(memId); - order.setPaymentType(EnumPayType.PAY_POS_REFUND.getCode()); - order.setPayment(orderAmount); - order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS.getCode()); - order.setDetail(bodyStr); - order.setCreateDate(curr); - order.setUpdateDate(curr); - order.setPosOrderId(posOrderId); - order.setPosOrderCreateTime(posOrderTime.getTime()); - order.setPosOrderCreateSn(orderCreateSn); - order.setOrderNumber(orderQ.getOrderNumber()); - order.setComposeOrderId(border.getId()); - order.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); - order.setCouponNumber(1); + updWxOrder.setRefDetail(bodyStr); + updWxOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS.getCode()); + updWxOrder.setUpdateDate(new Date()); try { - orderMapper.insert(order); + orderMapper.updateById(updWxOrder); } catch (Exception e) { - logger.error(e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL); + logger.error("db failed: wxOrder-" + wxOrder.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } - return order; + return wxOrder; + +// // 2. 查找是否有退款订单 +// WxOrder refundQ = new WxOrder(); +// refundQ.updateTenantInfo(buUser); +// refundQ.setType(EnumOrderType.POSPAY.getCode()); +// refundQ.setCUserId(memId); +// refundQ.setPosOrderId(posOrderId); +// refundQ.setOrderNumber(orderQ.getOrderNumber()); +// try { +// refundQ = orderMapper.selectOne(new QueryWrapper<>(refundQ)); +// } catch (Exception e) { +// logger.error("sql error ",e); +// } +// if (refundQ != null) { +// logger.error(ErrorCode.POS_ORDER_HAD_SYNCED.getMessage()); +// throw new MallinkException(ErrorCode.POS_ORDER_HAD_SYNCED); +// } +// +// // 3. 创建退款订单 +// final IdWorker idWorker = IdWorker.get(); +// +// +// WxBatchOrder border =new WxBatchOrder(); +// border.setId(idWorker.nextId()); +// border.setCUserId(memId); +// border.updateTenantInfo(buUser); +// border.setPayment(orderAmount); +// border.setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); +// border.setOrderType(EnumComposeOrder.SINGLE.getCode()); +// border.setCreateDate(new Date()); +// wxBatchOrderMapper.insert(border); +// +// +// Long orderId = idWorker.nextId(); +// WxOrder order = new WxOrder(); +// +// Date curr = new Date(); +// String bodyStr = "POS退款, 金额: " + orderAmount; +// order.setId(orderId); +// order.updateTenantInfo(buUser); +// order.setType(EnumOrderType.POSPAY.getCode()); +// order.setPayVendor(EnumPayWay.PAY_WAY_POS_NEU.getCode()); +// order.setProductId(buUser.getId()); +// order.setCUserId(memId); +// order.setPaymentType(EnumPayType.PAY_POS_REFUND.getCode()); +// order.setPayment(orderAmount); +// order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_REFUND_SUCCESS.getCode()); +// order.setDetail(bodyStr); +// order.setCreateDate(curr); +// order.setUpdateDate(curr); +// order.setPosOrderId(posOrderId); +// order.setPosOrderCreateTime(posOrderTime.getTime()); +// order.setPosOrderCreateSn(orderCreateSn); +// order.setOrderNumber(orderQ.getOrderNumber()); +// order.setComposeOrderId(border.getId()); +// order.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); +// order.setCouponNumber(1); +// +// try { +// orderMapper.insert(order); +// } catch (Exception e) { +// logger.error(e.getMessage()); +// throw new MallinkException(ErrorCode.DB_FAIL); +// } +// return order; } diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java index 1c621acce..11f15e373 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/CouponOrderExpiringSchedule.java @@ -173,12 +173,6 @@ public class CouponOrderExpiringSchedule { // 非储值卡, 可以退款 if(!co.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode()) && !co.getAutoRefund().equals(EnumCouponAutoRefund.UNSUPPORTED.getCode())) { - WxAppinfo appinfo = new WxAppinfo(); - appinfo.updateTenantInfo(co); - //appinfo.setType(EnumAppType.B.getCode()); - appinfo.setPlat(EnumPayWay.getEnum(co.getPayVendor()).getPlat().getCode()); - appinfo.setType(EnumAppType.C.getCode()); - appinfo = wxAppinfoMapper.findList(appinfo).get(0); Date limitDate = DateUtils.getTimeAfterDays(360, co.getCreateDate()); if (limitDate.before(new Date())) { @@ -187,7 +181,7 @@ public class CouponOrderExpiringSchedule { } try { - wxRefundOrderService.createRefundOrder(appinfo, co.getId(), EnumPayType.PAY_AUTO_REFUND, null,null); + wxRefundOrderService.createRefundOrder(co, co.getOrderId(), EnumPayType.PAY_AUTO_REFUND, null,null); } catch (MallinkException e) { if (e.getErrorCode() == ErrorCode.REFUND_NOT_ALLOW.getCode()) { } else { diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java index 66f3d4885..9feeede8c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOrder.java @@ -79,6 +79,9 @@ public class WxOrder extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="支付描述,订单支付时用",name="detail") private String detail; + @io.swagger.annotations.ApiModelProperty(value="退款描述,订单退款时用",name="refDetail") + private String refDetail; + @io.swagger.annotations.ApiModelProperty(value="砍价结束时间",name="pressEndDate") private Date pressEndDate; @io.swagger.annotations.ApiModelProperty(value="砍价人数",name="pressCurrentNum") 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 index e01115210..1e7f5fe9f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideOrderRefundMsg.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/msg/FmInsideOrderRefundMsg.java @@ -9,8 +9,8 @@ import lombok.ToString; @EqualsAndHashCode(callSuper = true) public class FmInsideOrderRefundMsg extends BaseMsg{ - @io.swagger.annotations.ApiModelProperty(value = "", name = "couponOrderId") - private Long couponOrderId; +// @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/EnumPayType.java b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java index 1f268aecf..7bfd85f18 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumPayType.java @@ -9,7 +9,8 @@ public enum EnumPayType { PAY_B_REFUND(1, "B端退款"), PAY_AUTO_REFUND(2, "自动退款"), PAY_ADMIN_REFUND(3, "A端退款"), - PAY_POS_REFUND(4, "POS发起退款"); + PAY_POS_REFUND(4, "POS发起退款"), + PAY_C_REFUND(5, "用户自己发起退款"); public static EnumPayType getEnum(Integer code) { for (EnumPayType value : values()) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java index 96ddb878f..a6381d2b0 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxRefundOrderService.java @@ -3,6 +3,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; import com.iformall.domain.po.*; +import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumPayType; import com.iformall.enums.EnumPayWay; @@ -13,13 +14,13 @@ public interface WxRefundOrderService { /** * 创建退款订单 - * @param appInfo + * @param * @param couponOrderId 券包Id * @param payType 退款来源 - * @param bUserId b端退款Id,auto,admin,self可为null + * @param bUser b端退款Id,auto,admin,self可为null * @return */ - ResultData createRefundOrder(WxAppinfo appInfo, Long couponOrderId, EnumPayType payType, WxMerchantBUser bUser, Long aUserId); + ResultData createRefundOrder(TenantEntity tenantEntity, Long couponOrderId, EnumPayType payType, WxMerchantBUser bUser, Long aUserId); /** * 创建退款订单 @@ -98,5 +99,5 @@ public interface WxRefundOrderService { boolean hasRefundOrder(Long orderId, Integer status); - void actionAfterCouponOrder(WxCouponOrder couponOrder, WxOrder rOrder, WxCoupon coupon, WxCUserBasicInfo basicInfo); + void actionAfterCouponOrder(WxOrder wxOrder, WxCUserBasicInfo basicInfo); } 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 5b7bdefcc..5667d85cd 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -10,6 +10,7 @@ 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.base.TenantEntity; import com.iformall.domain.po.msg.FmInsideOrderRefundMsg; import com.iformall.domain.po.msg.FmInsideOrderSuccessMsg; import com.iformall.domain.po.msg.WxMsgRecord; @@ -21,6 +22,7 @@ import com.iformall.pay.WxPay; import com.iformall.pay.WxPayment; import com.iformall.pay.WxRefundOrderP; import com.iformall.pay.WxRefundOrderSP; +import com.iformall.service.WxAppinfoService; import com.iformall.service.WxOrderService; import com.iformall.service.WxRefundOrderService; import com.iformall.service.helper.WxPayOrderServiceHelper; @@ -51,6 +53,9 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { @Autowired WxAppinfoMapper wxAppinfoMapper; + @Autowired + WxAppinfoService wxAppinfoService; + @Autowired WxRefundOrderMapper wxRefundOrderMapper; @@ -137,17 +142,42 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public ResultData createRefundOrder(WxAppinfo appInfo, Long couponOrderId, EnumPayType payType, WxMerchantBUser bUser, Long aUserId) { - WxCouponOrder wxCouponOrder = wxCouponOrderMapper.selectById(couponOrderId,appInfo.getTenantId()); - if (wxCouponOrder == null) { - logger.error("券ID不存在:" + couponOrderId); - throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); - } - WxOrder wxOrder = wxOrderMapper.selectById(wxCouponOrder.getOrderId(),wxCouponOrder.getTenantId()); + public ResultData createRefundOrder(TenantEntity tenantEntity, Long orderId, EnumPayType payType, WxMerchantBUser bUser, Long aUserId) { + + WxOrder wxOrder = wxOrderMapper.selectById(orderId,tenantEntity.getTenantId()); if (wxOrder == null) { - logger.error("订单ID不存在:" + couponOrderId); + logger.error("交易订单不存在:" + orderId); throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); } + if(!EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode().equals(wxOrder.getOrderStatus())){ + logger.error("交易订单状态不支持退款:" + EnumOrderStatus.getEnum(wxOrder.getOrderStatus()).getMessage()); + throw new MallinkException(ErrorCode.ORDER_PAY_REFUND_FAIL); + } + WxAppinfo appInfo = wxAppinfoService.getCAppInfo(tenantEntity, EnumPayWay.getEnum(wxOrder.getPayVendor()).getPlat()); + if(appInfo == null){ + logger.error("AppInfo获取失败:" + EnumOrderStatus.getEnum(wxOrder.getOrderStatus()).getMessage()); + return new ResultData(ErrorCode.REFUND_ORDER_ERROR.getCode(), "AppInfo获取失败"); + } + + WxCouponOrder couponOrderQ = new WxCouponOrder(); + couponOrderQ.updateTenantInfo(tenantEntity); + couponOrderQ.setOrderId(orderId); + List couponOrderList = wxCouponOrderMapper.findList(couponOrderQ); + if(couponOrderList == null || couponOrderList.isEmpty()){ + logger.error("数据异常,券未找到:" + orderId); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_NULL); + } + + for (WxCouponOrder wxCouponOrder:couponOrderList) { + if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode())) { + logger.error("已退款: couponOrder-" + wxCouponOrder.getCouponId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); + } + if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode())) { + logger.error("已经核销过的券: couponOrder-" + wxCouponOrder.getCouponId()); + throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); + } + } if (payType == EnumPayType.PAY_B_REFUND) { logger.info("B端发起退款: bUserId-" + bUser); @@ -169,8 +199,11 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { logger.info("ADMIN端发起退款: aUserId-" + aUserId); } else if (payType == EnumPayType.PAY_AUTO_REFUND) { logger.info("auto端发起退款"); - } else { + } else if (payType == EnumPayType.PAY_C_REFUND){ logger.info("自己发起退款"); + } else { + logger.error("未知退款类型"); + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW.getCode(),"未知退款类型"); } if (wxOrder.getPayment() <= 0) { @@ -178,18 +211,11 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO); } - if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode())) { - logger.error("已退款: couponOrder-" + couponOrderId); - throw new MallinkException(ErrorCode.COUPON_ORDER_IS_OVER_TIME); - } - if (wxCouponOrder.getCouponOrderStatus().equals(EnumCouponOrderStatus.COUPON_ORDER_USED.getCode())) { - logger.error("已经核销过的券: couponOrder-" + couponOrderId); - throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); - } + // 查询订单状态是否是支付成功的状态,支付成功的状态才能退款。 WxPayOrder payOrderQ = new WxPayOrder(); - payOrderQ.updateTenantInfo(wxCouponOrder); + payOrderQ.updateTenantInfo(tenantEntity); payOrderQ.setCUserId(wxOrder.getCUserId()); payOrderQ.setOrderId(wxOrder.getComposeOrderId()); payOrderQ.setPayOrderStatus(EnumPayStatus.PAY_STATUS_SUCCESS.getCode()); @@ -218,100 +244,129 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } catch (Exception e) { throw new MallinkException(ErrorCode.PAY_ORDER_ERROR); } - - final IdWorker idWorker = IdWorker.get(); - Long refundOrderId = idWorker.nextId(); Date currentDate = new Date(); - - - WxBatchOrder order =new WxBatchOrder(); - order.setId(idWorker.nextId()); - order.setCUserId(wxOrder.getCUserId()); - order.updateTenantInfo(wxCouponOrder); - order.setPayment(wxOrder.getPayment()); - order.setPayVendor(wxOrder.getPayVendor()); - order.setOrderType(wxOrder.getComposeOrderType()); - order.setCreateDate(new Date()); - wxBatchOrderMapper.insert(order); - - // 创建 refund Order - WxOrder rOrder = new WxOrder(); - rOrder.setId(refundOrderId); - rOrder.updateTenantInfo(wxCouponOrder); - rOrder.setOrderNumber(wxOrder.getOrderNumber()); // 退款订单填写支付订单orderNumber - rOrder.setProductId(wxOrder.getProductId()); - rOrder.setType(EnumOrderType.COUPON.getCode()); - rOrder.setPayVendor(wxOrder.getPayVendor()); - rOrder.setCUserId(wxOrder.getCUserId()); + //这里wx_order不创建退款订单了, 直接修改原订单 + WxOrder updWxOrder = new WxOrder(); + updWxOrder.setId(wxOrder.getId()); + updWxOrder.updateTenantInfo(wxOrder); if (payType == EnumPayType.PAY_B_REFUND) { - rOrder.setDetail("["+bUser.getId()+"]B端管理员操作退款"); //B端发起退款后存B端用户ID在此 - }else if (payType == EnumPayType.PAY_ADMIN_REFUND) { - rOrder.setDetail("["+aUserId+"]A端管理员操作退款"); + updWxOrder.setRefDetail("["+bUser.getId()+"]B端管理员操作退款"); //B端发起退款后存B端用户ID在此 + } else if (payType == EnumPayType.PAY_ADMIN_REFUND) { + updWxOrder.setRefDetail("["+aUserId+"]A端管理员操作退款"); } else if (payType == EnumPayType.PAY_AUTO_REFUND) { - rOrder.setDetail("auto端发起退款"); - } else { - rOrder.setDetail("自己发起退款"); - } - rOrder.setPaymentType(payType.getCode()); - rOrder.setPayment(wxOrder.getPayment()); - rOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); - rOrder.setCreateDate(currentDate); - rOrder.setUpdateDate(currentDate); - rOrder.setComposeOrderId(order.getId()); - rOrder.setComposeOrderType(wxOrder.getComposeOrderType()); - rOrder.setCouponNumber(wxOrder.getCouponNumber()); - try { - wxOrderMapper.insert(rOrder); - } catch (Exception e) { - logger.error("退款订单保存出错: " + e.getMessage(),e); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "退款订单保存出错"); + updWxOrder.setRefDetail("定时过期发起退款"); + } else if (payType == EnumPayType.PAY_C_REFUND){ + updWxOrder.setRefDetail("用户发起退款"); + } else{ + logger.error("未知退款类型"); + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW.getCode(),"未知退款类型"); } + updWxOrder.setPaymentType(payType.getCode()); + updWxOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); + updWxOrder.setUpdateDate(currentDate); - // 更改 couponOrder 状态 - if (wxCouponOrder.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { - wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_RETURNED.getCode()); // 卡线下退款 - } else { - wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()); //3退款,券作废 - } - if (payType == EnumPayType.PAY_B_REFUND) { - wxCouponOrder.setBUserId(bUser.getId()); - wxCouponOrder.setAUserId(payType.getCode().longValue()); - wxCouponOrder.setBMerchantId(bUser.getMerchantId()); - } else if (payType == EnumPayType.PAY_ADMIN_REFUND) { - wxCouponOrder.setBUserId(payType.getCode().longValue()); - wxCouponOrder.setAUserId(aUserId); - wxCouponOrder.setBMerchantId(0L); - } else { - wxCouponOrder.setBUserId(payType.getCode().longValue()); - wxCouponOrder.setAUserId(payType.getCode().longValue()); - wxCouponOrder.setBMerchantId(0L); - } - wxCouponOrder.setUpdateDate(currentDate); try { - wxCouponOrderMapper.updateById(wxCouponOrder); + wxOrderMapper.updateById(updWxOrder); } catch (Exception e) { - logger.error("db failed: couponOrder-" + couponOrderId + ", e:" + e.getMessage()); + logger.error("db failed: wxOrder-" + wxOrder.getId() + ", e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } - // 卡退款,把卡余额设为0 - if (wxCouponOrder.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { - WxCardInfo updateCardInfo = new WxCardInfo(); - updateCardInfo.setId(couponOrderId); - updateCardInfo.setRemainingAmount(0); + +// final IdWorker idWorker = IdWorker.get(); +// Long refundOrderId = idWorker.nextId(); +// +// Date currentDate = new Date(); +// +// WxBatchOrder order =new WxBatchOrder(); +// order.setId(idWorker.nextId()); +// order.setCUserId(wxOrder.getCUserId()); +// order.updateTenantInfo(wxCouponOrder); +// order.setPayment(wxOrder.getPayment()); +// order.setPayVendor(wxOrder.getPayVendor()); +// order.setOrderType(wxOrder.getComposeOrderType()); +// order.setCreateDate(new Date()); +// wxBatchOrderMapper.insert(order); +// // 创建 refund Order +// WxOrder rOrder = new WxOrder(); +// rOrder.setId(refundOrderId); +// rOrder.updateTenantInfo(wxCouponOrder); +// rOrder.setOrderNumber(wxOrder.getOrderNumber()); // 退款订单填写支付订单orderNumber +// rOrder.setProductId(wxOrder.getProductId()); +// rOrder.setType(EnumOrderType.COUPON.getCode()); +// rOrder.setPayVendor(wxOrder.getPayVendor()); +// rOrder.setCUserId(wxOrder.getCUserId()); +// if (payType == EnumPayType.PAY_B_REFUND) { +// rOrder.setDetail("["+bUser.getId()+"]B端管理员操作退款"); //B端发起退款后存B端用户ID在此 +// }else if (payType == EnumPayType.PAY_ADMIN_REFUND) { +// rOrder.setDetail("["+aUserId+"]A端管理员操作退款"); +// } else if (payType == EnumPayType.PAY_AUTO_REFUND) { +// rOrder.setDetail("auto端发起退款"); +// } else { +// rOrder.setDetail("自己发起退款"); +// } +// rOrder.setPaymentType(payType.getCode()); +// rOrder.setPayment(wxOrder.getPayment()); +// rOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); +// rOrder.setCreateDate(currentDate); +// rOrder.setUpdateDate(currentDate); +// rOrder.setComposeOrderId(order.getId()); +// rOrder.setComposeOrderType(wxOrder.getComposeOrderType()); +// rOrder.setCouponNumber(wxOrder.getCouponNumber()); +// try { +// wxOrderMapper.insert(rOrder); +// } catch (Exception e) { +// logger.error("退款订单保存出错: " + e.getMessage(),e); +// throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "退款订单保存出错"); +// } + + for (WxCouponOrder wxCouponOrder:couponOrderList) { + // 更改 couponOrder 状态 + if (wxCouponOrder.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { + wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.CARD_RETURNED.getCode()); // 卡线下退款 + } else { + wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()); //3退款,券作废 + } + if (payType == EnumPayType.PAY_B_REFUND) { + wxCouponOrder.setBUserId(bUser.getId()); + wxCouponOrder.setAUserId(payType.getCode().longValue()); + wxCouponOrder.setBMerchantId(bUser.getMerchantId()); + } else if (payType == EnumPayType.PAY_ADMIN_REFUND) { + wxCouponOrder.setBUserId(payType.getCode().longValue()); + wxCouponOrder.setAUserId(aUserId); + wxCouponOrder.setBMerchantId(0L); + } else { + wxCouponOrder.setBUserId(payType.getCode().longValue()); + wxCouponOrder.setAUserId(payType.getCode().longValue()); + wxCouponOrder.setBMerchantId(0L); + } + wxCouponOrder.setUpdateDate(new Date()); try { - cardInfoMapper.updateById(updateCardInfo); + wxCouponOrderMapper.updateById(wxCouponOrder); } catch (Exception e) { - logger.error("db failed: wxCardInfo-" + couponOrderId + ", e:" + e.getMessage()); + logger.error("db failed: couponOrder-" + wxCouponOrder.getId() + ", e:" + e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + + // 卡退款,把卡余额设为0 + if (wxCouponOrder.getCouponType().equals(EnumCouponType.CARD_MULTIMCH.getCode())) { + WxCardInfo updateCardInfo = new WxCardInfo(); + updateCardInfo.setId(wxCouponOrder.getId()); + updateCardInfo.setRemainingAmount(0); + try { + cardInfoMapper.updateById(updateCardInfo); + } catch (Exception e) { + logger.error("db failed: wxCardInfo-" + wxCouponOrder.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); + } + } } WxRefundOrder record = new WxRefundOrder(); - record.updateTenantInfo(wxCouponOrder); + record.updateTenantInfo(tenantEntity); record.setPayOrderNo(String.valueOf(payOrder.getId())); - record.setOrderId(rOrder.getId()); + record.setOrderId(wxOrder.getId()); // check 是否有退款订单 List refundList = wxRefundOrderMapper.findList(record); @@ -321,6 +376,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } + final IdWorker idWorker = IdWorker.get(); // 创建退款订单 Long refundId = idWorker.nextId(); //String out_refund_id = String.valueOf(refundId); @@ -355,7 +411,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { //通知用户 try { - sendInsideOrderRefundMsg(wxCouponOrder,rOrder); + sendInsideOrderRefundMsg(wxOrder); } catch (Exception e) { logger.error("订单成功通知用户error:" + e.getMessage(),e); } @@ -367,12 +423,11 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } - private void sendInsideOrderRefundMsg(WxCouponOrder wxCouponOrder, WxOrder rOrder) { + private void sendInsideOrderRefundMsg(WxOrder wxOrder) { FmInsideOrderRefundMsg orderRefund = new FmInsideOrderRefundMsg(); orderRefund.setMsgType(EnumMsgRecordType.INSIDE_ORDER_REFUND.getCode()); - orderRefund.updateTenantInfo(wxCouponOrder); - orderRefund.setCouponOrderId(wxCouponOrder.getId()); - orderRefund.setOrderId(rOrder.getId()); + orderRefund.updateTenantInfo(wxOrder); + orderRefund.setOrderId(wxOrder.getId()); logger.info(">>>>>>>>>>>send sendInsideOrderRefundMsg :"+orderRefund); mqBaseProducer.sendMessage(orderRefund, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); } @@ -382,6 +437,15 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { public ResultData createRefundOrderFromMicroPay(WxAppinfo appInfo, Long orderId, EnumPayType payType, Long bUserId) { WxOrder wxOrder = wxOrderMapper.selectById(orderId,appInfo.getTenantId()); + if (wxOrder == null) { + logger.error("交易订单不存在:" + orderId); + throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND); + } + if(!EnumOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode().equals(wxOrder.getOrderStatus())){ + logger.error("交易订单状态不支持退款:" + EnumOrderStatus.getEnum(wxOrder.getOrderStatus()).getMessage()); + throw new MallinkException(ErrorCode.ORDER_PAY_REFUND_FAIL); + } + if (payType == EnumPayType.PAY_B_REFUND) { logger.info("B端发起退款: bUserId-" + bUserId); if (bUserId == null || bUserId == 0) { @@ -399,58 +463,85 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { throw new MallinkException(ErrorCode.REFUND_ORDER_BUSER_NOT_EQUAL); } } else if (payType == EnumPayType.PAY_ADMIN_REFUND) { - logger.info("ADMIN端发起退款: bUserId-" + bUserId); + logger.info("ADMIN端发起退款: aUserId-------"); } else if (payType == EnumPayType.PAY_AUTO_REFUND) { logger.info("auto端发起退款"); + } else if (payType == EnumPayType.PAY_C_REFUND){ + logger.info("自己发起退款"); } else { - logger.info("自己发起退款: cUserId-" + bUserId); + logger.error("未知退款类型"); + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW.getCode(),"未知退款类型"); } if (wxOrder.getPayment() <= 0) { logger.error("订单支付金额小于等于0: " + wxOrder.toString()); throw new MallinkException(ErrorCode.REFUND_PAY_ORDER_IS_ZERO); } - final IdWorker idWorker = IdWorker.get(); - Long refundOrderId = idWorker.nextId(); Date currentDate = new Date(); - - - WxBatchOrder order =new WxBatchOrder(); - order.setId(idWorker.nextId()); - order.setCUserId(wxOrder.getCUserId()); - order.updateTenantInfo(wxOrder); - order.setPayment(wxOrder.getPayment()); - order.setPayVendor(wxOrder.getPayVendor()); - order.setOrderType(EnumComposeOrder.SINGLE.getCode()); - order.setCreateDate(new Date()); - wxBatchOrderMapper.insert(order); - - // 创建 refund Order - WxOrder rOrder = new WxOrder(); - rOrder.setId(refundOrderId); - rOrder.updateTenantInfo(wxOrder); - rOrder.setOrderNumber(wxOrder.getOrderNumber()); // 退款订单填写支付订单orderNumber - rOrder.setType(EnumOrderType.MICROPAY.getCode()); - rOrder.setCUserId(wxOrder.getCUserId()); + //这里wx_order不创建退款订单了, 直接修改原订单 + WxOrder updWxOrder = new WxOrder(); + updWxOrder.setId(wxOrder.getId()); + updWxOrder.updateTenantInfo(wxOrder); if (payType == EnumPayType.PAY_B_REFUND) { - rOrder.setProductId(bUserId); //B端发起退款后存B端用户ID在此 - } - rOrder.setPayVendor(wxOrder.getPayVendor()); - rOrder.setPaymentType(payType.getCode()); - rOrder.setPayment(wxOrder.getPayment()); - rOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); - rOrder.setCreateDate(currentDate); - rOrder.setUpdateDate(currentDate); - rOrder.setComposeOrderId(order.getId()); - rOrder.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); - rOrder.setCouponNumber(1); + updWxOrder.setRefDetail("["+bUserId+"]B端管理员操作退款"); //B端发起退款后存B端用户ID在此 + } else{ + logger.error("未知退款类型"); + throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW.getCode(),"未知退款类型"); + } + updWxOrder.setPaymentType(payType.getCode()); + updWxOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); + updWxOrder.setUpdateDate(currentDate); + try { - wxOrderMapper.insert(rOrder); + wxOrderMapper.updateById(updWxOrder); } catch (Exception e) { - logger.error("退款订单保存出错: " + e.getMessage()); - throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "退款订单保存出错"); + logger.error("db failed: wxOrder-" + wxOrder.getId() + ", e:" + e.getMessage()); + throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } + +// final IdWorker idWorker = IdWorker.get(); +// Long refundOrderId = idWorker.nextId(); +// +// WxBatchOrder order =new WxBatchOrder(); +// order.setId(idWorker.nextId()); +// order.setCUserId(wxOrder.getCUserId()); +// order.updateTenantInfo(wxOrder); +// order.setPayment(wxOrder.getPayment()); +// order.setPayVendor(wxOrder.getPayVendor()); +// order.setOrderType(EnumComposeOrder.SINGLE.getCode()); +// order.setCreateDate(new Date()); +// wxBatchOrderMapper.insert(order); +// +// // 创建 refund Order +// WxOrder rOrder = new WxOrder(); +// rOrder.setId(refundOrderId); +// rOrder.updateTenantInfo(wxOrder); +// rOrder.setOrderNumber(wxOrder.getOrderNumber()); // 退款订单填写支付订单orderNumber +// rOrder.setType(EnumOrderType.MICROPAY.getCode()); +// rOrder.setCUserId(wxOrder.getCUserId()); +// if (payType == EnumPayType.PAY_B_REFUND) { +// rOrder.setProductId(bUserId); //B端发起退款后存B端用户ID在此 +// } else { +// logger.error("退款类型错误"); +// throw new MallinkException(ErrorCode.REFUND_NOT_ALLOW.getCode(),"退款类型错误"); +// } +// rOrder.setPayVendor(wxOrder.getPayVendor()); +// rOrder.setPaymentType(payType.getCode()); +// rOrder.setPayment(wxOrder.getPayment()); +// rOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode()); +// rOrder.setCreateDate(currentDate); +// rOrder.setUpdateDate(currentDate); +// rOrder.setComposeOrderId(order.getId()); +// rOrder.setComposeOrderType(EnumComposeOrder.SINGLE.getCode()); +// rOrder.setCouponNumber(1); +// try { +// wxOrderMapper.insert(rOrder); +// } catch (Exception e) { +// logger.error("退款订单保存出错: " + e.getMessage()); +// throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "退款订单保存出错"); +// } + // 查找支付订单 WxPayOrder payOrderQ = new WxPayOrder(); payOrderQ.updateTenantInfo(wxOrder); @@ -472,11 +563,14 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { return new ResultData(ErrorCode.PAY_ORDER_NOT_FOUND); } - WxRefundOrder record = new WxRefundOrder(); - record.setPayOrderNo(String.valueOf(payOrder.getId())); - record.setOrderId(rOrder.getId()); // 创建退款订单 + final IdWorker idWorker = IdWorker.get(); Long refundId = idWorker.nextId(); + + WxRefundOrder record = new WxRefundOrder(); + record.setPayOrderNo(String.valueOf(payOrder.getId())); + record.setOrderId(wxOrder.getId()); + //String out_refund_id = String.valueOf(refundId); record.setId(refundId); @@ -755,25 +849,28 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { } @Override - public void actionAfterCouponOrder(WxCouponOrder couponOrder, WxOrder rOrder, WxCoupon coupon, WxCUserBasicInfo user) { + public void actionAfterCouponOrder( WxOrder order, WxCUserBasicInfo user) { // 发送短信 - if(EnumPayWay.PAY_WAY_TT.getCode().equals(couponOrder.getPayVendor())){ - logger.info("订单成功短信通知start"); - //券名 - String name = coupon.getTitle(); + if(EnumPayWay.PAY_WAY_TT.getCode().equals(order.getPayVendor())){ + logger.info("订单退款短信通知start"); + //订单号 + String orderNumber = order.getId().toString(); + //金额 + String priceStr = order.getPaymentStr(); //找出用户手机号 String phone = user.getPhone(); Map msgReplaceMap = new HashMap(); - msgReplaceMap.put("name", name); + msgReplaceMap.put("orderNumber", orderNumber); + msgReplaceMap.put("priceStr", priceStr); WxMsgRecord wxMsgRecord = new WxMsgRecord(); - wxMsgRecord.updateTenantInfo(couponOrder); + wxMsgRecord.updateTenantInfo(order); 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"); + logger.info("订单退款短信通知end"); } } diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideOrderPushMsgServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideOrderPushMsgServiceImpl.java index 81bfbec40..e35f774c3 100644 --- a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideOrderPushMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideOrderPushMsgServiceImpl.java @@ -71,32 +71,34 @@ public class FmInsideOrderPushMsgServiceImpl implements MsgSendService { && EnumComposeOrder.SINGLE.getCode().equals(batchOrder.getOrderType()) && batchOrder.getOrders().size() == 1){ WxAppinfo appinfo = wxAppinfoService.getCAppInfo(batchOrder,EnumPayWay.PAY_WAY_TT.getPlat()); - WxOrderCouponVo wxOrderCouponVo = batchOrder.getOrders().get(0); - if(EnumPayType.PAY_PAYMENT.getCode().equals(wxOrderCouponVo.getPaymentType())){ - payOrderPush(appinfo,batchOrder); - }else{ - //退款 - //通过退款订单找支付订单 - WxOrder ref_order = orderService.getById(wxOrderCouponVo.getOrderNumber(), wxOrderCouponVo.getTenantId()); - WxBatchOrder ref_border = new WxBatchOrder(); - ref_border.setTenantId(ref_order.getTenantId()); - ref_border.setParentTenantId(ref_order.getParentTenantId()); - ref_border.setId(ref_order.getComposeOrderId()); - WxBatchOrder ref_batchOrder = orderService.batchOrderDetail(ref_border); - if(ref_batchOrder == null){ - logger.error("退款 主订单未找到: " + ref_order.getComposeOrderId()); - throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "退款 主订单未找到" + ref_order.getComposeOrderId()); - } - if(EnumPayWay.PAY_WAY_TT.getCode().equals(ref_batchOrder.getPayVendor()) - && EnumComposeOrder.SINGLE.getCode().equals(ref_batchOrder.getOrderType()) - && ref_batchOrder.getOrders().size() == 1){ - for (WxOrderCouponVo ref_vo:ref_batchOrder.getOrders()) { - ref_vo.setOrderStatus(wxOrderCouponVo.getOrderStatus()); - } - payOrderPush(appinfo,ref_batchOrder); - } - - } + payOrderPush(appinfo,batchOrder); + +// WxOrderCouponVo wxOrderCouponVo = batchOrder.getOrders().get(0); +// if(EnumPayType.PAY_PAYMENT.getCode().equals(wxOrderCouponVo.getPaymentType())){ +// payOrderPush(appinfo,batchOrder); +// }else{ +// //退款 +// //通过退款订单找支付订单 +// WxOrder ref_order = orderService.getById(wxOrderCouponVo.getOrderNumber(), wxOrderCouponVo.getTenantId()); +// WxBatchOrder ref_border = new WxBatchOrder(); +// ref_border.setTenantId(ref_order.getTenantId()); +// ref_border.setParentTenantId(ref_order.getParentTenantId()); +// ref_border.setId(ref_order.getComposeOrderId()); +// WxBatchOrder ref_batchOrder = orderService.batchOrderDetail(ref_border); +// if(ref_batchOrder == null){ +// logger.error("退款 主订单未找到: " + ref_order.getComposeOrderId()); +// throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "退款 主订单未找到" + ref_order.getComposeOrderId()); +// } +// if(EnumPayWay.PAY_WAY_TT.getCode().equals(ref_batchOrder.getPayVendor()) +// && EnumComposeOrder.SINGLE.getCode().equals(ref_batchOrder.getOrderType()) +// && ref_batchOrder.getOrders().size() == 1){ +// for (WxOrderCouponVo ref_vo:ref_batchOrder.getOrders()) { +// ref_vo.setOrderStatus(wxOrderCouponVo.getOrderStatus()); +// } +// payOrderPush(appinfo,ref_batchOrder); +// } +// +// } } } 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 index 8503092e7..24c6cbc94 100644 --- a/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideOrderRefundMsgServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/FmInsideOrderRefundMsgServiceImpl.java @@ -45,31 +45,19 @@ public class FmInsideOrderRefundMsgServiceImpl implements MsgSendService { 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()); + WxOrder order = orderService.getById(msg.getOrderId(),msg.getTenantId()); + if(order == null) { + logger.error("订单未找到: " + msg.getOrderId()); throw new MallinkException(ErrorCode.ORDER_IS_NOT_FIND.getCode(), "订单未找到" + msg.getOrderId()); } - WxCUserBasicInfo user = userService.getById(couponOrder.getCUserId(),couponOrder.getFinalTenantId()); + WxCUserBasicInfo user = userService.getById(order.getCUserId(),msg.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()); + logger.error("用户未找到: " + order.getCUserId()); + throw new MallinkException(ErrorCode.USER_IS_EMPTY.getCode(), "用户未找到" + order.getCUserId()); } // 提交退款后处理 - refundOrderService.actionAfterCouponOrder(couponOrder, rOrder, coupon, user); + refundOrderService.actionAfterCouponOrder(order, user); } } diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/refund/douyin/TtRefundAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/refund/douyin/TtRefundAdapterService.java index 847aaa411..2383fa92f 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/refund/douyin/TtRefundAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/refund/douyin/TtRefundAdapterService.java @@ -47,7 +47,7 @@ public class TtRefundAdapterService implements RefundPayAdapterService{ createRefund.setReason("管理端商户退款"); } else if (payType == EnumPayType.PAY_AUTO_REFUND) { createRefund.setReason("超期自动退款"); - } else { + } else if (payType == EnumPayType.PAY_C_REFUND){ createRefund.setReason("用户自己退款"); } createRefund.setRefundAmount(record.getRefundFee()); diff --git a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml index c5c773e35..52f0f01a7 100644 --- a/mallinkService/src/main/resources/mapper/WxOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOrderMapper.xml @@ -19,6 +19,7 @@ + @@ -34,7 +35,7 @@ - `id`,`order_number`,`tenant_id`,`parent_tenant_id`,`c_user_id`,`coupon_channel_id`,`product_id`,`type`,`pay_vendor`,`payment_type`,`payment`,`payment_time`,`freight_price`,`order_status`,`create_date`,`update_date`,`detail`, + `id`,`order_number`,`tenant_id`,`parent_tenant_id`,`c_user_id`,`coupon_channel_id`,`product_id`,`type`,`pay_vendor`,`payment_type`,`payment`,`payment_time`,`freight_price`,`order_status`,`create_date`,`update_date`,`detail`,`ref_detail`, `press_end_date`,`press_current_num`,`press_current_value`,`order_group_id`,`form_id`,`total_payment`,`compose_order_id`,`coupon_number`,`compose_order_type`,`shipping_type`,`shipping_address`,`parent_order_id` @@ -571,7 +572,7 @@ select o.`id`,o.`order_number`,o.`tenant_id`,o.`parent_tenant_id`,o.`c_user_id`,o.`coupon_channel_id`,o.`product_id`,o.`type`,o.`pay_vendor`, - o.`payment_type`,o.`payment`,o.`payment_time`,o.`freight_price`,o.`order_status`,o.`create_date`,o.`update_date`,o.`detail` + o.`payment_type`,o.`payment`,o.`payment_time`,o.`freight_price`,o.`order_status`,o.`create_date`,o.`update_date`,o.`detail`,o.`ref_detail` from wx_order o where o.order_status = '1' and o.`type` = 1 @@ -603,7 +604,7 @@ select o.`id`,o.`order_number`,o.`tenant_id`,o.`c_user_id`,o.`coupon_channel_id`,o.`product_id`,o.`type`,o.`pay_vendor`, - o.`payment_type`,o.`payment`,o.`payment_time`,o.`freight_price`,o.`order_status`,o.`create_date`,o.`update_date`,o.`detail` + o.`payment_type`,o.`payment`,o.`payment_time`,o.`freight_price`,o.`order_status`,o.`create_date`,o.`update_date`,o.`detail`,o.`ref_detail` from wx_order o where o.order_status = '0' and o.`type` = 1 @@ -750,6 +751,7 @@ +