diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java index 070e09fb7..7b9c2000c 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/simple/service/impl/WxRefundOrderServiceImpl.java @@ -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());