Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

TRX 1 tahun lalu
induk
melakukan
d881e553d8

+ 3 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/pay/ShareOrder.java

@@ -36,4 +36,7 @@ public class ShareOrder extends SuperEntity {
 
     private ShareOrderType shareOrderType;
 
+    @Schema(description = "原分账订单号")
+    private String oriShareOrderNo;;
+
 }

+ 16 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/model/pay/ChinaumsSenselessSrcReserve.java

@@ -0,0 +1,16 @@
+package com.zhongshu.card.server.core.model.pay;
+
+import com.zhongshu.card.server.core.domain.pay.ShareOrder;
+import lombok.Data;
+
+@Data
+public class ChinaumsSenselessSrcReserve {
+
+    private String projectOid;
+
+    private String oid;
+
+    private String userId;
+
+    private ShareOrder shareOrder;
+}

+ 77 - 10
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/pay/ChinaumsSenselessPayService.java

@@ -6,6 +6,7 @@ import com.github.microservice.net.ResultContent;
 import com.github.microservice.pay.client.model.AccountModel;
 import com.github.microservice.pay.client.model.PayProductParameter;
 import com.github.microservice.pay.client.model.chinaSenseless.*;
+import com.github.microservice.pay.client.model.ledger.TransactionLogModel;
 import com.github.microservice.pay.client.model.ledger.TransferTransactionsModel;
 import com.github.microservice.pay.client.product.senseless.chinaumsSenseless.conf.ChinaumsSenselessConf;
 import com.github.microservice.pay.client.ret.ResultState;
