自动化立体仓库 - WMS系统
#
lty
1 天以前 921d69a620b26ee8616b1564f4fa3b228e09d4d6
#
3个文件已修改
71 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoEmptyOutScheduler.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AutoEmptyOutHandler.java 26 ●●●● 补丁 | 查看 | 原始文档 | 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);