| @@ -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()); | |||