陶杰
2025-01-08 ae1471f378f399f76518539ec8992e64a3673436
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());
@@ -298,7 +313,9 @@
            }
        }
        return !"1001".equals(trxstatus);
        return !("1001".equals(trxstatus) || StringUtils.isEmpty(trxstatus)
                || "2008".equals(trxstatus)
                || "2000".equals(trxstatus));
    }
    public boolean checkOrderStatusRefund(String outTradeNo) throws Exception {
@@ -321,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);
@@ -339,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);
@@ -424,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);
@@ -451,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);
@@ -528,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;
@@ -536,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();