@@ -281,7 +282,7 @@ public class ChinaumsSenselessPayService extends SuperService {
         payProductParameter.setAccountName(projectAccountName);
         ChinaSenselessPayRequest request = new ChinaSenselessPayRequest();
         request.setMchntOrderId(orderNo);
-        request.setSrcReserve(JsonUtil.toJson(Map.of("userId", userId, "oid", oid, "projectOid", projectOid)));
+
         request.setContractId(userSignInfo.getContractId());
         request.setTotalAmount(total.toBigInteger().toString());
         request.setAttachedData(remark);
@@ -306,7 +307,7 @@ public class ChinaumsSenselessPayService extends SuperService {
         shareOrder.setShareOrderType(ShareOrderType.Pay);
         shareOrder.setShareOrderNo(shareOrderNo);
         shareOrderDao.save(shareOrder);
-
+        request.setSrcReserve(JsonUtil.toJson(Map.of("userId", userId, "oid", oid, "projectOid", projectOid, "shareOrder", shareOrder)));
         payProductParameter.setMeta(BeanUtil.bean2Map(request));
         com.github.microservice.pay.client.ret.ResultContent<Object> collectionResultContent = senselessPayService.collection(payProductParameter);
         return ResultContent.buildContent(collectionResultContent.getContent());
@@ -337,7 +338,7 @@ public class ChinaumsSenselessPayService extends SuperService {
         request.setMchntOrderId(orderNo);
         request.setRefundAmount(total.toString());
         request.setTargetOrderId(refundOrderNo);
-        request.setSysSource(JsonUtil.toJson(Map.of("userId", userId, "oid", oid, "projectOid", projectOid)));
+
 
         ShareOrder shareOrder = shareOrderDao.findTopByOrderNoAndProjectOidAndOidAndShareOrderType(orderNo, projectOid, oid, ShareOrderType.Pay);
         String shareOrderNo = projectConf.getSysSourceNo() + DateUtils.paresTime(System.currentTimeMillis(), DateUtils.patternyyyyMMddHHmmssSSS) + CommonUtil.randomCode(7);
@@ -361,14 +362,15 @@ public class ChinaumsSenselessPayService extends SuperService {
         shareOrder.setAmount(total.toBigInteger().longValue());
         shareOrder.setShareOrderType(ShareOrderType.Refund);
         shareOrder.setShareOrderNo(shareOrderNo);
+        shareOrder.setOriShareOrderNo(shareOrder.getShareOrderNo());
         shareOrderDao.save(refundShareOrder);
-
+        request.setSysSource(JsonUtil.toJson(Map.of("userId", userId, "oid", oid, "projectOid", projectOid, "shareOrder", shareOrder)));
         payProductParameter.setMeta(BeanUtil.bean2Map(request));
         com.github.microservice.pay.client.ret.ResultContent<Object> refundResultContent = senselessPayService.refund(payProductParameter);
         return ResultContent.buildContent(refundResultContent.getContent());
     }
 
-    private Object handlePay(String projectOid, String oid, String userId, BigDecimal total, String orderNo, String remark) {
+    public com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> handlePay(String projectOid, String oid, String userId, BigDecimal total, String orderNo, String remark) {
         //TODO 判断支付状态
 
         //获取项目总账
@@ -384,6 +386,7 @@ public class ChinaumsSenselessPayService extends SuperService {
         TransferTransactionsModel.GeneralLedgerTransaction sourceTransaction = new TransferTransactionsModel.GeneralLedgerTransaction();
         sourceTransaction.setGeneralLedgerId(projectAccount.getLedgerId());
         sourceTransaction.setOrderNumber(orderNo);
+        //TODO 修改交易类型为:无感支付-借贷
         sourceTransaction.setTransactionType(TransactionType.Pay);
         sourceTransaction.setTransactionStatus(TransactionStatus.Success);
         sourceTransaction.setAmount(total.negate().longValue());
@@ -395,6 +398,7 @@ public class ChinaumsSenselessPayService extends SuperService {
         TransferTransactionsModel.GeneralLedgerTransaction destinationTransaction = new TransferTransactionsModel.GeneralLedgerTransaction();
         destinationTransaction.setGeneralLedgerId(userBalancePayment.getLedgerId());
         destinationTransaction.setOrderNumber(orderNo);
+        //TODO 修改交易类型为:无感支付-借贷
         destinationTransaction.setTransactionType(TransactionType.Pay);
         destinationTransaction.setTransactionStatus(TransactionStatus.Success);
         destinationTransaction.setAmount(total.longValue());
@@ -403,7 +407,7 @@ public class ChinaumsSenselessPayService extends SuperService {
         transferModel.setDestinations(new TransferTransactionsModel.GeneralLedgerTransaction[]{destinationTransaction});
         transactionLogService.transfer(transferModel);
 
-        //支付:项目余额子账- 用户无感支付子账+
+        //支付:用户余额子账- 机构无感支付子账+
         //构建转账参数
         TransferTransactionsModel payTransferModel = new TransferTransactionsModel();
         //构建出账账户
@@ -415,7 +419,7 @@ public class ChinaumsSenselessPayService extends SuperService {
         userSourceTransaction.setAmount(total.negate().longValue());
         userSourceTransaction.setRemark(remark);
         userSourceTransaction.setMeta(Map.of("paymentType",PaymentType.UnionFrictionlessPay, "description", "银联无感支付"));
-        payTransferModel.setSource(new TransferTransactionsModel.GeneralLedgerTransaction[]{sourceTransaction});
+        payTransferModel.setSource(new TransferTransactionsModel.GeneralLedgerTransaction[]{userSourceTransaction});
 
         //构建入账账户
         TransferTransactionsModel.GeneralLedgerTransaction orgDestinationTransaction = new TransferTransactionsModel.GeneralLedgerTransaction();
@@ -426,9 +430,72 @@ public class ChinaumsSenselessPayService extends SuperService {
         destinationTransaction.setAmount(total.longValue());
         destinationTransaction.setRemark(remark);
         destinationTransaction.setMeta(Map.of("paymentType",PaymentType.UnionFrictionlessPay, "description", "银联无感支付"));
-        payTransferModel.setDestinations(new TransferTransactionsModel.GeneralLedgerTransaction[]{destinationTransaction});
-        transactionLogService.transfer(payTransferModel);
-        return ResultContent.buildSuccess();
+        payTransferModel.setDestinations(new TransferTransactionsModel.GeneralLedgerTransaction[]{orgDestinationTransaction});
+        return transactionLogService.transfer(payTransferModel);
+    }
+
+    public com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> handleRefund(String projectOid, String oid, String userId, BigDecimal total, String orderNo, String remark) {
+        //TODO 判断支付状态
+
+        //获取项目总账
+        PayAccount projectAccount = payAccountService.getProjectChildren(projectOid, PaymentChannelType.SecretFreePayment);
+        //获取用户无感支付子账户
+        PayAccount userBalancePayment = payAccountService.getUserChildren(projectOid, userId, PaymentChannelType.SecretFreePayment);
+        //获取机构待结算账户
+        PayAccount orgWaitSettle = payAccountService.getOrgChildren(projectOid, oid, PaymentChannelType.WaitSettle);
+        //支付:项目余额子账+ 用户无感支付子账-
+        //构建转账参数
+        TransferTransactionsModel transferModel = new TransferTransactionsModel();
+        //构建出账账户
+        TransferTransactionsModel.GeneralLedgerTransaction sourceTransaction = new TransferTransactionsModel.GeneralLedgerTransaction();
+        sourceTransaction.setGeneralLedgerId(userBalancePayment.getLedgerId());
+        sourceTransaction.setOrderNumber(orderNo);
+        //TODO 修改交易类型为:无感支付-借贷
+        sourceTransaction.setTransactionType(TransactionType.Pay);
+        sourceTransaction.setTransactionStatus(TransactionStatus.Success);
+        sourceTransaction.setAmount(total.negate().longValue());
+        sourceTransaction.setRemark(remark);
+        sourceTransaction.setMeta(Map.of("paymentType",PaymentType.UnionFrictionlessPay, "description", "银联无感支付"));
+        transferModel.setSource(new TransferTransactionsModel.GeneralLedgerTransaction[]{sourceTransaction});
+
+        //构建入账账户
+        TransferTransactionsModel.GeneralLedgerTransaction destinationTransaction = new TransferTransactionsModel.GeneralLedgerTransaction();
+        destinationTransaction.setGeneralLedgerId(projectAccount.getLedgerId());
+        destinationTransaction.setOrderNumber(orderNo);
+        //TODO 修改交易类型为:无感支付-借贷
+        destinationTransaction.setTransactionType(TransactionType.Pay);
+        destinationTransaction.setTransactionStatus(TransactionStatus.Success);
+        destinationTransaction.setAmount(total.longValue());
+        destinationTransaction.setRemark(remark);
+        destinationTransaction.setMeta(Map.of("paymentType",PaymentType.UnionFrictionlessPay, "description", "用户余额支付"));
+        transferModel.setDestinations(new TransferTransactionsModel.GeneralLedgerTransaction[]{destinationTransaction});
+        transactionLogService.transfer(transferModel);
+
+        //支付:机构余额子账- 用户无感支付子账+
+        //构建转账参数
+        TransferTransactionsModel payTransferModel = new TransferTransactionsModel();
+        //构建出账账户
+        TransferTransactionsModel.GeneralLedgerTransaction userSourceTransaction = new TransferTransactionsModel.GeneralLedgerTransaction();
+        userSourceTransaction.setGeneralLedgerId(orgWaitSettle.getLedgerId());
+        userSourceTransaction.setOrderNumber(orderNo);
+        userSourceTransaction.setTransactionType(TransactionType.Pay);
+        userSourceTransaction.setTransactionStatus(TransactionStatus.Success);
+        userSourceTransaction.setAmount(total.negate().longValue());
+        userSourceTransaction.setRemark(remark);
+        userSourceTransaction.setMeta(Map.of("paymentType",PaymentType.UnionFrictionlessPay, "description", "银联无感支付"));
+        payTransferModel.setSource(new TransferTransactionsModel.GeneralLedgerTransaction[]{userSourceTransaction});
+
+        //构建入账账户
+        TransferTransactionsModel.GeneralLedgerTransaction orgDestinationTransaction = new TransferTransactionsModel.GeneralLedgerTransaction();
+        destinationTransaction.setGeneralLedgerId(userBalancePayment.getLedgerId());
+        destinationTransaction.setOrderNumber(orderNo);
+        destinationTransaction.setTransactionType(TransactionType.Pay);
+        destinationTransaction.setTransactionStatus(TransactionStatus.Success);
+        destinationTransaction.setAmount(total.longValue());
+        destinationTransaction.setRemark(remark);
+        destinationTransaction.setMeta(Map.of("paymentType",PaymentType.UnionFrictionlessPay, "description", "银联无感支付"));
+        payTransferModel.setDestinations(new TransferTransactionsModel.GeneralLedgerTransaction[]{orgDestinationTransaction});
+        return transactionLogService.transfer(payTransferModel);
     }
 
 

+ 64 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/stream/ChinaumsSenselessPayStream.java

@@ -0,0 +1,64 @@
+package com.zhongshu.card.server.core.stream;
+
+import com.github.microservice.app.stream.StreamConsumer;
+import com.github.microservice.core.util.JsonUtil;
+import com.github.microservice.pay.client.model.chinaSenseless.ChinaSenselessPayRet;
+import com.github.microservice.pay.client.model.chinaSenseless.ChinaSenselessSignRet;
+import com.github.microservice.pay.client.model.ledger.TransactionLogModel;
+import com.github.microservice.pay.client.ret.ResultContent;
+import com.github.microservice.pay.client.service.product.SenselessPayService;
+import com.zhongshu.card.client.type.payment.OrderNoType;
+import com.zhongshu.card.server.core.model.pay.ChinaumsSenselessSrcReserve;
+import com.zhongshu.card.server.core.service.pay.ChinaumsSenselessPayService;
+import com.zhongshu.card.server.core.service.payment.OrderNoInfoService;
+import com.zhongshu.card.server.core.service.payment.PayCallService;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Slf4j
+@Component("chinaumsSenselessPayStreamConsumer")
+public class ChinaumsSenselessPayStream extends StreamConsumer<ChinaSenselessPayRet> {
+
+    @Autowired
+    ChinaumsSenselessPayService chinaumsSenselessPayService;
+
+    @Autowired
+    OrderNoInfoService orderNoInfoService;
+
+    @Autowired
+    PayCallService payCallService;
+
+    @SneakyThrows
+    @Override
+    public void accept(ChinaSenselessPayRet chinaSenselessPayRet) {
+        log.info("****************收到银联支付/退款结果通知:{}", JsonUtil.toJson(chinaSenselessPayRet));
+
+        OrderNoType orderNoType = orderNoInfoService.getOrderNoType(chinaSenselessPayRet.getMchntOrderId());
+
+        String srcReserveStr = chinaSenselessPayRet.getSrcReserve();
+        ChinaumsSenselessSrcReserve srcReserve = JsonUtil.toObject(srcReserveStr, ChinaumsSenselessSrcReserve.class);
+        if (orderNoType.equals(OrderNoType.Pay)){
+            ResultContent<List<TransactionLogModel>> listResultContent = chinaumsSenselessPayService.handlePay(srcReserve.getProjectOid(),
+                    srcReserve.getOid(),
+                    srcReserve.getUserId(),
+                    new BigDecimal(chinaSenselessPayRet.getTotalAmount()),
+                    chinaSenselessPayRet.getMchntOrderId(), null);
+            payCallService.unionFrictionlessPayFinish(chinaSenselessPayRet.getMchntOrderId(), listResultContent, chinaSenselessPayRet.getStatus());
+        }else if (orderNoType.equals(OrderNoType.Refund)){
+            ResultContent<List<TransactionLogModel>> listResultContent = chinaumsSenselessPayService.handleRefund(srcReserve.getProjectOid(),
+                    srcReserve.getOid(),
+                    srcReserve.getUserId(),
+                    new BigDecimal(chinaSenselessPayRet.getTotalAmount()),
+                    chinaSenselessPayRet.getMchntOrderId(), null);
+            payCallService.unionFrictionlessPayRefundFinish(chinaSenselessPayRet.getMchntOrderId(), listResultContent, chinaSenselessPayRet.getStatus());
+        }else {
+            log.info("未知的订单类型");
+        }
+
+    }
+}