自动化立体仓库 - WMS系统
zyx
2023-06-16 2c2f9b0d2c42db9aac486af26e15fd6957012d18
增加111库位移存(原)定时任务
9个文件已修改
176 ■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/LocMastMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WorkService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/CheckDeepScheduler.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -22,4 +22,6 @@
    Integer selectEmptyLocCount(@Param("locType1") Short locType1, @Param("crnNo") Integer crnNo);
    List<LocMast> queryShallowLocFMast(@Param("crnNo") Integer crnNo);
    LocMast queryNeedMoveShallLoc(Integer crnNo);
}
src/main/java/com/zy/asrs/service/LocMastService.java
@@ -37,4 +37,7 @@
     * @return
     */
    List<LocMast> queryShallowLocFMast(Integer crnNo);
    public LocMast queryNeedMoveShallLoc(Integer crnNo);
}
src/main/java/com/zy/asrs/service/WorkService.java
@@ -97,4 +97,5 @@
    void turnMatLocDetl(EmptyPlateOutParam param, Long userId);
    void locMove(String sourceLocNo, Long userId);
}
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -52,4 +52,9 @@
    public List<LocMast> queryShallowLocFMast(Integer crnNo) {
        return this.baseMapper.queryShallowLocFMast(crnNo);
    }
    @Override
    public LocMast queryNeedMoveShallLoc(Integer crnNo) {
        return this.baseMapper.queryNeedMoveShallLoc(crnNo);
    }
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -662,6 +662,90 @@
    @Override
    @Transactional
    public void locMove(String sourceLocNo, Long userId) {
        LocMast sourceLoc = locMastService.selectById(sourceLocNo);
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo));
        if (Cools.isEmpty(sourceLoc)){
            throw new CoolException("未找到库位");
        }
//        LocMast loc = locMastService.selectById(locNo);
//        if (Cools.isEmpty(loc)){
//            throw new CoolException("未找到库位");
//        }
//        if (!loc.getLocSts().equals("O") || (!sourceLoc.getLocSts().equals("F") && !sourceLoc.getLocSts().equals("D"))){
//            throw new CoolException("库位状态已改变");
//        }
//        if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
//            throw new CoolException("移转库位属于不同堆垛机");
//        }
        Date now = new Date();
        // 获取工作号
        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
        // 保存工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(111); // 入出库状态: 111.库格移载(原)
        wrkMast.setIoPri(10D);
        wrkMast.setCrnNo(sourceLoc.getCrnNo());
        wrkMast.setSourceLocNo(sourceLocNo); // 源库位
        wrkMast.setLocNo(sourceLocNo); // 目标库位
        wrkMast.setFullPlt(Cools.isEmpty(locDetls)?"N":"Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 空板
        wrkMast.setBarcode(sourceLoc.getBarcode()); // 托盘码
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 工作档明细保存
        for (LocDetl locDetl : locDetls) {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(locDetl);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setIoTime(now);
            wrkDetl.setAnfme(locDetl.getAnfme());
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(userId);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
        }
        // 修改源库位状态
        if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
            sourceLoc.setLocSts("R"); // R.出库预约
            sourceLoc.setModiUser(userId);
            sourceLoc.setModiTime(now);
            if (!locMastService.updateById(sourceLoc)){
                throw new CoolException("更新源库位状态失败");
            }
        } else {
            throw new CoolException("源库位出库失败,状态:"+sourceLoc.getLocSts$());
        }
