|
|
|
@@ -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<WxCouponOrder> 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<WxRefundOrder> 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<String, String> 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"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|