Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

TRX 1 yıl önce
ebeveyn
işleme
b180177322

+ 10 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/config/ResTokenConfig.java

@@ -0,0 +1,10 @@
+package com.zhongshu.card.server.core.config;
+
+import com.github.microservice.components.data.mongo.token.config.ResourceTokenConfiguration;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+@Configuration
+@Import(ResourceTokenConfiguration.class)
+public class ResTokenConfig {
+}

+ 10 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/pay/PayTestController.java

@@ -1,6 +1,8 @@
 package com.zhongshu.card.server.core.controller.pay;
 
+import com.github.microservice.pay.client.service.product.SenselessPayService;
 import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.server.core.service.pay.ChinaumsSenselessPayService;
 import com.zhongshu.card.server.core.service.pay.SettleService;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -18,8 +20,16 @@ public class PayTestController {
     @Autowired
     SettleService settleService;
 
+    @Autowired
+    ChinaumsSenselessPayService chinaumsSenselessPayService;
+
     @PostMapping("settle")
     public Object settle(){
         return settleService.settle("665fc0ef9083d203896d3549", "67061bea18e3af0f903b067a", 1732997367300L, "remark", PaymentType.UnionFrictionlessPay);
     }
+
+        @PostMapping("queryRefund")
+    public Object queryRefund(){
+        return chinaumsSenselessPayService.refundQuery("665fc0ef9083d203896d3549","665fc0389083d203896d3541", "67061bea18e3af0f903b067a", "RE202411191422450130001", false);
+    }
 }

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

@@ -19,4 +19,6 @@ public class UnionFrictionlessPayFinishModel {
     private String targetOrderId;
 
     private String refundOrderId;
+
+    private String refundStatus;
 }

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

@@ -28,6 +28,8 @@ import com.zhongshu.card.server.core.dao.pay.ShareOrderDao;
 import com.zhongshu.card.server.core.domain.pay.ChinaumsSenselessUserSignInfo;
 import com.zhongshu.card.server.core.domain.pay.PayAccount;
 import com.zhongshu.card.server.core.domain.pay.ShareOrder;
+import com.zhongshu.card.server.core.model.pay.ChinaumsSenselessSrcReserve;
+import com.zhongshu.card.server.core.model.pay.UnionFrictionlessPayFinishModel;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.paySetting.OrgPayAccountService;
 import com.zhongshu.card.server.core.util.BeanUtils;
