| | |
| | | */ |
| | | @Override |
| | | public int syncLegacyTransferOrders(int daysAgo) { |
| | | log.info("开始同步{}天前的旧系统转运单数据", daysAgo); |
| | | // log.info("开始同步{}天前的旧系统转运单数据", daysAgo); |
| | | |
| | | try { |
| | | // 参数验证 |
| | |
| | | // 计算日期范围 |
| | | Date startDate = DateUtils.addDays(new Date(), -daysAgo); |
| | | 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); |
| | | |
| | | if (transferOrders == null || transferOrders.isEmpty()) { |
| | | log.info("未查询到{}天前的转运单数据", daysAgo); |
| | | return 0; |
| | | } |
| | | |
| | | log.info("查询到{}条转运单数据,开始同步...", transferOrders.size()); |
| | | |
| | | // Keyset游标分页从 SQL Server 拉取转运单数据,每页 10 条,走主键索引彻底规避超时 |
| | | final int PAGE_SIZE = 5; |
| | | long lastId = 0L; // 游标:记录上一页最后一条的 ServiceOrdID,首次传 0 |
| | | int successCount = 0; |
| | | int totalCount = transferOrders.size(); |
| | | int processedCount = 0; |
| | | |
| | | for (Map<String, Object> order : transferOrders) { |
| | | processedCount++; |
| | | try { |
| | | Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID"); |
| | | Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID"); |
| | | |
| | | // 检查参数有效性 |
| | | if (serviceOrdID==null || serviceOrdID<=0) { |
| | | log.warn("第{}条数据服务单ID为空,跳过处理", processedCount); |
| | | continue; |
| | | } |
| | | |
| | | log.debug("正在处理第{}/{}条转运单: ServiceOrdID={}, DispatchOrdID={}", |
| | | processedCount, totalCount, serviceOrdID, dispatchOrdID); |
| | | |
| | | // 检查是否已同步 |
| | | if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) { |
| | | log.debug("转运单已同步,跳过: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | //进行更新操作 |
| | | updateTransferOrder(serviceOrdID, dispatchOrdID, order); |
| | | continue; |
| | | } |
| | | |
| | | // 同步单个转运单 |
| | | boolean success = syncSingleTransferOrder(serviceOrdID, dispatchOrdID, order); |
| | | if (success) { |
| | | successCount++; |
| | | } |
| | | |
| | | // 控制同步频率,避免请求过快 |
| | | Thread.sleep(100); |
| | | } catch (InterruptedException ie) { |
| | | log.warn("同步任务被中断"); |
| | | Thread.currentThread().interrupt(); |
| | | |
| | | while (true) { |
| | | List<Map<String, Object>> transferOrders = legacyTransferSyncMapper.selectTransferOrders(startDateStr, endDateStr, lastId, PAGE_SIZE); |
| | | |
| | | if (transferOrders == null || transferOrders.isEmpty()) { |
| | | break; |
| | | } catch (Exception e) { |
| | | log.error("同步单个转运单失败: ServiceOrdID={}, DispatchOrdID={}", |
| | | MapValueUtils.getStringValue(order, "ServiceOrdID"), |
| | | MapValueUtils.getStringValue(order, "DispatchOrdID"), e); |
| | | } |
| | | |
| | | int totalCount = transferOrders.size(); |
| | | int processedCount = 0; |
| | | |
| | | for (Map<String, Object> order : transferOrders) { |
| | | processedCount++; |
| | | try { |
| | | Long serviceOrdID = MapValueUtils.getLongValue(order, "ServiceOrdID"); |
| | | Long dispatchOrdID = MapValueUtils.getLongValue(order, "DispatchOrdID"); |
| | | |
| | | // 检查参数有效性 |
| | | if (serviceOrdID == null || serviceOrdID <= 0) { |
| | | log.warn("第{}条数据服务单ID为空,跳过处理", processedCount); |
| | | continue; |
| | | } |
| | | |
| | | // log.debug("正在处理第{}/{}条转运单: ServiceOrdID={}, DispatchOrdID={}", |
| | | // processedCount, totalCount, serviceOrdID, dispatchOrdID); |
| | | |
| | | // 检查是否已同步 |
| | | if (isTransferOrderSynced(serviceOrdID, dispatchOrdID)) { |
| | | // log.debug("转运单已同步,跳过: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID); |
| | | //进行更新操作 |
| | | updateTransferOrder(serviceOrdID, dispatchOrdID, order); |
| | | continue; |
| | | } |
| | | |
| | | // 同步单个转运单 |
| | | boolean success = syncSingleTransferOrder(serviceOrdID, dispatchOrdID, order); |
| | | if (success) { |
| | | successCount++; |
| | | } |
| | | |
| | | // 控制同步频率,避免请求过快 |
| | | Thread.sleep(100); |
| | | } catch (InterruptedException ie) { |
| | | log.warn("同步任务被中断"); |
| | | Thread.currentThread().interrupt(); |
| | | break; |
| | | } catch (Exception e) { |
| | | log.error("同步单个转运单失败: ServiceOrdID={}, DispatchOrdID={}", |
| | | MapValueUtils.getStringValue(order, "ServiceOrdID"), |
| | | MapValueUtils.getStringValue(order, "DispatchOrdID"), e); |
| | | } |
| | | } |
| | | |
| | | // 更新游标为本页最后一条的 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("同步完成,共处理{}条转运单,成功同步{}条转运单数据", totalCount, successCount); |
| | | |
| | | // log.info("同步完成,成功同步{}条转运单数据", successCount); |
| | | return successCount; |
| | | |
| | | } catch (Exception e) { |
| | |
| | | createTaskVo.setDeptId(deptId); |
| | | |
| | | |
| | | int result = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time); |
| | | Long taskId = sysTaskService.insertTask(createTaskVo,serviceOrdID,dispatchOrdID, serviceOrdNo, taskCreatorId,createUserName, deptId, ServiceOrd_CC_Time, ServiceOrd_CC_Time); |
| | | |
| | | if (result > 0) { |
| | | // log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", serviceOrdID, dispatchOrdID, result); |
| | | if (taskId != null && taskId > 0) { |
| | | // log.info("转运单同步成功: ServiceOrdID={}, DispatchOrdID={}, 创建的任务ID={}", serviceOrdID, dispatchOrdID, taskId); |
| | | |
| | | try { |
| | | notifyTransferOrderByWechat((long) result, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order); |
| | | notifyTransferOrderByWechat(taskId, serviceOrdID, dispatchOrdID, serviceOrdNo, ServiceOrd_CC_Time, dept, order); |
| | | } catch (Exception e) { |
| | | log.error("转运单同步成功后发送微信通知失败: ServiceOrdID={}, DispatchOrdID={}", serviceOrdID, dispatchOrdID, e); |
| | | } |