自动化立体仓库 - WMS系统
#
lsh
2024-05-31 6e05d25d44bd1fa1bab3806e5f2f33d9076664b5
#
1个文件已添加
4个文件已修改
429 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/task/AutoMoveScheduler.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoMoveTwoAndThreeGoOneScheduler.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/CheckLocDetlExistScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java 360 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
@@ -201,22 +201,41 @@
     */
    @Scheduled(cron = "0/2 * * * * ? ")
    private void autoEmptyBack4(){
        // 查询 不为1楼的空货架
        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
                new EntityWrapper<AgvLocMast>()
                        .ne("floor", 1)
                        .eq("loc_sts","D")
                        .eq("loc_type1",3));
        if (agvLocMasts.isEmpty()) {
            return;
        }
        for (AgvLocMast agvLocMast : agvLocMasts) {
            try{
                autoMoveHandler.autoEmptyBack4(agvLocMast);
            } catch (Exception e){
                log.error("库位号"+agvLocMast.getLocNo()+"空板自动回库 库位-接驳点  库位-吸塑车间,处理失败:===》异常原因:"+e.getMessage());
//        if (determineFloorConnection(2)){
            // 查询 不为1楼的空货架
            List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
                    new EntityWrapper<AgvLocMast>()
                            .ne("floor", 1)
                            .eq("loc_sts","D")
                            .eq("loc_type1",3));
            if (agvLocMasts.isEmpty()) {
                return;
            }
            for (AgvLocMast agvLocMast : agvLocMasts) {
                try{
                    autoMoveHandler.autoEmptyBack4(agvLocMast);
                } catch (Exception e){
                    log.error("库位号"+agvLocMast.getLocNo()+"空板自动回库 库位-接驳点  库位-吸塑车间,处理失败:===》异常原因:"+e.getMessage());
                }
            }
//        }
    }
    private boolean determineFloorConnection(Integer floor){
        try{
            List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().eq("floor", floor).like("dev_no", "DB_"));
            if (!agvBasDevps.isEmpty()){
                for (AgvBasDevp agvBasDevp:agvBasDevps){
                    if (agvBasDevp.getInEnable().equals("Y")){
                        return false;
                    }
                }
                return true;
            }
        }catch (Exception e){
            log.error("判断当前楼层接驳位是否全部关闭,异常"+e.getMessage());
        }
        return false;
    }
    /**
src/main/java/com/zy/asrs/task/AutoMoveTwoAndThreeGoOneScheduler.java
New file
@@ -0,0 +1,18 @@
package com.zy.asrs.task;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
// 自动移库
@Slf4j
@Component
public class AutoMoveTwoAndThreeGoOneScheduler {
    /**
     * 2、3楼转移到1楼任务执行
     */
//    @Scheduled(cron = "0/2 * * * * ? ")
    private void autoMove(){
    }
}
src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java
@@ -37,7 +37,7 @@
    /*
    定时遍历库存,生成自动补货单据
     */
    @Scheduled(cron = "0 */1 * * * ? ")
