wlzboy
2026-03-31 61c4c3f45e4257e2e7662f033e2719e62366c632
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/LegacyTransferSyncServiceImpl.java
@@ -90,17 +90,18 @@
            String startDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", startDate);
            String endDateStr = DateUtils.parseDateToStr("yyyy-MM-dd", new Date());
            
            // 从SQL Server查询转运单数据
            List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr, endDateStr);
            // Keyset游标分页从 SQL Server 拉取转运单数据,每页 10 条,走主键索引彻底规避超时
            final int PAGE_SIZE = 10;
            long lastId = 0L;   // 游标:记录上一页最后一条的 ServiceOrdID,首次传 0
            int successCount = 0;
            while (true) {
                List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr, endDateStr, lastId, PAGE_SIZE);
            
            if (transferOrders == null || transferOrders.isEmpty()) {
                log.info("未查询到{}天前的转运单数据", daysAgo);
                return 0;
                    break;
            }
            
//            log.info("查询到{}条转运单数据,开始同步...", transferOrders.size());
            int successCount = 0;
            int totalCount = transferOrders.size();
            int processedCount = 0;
            
@@ -146,7 +147,22 @@
                }
            }
            
//            log.info("同步完成,共处理{}条转运单,成功同步{}条转运单数据", totalCount, successCount);
                // 更新游标为本页最后一条的 ServiceOrdID
                Map<String, Object> lastOrder = transferOrders.get(transferOrders.size() - 1);
                Long lastServiceOrdID = MapValueUtils.getLongValue(lastOrder, "ServiceOrdID");
                if (lastServiceOrdID != null && lastServiceOrdID > 0) {
                    lastId = lastServiceOrdID;
                } else {
                    break;
                }
                // 本页未满一页,说明已无更多数据
                if (totalCount < PAGE_SIZE) {
                    break;
                }
            }
//            log.info("同步完成,成功同步{}条转运单数据", successCount);
            return successCount;
            
        } catch (Exception e) {