Kaynağa Gözat

[退款][修改]:添加订单跟踪

release_toaliyun_real
Stormeye.Wu 7 yıl önce
ebeveyn
işleme
3f6cc0505f
1 değiştirilmiş dosya ile 45 ekleme ve 14 silme
  1. +45
    -14
      mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java

+ 45
- 14
mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java Dosyayı Görüntüle

@@ -264,10 +264,42 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
logger.error("已经核销过的券: couponOrder-" + couponOrderId);
throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED);
}
final IdWorker idWorker = IdWorker.get();
Long refundOrderId = idWorker.nextId();
String out_trade_no = String.valueOf(refundOrderId);

Date currentDate = new Date();

// 创建 refund Order
WxOrder rOrder = new WxOrder();
rOrder.setId(refundOrderId);
rOrder.setTenantId(appInfo.getTenantId());
rOrder.setOrderNumber(wxOrder.getOrderNumber()); // 退款订单填写支付订单orderNumber
rOrder.setCouponId(wxOrder.getCouponId());
rOrder.setCUserId(wxOrder.getCUserId());
if (refundWay == EnumRefundWay.B) {
rOrder.setBUserId(bUserId);
} else if (refundWay == EnumRefundWay.AUTO) {
rOrder.setBUserId(0L); // 自动退款, 设置bUserId为0
} else if (refundWay == EnumRefundWay.ADMIN) {
rOrder.setBUserId(1L); // ADMIN发起退款, 设置bUserId为1
} else {
rOrder.setBUserId(2L); // 自己发起退款, 设置bUserId为2
}
rOrder.setMerchantId(wxOrder.getMerchantId());
rOrder.setPaymentType(EnumPayType.PAY_REFUND.getCode());
rOrder.setPayment(wxOrder.getPayment());
rOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_PENDING_REFUND.getCode());
rOrder.setCreateDate(currentDate);
rOrder.setUpdateDate(currentDate);
try {
wxOrderMapper.insertSelective(rOrder);
} catch (Exception e) {
logger.error("退款订单保存出错: " + e.getMessage());
throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "退款订单保存出错");
}

// 更改 couponOrder 状态
Date currentDate = new Date();
wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()); //3退款,券作废
if (refundWay == EnumRefundWay.B) {
wxCouponOrder.setBUserId(bUserId);
@@ -311,13 +343,12 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {

WxRefundOrder record = new WxRefundOrder();
record.setPayOrderNo(String.valueOf(payOrder.getId()));
record.setOrderId(wxOrder.getId());
record.setOrderId(rOrder.getId());
// 创建退款订单
final IdWorker idWorker = IdWorker.get();
Long id = idWorker.nextId();
String out_refund_id = String.valueOf(id);
Long refundId = idWorker.nextId();
String out_refund_id = String.valueOf(refundId);

record.setId(id);
record.setId(refundId);
record.setTenantId(appInfo.getTenantId());
record.setCreateTime(currentDate);
record.setUpdateTime(currentDate);
@@ -363,7 +394,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
wxRefundOrderP.setNonce_str(noncestr);
if (record.getTransactionId() != null)
wxRefundOrderP.setTransaction_id(record.getTransactionId());
wxRefundOrderP.setOut_trade_no(record.getPayOrderNo());
wxRefundOrderP.setOut_trade_no(out_trade_no);
wxRefundOrderP.setOut_refund_no(out_refund_id);
wxRefundOrderP.setTotal_fee(record.getTotalFee());
wxRefundOrderP.setRefund_fee(record.getRefundFee());
@@ -510,10 +541,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
return XmlUtil.getRequestXml(resultMap);
}

String payOrderNo = paramMap.get("out_trade_no");
Long payOrderId = Long.valueOf(payOrderNo);
WxPayOrder payOrder = wxPayOrderMapper.selectByPrimaryKey(payOrderId);
if (payOrder == null) {
String rOrderNo = paramMap.get("out_trade_no");
Long rOrderId = Long.valueOf(rOrderNo);
WxOrder rOrder = wxOrderMapper.selectByPrimaryKey(rOrderId);
if (rOrder == null) {
logger.warn("notify order, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
@@ -521,15 +552,15 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
return XmlUtil.getRequestXml(resultMap);
}
// 验证支付金额
if(!paramMap.get("total_fee").equals(payOrder.getPayAmount().toString())) {
if(!paramMap.get("total_fee").equals(rOrder.getPayment().toString())) {
logger.warn("notify order, wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "订单总金额不一致");
return XmlUtil.getRequestXml(resultMap);
}
String refundOrderNo = paramMap.get("out_refund_no");
Long refundOrderId = Long.valueOf(refundOrderNo);
String refundIdStr = paramMap.get("out_refund_no");
Long refundOrderId = Long.valueOf(refundIdStr);
WxRefundOrder refundOrder = wxRefundOrderMapper.selectByPrimaryKey(refundOrderId);
if (refundOrder == null) {
logger.warn("notify order, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());


Yükleniyor…
İptal
Kaydet