//    @Scheduled(cron = "0 */1 * * * ? ")
    public void createOrder(){
        if(!"Y".equals(Parameter.get().getAutoReplenishment())){
src/main/java/com/zy/asrs/task/CheckLocDetlExistScheduler.java
@@ -28,7 +28,7 @@
    private ConfigService configService;
    //每30分钟扫描一次
    @Scheduled(cron = "0 30 * * * ? ")
//    @Scheduled(cron = "0 30 * * * ? ")
    private void execute(){
        List<LocMast> locMasts = locMastService.selectLocDetlNotExist();
        if (locMasts.isEmpty()) {
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -54,196 +54,211 @@
    @Transactional
    public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) {
        int wrkNo = agvWrkMast.getWrkNo();
        String barcode = agvWrkMast.getBarcode();
        String orderNo = getOrderNoByWrkNo(wrkNo);
        String agvBasDevp = "";
        if (agvWrkMast.getIoType() > 100) {
            agvBasDevp = agvWrkMast.getLocNo();
        } else {
            agvBasDevp = agvWrkMast.getSourceLocNo();
        }
        //修改工作档状态为207.库存更新完成
        agvWrkMast.setWrkSts(207L);
        agvWrkMastService.updateById(agvWrkMast);
        // 空板入库 设置库位状态为D.空桶/空栈板
        String locSts = agvWrkMast.getIoType() == 10 ? "D" : "F";
        if (agvWrkMast.getIoType() == 10 || agvWrkMast.getIoType() == 109 || agvWrkMast.getIoType() == 111 ) {
            // 库位 -- 接驳位 / 库位
            if ((agvWrkMast.getIoType() == 109 || agvWrkMast.getIoType() == 111) && agvWrkMast.getLocNo().substring(0,2).equals("DB")) {
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
            // 接驳位 -- 库位
        try{
            int wrkNo = agvWrkMast.getWrkNo();
            String barcode = agvWrkMast.getBarcode();
            String orderNo = getOrderNoByWrkNo(wrkNo);
            String agvBasDevp = "";
            if (agvWrkMast.getIoType() > 100) {
                agvBasDevp = agvWrkMast.getLocNo();
            } else {
                agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
                agvBasDevp = agvWrkMast.getSourceLocNo();
            }
        } else {
            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
        }
        if (agvWrkMast.getIoType() != 111) {
            //生成AGV工作历史档
            agvWrkMastLogService.save(agvWrkMast);
            //生成AGV工作明细历史档
            agvWrkDetlLogService.save(wrkNo);
        }
        //类型为入库时
        if(agvWrkMast.getIoType() == 1){
            //更新目标库位明细
            log.info("更新目标库位明细 agvWrkMast.getLocNo(): " + agvWrkMast.getLocNo() + ", wrkNo: " + wrkNo);
            agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo);
            //生成入库通知历史档
            boolean save = agvWaitPakinLogService.save(barcode);
            //删除入库通知档
            log.info("删除入库通知档 supp_code: " + barcode);
            agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",barcode));
        }
        //类型为库位移转时
        if(agvWrkMast.getIoType() == 11 || agvWrkMast.getIoType() == 12){
            //更新库存明细
            agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo());
            //修改源库位状态为O
            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null);
        }
        //类型为库位移转时
        if(agvWrkMast.getIoType() == 108){
            //更新库存明细
            agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo());
            //修改源库位状态为O
            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0);
        }
        if(agvWrkMast.getIoType() == 109 || agvWrkMast.getIoType() == 111 || agvWrkMast.getIoType() == 112){
            // 接驳位 -- 库位
            if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) {
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0);
            // 库位 -- 接驳位 / 库位
            //修改工作档状态为207.库存更新完成
            agvWrkMast.setWrkSts(207L);
            agvWrkMastService.updateById(agvWrkMast);
            // 空板入库 设置库位状态为D.空桶/空栈板
            String locSts = agvWrkMast.getIoType() == 10 ? "D" : "F";
            if (agvWrkMast.getIoType() == 10 || agvWrkMast.getIoType() == 109 || agvWrkMast.getIoType() == 111 ) {
                // 库位 -- 接驳位 / 库位
                if ((agvWrkMast.getIoType() == 109 || agvWrkMast.getIoType() == 111) && agvWrkMast.getLocNo().substring(0,2).equals("DB")) {
                    agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
                    // 接驳位 -- 库位
                } else {
                    agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
                }
            } else {
                agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
            }
            if (agvWrkMast.getIoType() != 111) {
                //生成AGV工作历史档
                agvWrkMastLogService.save(agvWrkMast);
                //生成AGV工作明细历史档
                agvWrkDetlLogService.save(wrkNo);
            }
            //类型为入库时
            if(agvWrkMast.getIoType() == 1){
                //更新目标库位明细
                log.info("更新目标库位明细 agvWrkMast.getLocNo(): " + agvWrkMast.getLocNo() + ", wrkNo: " + wrkNo);
                agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo);
                //生成入库通知历史档
                boolean save = agvWaitPakinLogService.save(barcode);
                //删除入库通知档
                log.info("删除入库通知档 supp_code: " + barcode);
                agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",barcode));
            }
            //类型为库位移转时
            if(agvWrkMast.getIoType() == 11 || agvWrkMast.getIoType() == 12){
                //更新库存明细
                agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo());
                //修改源库位状态为O
                agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null);
            }
            //类型为库位移转时
            if(agvWrkMast.getIoType() == 108){
                //更新库存明细
                agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo());
                //修改源库位状态为O
                agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0);
            }
        }
        if(agvWrkMast.getIoType() == 113){
            // 接驳位 -- 库位
            if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) {
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0);
            if(agvWrkMast.getIoType() == 109 || agvWrkMast.getIoType() == 111 || agvWrkMast.getIoType() == 112){
                // 接驳位 -- 库位
                if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) {
                    agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0);
                    // 库位 -- 接驳位 / 库位
                } else {
                    //修改源库位状态为O
                    agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue(),"",(short)0);
                }
            }
            if(agvWrkMast.getIoType() == 113){
                // 接驳位 -- 库位
                if (agvWrkMast.getSourceLocNo().substring(0,2).equals("DB")) {
                    agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",(short)0);
                }
            }
            if (agvWrkMast.getIoType() == 58) {
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue());
            }
            if (agvWrkMast.getIoType() != 111) {
                //删除AGV工作档
                agvWrkMastService.deleteById(wrkNo);
                //删除AGV工作明细档
                agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
            }
            if(!isJSON(orderNo)){
                //检查订单是否已完成
                orderService.checkComplete(orderNo);
            }else{
                List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
                maps.forEach(map -> {
                    String o = map.get("orderNo").toString();
                    orderService.checkComplete(o);
                });
            }
            return SUCCESS;
        }catch (Exception e){
            log.error(""+e.getMessage());
        }
        if (agvWrkMast.getIoType() == 58) {
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",agvWrkMast.getWhsType().shortValue());
        }
        if (agvWrkMast.getIoType() != 111) {
            //删除AGV工作档
            agvWrkMastService.deleteById(wrkNo);
            //删除AGV工作明细档
            agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
        }
        if(!isJSON(orderNo)){
            //检查订单是否已完成
            orderService.checkComplete(orderNo);
        }else{
            List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
            maps.forEach(map -> {
                String o = map.get("orderNo").toString();
                orderService.checkComplete(o);
            });
        }
        return SUCCESS;
        return FAIL;
    }
    @Transactional
    public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) {
        int wrkNo = agvWrkMast.getWrkNo();
        String orderNo = getOrderNoByWrkNo(wrkNo);
        //修改工作档状态为207.库存更新完成
        agvWrkMast.setWrkSts(207L);
        agvWrkMastService.updateById(agvWrkMast);
        //修改源库位状态为O
        agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null);
        if(agvWrkMast.getIoType() == 101){
            //更新目标库位明细 101.出库 删除源库位库存明细
            agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo()));
            //生成空板入库任务
            Short containerType = Short.valueOf(agvWrkMast.getBarcode().substring(0, 2));
            try {
                agvWorkService.emptyPlateIn(agvWrkMast.getLocNo(),agvWrkMast.getBarcode(),containerType,9527L,true);
            }catch (Exception e){
                e.printStackTrace();
                log.error(e.getMessage());
        try{
            int wrkNo = agvWrkMast.getWrkNo();
            String orderNo = getOrderNoByWrkNo(wrkNo);
            //修改工作档状态为207.库存更新完成
            agvWrkMast.setWrkSts(207L);
            agvWrkMastService.updateById(agvWrkMast);
            //修改源库位状态为O
            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null);
            if(agvWrkMast.getIoType() == 101){
                //更新目标库位明细 101.出库 删除源库位库存明细
                agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo()));
                //生成空板入库任务
                Short containerType = Short.valueOf(agvWrkMast.getBarcode().substring(0, 2));
                try {
                    agvWorkService.emptyPlateIn(agvWrkMast.getLocNo(),agvWrkMast.getBarcode(),containerType,9527L,true);
                }catch (Exception e){
                    e.printStackTrace();
                    log.error(e.getMessage());
                }
            }
        }
        //生成AGV工作历史档
        agvWrkMastLogService.save(agvWrkMast);
        //生成AGV工作明细历史档
        agvWrkDetlLogService.save(wrkNo);
        //删除AGV工作档
        agvWrkMastService.deleteById(wrkNo);
        //删除AGV工作明细档
        agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
        if(!isJSON(orderNo)){
            //检查订单是否已完成
            orderService.checkComplete(orderNo);
        }else{
            List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
            maps.forEach(map -> {
                String o = map.get("orderNo").toString();
                orderService.checkComplete(o);
            });
            //生成AGV工作历史档
            agvWrkMastLogService.save(agvWrkMast);
            //生成AGV工作明细历史档
            agvWrkDetlLogService.save(wrkNo);
            //删除AGV工作档
            agvWrkMastService.deleteById(wrkNo);
            //删除AGV工作明细档
            agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
            if(!isJSON(orderNo)){
                //检查订单是否已完成
                orderService.checkComplete(orderNo);
            }else{
                List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
                maps.forEach(map -> {
                    String o = map.get("orderNo").toString();
                    orderService.checkComplete(o);
                });
            }
            return SUCCESS;
        }catch (Exception e){
            log.error(""+e.getMessage());
        }
        return SUCCESS;
        return FAIL;
    }
    @Transactional
    public ReturnT<String> completedCarryWrk2(AgvWrkMast agvWrkMast) {
        int wrkNo = agvWrkMast.getWrkNo();
        String orderNo = getOrderNoByWrkNo(wrkNo);
        String agvBasDevp = "";
        if (agvWrkMast.getIoType() > 100) {
            agvBasDevp = agvWrkMast.getLocNo();
        } else {
            agvBasDevp = agvWrkMast.getSourceLocNo();
        }
        //修改工作档状态为207.库存更新完成
        agvWrkMast.setWrkSts(207L);
        agvWrkMastService.updateById(agvWrkMast);
        //修改源库位状态为O
        agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null);
        if(agvWrkMast.getIoType() == 101){
            //更新目标库位明细 101.出库 删除源库位库存明细
            agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo()));
        }
        try{
            int wrkNo = agvWrkMast.getWrkNo();
            String orderNo = getOrderNoByWrkNo(wrkNo);
            String agvBasDevp = "";
            if (agvWrkMast.getIoType() > 100) {
                agvBasDevp = agvWrkMast.getLocNo();
            } else {
                agvBasDevp = agvWrkMast.getSourceLocNo();
            }
            //修改工作档状态为207.库存更新完成
            agvWrkMast.setWrkSts(207L);
            agvWrkMastService.updateById(agvWrkMast);
            //修改源库位状态为O
            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O","",null);
            if(agvWrkMast.getIoType() == 101){
                //更新目标库位明细 101.出库 删除源库位库存明细
                agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo()));
            }
        //生成AGV工作历史档
        agvWrkMastLogService.save(agvWrkMast);
        //生成AGV工作明细历史档
        agvWrkDetlLogService.save(wrkNo);
        //删除AGV工作档
        agvWrkMastService.deleteById(wrkNo);
        //删除AGV工作明细档
        agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
        if(!isJSON(orderNo)){
            //检查订单是否已完成
            orderService.checkComplete(orderNo);
        }else{
            List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
            maps.forEach(map -> {
                String o = map.get("orderNo").toString();
                orderService.checkComplete(o);
            });
            //生成AGV工作历史档
            agvWrkMastLogService.save(agvWrkMast);
            //生成AGV工作明细历史档
            agvWrkDetlLogService.save(wrkNo);
            //删除AGV工作档
            agvWrkMastService.deleteById(wrkNo);
            //删除AGV工作明细档
            agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
            if(!isJSON(orderNo)){
                //检查订单是否已完成
                orderService.checkComplete(orderNo);
            }else{
                List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
                maps.forEach(map -> {
                    String o = map.get("orderNo").toString();
                    orderService.checkComplete(o);
                });
            }
            return SUCCESS;
        }catch (Exception e){
            log.error(""+e.getMessage());
        }
        return SUCCESS;
        return FAIL;
    }
    @Transactional
@@ -265,7 +280,7 @@
            }
            return SUCCESS;
        }catch (Exception e){
            log.error(e.getMessage());
            log.error("修改AGV入库通知档状态入出状态为Y"+e.getMessage());
        }
        return FAIL;
    }
@@ -275,11 +290,16 @@
    public ReturnT<String> startAllcationIn(AgvWrkMast agvWrkMast) throws IOException {
        
        //下发任务
        int startWrkCode = agvWrkMastService.startAllcationIn(agvWrkMast);
        if(startWrkCode != 0){
            throw new CoolException("任务下发失败");
        try{
            int startWrkCode = agvWrkMastService.startAllcationIn(agvWrkMast);
            if(startWrkCode != 0){
                throw new CoolException("任务下发失败");
            }
            return SUCCESS;
        }catch (Exception e){
            log.error("任务下发失败"+e.getMessage());
        }
        return SUCCESS;
        return FAIL;
    }