From 6c823dd44dbde79f008001a2a11e7bf9bc6bf8cc Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期三, 04 十二月 2024 18:15:44 +0800
Subject: [PATCH] fix:合伙人列表操作日志

---
 src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java |  123 +++++++++++++++++++++++++++++++---------
 1 files changed, 95 insertions(+), 28 deletions(-)

diff --git a/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java b/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java
index b53e9c1..ea8f878 100644
--- a/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java
+++ b/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java
@@ -28,7 +28,9 @@
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -227,6 +229,19 @@
                     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());
@@ -276,27 +291,31 @@
         VSP503:微信支付退款
         */
         String trxstatus = params.get("trxstatus");//支付状态
-        if("VSP501".equals(trxcode) && "0000".equals(trxstatus)){
-            String status = Constants.PAYMENT_STATUS.SUCCESS.name();
-            UserPaymentDTO dto = new UserPaymentDTO();
-            dto.setOrderId(orderId);
-            dto.setTransactionId(transactionId);
-            dto.setOutTradeNo(outTradeNo);
-            dto.setOriginalXml(originalXml);
-            String trxamtStr = params.get("trxamt");//交易金额 单位:分
-            log.info("======trxamt: " + trxamtStr);
-            dto.setPaymentAmountCallback(trxamtStr);
+        if("VSP501".equals(trxcode)){
+            if("0000".equals(trxstatus)) {
+                String status = Constants.PAYMENT_STATUS.SUCCESS.name();
+                UserPaymentDTO dto = new UserPaymentDTO();
+                dto.setOrderId(orderId);
+                dto.setTransactionId(transactionId);
+                dto.setOutTradeNo(outTradeNo);
+                dto.setOriginalXml(originalXml);
+                String trxamtStr = params.get("trxamt");//交易金额 单位:分
+                log.info("======trxamt: " + trxamtStr);
+                dto.setPaymentAmountCallback(trxamtStr);
 
-            dto.setStatus(status);
+                dto.setStatus(status);
 
-            String orderStatus = Constants.ORDER_STATUS_BACKEND.PAYMENT.name();
+                String orderStatus = Constants.ORDER_STATUS_BACKEND.PAYMENT.name();
 
-            saveCallbackInfo(dto, orderStatus);
+                saveCallbackInfo(dto, orderStatus);
 
-            return true;
+                return true;
+            }
         }
 
-        return !("2008".equals(trxstatus) || "2000".equals(trxstatus));
+        return !("1001".equals(trxstatus) || StringUtils.isEmpty(trxstatus)
+                || "2008".equals(trxstatus)
+                || "2000".equals(trxstatus));
     }
 
     public boolean checkOrderStatusRefund(String outTradeNo) throws Exception {
@@ -319,7 +338,7 @@
         VSP502:微信支付撤销
         VSP503:微信支付退款
         */
-        if ("VSP502".equals(trxcode)|| "VSP503".equals(trxcode)){
+        if ("VSP502".equals(trxcode) || "VSP503".equals(trxcode)){
             String trxid = params.get("trxid");
             updateOrderRefund(outTradeNo, trxid);
 
@@ -337,12 +356,37 @@
         }
 
         SybPayService service = new SybPayService();
-        Map<String,String> map = service.close(null, orderId);
-        log.info("======关闭订单结果" + toJSONString(map));
 
-        String retcode = map.get("retcode");
+        Map<String,String> params = service.query(orderId, up.getTransactionId());
+        String retcode = params.get("retcode");
         if(!"SUCCESS".equals(retcode)){
-            throw new ValidationException("取消订单失败: " + map.get("retmsg"));
+            throw new ValidationException("查询订单交易状态失败: " + params.get("retmsg"));
+        }
+        String trxstatus = params.get("trxstatus");//支付状态
+
+        if("1001".equals(trxstatus) || "3088".equals(trxstatus)){
+            //3088-交易未支付(在查询时间区间内未成功支付,如已影响资金24小时内会做差错退款处理)
+            //1001:交易不存在
+            //直接取消
+        } else if (StringUtils.isEmpty(trxstatus)
+                || "2008".equals(trxstatus)
+                || "2000".equals(trxstatus)) {
+            String trxid = params.get("trxid");
+            //2008或者2000 : 交易处理中,请查询交易,如果是实时交易(例如刷卡支付,交易撤销,退货),建议每隔一段时间(10秒)查询交易
+            Map<String,String> map = service.close(trxid, orderId);
+            log.info("======关闭订单结果" + toJSONString(map));
+
+            retcode = map.get("retcode");
+            if(!"SUCCESS".equals(retcode)){
+                throw new ValidationException("调用通联关闭订单失败: " + map.get("retmsg"));
+            }
+            trxstatus = map.get("trxstatus");
+            if(!"0000".equals(trxstatus)){
+                throw new ValidationException("取消订单失败: " + map.get("errmsg"));
+            }
+
+        } else {
+            throw new ValidationException("订单不可取消");
         }
 
         Order order = orderMapper.selectById(orderId);
@@ -422,16 +466,23 @@
             throw new ValidationException("订单不可退款");
         }
 
-        long trxamt = up.getPaymentAmount().longValue();
+        long trxamt = prepareAmount(up.getPaymentAmount());
         String reqsn = orderId;
         String oldtrxid = up.getTransactionId();
-        String oldreqsn = null;
+        String oldreqsn = orderId;
 
         SybPayService service = new SybPayService();
         Map<String,String> map = service.cancel(trxamt, reqsn, oldtrxid, oldreqsn);
         String retcode = map.get("retcode");
         if(!"SUCCESS".equals(retcode)){
-            throw new ValidationException("订单退款失败: " + map.get("retmsg"));
+            throw new ValidationException("调用通联撤销接口失败: " + map.get("retmsg"));
+        }
+
+        //这个不是订单状态,是通用的,如果是支付查询,代表就是订单状态,如果是退款代表的是退款状态
+        String trxstatus = map.get("trxstatus");
+        if(!"0000".equals(trxstatus)){
+            log.error("通联撤销交易失败:" + map.get("errmsg"));
+            throw new ValidationException("订单退款交易失败:" + map.get("errmsg"));
         }
 
         updateOrderRefund(orderId, oldtrxid);
@@ -449,16 +500,22 @@
             throw new ValidationException("订单不可退款");
         }
 
