Explorar el Código

fix(order):修复产品名称时间解析逻辑

- 修改时间字符串提取方式,避免索引越界风险
- 拼接年份与时间字符串时增加月份部分- 确保日期格式化输入参数完整性和准确性
- 防止因时间字段缺失导致的退款时间计算错误
wzq hace 1 semana
padre
commit
0ab2bf89f6

+ 2 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/OrderServiceImpl.java

@@ -713,10 +713,10 @@ public class OrderServiceImpl extends ServiceImpl<AppOrderMapper, AppOrder> impl
                         String date = DateUtil.format(Date.from(LocalDate.now().plusDays(indate).atStartOfDay(ZoneId.systemDefault()).toInstant()), "yyyy-MM-dd");
                         String startTime = DateUtil.format(appSite.getStartTime(), "HH:mm");
                         String endTime = DateUtil.format(appSite.getEndTime(), "HH:mm");
-                        if (ObjectUtil.isNotEmpty(appSite.getStartTime())) {
+                        if (ObjectUtil.isEmpty(appSite.getStartTime())) {
                             startTime = "00:00";
                         }
-                        if (ObjectUtil.isNotEmpty(appSite.getEndTime())) {
+                        if (ObjectUtil.isEmpty(appSite.getEndTime())) {
                             endTime = "23:59";
                         }
                         String expireTime = date + " " + endTime;

+ 64 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/pay/paytest/payController.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.pay.paytest;
 
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -12,7 +13,10 @@ import org.apache.http.client.methods.HttpGet;
 import org.jeecg.async.DirectCompletableFutureService;
 import org.jeecg.async.ThreadPoolProperties;
 import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.modules.app.form.RefundOrderForm;
+import org.jeecg.modules.app.service.IOrderService;
 import org.jeecg.modules.pay.config.WechatConstants;
 import org.jeecg.modules.pay.config.WechatPayV3Utils;
 import org.jeecg.modules.pay.config.WechatUrlConstants;
@@ -25,7 +29,12 @@ import org.jeecg.modules.pay.serverPay.PayKit;
 import org.jeecg.modules.pay.serverPay.RsaKit;
 import org.jeecg.modules.rabbitmq.DelayedMessageService;
 import org.jeecg.modules.system.app.entity.AppOrder;
+import org.jeecg.modules.system.app.entity.AppOrderProInfo;
+import org.jeecg.modules.system.app.entity.AppSitePlace;
+import org.jeecg.modules.system.app.service.IAppOrderProInfoService;
 import org.jeecg.modules.system.app.service.IAppOrderService;
+import org.jeecg.modules.system.app.service.IAppSitePlaceService;
+import org.jeecg.modules.system.app.service.IAppSiteService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
@@ -36,10 +45,10 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.security.PrivateKey;
 import java.security.cert.X509Certificate;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.ParseException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
@@ -249,6 +258,57 @@ public class payController {
         }
         return null;
     }
+    private final IAppSitePlaceService appSitePlaceService;
+    private final IAppOrderProInfoService appOrderProInfoService;
+    private final IOrderService orderService;
+
+    @GetMapping(value = "/getTest8")
+    public void test8() throws ParseException {
+        List<AppOrder> list = appOrderService.list(Wrappers.<AppOrder>lambdaQuery()
+                .eq(AppOrder::getPayStatus, CommonConstant.NUMBER_1)
+                .eq(AppOrder::getOrderStatus, CommonConstant.ORDER_STATUS_1)
+                .eq(AppOrder::getOrderType, CommonConstant.ORDER_TYPE_2));
+        for (AppOrder appOrder : list) {
+            //判断订单是否支持过期自动退款
+            String orgCode = appOrder.getOrgCode();
+            AppSitePlace sitePlace = appSitePlaceService.getOne(Wrappers.lambdaQuery(AppSitePlace.class).eq(AppSitePlace::getOrgCode, orgCode).last("limit 1"));
+            if (ObjectUtil.isNotEmpty(sitePlace)){
+                if (sitePlace.getRefundType() != null ){
+                    List<AppOrderProInfo> orderProInfoList = appOrderProInfoService.list(Wrappers.lambdaQuery(AppOrderProInfo.class)
+                            .eq(AppOrderProInfo::getOrderId, appOrder.getId())
+                            .eq(AppOrderProInfo::getType, CommonConstant.ORDER_PRO_INFO_TYPE_2)
+                    );
+                    List<AppOrderProInfo> refundOrderList = new ArrayList<>();
+                    for (AppOrderProInfo appOrderProInfo : orderProInfoList) {
+
+                        if (appOrderProInfo.getOrderStatus() == 1) {
+                            // 订单未使用,判断是否已过期
+                            LocalDateTime expireTime = LocalDateTime.parse(appOrderProInfo.getExpireTime() + " 23:59", DateTimeFormatter.ofPattern(
+                                    "yyyy-MM" +
+                                    "-dd HH:mm"));
+                            if (expireTime.isBefore(LocalDateTime.now())) {
+                                // 订单已过期
+                                refundOrderList.add(appOrderProInfo);
+                            }
+                        }
+                    }
+                    //批量退款
+                    if (CollUtil.isNotEmpty(refundOrderList)){
+                        RefundOrderForm refundOrderForm = new RefundOrderForm();
+                        refundOrderForm.setOrderCode(appOrder.getOrderCode());
+
+                        StringJoiner sj = new StringJoiner(",");
+                        refundOrderList.forEach(appOrderProInfo -> sj.add(appOrderProInfo.getId()));
+
+                        refundOrderForm.setOrderProInfoIds(sj.toString());
+                        refundOrderForm.setReason("过期自动退款");
+
+                        orderService.refundOrder(refundOrderForm);
+                    }
+                }
+            }
+        }
+    }
 
     /**
      * 查询分账回退结果

+ 1 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/job/RefundJobService.java

@@ -66,7 +66,7 @@ public class RefundJobService {
 
                             if (appOrderProInfo.getOrderStatus() == 1) {
                                 // 订单未使用,判断是否已过期
-                                LocalDateTime expireTime = LocalDateTime.parse(appOrderProInfo.getExpireTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
+                                LocalDateTime expireTime = LocalDateTime.parse(appOrderProInfo.getExpireTime()+ " 23:59", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
                                 if (expireTime.isBefore(LocalDateTime.now())) {
                                     // 订单已过期
                                     refundOrderList.add(appOrderProInfo);