| @@ -264,10 +264,42 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| logger.error("已经核销过的券: couponOrder-" + couponOrderId); | logger.error("已经核销过的券: couponOrder-" + couponOrderId); | ||||
| throw new MallinkException(ErrorCode.COUPON_ORDER_IS_USED); | 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 | // 创建 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 状态 | // 更改 couponOrder 状态 | ||||
| Date currentDate = new Date(); | |||||
| wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()); //3退款,券作废 | wxCouponOrder.setCouponOrderStatus(EnumCouponOrderStatus.COUPON_ORDER_INVALID.getCode()); //3退款,券作废 | ||||
| if (refundWay == EnumRefundWay.B) { | if (refundWay == EnumRefundWay.B) { | ||||
| wxCouponOrder.setBUserId(bUserId); | wxCouponOrder.setBUserId(bUserId); | ||||
| @@ -311,13 +343,12 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| WxRefundOrder record = new WxRefundOrder(); | WxRefundOrder record = new WxRefundOrder(); | ||||
| record.setPayOrderNo(String.valueOf(payOrder.getId())); | 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.setTenantId(appInfo.getTenantId()); | ||||
| record.setCreateTime(currentDate); | record.setCreateTime(currentDate); | ||||
| record.setUpdateTime(currentDate); | record.setUpdateTime(currentDate); | ||||
| @@ -363,7 +394,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| wxRefundOrderP.setNonce_str(noncestr); | wxRefundOrderP.setNonce_str(noncestr); | ||||
| if (record.getTransactionId() != null) | if (record.getTransactionId() != null) | ||||
| wxRefundOrderP.setTransaction_id(record.getTransactionId()); | 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.setOut_refund_no(out_refund_id); | ||||
| wxRefundOrderP.setTotal_fee(record.getTotalFee()); | wxRefundOrderP.setTotal_fee(record.getTotalFee()); | ||||
| wxRefundOrderP.setRefund_fee(record.getRefundFee()); | wxRefundOrderP.setRefund_fee(record.getRefundFee()); | ||||
| @@ -510,10 +541,10 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| return XmlUtil.getRequestXml(resultMap); | 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()); | logger.warn("notify order, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString()); | ||||
| SortedMap resultMap = new TreeMap(); | SortedMap resultMap = new TreeMap(); | ||||
| resultMap.put("return_code", "FAIL"); | resultMap.put("return_code", "FAIL"); | ||||
| @@ -521,15 +552,15 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| return XmlUtil.getRequestXml(resultMap); | 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()); | logger.warn("notify order, wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString()); | ||||
| SortedMap resultMap = new TreeMap(); | SortedMap resultMap = new TreeMap(); | ||||
| resultMap.put("return_code", "FAIL"); | resultMap.put("return_code", "FAIL"); | ||||
| resultMap.put("return_msg", "订单总金额不一致"); | resultMap.put("return_msg", "订单总金额不一致"); | ||||
| return XmlUtil.getRequestXml(resultMap); | 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); | WxRefundOrder refundOrder = wxRefundOrderMapper.selectByPrimaryKey(refundOrderId); | ||||
| if (refundOrder == null) { | if (refundOrder == null) { | ||||
| logger.warn("notify order, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString()); | logger.warn("notify order, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString()); | ||||