Jelajahi Sumber

perf(national-motion-system): 优化数据查询和统计逻辑

- 在 DetailServiceImpl 中使用单次查询获取符合条件的订单ID列表,然后使用该列表进行关联记录统计,减少数据库查询次数
- 在 OrTeachingJobService 中增加对 AppGmtInfo 表中已存在记录的检查,避免重复插入数据- 在 .gitignore 中添加 .git 目录,防止 Git递归跟踪
SheepHy 2 minggu lalu
induk
melakukan
58424b6843

+ 15 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/DetailServiceImpl.java

@@ -43,6 +43,7 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.ZoneId;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static org.jeecg.modules.system.constant.DefIndexConst.FACILITY_INFO;
 
@@ -168,15 +169,25 @@ public class DetailServiceImpl implements IDetailService {
                         .eq(AppSitePriceRules::getSitePlaceId, appSitePlace.getId())
                         .last("limit 1").orderByDesc(AppSitePriceRules::getSellingPrice));
                 PlaceInfoVO.PlaceInfoMsgVO placeInfoMsgVO = new PlaceInfoVO.PlaceInfoMsgVO();
+                // 1. 先获取所有符合条件的订单ID列表(单次查询)
+                List<String> orderIdList = appOrderMapper.selectList(Wrappers.<AppOrder>lambdaQuery()
+                                .select(AppOrder::getId)  // 仅查询ID字段
+                                .eq(AppOrder::getOrgCode, appSitePlace.getOrgCode())
+                                .eq(AppOrder::getType, 0)
+                                .eq(AppOrder::getOrderType, 0))
+                        .stream()
+                        .map(order -> order.getId().toString())  // 假设getId()返回Long
+                        .collect(Collectors.toList());
+
+                // 2. 使用ID列表直接统计关联记录(单次查询)
+                int salesCount = Math.toIntExact(appOrderProInfoMapper.selectCount(Wrappers.<AppOrderProInfo>lambdaQuery()
+                        .in(AppOrderProInfo::getOrderId, orderIdList)));
                 placeInfoMsgVO.setName(appSitePlace.getName())
                         .setId(appSitePlace.getId())
                         .setCategory(getCategoryName(appSite.getCategoryId()))
                         .setCover(appSitePlace.getCover().split(",")[0])
                         .setReminder(appSitePlace.getReminder())
-                        .setSales(Math.toIntExact(appOrderMapper.selectCount(Wrappers.<AppOrder>lambdaQuery()
-                                .eq(AppOrder::getOrgCode, appSitePlace.getOrgCode())
-                                .eq(AppOrder::getType,0)
-                                .eq(AppOrder::getOrderType,0))))
+                        .setSales(salesCount)
                         .setRefundType(appSitePlace.getRefundType());
                 if(appSitePriceRules!=null){
                     placeInfoMsgVO.setOriginalPrice(appSitePriceRules.getOriginalPrice());

+ 15 - 14
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/quartz/job/OrTeachingJobService.java

@@ -242,20 +242,21 @@ public class OrTeachingJobService {
             List<DoorRecordDTO> allRecords = fetchAllDoorRecords();
             allRecords.forEach(data -> {
                 log.info("提取数据: {}", data);
-                appGmtInfoMapper.insert(new AppGmtInfo()
-                        .setFamilyId(data.getEmployeeNo())
-                        .setSiteId(appDeviceMapper.selectOne(Wrappers.<AppDevice>lambdaQuery()
-                                .eq(AppDevice::getDeviceSerial, data.getDeviceSerial().split("-")[0])).getSiteId())
-                        .setAuthResultMsg(data.getAuthResultMsg())
-                        .setGmtCreate(DateUtils.str2Date(data.getGmtCreate(), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")))
-                        .setPicUrl(data.getPicUrl())
-                        .setSecMsgCode(data.getSecMsgCode())
-                        .setOriginId(data.getOriginId())
-                        .setDeviceSerial(data.getDeviceSerial().split("-")[0])
-                        .setCreateTime(new Date())
-                        .setUpdateTime(new Date())
-                        .setDeviceSerialNo(data.getDeviceSerial()));
-
+                if(null == appGmtInfoMapper.selectOne(Wrappers.<AppGmtInfo>lambdaQuery().eq(AppGmtInfo::getOriginId, data.getOriginId()).last("LIMIT 1"))){
+                    appGmtInfoMapper.insert(new AppGmtInfo()
+                            .setFamilyId(data.getEmployeeNo())
+                            .setSiteId(appDeviceMapper.selectOne(Wrappers.<AppDevice>lambdaQuery()
+                                    .eq(AppDevice::getDeviceSerial, data.getDeviceSerial().split("-")[0])).getSiteId())
+                            .setAuthResultMsg(data.getAuthResultMsg())
+                            .setGmtCreate(DateUtils.str2Date(data.getGmtCreate(), new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")))
+                            .setPicUrl(data.getPicUrl())
+                            .setSecMsgCode(data.getSecMsgCode())
+                            .setOriginId(data.getOriginId())
+                            .setDeviceSerial(data.getDeviceSerial().split("-")[0])
+                            .setCreateTime(new Date())
+                            .setUpdateTime(new Date())
+                            .setDeviceSerialNo(data.getDeviceSerial()));
+                }
             });
 
         } catch (Exception e) {