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 a0c15275b..e23d42d09 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 @@ -903,26 +903,56 @@ public class EmisCommonController extends EmisBaseController /** * 定时扫描运单货物组批次是否正确录入 + * * @return */ @GetMapping("/autoScanSiteBatch") - public AjaxResult autoScanSiteBatch(String lineCode){ - String lockKey="autoScanSiteBatch"; + public AjaxResult autoScanSiteBatch(String lineCode) { + String statusKey = "autoScanSiteBatch_status"; log.info("autoScanSiteBatch start"); - // 加锁查询 - redissonService.lock(lockKey,300); - try{ - emisTmsSiteBatchMissService.autoScanSiteBatch(lineCode); - }catch(Exception ex){ - ex.printStackTrace(); - log.error("autoScanSiteBatch exception:"+ex.getMessage()); + // 检查任务是否正在执行 + String currentStatus = redissonService.getStr(statusKey); + if ("RUNNING".equals(currentStatus)) { + log.warn("autoScanSiteBatch is already running, request rejected"); + return AjaxResult.error("任务正在执行中,请稍后再试"); } - log.info("autoScanSiteBatch end"); - redissonService.unlock(lockKey); - return AjaxResult.success("发送成功"); + try { + // 设置任务状态为运行中,设置较长的过期时间(30分钟) + // 这样即使异步任务没有正确清除状态,也会在30分钟后自动过期 + redissonService.setStr(statusKey, "RUNNING", 1800); + // 异步执行任务 + emisTmsSiteBatchMissService.autoScanSiteBatch(lineCode); + log.info("autoScanSiteBatch async task started"); + + return AjaxResult.success("异步任务已启动,请稍后查看执行结果"); + + } catch (Exception ex) { + ex.printStackTrace(); + log.error("autoScanSiteBatch exception:" + ex.getMessage()); + // 如果启动失败,清除状态 + redissonService.setStr(statusKey, "", 0); + return AjaxResult.error("任务启动失败:" + ex.getMessage()); + } + } + + /** + * 查询autoScanSiteBatch任务状态 + * + * @return + */ + @GetMapping("/checkAutoScanSiteBatchStatus") + public AjaxResult checkAutoScanSiteBatchStatus() { + String statusKey = "autoScanSiteBatch_status"; + String currentStatus = redissonService.getStr(statusKey); + + if ("RUNNING".equals(currentStatus)) { + return AjaxResult.success("任务正在执行中"); + } else { + return AjaxResult.success("任务未在执行"); + } } /** 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 32ea753d7..ca80fd4b0 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 @@ -10,6 +10,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import cn.hutool.core.collection.CollectionUtil; +import com.xdadan.erp.common.core.redis.RedissonService; import com.xdadan.erp.emis.domain.*; import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType; import com.xdadan.erp.emis.domain.exception.EmisBizError; @@ -55,6 +56,9 @@ public class EmisTmsSiteBatchMissServiceImpl extends EmisBaseService implements @Autowired private EmisTmsSiteBatchMissRecordMapper emisTmsSiteBatchMissRecordMapper; + @Autowired + RedissonService redissonService; + /** * 查询TMS漏组批次信息 * @@ -428,6 +432,14 @@ 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); + } } }