From 5997dc8acfa81a6c867c28810d1c3c9714efc46c Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期六, 29 三月 2025 14:55:42 +0800
Subject: [PATCH] fix: 登录

---
 src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java |   55 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 39 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java b/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java
index e93b82a..7d2009d 100644
--- a/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java
+++ b/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java
@@ -11,7 +11,6 @@
 import com.mzl.flower.dto.request.payment.UserPaymentDTO;
 import com.mzl.flower.entity.flower.Flower;
 import com.mzl.flower.entity.payment.*;
-import com.mzl.flower.entity.system.UserWechat;
 import com.mzl.flower.mapper.flower.FlowerMapper;
 import com.mzl.flower.mapper.payment.*;
 import com.mzl.flower.mapper.system.UserWechatMapper;
@@ -46,9 +45,7 @@
 import java.io.InputStreamReader;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -181,7 +178,7 @@
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
 
         // 使用formatter格式化ZonedDateTime
-        String formattedDateTime = zonedDateTime.plusMinutes(5).format(formatter);
+        String formattedDateTime = zonedDateTime.plusMinutes(15).format(formatter);
 
         return formattedDateTime; // 格式化日期
     }
@@ -331,6 +328,18 @@
                     order.setPaymentAmount(order.getTotalAmount());
                 }
                 order.setPaymentTime(up.getPaymentTimeCallback());
+                if(null!=order.getPaymentTime()){
+                    LocalDateTime paymentTime = order.getPaymentTime();
+                    LocalDate paymentDate = paymentTime.toLocalDate();
+                    LocalDateTime today1700 = paymentTime.with(LocalTime.of(17, 0));
+                    // 比较时间是否大于当天的 17:00
+                    if (paymentTime.isAfter(today1700)) {
+                        // 如果大于 17:00,设置为下一天的日期
+                        paymentDate = paymentDate.plusDays(1);
+                    }
+                    order.setPaymentDateSta(paymentDate);
+                }
+
                 order.setStatus(Constants.ORDER_STATUS.SEND.name());
             } else if (Constants.ORDER_STATUS_BACKEND.CANCEL.name().equals(orderStatus)){
                 order.setStatus(Constants.ORDER_STATUS.CANCEL.name());
@@ -540,15 +549,6 @@
         request.setTransactionId(o.getPaymentTrId());
         request.setNotifyUrl(PyamentV3Configurer.notify_url_refund);
 
-        AmountReq amount = new AmountReq();
-        int oa = prepareAmount(o.getPaymentAmount());
-        amount.setTotal((long)oa);
-        amount.setRefund((long)oa);
-        amount.setCurrency("CNY");
-        request.setAmount(amount);
-        // 调用接口
-        refundService.create(request);
-
         o.setRefundAmount(o.getPaymentAmount());
         o.setRefundNo(request.getOutRefundNo());
         o.setRefundTime(LocalDateTime.now());
@@ -562,6 +562,16 @@
         deliveryOrderService.refundDelete(orderId);
 
         releasePrepayLock(o);
+
+        //最后调用微信退款接口,防止回滚
+        AmountReq amount = new AmountReq();
+        int oa = prepareAmount(o.getPaymentAmount());
+        amount.setTotal((long)oa);
+        amount.setRefund((long)oa);
+        amount.setCurrency("CNY");
+        request.setAmount(amount);
+        // 调用接口
+        refundService.create(request);
     }
 
     public String refundOrderSub(Order o, BigDecimal refundAmount){
@@ -702,8 +712,8 @@
         InitiateBatchTransferRequest request = new InitiateBatchTransferRequest();
         request.setAppid(dto.getAppId());
         request.setOutBatchNo(transfer.getId());//【商家批次单号】 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一
-        request.setBatchName(transfer.getName());//【批次名称】 该笔批量转账的名称
-        request.setBatchRemark(transfer.getRemarks());//【批次备注】 转账说明,UTF8编码,最多允许32个字符
+        request.setBatchName(subString(transfer.getName(), 32));//【批次名称】 该笔批量转账的名称
+        request.setBatchRemark(subString(transfer.getRemarks(), 32));//【批次备注】 转账说明,UTF8编码,最多允许32个字符
 
         List<TransferDetailReqDTO> details = dto.getDetails();
         transfer.setTotalNum(details.size());
@@ -748,6 +758,19 @@
         return transfer.getId();
     }
 
+    private String subString(String str, int len){
+        if(StringUtils.isEmpty(str)){
+            return str;
+        }
+
+        int length = str.length();
+        if(length > len){
+            return str.substring(0, len - 1);
+        }
+
+        return str;
+    }
+
     public void checkTransferStatus(Transfer transfer) {//定时任务验证转账状态
         GetTransferBatchByOutNoRequest request = new GetTransferBatchByOutNoRequest();
         request.setOutBatchNo(transfer.getId());

--
Gitblit v1.9.3