-        long trxamt = up.getPaymentAmount().longValue();
+        long trxamt = prepareAmount(up.getPaymentAmount());
         String reqsn = orderId;
         String oldtrxid = up.getTransactionId();
-        String oldreqsn = null;
+        String oldreqsn = orderId;
 
         SybPayService service = new SybPayService();
         Map<String,String> map = service.refund(trxamt, reqsn, oldtrxid, oldreqsn);
         String retcode = map.get("retcode");
         if(!"SUCCESS".equals(retcode)){
-            throw new ValidationException("订单退款失败: " + map.get("retmsg"));
+            throw new ValidationException("调用通联退款失败: " + map.get("retmsg"));
+        }
+
+        //这个不是订单状态,是通用的,如果是支付查询,代表就是订单状态,如果是退款代表的是退款状态
+        String trxstatus = map.get("trxstatus");
+        if(!"0000".equals(trxstatus)){
+            throw new ValidationException("订单退款交易失败:" + map.get("errmsg"));
         }
 
         updateOrderRefund(orderId, oldtrxid);
@@ -526,7 +583,7 @@
                 new QueryWrapper<UserPayment>().eq("order_id", o.getId()));
 
         long trxamt = refund;
-        String reqsn = o.getId();
+        String reqsn = re.getId();//退款单的id
         String oldtrxid = up.getTransactionId();
         String oldreqsn = null;
 
@@ -534,12 +591,22 @@
         Map<String,String> map = service.refund(trxamt, reqsn, oldtrxid, oldreqsn);
         String retcode = map.get("retcode");
         if(!"SUCCESS".equals(retcode)){
-            throw new ValidationException("订单退款失败: " + map.get("retmsg"));
+            throw new ValidationException("调用通联退款失败: " + map.get("retmsg"));
+        }
+
+        //这个不是订单状态,是通用的,如果是支付查询,代表就是订单状态,如果是退款代表的是退款状态
+        String trxstatus = map.get("trxstatus");
+        if(!"0000".equals(trxstatus)){
+            throw new ValidationException("订单退款交易失败:" + map.get("errmsg"));
         }
 
         re.setRequest(toJSONString(map));
         re.create(SecurityUtils.getUserId());
 
+        re.setStatus(retcode);
+        re.setNotification(retcode);
+        re.setNotifyTime(LocalDateTime.now());
+
         orderRefundMapper.insert(re);
 
         return re.getId();

--
Gitblit v1.9.3