@@ -397,7 +399,7 @@ public class ChinaumsSenselessPayService extends SuperService {
         shareOrder.setShareOrderNo(shareOrderNo);
         shareOrder.setOriShareOrderNo(shareOrder.getShareOrderNo());
         shareOrderDao.save(refundShareOrder);
-        request.setSrcReserve(JsonUtil.toJson(Map.of("userId", userId, "oid", oid, "projectOid", projectOid, "orderNo", orderNo, "prefix", projectConf.getOrderNoPrefix())));
+        request.setSrcReserve(JsonUtil.toJson(Map.of("userId", userId, "oid", oid, "projectOid", projectOid, "orderNo", refundOrderNo, "prefix", projectConf.getOrderNoPrefix())));
         payProductParameter.setMeta(BeanUtil.bean2Map(request));
         com.github.microservice.pay.client.ret.ResultContent<Object> refundResultContent = senselessPayService.refund(payProductParameter);
         if (!refundResultContent.getState().equals(ResultState.Success)) {
@@ -411,6 +413,54 @@ public class ChinaumsSenselessPayService extends SuperService {
         return ResultContent.buildFail(bodyMap.get("respDesc").toString());
     }
 
+    @SneakyThrows
+    public ResultContent<UnionFrictionlessPayFinishModel> refundQuery(String projectOid, String userId, String oid, String refundOrderNo, Boolean handle) {
+        String projectAccountName = orgPayAccountService.queryOgPayAccount(projectOid, PaymentType.UnionFrictionlessPay);
+        com.github.microservice.pay.client.ret.ResultContent<AccountModel> projectAccountModelResultContent = payProductAccountService.get(projectAccountName);
+        if (!projectAccountModelResultContent.getState().equals(ResultState.Success)) {
+            return ResultContent.buildFail(projectAccountModelResultContent.getMsg());
+        }
+        ChinaumsSenselessConf projectConf = (ChinaumsSenselessConf) projectAccountModelResultContent.getContent().getConf();
+
+        PayProductParameter<Object> payProductParameter = new PayProductParameter<>();
+        payProductParameter.setAccountName(projectAccountName);
+        payProductParameter.setMeta(Map.of("mchntOrderId", refundOrderNo, "srcReserve", JsonUtil.toJson(Map.of("userId", userId, "oid", oid, "projectOid", projectOid, "orderNo", refundOrderNo, "prefix", projectConf.getOrderNoPrefix()))));
+
+        com.github.microservice.pay.client.ret.ResultContent<Object> refundQuery = senselessPayService.refundQuery(payProductParameter);
+        if (!refundQuery.getState().equals(ResultState.Success)) {
+            return ResultContent.buildFail("请求失败");
+        }
+
+        Map refundBody = JsonUtil.toObject(JsonUtil.toJson(refundQuery.getContent()), Map.class);
+        if (!refundBody.get("respCode").equals("0000")) {
+            return ResultContent.buildFail(refundBody.get("respDesc").toString());
+        }
+//        String refundOrderId = (String) refundBody.get("refundOrderId");
+//        ChinaumsSenselessSrcReserve srcReserve = JsonUtil.toObject(JsonUtil.toJson(refundBody.get("srcReserve")), ChinaumsSenselessSrcReserve.class);
+//
+//        if (org.apache.commons.lang3.StringUtils.isNotEmpty(refundOrderId) && refundOrderId.startsWith(srcReserve.getPrefix())){
+//            refundOrderId = refundOrderId.substring(srcReserve.getPrefix().length());
+//        }
+
+        UnionFrictionlessPayFinishModel unionFrictionlessPayFinishModel = new UnionFrictionlessPayFinishModel();
+        unionFrictionlessPayFinishModel.setStatus((String) refundBody.get("status"));
+        unionFrictionlessPayFinishModel.setRefundStatus((String) refundBody.get("refundStatus"));
+        unionFrictionlessPayFinishModel.setRefundOrderId(refundOrderNo);
+        unionFrictionlessPayFinishModel.setMerOrderId((String) refundBody.get("mchntOrderId"));
+        unionFrictionlessPayFinishModel.setTargetOrderId((String) refundBody.get("refundTargetOrderId"));
+
+        if (handle && refundBody.get("status").equals("TRADE_REFUND") && refundBody.get("refundStatus").equals("SUCCESS")) {
+            com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> listResultContent = handleRefund(projectOid,
+                    oid,
+                    userId,
+                    new BigDecimal((String) refundBody.get("sendBackAmount")),
+                    refundOrderNo, null);
+            unionFrictionlessPayFinishModel.setTransactionLogModelList(listResultContent);
+        }
+        return ResultContent.buildContent(unionFrictionlessPayFinishModel);
+    }
+
+
     public com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> handlePay(String projectOid, String oid, String userId, BigDecimal total, String orderNo, String remark) {
         //TODO 判断支付状态
 

+ 6 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/PayCallService.java

@@ -587,13 +587,15 @@ public class PayCallService extends SuperService {
         String paymentNo = param.getMerOrderId();
         com.github.microservice.pay.client.ret.ResultContent<List<TransactionLogModel>> resultContent = param.getTransactionLogModelList();
         String state = param.getStatus();
+        String refundStatus = param.getRefundStatus();
 
         // 退款完成
         ExpenseFlow expenseFlow = expenseFlowDao.findTopByPaymentNo(paymentNo);
-        orderNoInfoService.markSuccess(paymentNo);
+
 
         if (ObjectUtils.isNotEmpty(expenseFlow)) {
-            if (state.equals("TRADE_REFUND")) {
+            if (state.equals("TRADE_REFUND") && refundStatus.equals("SUCESS")) {
+                orderNoInfoService.markSuccess(paymentNo);
                 // 退款流程 成功
                 expenseFlow.setIsRefund(Boolean.TRUE);
                 expenseFlow.setRefundState(RefundState.Refunded);
@@ -604,7 +606,8 @@ public class PayCallService extends SuperService {
                     expenseFlow.setRefundTransactionIds(resultContent.getContent());
                 }
                 refundRecordService.markState(param.getRefundOrderId(), RefundState.Refunded, resultContent.getContent());
-            } else {
+            } else if (refundStatus.equals("FAIL")){
+                orderNoInfoService.markSuccess(paymentNo);
                 // 退款失败
                 expenseFlow.setIsRefund(Boolean.TRUE);
                 expenseFlow.setRefundState(RefundState.Fail);

+ 56 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/time/ComplexTimer.java

@@ -0,0 +1,56 @@
+package com.zhongshu.card.server.core.time;
+
+import com.github.microservice.components.data.mongo.token.service.ResourceTokenService;
+import com.github.microservice.net.ResultContent;
+import com.github.microservice.net.ResultState;
+import com.zhongshu.card.server.core.domain.payment.RefundRecord;
+import com.zhongshu.card.server.core.model.pay.UnionFrictionlessPayFinishModel;
+import com.zhongshu.card.server.core.service.pay.ChinaumsSenselessPayService;
+import com.zhongshu.card.server.core.service.payment.ExpenseFlowServiceImpl;
+import com.zhongshu.card.server.core.service.payment.PayCallService;
+import com.zhongshu.card.server.core.service.payment.RefundRecordService;
+import lombok.Cleanup;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Slf4j
+@Component
+public class ComplexTimer {
+
+    @Autowired
+    RefundRecordService refundRecordService;
+
+    @Autowired
+    ChinaumsSenselessPayService chinaumsSenselessPayService;
+
+    @Autowired
+    PayCallService payCallService;
+
+    @Autowired
+    ResourceTokenService resourceTokenService;
+
+    @Scheduled(fixedDelay = 2*1000L)
+    @SneakyThrows
+    public void queryChinaumsRefund(){
+        @Cleanup ResourceTokenService.Token token =  resourceTokenService.token("queryChinaumsRefund");
+        //获取退款中的订单
+        List<RefundRecord> refundingRecord = refundRecordService.getTop10RefundingRecord();
+        if (refundingRecord!=null && !refundingRecord.isEmpty()){
+            for (RefundRecord refundRecord : refundingRecord){
+                ResultContent<UnionFrictionlessPayFinishModel> refundQueryResult = chinaumsSenselessPayService.refundQuery(refundRecord.getProjectOid(), refundRecord.getCreateUserId(), refundRecord.getOid(), refundRecord.getRefundNo(), true);
+                if (refundQueryResult.getState().equals(ResultState.Success)){
+                    UnionFrictionlessPayFinishModel unionFrictionlessPayFinishModel = refundQueryResult.getContent();
+                    payCallService.unionFrictionlessPayRefundFinish(unionFrictionlessPayFinishModel);
+                }
+                Thread.sleep(3000);
+            }
+        }
+
+    }
+}