//        // 修改目标库位状态
//        if (loc.getLocSts().equals("O")) {
//            loc.setLocSts("S"); // S.入库预约
//            loc.setModiTime(now);
//            loc.setModiUser(userId);
//            if (!locMastService.updateById(loc)) {
//                throw new CoolException("更新目标库位状态失败");
//            }
//        } else {
//            throw new CoolException("移转失败,目标库位状态:"+loc.getLocSts$());
//        }
    }
    @Override
    @Transactional
    public void completeWrkMast(String workNo, Long userId) {
        WrkMast wrkMast = wrkMastService.selectById(workNo);
        if (Cools.isEmpty(wrkMast)){
@@ -671,7 +755,7 @@
            throw new CoolException("当前工作档已完成");
        }
        // 入库 + 库位转移
        if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType()==11)) {
        if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && (wrkMast.getIoType() == 11) || wrkMast.getIoType() == 111)) {
            wrkMast.setWrkSts(4L);
        // 出库
        } else if (wrkMast.getWrkSts() > 10) {
src/main/java/com/zy/asrs/task/CheckDeepScheduler.java
@@ -46,10 +46,10 @@
    /**
     * 将两个深库位合并为深浅库位,物料号相同,源库位入库日期早于目标库位对应深库位入库日期,库位状态都为F
     */
    @Scheduled(cron = "0/30 * * * * ?")
    @Scheduled(cron = "0/5 * * * * ?")
    private void execute() throws ParseException {
//        if (!confirmDeep) return;
        if (true) return;
        //if (true) return;
        ReturnT<String> result = checkDeepHandler.start();
        if (!result.isSuccess()) {
src/main/java/com/zy/asrs/task/handler/CheckDeepHandler.java
@@ -45,9 +45,9 @@
    @Transactional
    public synchronized ReturnT<String> start() {
        try {
            for (int crnNo = 1; crnNo < 3; crnNo++){
            for (int crnNo = 1; crnNo < 5; crnNo++) {
                List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
                        .eq("crn_no",crnNo)
                        .eq("crn_no", crnNo)
                        .last(" and wrk_sts in (2,3,4,11,12)")
                );
                if (wrkMasts.size() > 0) continue;
@@ -58,30 +58,47 @@
                    continue;
                }
                List<LocMast> locMasts = locMastService.queryShallowLocFMast(crnNo);
                if (null == locMasts) continue;
                for (LocMast sourceLoc : locMasts){
                    String deep = Utils.getDeepLoc(slaveProperties, sourceLoc.getLocNo());
                    LocMast destLoc = locMastService.selectById(deep);
                    if(!Cools.isEmpty(sourceLoc) && !Cools.isEmpty(destLoc)) {
                        //查找源库位是否有转移任务,如果有,不生成库位移转
                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                                .eq("source_loc_no", sourceLoc.getLocNo()));
                        if (Cools.isEmpty(wrkMast) && destLoc.getLocSts().equals("O") &&
                                (sourceLoc.getLocSts().equals("F") || sourceLoc.getLocSts().equals("D"))) {
                            workService.locMove(sourceLoc.getLocNo(), deep, 1L);
                        }
                    }
                LocMast locMast = locMastService.queryNeedMoveShallLoc(crnNo);
//                LocMast targetLoc = locMastService.queryEmptyDeepLoc(crnNo);
                if (!Cools.isEmpty(locMast)) {
                    workService.locMove(locMast.getLocNo(), 1L);
                }
            }
                return SUCCESS;
//                //暂停移库
//                BasCrnp crnp = basCrnpService.selectById(crnNo);
//                if(!Cools.isEmpty(crnp) && !Cools.isEmpty(crnp.getTankQty()) && crnp.getTankQty()==0){
//                    continue;
//                }
//
//                List<LocMast> locMasts = locMastService.queryShallowLocFMast(crnNo);
//                if (null == locMasts) continue;
//
//                for (LocMast sourceLoc : locMasts){
//                    String deep = Utils.getDeepLoc(slaveProperties, sourceLoc.getLocNo());
//                    LocMast destLoc = locMastService.selectById(deep);
//
//                    if(!Cools.isEmpty(sourceLoc) && !Cools.isEmpty(destLoc)) {
//                        //查找源库位是否有转移任务,如果有,不生成库位移转
//                        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
//                                .eq("source_loc_no", sourceLoc.getLocNo()));
//                        if (Cools.isEmpty(wrkMast) && destLoc.getLocSts().equals("O") &&
//                                (sourceLoc.getLocSts().equals("F") || sourceLoc.getLocSts().equals("D"))) {
//                            workService.locMove(sourceLoc.getLocNo(), deep, 1L);
//
//                        }
//                    }
//                }
//            }
        } catch (Exception e) {
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
        return SUCCESS;
    }
    /**
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -399,6 +399,16 @@
                        }
                    }
                    break;
                case 111:
                    if (locMast.getLocSts().equals("R")) {
                        wrkMast.setWrkSts(4L);
                        wrkMast.setModiTime(now);
                        if (!wrkMastService.updateById(wrkMast)) {
                            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                            return FAIL.setMsg("更新出库完成状态失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getSourceLocNo() + "]");
                        }
                        return SUCCESS;
                    }
                default:
                    break;
            }
src/main/resources/mapper/LocMastMapper.xml
@@ -75,4 +75,14 @@
        )
        and (loc_sts = 'F' or loc_sts = 'D') and crn_no = #{crnNo}
    </select>
    <select id="queryNeedMoveShallLoc" resultMap="BaseResultMap">
        SELECT
            TOP 1 *
        FROM
            asr_loc_mast
        WHERE
            crn_no = #{crnNo} AND (loc_sts = 'F' OR loc_sts = 'D') and inv_wh = '0'
        order by bay1,lev1
    </select>
</mapper>