From 2423fd9fe24bb2833a3483b75face8599f00119d Mon Sep 17 00:00:00 2001 From: HH Date: Wed, 1 Jun 2022 16:29:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=92=A4=E9=94=80=E6=94=AF=E4=BB=98=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/order/OrderController.java | 29 +++++---- .../ghy/web/controller/pay/PayController.java | 60 +++++++++++++++++++ .../com/ghy/common/adapay/AdapayConfig.java | 5 ++ ...awCashReply.java => DrawCashCallback.java} | 2 +- .../model/{PayReply.java => PayCallback.java} | 2 +- .../adapay/model/PayReverseCallback.java | 43 +++++++++++++ .../{RefundReply.java => RefundCallback.java} | 2 +- .../ghy/payment/domain/FinancialDetail.java | 17 ++++-- .../payment/mapper/FinancialDetailMapper.java | 7 +++ .../payment/mapper/FinancialMasterMapper.java | 7 +++ .../ghy/payment/service/AdapayService.java | 8 +-- .../service/FinancialDetailService.java | 6 ++ .../service/FinancialMasterService.java | 7 +++ .../impl/FinancialDetailServiceImpl.java | 6 +- .../impl/FinancialMasterServiceImpl.java | 5 ++ .../service/impl/PayCallbackService.java | 6 +- .../impl/PayReverseCallbackService.java | 36 ++++++++++- .../financial/FinancialDetailMapper.xml | 15 ++++- .../financial/FinancialMasterMapper.xml | 4 ++ 19 files changed, 233 insertions(+), 34 deletions(-) create mode 100644 ghy-admin/src/main/java/com/ghy/web/controller/pay/PayController.java rename ghy-common/src/main/java/com/ghy/common/adapay/model/{DrawCashReply.java => DrawCashCallback.java} (98%) rename ghy-common/src/main/java/com/ghy/common/adapay/model/{PayReply.java => PayCallback.java} (98%) create mode 100644 ghy-common/src/main/java/com/ghy/common/adapay/model/PayReverseCallback.java rename ghy-common/src/main/java/com/ghy/common/adapay/model/{RefundReply.java => RefundCallback.java} (97%) diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java index 6c99805d..f7d572fd 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderController.java @@ -6,7 +6,6 @@ import com.ghy.common.utils.StringUtils; import com.ghy.customer.domain.Customer; import com.ghy.customer.service.CustomerService; import com.ghy.goods.domain.DeptGoodsCategory; -import com.ghy.goods.domain.Goods; import com.ghy.goods.domain.GoodsStandard; import com.ghy.goods.request.AppGoodsRequest; import com.ghy.goods.service.DeptGoodsCategoryService; @@ -109,7 +108,7 @@ public class OrderController extends BaseController { orderDetailService.insertOrderDetail(od); // 批量生成订单商品 - request.getGoodsList().forEach(goods->{ + request.getGoodsList().forEach(goods -> { OrderGoods orderGoods = new OrderGoods(); orderGoods.setGoodsId(goods.getGoodsStandardId()); orderGoods.setGoodsNum(goods.getNum()); @@ -229,10 +228,10 @@ public class OrderController extends BaseController { * 生成财务子单 * * @param deptGoodsCategoryId 商品类目id - * @param deptId 商户ID - * @param customer 消费者 - * @param payMoney 实付金额 - * @param financialMaster 财务主单 + * @param deptId 商户ID + * @param customer 消费者 + * @param payMoney 实付金额 + * @param financialMaster 财务主单 */ private void createFinancialDetail(Long deptGoodsCategoryId, Long deptId, Customer customer, BigDecimal payMoney, FinancialMaster financialMaster) { // 是否为0元购 是的话下面就不用多级分销了 @@ -247,8 +246,8 @@ public class OrderController extends BaseController { BigDecimal deptTotal = payMoney.multiply(deptRate).add(deptMoney); - FinancialDetail deptDetail = new FinancialDetail(financialDetailService.createCode(), deptId, - financialMaster.getId(), financialMaster.getCode(), deptTotal, 3, null); + FinancialDetail deptDetail = new FinancialDetail(deptId, financialDetailService.createCode(), + financialMaster.getId(), financialMaster.getCode(), deptTotal, 3, null); financialDetailService.insertFinancialDetail(deptDetail); /* 2 截留扣点 */ @@ -257,8 +256,8 @@ public class OrderController extends BaseController { BigDecimal retainTotal = payMoney.multiply(retainRate).add(retainMoney); - FinancialDetail retainDetail = new FinancialDetail(financialDetailService.createCode(), deptId, - financialMaster.getId(), financialMaster.getCode(), retainTotal, 2, null); + FinancialDetail retainDetail = new FinancialDetail(deptId, financialDetailService.createCode(), + financialMaster.getId(), financialMaster.getCode(), retainTotal, 2, null); financialDetailService.insertFinancialDetail(retainDetail); /* 3 分销扣点 */ @@ -271,26 +270,26 @@ public class OrderController extends BaseController { // 一级分销 if (customerPlaceId != null) { - FinancialDetail financialDetail = new FinancialDetail(financialDetailService.createCode(), deptId, + FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(), financialMaster.getId(), financialMaster.getCode(), onePlaceMoney, 2, customerPlaceId); financialDetailService.insertFinancialDetail(financialDetail); - }else { + } else { deptPlaceTotal = deptPlaceTotal.add(onePlaceMoney); } // 二级分销 Long parentCustomerPlaceId = customer.getParentCustomerPlace(); if (parentCustomerPlaceId != null) { - FinancialDetail financialDetail = new FinancialDetail(financialDetailService.createCode(), deptId, + FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(), financialMaster.getId(), financialMaster.getCode(), twoPlaceMoney, 2, parentCustomerPlaceId); financialDetailService.insertFinancialDetail(financialDetail); - }else { + } else { deptPlaceTotal = deptPlaceTotal.add(twoPlaceMoney); } // 平台分销 deptPlaceTotal = deptPlaceTotal.add(threePlaceMoney); - FinancialDetail financialDetail = new FinancialDetail(financialDetailService.createCode(), deptId, + FinancialDetail financialDetail = new FinancialDetail(deptId, financialDetailService.createCode(), financialMaster.getId(), financialMaster.getCode(), deptPlaceTotal, 2, null); financialDetailService.insertFinancialDetail(financialDetail); } diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/pay/PayController.java b/ghy-admin/src/main/java/com/ghy/web/controller/pay/PayController.java new file mode 100644 index 00000000..58d82d42 --- /dev/null +++ b/ghy-admin/src/main/java/com/ghy/web/controller/pay/PayController.java @@ -0,0 +1,60 @@ +package com.ghy.web.controller.pay; + +import com.alibaba.fastjson.JSONObject; +import com.ghy.common.adapay.model.AdapayStatusEnum; +import com.ghy.common.core.domain.AjaxResult; +import com.ghy.order.domain.OrderMaster; +import com.ghy.order.service.OrderMasterService; +import com.ghy.payment.domain.FinancialMaster; +import com.ghy.payment.service.AdapayService; +import com.ghy.payment.service.FinancialMasterService; +import com.huifu.adapay.core.exception.BaseAdaPayException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.util.Assert; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; + +/** + * @author HH 2022/6/1 + */ +@Controller +@RequestMapping("pay") +public class PayController { + + private static final Logger logger = LoggerFactory.getLogger(PayController.class); + + @Resource + private AdapayService adapayService; + @Resource + private OrderMasterService orderMasterService; + @Resource + private FinancialMasterService financialMasterService; + + /** + * 撤销支付 + * + * @param orderMasterId 主订单ID + * @param reverseAmt 撤销金额 保留两位小数 + */ + @PostMapping("reverse") + @ResponseBody + public AjaxResult reverse(Long orderMasterId, String reverseAmt) throws BaseAdaPayException { + OrderMaster orderMaster = orderMasterService.selectById(orderMasterId); + Assert.notNull(orderMaster, "找不到对应的订单"); + FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMasterId); + Assert.notNull(financialMaster, "找不到订单"); + Assert.isTrue(financialMaster.getPayStatus() == 1, "订单未支付"); + Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员"); + JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt); + if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { + return AjaxResult.success(); + } else { + return AjaxResult.error(response.getString("error_msg")); + } + } +} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/AdapayConfig.java b/ghy-common/src/main/java/com/ghy/common/adapay/AdapayConfig.java index 03027edc..9f125c97 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/AdapayConfig.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/AdapayConfig.java @@ -3,6 +3,8 @@ package com.ghy.common.adapay; import com.ghy.common.adapay.model.Merchant; import com.huifu.adapay.Adapay; import com.huifu.adapay.model.MerConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.util.Assert; @@ -21,6 +23,8 @@ import java.util.stream.Collectors; @EnableConfigurationProperties(AdapayProperties.class) public class AdapayConfig { + private static final Logger logger = LoggerFactory.getLogger(AdapayConfig.class); + /** * 商户配置 */ @@ -38,6 +42,7 @@ public class AdapayConfig { Assert.notEmpty(merchants, "Merchants is empty!"); Map configPathMap = new HashMap<>(merchants.size()); for (Merchant merchant : merchants) { + logger.info("Adapay load merchant : {}", merchant.getDeptId()); check(merchant); MerConfig merConfig = new MerConfig(); merConfig.setApiKey(merchant.getApiKey()); diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/model/DrawCashReply.java b/ghy-common/src/main/java/com/ghy/common/adapay/model/DrawCashCallback.java similarity index 98% rename from ghy-common/src/main/java/com/ghy/common/adapay/model/DrawCashReply.java rename to ghy-common/src/main/java/com/ghy/common/adapay/model/DrawCashCallback.java index a4d5a9c0..14431d61 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/model/DrawCashReply.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/model/DrawCashCallback.java @@ -9,7 +9,7 @@ import lombok.Data; * @author HH 2022/4/1 */ @Data -public class DrawCashReply { +public class DrawCashCallback { /** * 订单号 diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/model/PayReply.java b/ghy-common/src/main/java/com/ghy/common/adapay/model/PayCallback.java similarity index 98% rename from ghy-common/src/main/java/com/ghy/common/adapay/model/PayReply.java rename to ghy-common/src/main/java/com/ghy/common/adapay/model/PayCallback.java index 892a5512..803c4949 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/model/PayReply.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/model/PayCallback.java @@ -9,7 +9,7 @@ import lombok.Data; * @author HH 2022/3/29 */ @Data -public class PayReply { +public class PayCallback { /** * 返参,必填,由AdaPay生成的支付对象 ID diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/model/PayReverseCallback.java b/ghy-common/src/main/java/com/ghy/common/adapay/model/PayReverseCallback.java new file mode 100644 index 00000000..d49b7c15 --- /dev/null +++ b/ghy-common/src/main/java/com/ghy/common/adapay/model/PayReverseCallback.java @@ -0,0 +1,43 @@ +package com.ghy.common.adapay.model; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +/** + * 撤销支付后Adapay回调接口传过来的数据 + * + * @author HH 2022/5/31 + */ +@Data +public class PayReverseCallback { + + private String id; + private String status; + @JSONField(name = "error_code") + private String errorCode; + @JSONField(name = "error_msg") + private String errorMsg; + @JSONField(name = "error_type") + private String errorType; + @JSONField(name = "prod_mode") + private String prodMode; + @JSONField(name = "order_no") + private String orderNo; + @JSONField(name = "payment_id") + private String paymentId; + @JSONField(name = "reverse_amt") + private String reverseAmt; + @JSONField(name = "reversed_amt") + private String reversedAmt; + @JSONField(name = "confirmed_amt") + private String confirmedAmt; + @JSONField(name = "refunded_amt") + private String refundedAmt; + @JSONField(name = "createdTime") + private String created_time; + @JSONField(name = "succeed_time") + private String succeedTime; + @JSONField(name = "channel_no") + private String channelNo; + private String reason; +} diff --git a/ghy-common/src/main/java/com/ghy/common/adapay/model/RefundReply.java b/ghy-common/src/main/java/com/ghy/common/adapay/model/RefundCallback.java similarity index 97% rename from ghy-common/src/main/java/com/ghy/common/adapay/model/RefundReply.java rename to ghy-common/src/main/java/com/ghy/common/adapay/model/RefundCallback.java index e8804de6..926d8f39 100644 --- a/ghy-common/src/main/java/com/ghy/common/adapay/model/RefundReply.java +++ b/ghy-common/src/main/java/com/ghy/common/adapay/model/RefundCallback.java @@ -9,7 +9,7 @@ import lombok.Data; * @author HH 2022/3/29 */ @Data -public class RefundReply { +public class RefundCallback { /** * 退款目标支付对象 id */ diff --git a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java index 1a0082c1..417d308d 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java +++ b/ghy-payment/src/main/java/com/ghy/payment/domain/FinancialDetail.java @@ -46,18 +46,24 @@ public class FinancialDetail extends BaseEntity { @Excel(name = "实付金额", cellType = Excel.ColumnType.STRING) private BigDecimal payMoney; - @Excel(name = "财务子单类型,1师傅转派/2多级分销/3平台抽成", cellType = Excel.ColumnType.NUMERIC) + @Excel(name = "财务子单类型,1师傅转派/2多级分销/3平台抽成/4撤销支付或退款", cellType = Excel.ColumnType.NUMERIC) private Integer financialDetailType; /** * 收款人ID * 当财务子单类型是师傅转派时 收款人ID是师傅或徒弟的workerId * 当财务子单类型是多级分销时 收款人ID是分销者的customerId - * 当财务子单类型是平台抽成 无需填写收款人ID + * 当财务子单类型是平台抽成和退款时 无需填写收款人ID */ @Excel(name = "收款人ID", cellType = Excel.ColumnType.NUMERIC) private Long payeeId; + /** + * Adapay撤销支付或退款ID + */ + @Excel(name = "Adapay撤销支付或退款ID", cellType = Excel.ColumnType.STRING) + private String reverseId; + @Excel(name = "支付方式,微信/支付宝/线下", cellType = Excel.ColumnType.NUMERIC) private Integer payType; @@ -74,7 +80,8 @@ public class FinancialDetail extends BaseEntity { this.financialMasterId = financialMasterId; } - public FinancialDetail(String code, Long deptId, Long financialMasterId, String financialMasterCode, BigDecimal payMoney, Integer financialDetailType, Long payeeId) { + public FinancialDetail(Long deptId, String code, Long financialMasterId, String financialMasterCode, + BigDecimal payMoney, Integer financialDetailType, Long payeeId) { this.deptId = deptId; this.code = code; this.financialMasterId = financialMasterId; @@ -84,7 +91,9 @@ public class FinancialDetail extends BaseEntity { this.payeeId = payeeId; } - public FinancialDetail(Long deptId, String code, Long financialMasterId, String financialMasterCode, Long orderDetailId, String orderDetailCode, BigDecimal payMoney, Integer financialDetailType, Long payeeId, Integer payType, Integer payStatus, Date payTime) { + public FinancialDetail(Long deptId, String code, Long financialMasterId, String financialMasterCode, + Long orderDetailId, String orderDetailCode, BigDecimal payMoney, Integer financialDetailType, + Long payeeId, Integer payType, Integer payStatus, Date payTime) { this.deptId = deptId; this.code = code; this.financialMasterId = financialMasterId; diff --git a/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialDetailMapper.java b/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialDetailMapper.java index b0eabd39..dc2c7715 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialDetailMapper.java +++ b/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialDetailMapper.java @@ -48,4 +48,11 @@ public interface FinancialDetailMapper { * @return 财务细单信息 */ FinancialDetail checkFinancialDetailCodeUnique(String financialDetailCode); + + /** + * 撤销支付成功 + * + * @param reverseId 撤销支付ID + */ + void payReverseSucceeded(String reverseId); } diff --git a/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java b/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java index 5718f61a..5e3bf83c 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java +++ b/ghy-payment/src/main/java/com/ghy/payment/mapper/FinancialMasterMapper.java @@ -57,4 +57,11 @@ public interface FinancialMasterMapper { * @param orderMasterId 主订单ID */ FinancialMaster selectByOrderMasterId(Long orderMasterId); + + /** + * 用支付ID查询主财务单 + * + * @param paymentId 支付ID + */ + FinancialMaster selectByPaymentId(String paymentId); } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/AdapayService.java b/ghy-payment/src/main/java/com/ghy/payment/service/AdapayService.java index 445aae6c..e304a927 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/AdapayService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/AdapayService.java @@ -28,10 +28,10 @@ import java.util.List; @Service public class AdapayService { - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + private static final Logger logger = LoggerFactory.getLogger(AdapayService.class); @Resource - private PayCallbackService payCallBackService; + private PayCallbackService payCallbackService; @Resource private RefundCallbackService refundCallbackService; @Resource @@ -292,7 +292,7 @@ public class AdapayService { paymentParams.put("expend", expend); logger.debug("paymentParams: {}", paymentParams.toJSONString()); JSONObject response = (JSONObject) Payment.create(paymentParams, deptId.toString()); - payCallBackService.onResponse(response); + payCallbackService.onResponse(response); return response; } @@ -382,7 +382,7 @@ public class AdapayService { reverseParams.put("reverse_amt", reverseAmt); reverseParams.put("notify_url", adapayProperties.getNotifyUrl()); reverseParams.put("order_no", "PAYMENT_REVERSE" + System.currentTimeMillis()); - JSONObject response = (JSONObject) PaymentReverse.create(reverseParams); + JSONObject response = (JSONObject) PaymentReverse.create(reverseParams, deptId.toString()); payReverseCallbackService.onResponse(response); return response; } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/FinancialDetailService.java b/ghy-payment/src/main/java/com/ghy/payment/service/FinancialDetailService.java index 59075c12..93f796d6 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/FinancialDetailService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/FinancialDetailService.java @@ -55,4 +55,10 @@ public interface FinancialDetailService { */ String createCode(); + /** + * 撤销支付成功 + * + * @param reverseId 撤销支付ID + */ + void payReverseSucceeded(String reverseId); } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java b/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java index db2e00f7..f4ec6416 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/FinancialMasterService.java @@ -83,4 +83,11 @@ public interface FinancialMasterService { * @param id 交易ID */ PaymentDTO selectPaymentById(String id); + + /** + * 用支付ID查询主财务单 + * + * @param paymentId 支付ID + */ + FinancialMaster selectByPaymentId(String paymentId); } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialDetailServiceImpl.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialDetailServiceImpl.java index e2af7150..6185db68 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialDetailServiceImpl.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialDetailServiceImpl.java @@ -15,7 +15,6 @@ import java.util.List; import java.util.concurrent.atomic.AtomicLong; import static java.time.temporal.ChronoField.*; -import static java.time.temporal.ChronoField.SECOND_OF_MINUTE; @Service public class FinancialDetailServiceImpl implements FinancialDetailService { @@ -73,4 +72,9 @@ public class FinancialDetailServiceImpl implements FinancialDetailService { LocalDateTime now = LocalDateTime.now(); return "fd" + now.format(MINI_FORMATTER) + INDEX.getAndIncrement(); } + + @Override + public void payReverseSucceeded(String reverseId) { + financialDetailMapper.payReverseSucceeded(reverseId); + } } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java index 28117449..fe5b7ea0 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/FinancialMasterServiceImpl.java @@ -108,4 +108,9 @@ public class FinancialMasterServiceImpl implements FinancialMasterService { return paymentMapper.selectById(id); } + @Override + public FinancialMaster selectByPaymentId(String paymentId) { + return financialMasterMapper.selectByPaymentId(paymentId); + } + } diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java index 64f2f62f..9ff04e86 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayCallbackService.java @@ -2,9 +2,9 @@ package com.ghy.payment.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.ghy.common.adapay.model.Event; import com.ghy.common.adapay.model.AdapayStatusEnum; -import com.ghy.common.adapay.model.PayReply; +import com.ghy.common.adapay.model.Event; +import com.ghy.common.adapay.model.PayCallback; import com.ghy.common.adapay.model.PaymentDTO; import com.ghy.payment.domain.FinancialMaster; import com.ghy.payment.service.CallBackService; @@ -37,7 +37,7 @@ public class PayCallbackService implements CallBackService { public void onCallback(Event event) { logger.debug("pay callback is {}", event); String data = event.getData(); - PayReply payment = JSON.parseObject(data, PayReply.class); + PayCallback payment = JSON.parseObject(data, PayCallback.class); Assert.hasText(payment.getOrderNo(), "orderNo is blank !!!"); // 校验是否是本系统发出去的回调请求 boolean ours = orderNoSet.remove(payment.getOrderNo()); diff --git a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayReverseCallbackService.java b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayReverseCallbackService.java index 7ebee80d..23919acf 100644 --- a/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayReverseCallbackService.java +++ b/ghy-payment/src/main/java/com/ghy/payment/service/impl/PayReverseCallbackService.java @@ -1,12 +1,22 @@ package com.ghy.payment.service.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.ghy.common.adapay.model.AdapayStatusEnum; import com.ghy.common.adapay.model.Event; +import com.ghy.common.adapay.model.PayReverseCallback; +import com.ghy.payment.domain.FinancialDetail; +import com.ghy.payment.domain.FinancialMaster; import com.ghy.payment.service.CallBackService; +import com.ghy.payment.service.FinancialDetailService; +import com.ghy.payment.service.FinancialMasterService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; + /** * 撤销支付回调 * @@ -17,13 +27,37 @@ public class PayReverseCallbackService implements CallBackService { private static final Logger logger = LoggerFactory.getLogger(PayReverseCallbackService.class); + @Resource + private FinancialMasterService financialMasterService; + @Resource + private FinancialDetailService financialDetailService; + @Override public void onCallback(Event event) { - logger.debug("撤销支付 callback: {}", event.toString()); + logger.debug("撤销支付 callback: {}", event); + PayReverseCallback callback = JSON.parseObject(event.getData(), PayReverseCallback.class); + if (AdapayStatusEnum.succeeded.code.equals(callback.getStatus())) { + // 将子财务单支付状态设置为1 表示退款成功 + financialDetailService.payReverseSucceeded(callback.getId()); + } } @Override public void onResponse(JSONObject response) { logger.debug("撤销支付 Response: {}", response.toString()); + if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { + String reverseId = response.getString("id"); + String paymentId = response.getString("payment_id"); + String reverseAmt = response.getString("reverse_amt"); + FinancialMaster fm = financialMasterService.selectByPaymentId(paymentId); + // 创建并保存一条子财务单(type=撤销支付) + FinancialDetail fd = new FinancialDetail(fm.getDeptId(), financialDetailService.createCode(), fm.getId(), + fm.getCode(), new BigDecimal(reverseAmt), 4, null); + // 子财务单关联撤销支付ID + fd.setReverseId(reverseId); + financialDetailService.insertFinancialDetail(fd); + } else { + logger.warn("撤销失败: {}", response.toJSONString()); + } } } diff --git a/ghy-payment/src/main/resources/mapper/financial/FinancialDetailMapper.xml b/ghy-payment/src/main/resources/mapper/financial/FinancialDetailMapper.xml index 4fb5b666..ab204ca9 100644 --- a/ghy-payment/src/main/resources/mapper/financial/FinancialDetailMapper.xml +++ b/ghy-payment/src/main/resources/mapper/financial/FinancialDetailMapper.xml @@ -17,6 +17,7 @@ + @@ -28,9 +29,9 @@ - SELECT id, dept_id, code, financial_master_id, financial_master_code, order_detail_id, - order_detail_code, total_money, discount_money, pay_money, financial_detail_type, - payee_id, pay_type, pay_status, pay_time, create_by, create_time, update_by, update_time, remark + SELECT id, dept_id, code, financial_master_id, financial_master_code, order_detail_id, order_detail_code, + total_money, discount_money, pay_money, financial_detail_type,payee_id, reverse_id, pay_type, + pay_status, pay_time, create_by, create_time, update_by, update_time, remark FROM financial_detail @@ -89,6 +90,12 @@ WHERE id = #{id} + + UPDATE financial_detail SET + pay_status = 1 + WHERE reverse_id = #{reverseId} + + INSERT INTO financial_detail( @@ -103,6 +110,7 @@ pay_money, financial_detail_type, payee_id, + reverse_id, pay_type, pay_status, pay_time, @@ -120,6 +128,7 @@ #{payMoney}, #{financialDetailType}, #{payeeId}, + #{reverseId}, #{payType}, #{payStatus}, #{payTime}, diff --git a/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml b/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml index e03d9252..c92f7004 100644 --- a/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml +++ b/ghy-payment/src/main/resources/mapper/financial/FinancialMasterMapper.xml @@ -56,6 +56,10 @@ WHERE order_master_id = #{orderMasterId} + + DELETE FROM financial_master WHERE id IN