diff --git a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommonController.java b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommonController.java index dac675eb0..a8fc66276 100644 --- a/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommonController.java +++ b/emis-biz-web/src/main/java/com/xdadan/erp/web/emis/EmisCommonController.java @@ -981,14 +981,28 @@ public class EmisCommonController extends EmisBaseController log.info("Found {} unique line codes, starting batch processing", lineCodeSet.size()); - // 循环调用 + // 循环调用,最后一个才清除状态 + int index = 0; + int totalSize = lineCodeSet.size(); for (String code : lineCodeSet) { try { - emisTmsSiteBatchMissService.autoScanSiteBatch(code); - log.info("autoScanSiteBatch processed for lineCode: {}", code); + index++; + // 最后一个lineCode才清除状态 + boolean clearStatus = (index == totalSize); + emisTmsSiteBatchMissService.autoScanSiteBatch(code, clearStatus); + log.info("autoScanSiteBatch processed for lineCode: {} ({}/{})", code, index, totalSize); } catch (Exception e) { log.error("autoScanSiteBatch failed for lineCode: {}, error: {}", code, e.getMessage()); // 继续处理下一个,不中断整个流程 + // 如果最后一个失败,需要清除状态 + if (index == totalSize) { + try { + redissonService.setStr(statusKey, "", 0); + log.info("autoScanSiteBatch status cleared after last task failed"); + } catch (Exception ex) { + log.error("Failed to clear status after last task failed", ex); + } + } } } diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTmsSiteBatchMissService.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTmsSiteBatchMissService.java index 86aa77c94..a3978f3cc 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTmsSiteBatchMissService.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/IEmisTmsSiteBatchMissService.java @@ -73,6 +73,14 @@ public interface IEmisTmsSiteBatchMissService { */ void autoScanSiteBatch(String lineCode); + /** + * 定时扫描运单货物组批次是否正确录入 + * + * @param lineCode 线路代码 + * @param clearStatus 是否清除状态,true-清除,false-不清除 + */ + void autoScanSiteBatch(String lineCode, boolean clearStatus); + /** * 根据bill_code出现次数查询TMS漏组批次信息 * diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchMissServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchMissServiceImpl.java index 9bb0d012a..fd0556f06 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchMissServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisTmsSiteBatchMissServiceImpl.java @@ -303,6 +303,12 @@ public class EmisTmsSiteBatchMissServiceImpl extends EmisBaseService implements @Async @Override public void autoScanSiteBatch(String lineCode) { + autoScanSiteBatch(lineCode, true); + } + + @Async + @Override + public void autoScanSiteBatch(String lineCode, boolean clearStatus) { ExecutorService executorService = null; try { emisTmsSiteBatchMissMapper.deleteReally(lineCode); @@ -382,7 +388,7 @@ public class EmisTmsSiteBatchMissServiceImpl extends EmisBaseService implements log.info("Processing {} batches with batch size: {}, total waybills: {}", batches.size(), batchSize, allWaybills.size()); - // 复用现有线程池(老版逻辑使用 EmisBaseService.ProcessResult) + // 复用现有线程池 List> processFutures = new ArrayList<>(); for (List batch : batches) { @@ -480,13 +486,17 @@ public class EmisTmsSiteBatchMissServiceImpl extends EmisBaseService implements Thread.currentThread().interrupt(); } } - // 清除任务状态 - try { - String statusKey = "autoScanSiteBatch_status"; - redissonService.setStr(statusKey, "", 0); - log.info("autoScanSiteBatch task status cleared"); - } catch (Exception e) { - log.error("Failed to clear autoScanSiteBatch status", e); + // 清除任务状态(根据参数决定是否清除) + if (clearStatus) { + try { + String statusKey = "autoScanSiteBatch_status"; + redissonService.setStr(statusKey, "", 0); + log.info("autoScanSiteBatch task status cleared"); + } catch (Exception e) { + log.error("Failed to clear autoScanSiteBatch status", e); + } + } else { + log.info("autoScanSiteBatch task completed, status not cleared (will be cleared after all tasks)"); } } }