| src/main/java/com/zy/asrs/mapper/LocDetlMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/task/AutoEmptyOutScheduler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/task/handler/AutoEmptyOutHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -56,6 +56,18 @@ "order by ld.appe_time asc, ld.id asc") LocDetl selectOldestLocDetl(@Param("crnNo") Integer crnNo); @Select("select top 1 ld.matnr from asr_loc_detl ld left join asr_loc_mast lm on ld.loc_no = lm.loc_no " + "where lm.crn_no = #{crnNo} and lm.loc_sts = 'F' and lm.frozen = 0 and lm.deleted = 0 and lm.whs_type = 1 " + "and (ld.frozen is null or ld.frozen = 0) and ld.matnr is not null " + "group by ld.matnr order by count(1) desc") String selectMostMatnrByCrnNo(@Param("crnNo") Integer crnNo); @Select("select top 1 ld.* from asr_loc_detl ld left join asr_loc_mast lm on ld.loc_no = lm.loc_no " + "where lm.crn_no = #{crnNo} and lm.loc_sts = 'F' and lm.frozen = 0 and lm.deleted = 0 and lm.whs_type = 1 " + "and ld.matnr = #{matnr} and ld.appe_time is not null and (ld.frozen is null or ld.frozen = 0) " + "order by ld.appe_time asc, ld.id asc") LocDetl selectOldestLocDetlByCrnNoAndMatnr(@Param("crnNo") Integer crnNo, @Param("matnr") String matnr); @Select("select count(1) from asr_loc_detl ld left join asr_loc_mast lm on ld.loc_no = lm.loc_no " + "where lm.crn_no = #{crnNo} and lm.frozen = 0 and lm.deleted = 0 and lm.whs_type = 1 " + "and ld.matnr = #{matnr} and (ld.frozen is null or ld.frozen = 0)") src/main/java/com/zy/asrs/task/AutoEmptyOutScheduler.java
@@ -1,6 +1,9 @@ package com.zy.asrs.task; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.WrkMastService; import com.zy.asrs.task.core.ReturnT; import com.zy.asrs.task.handler.AutoEmptyOutHandler; import com.zy.system.entity.Config; @@ -19,6 +22,8 @@ private ConfigService configService; @Autowired private AutoEmptyOutHandler autoEmptyOutHandler; @Autowired private WrkMastService wrkMastService; //定时空库位预留,空轴出库 @Scheduled(cron = "0/3 * * * * ? ") @@ -34,4 +39,32 @@ } } @Scheduled(cron = "0/30 * * * * ? ") public void autoLocMove() { Config config = configService.selectConfigByCode("AutoLocMove"); if (Cools.isEmpty(config) || config.getValue().equals("false")) { return; } try { Integer existCount = wrkMastService.selectCount(new EntityWrapper<WrkMast>() .eq("io_type", 101) .eq("log_mk", "Y") .eq("ove_mk", "N")); int allow = 2 - (existCount == null ? 0 : existCount); if (allow <= 0) { return; } int created = 0; for (int crnNo = 1; crnNo < 5 && created < allow; crnNo++) { String result = autoEmptyOutHandler.moveMostMatnrInventoryInner(crnNo, 1L); if (!Cools.isEmpty(result)) { created++; log.info("自动移库生成任务: {}", result); } } } catch (Exception e) { log.error("自动移库失败", e); } } } src/main/java/com/zy/asrs/task/handler/AutoEmptyOutHandler.java
@@ -118,13 +118,26 @@ } } private String moveOldestInventoryInner(Integer crnNo, Long userId) { public String moveOldestInventoryInner(Integer crnNo, Long userId) { LocDetl oldest = locDetlMapper.selectOldestLocDetl(crnNo); if (Cools.isEmpty(oldest) || Cools.isEmpty(oldest.getLocNo())) { return moveInventoryFromLocDetl(oldest, userId); } public String moveMostMatnrInventoryInner(Integer crnNo, Long userId) { String matnr = locDetlMapper.selectMostMatnrByCrnNo(crnNo); if (Cools.isEmpty(matnr)) { return null; } LocDetl detl = locDetlMapper.selectOldestLocDetlByCrnNoAndMatnr(crnNo, matnr); return moveInventoryFromLocDetl(detl, userId); } private String moveInventoryFromLocDetl(LocDetl sourceDetl, Long userId) { if (Cools.isEmpty(sourceDetl) || Cools.isEmpty(sourceDetl.getLocNo())) { return null; } LocMast sourceLoc = locMastService.selectById(oldest.getLocNo()); LocMast sourceLoc = locMastService.selectById(sourceDetl.getLocNo()); if (Cools.isEmpty(sourceLoc) || Cools.isEmpty(sourceLoc.getBarcode())) { return null; } @@ -215,6 +228,7 @@ wrkMast.setStaNo(String.valueOf(targetStaNo)); wrkMast.setFullPlt("Y"); wrkMast.setExitMk("N"); wrkMast.setLogMk("Y"); wrkMast.setPacked(null); wrkMast.setOveMk("N"); wrkMast.setAppeUser(userId); @@ -225,12 +239,12 @@ throw new RuntimeException("自动跨巷道移库生成任务失败,workNo=" + workNo + ", sourceLocNo=" + sourceLoc.getLocNo()); } for (LocDetl sourceDetl : sourceDetls) { for (LocDetl sourceDetl1 : sourceDetls) { WrkDetl wrkDetl = new WrkDetl(); wrkDetl.sync(sourceDetl); wrkDetl.sync(sourceDetl1); wrkDetl.setWrkNo(workNo); wrkDetl.setIoTime(now); wrkDetl.setAnfme(sourceDetl.getAnfme()); wrkDetl.setAnfme(sourceDetl1.getAnfme()); wrkDetl.setAppeTime(now); wrkDetl.setAppeUser(userId); wrkDetl.setModiTime(now);