自动化立体仓库 - WMS系统
#
野心家
2024-09-09 71c8b222a56c0f9d1a15c2e5717989598ada70d5
src/main/java/com/zy/asrs/task/handler/MoveLocHandler.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
@@ -59,133 +60,56 @@
    @Transactional
    public ReturnT<String> start() {
        //测试失败(NG)移库
        try {
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("loc_sts", "F")
                    .eq("pack_status", 4)//测试失败
                    .eq("row1", equipmentRow)
                    .eq("loc_type1", (short) 1)
                    .eq("fire_status",0)
            );
            if (!Cools.isEmpty(locMasts)){
                for (LocMast locMast:locMasts){
                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
                    if (Cools.isEmpty(locDetl)){
                        log.error("测试失败(NG)移库==>库存明细查询失败!库位号:"+locMast.getLocNo());
                        continue;
                    }
                    TestMast testMast = testMastService.selectOne(new EntityWrapper<TestMast>()
                            .eq("loc_no",locMast.getLocNo())
                            .eq("barcode",locDetl.getMatnr())
                            .eq("status",4)//完成测试
                    );
                    if (!Cools.isEmpty(testMast)){
                        if (testMast.getStatus()==4){
                            //移库开始,查询目标库位
                            LocMast targetLocNo = locMastService.queryFreeLocMast(2,(short)4);
                            if (Cools.isEmpty(targetLocNo)){
                                targetLocNo=locMastService.queryFreeLocMast(1,(short)4);
                            }
                            if (targetLocNo != null){
                                workService.locMove(locMast.getLocNo(),targetLocNo.getLocNo(),(long)Integer.parseInt("9935"));
                                //4.测试完成上报
                                CombParam combParam = new CombParam();
                                combParam.setPackNo(locDetl.getMatnr());
                                combParam.setLocNo(locMast.getLocNo());
                                combParam.setPackSts(2);
                                combParam.setStepSts(4);
                                combParam.setRequestTime(DateUtils.convert(new Date()));
                                new PostMesDataUtils().postMesData("MES系统",mesUrl,inpath,combParam);
                                return SUCCESS;
                            }else {
                                log.error("测试完成自动移库--->没有空库位!");
                            }
                        }else if (testMast.getStatus()!=4) {
                            log.error("测试状态异常,库位号为:" + testMast.getLocNo());
                        }
                    }else {
                        log.error("测试库位:"+locMast.getLocNo()+"所属测试档为空或者不状态为4");
                    }
                }
            }
        } catch (Exception e) {
            log.error(""+e);
//            e.printStackTrace();
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//            return FAIL.setMsg(e.getMessage());
        }
        //测试成功 出库、移库
        //测试成功,移库
        try {
            List<LocMast> locMasts2 = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("loc_sts", "F")
                    .eq("pack_status", 3)//测试完成
                    .eq("row1", equipmentRow)
                    .eq("loc_type1", (short) 1)
                    .eq("fire_status",0)
                    .eq("fire_status", 0)
            );
            if (!Cools.isEmpty(locMasts2)){
                for (LocMast locMast:locMasts2){
            if (!Cools.isEmpty(locMasts2)) {
                for (LocMast locMast : locMasts2) {
                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
                    if (Cools.isEmpty(locDetl)){
                        log.error("测试成功 出库、移库==>库存明细查询失败!库位号:"+locMast.getLocNo());
                    if (Cools.isEmpty(locDetl)) {
                        log.error("测试成功 出库、移库==>库存明细查询失败!库位号:" + locMast.getLocNo());
                        continue;
                    }
                    TestMast testMast = testMastService.selectOne(new EntityWrapper<TestMast>()
                            .eq("loc_no",locMast.getLocNo())
                            .eq("barcode",locDetl.getMatnr())
                            .eq("status",4)
                            .eq("loc_no", locMast.getLocNo())
                            .eq("barcode", locDetl.getMatnr())
                            .eq("status", 4)
                    );
                    boolean sign=false;
                    if (!Cools.isEmpty(testMast)){
                        if (testMast.getStatus()==4){
                            boolean signCrn1 = basCrnpService.checkSiteError(1, false);
                            if (!signCrn1){
                                log.error("测试完成自动移库--->1号堆垛机不可出库!");
                                break;
                            }
                    boolean sign = false;
                    if (!Cools.isEmpty(testMast)) {
                        if (testMast.getStatus() == 4) {
                            //移库开始,查询目标库位
                            LocMast targetLocNo = locMastService.queryFreeLocMast(4,(short)2);
                            if (Cools.isEmpty(targetLocNo)){
                                targetLocNo=locMastService.queryFreeLocMast(3,(short)2);
                            }
                            boolean signCrn2 = basCrnpService.checkSiteError(2, true);
                            if (!signCrn2){
                                targetLocNo = null;
                                log.error("测试完成自动移库--->2号堆垛机不可入库! 开始查找1号堆垛机");
                            }
                            if (targetLocNo != null){
                                //生成出库任务
                                if (outLoc(locMast)){
                                    sign=true;
                                }
                            }else {
                                signCrn1 = basCrnpService.checkSiteError(1, true);
                                if (!signCrn1){
                                    log.error("测试完成自动移库--->1号堆垛机不可入库!");
                                    break;
                                }
                                //3\4排满  向2排移库,查询目标库位
                                targetLocNo = locMastService.queryFreeLocMast(2,(short)2);
                                if (Cools.isEmpty(targetLocNo)){
                                    targetLocNo=locMastService.queryFreeLocMast(1,(short)2);
                                }
                                if (targetLocNo != null){
                                    workService.locMove(locMast.getLocNo(),targetLocNo.getLocNo(),(long)9935);
                                    sign=true;
                                }else {
                                    log.error("测试完成自动移库--->没有空库位!");
                            LocMast targetLocNo = locMastService.queryFreeLocMast(3, (short) 2);
                            if (Cools.isEmpty(targetLocNo)) {
                                targetLocNo = locMastService.queryFreeLocMast(2, (short) 2);
                                if (Cools.isEmpty(targetLocNo)) {
                                    targetLocNo = locMastService.queryFreeLocMast(1, (short) 2);
                                    if (Cools.isEmpty(targetLocNo)) {
                                        return FAIL.setMsg("没有中转库位");
                                    }
                                }
                            }
                        }else if (testMast.getStatus()!=4) {
                            if (targetLocNo != null) {
                                workService.locMove(locMast.getLocNo(), targetLocNo.getLocNo(), (long) 9935);
                                sign = true;
                            } else {
                                log.error("测试完成自动移库--->没有空库位!");
                            }
                        } else if (testMast.getStatus() != 4) {
                            log.error("测试状态异常,库位号为:" + testMast.getLocNo());
                        }
                    }else {
                        log.error("测试库位:"+locMast.getLocNo()+"所属测试档为空或者不状态为4");
                    } else {
                        log.error("测试库位:" + locMast.getLocNo() + "所属测试档为空或者不状态为4");
                    }
                    if (sign){
                    if (sign) {
                        //4.测试完成上报
                        CombParam combParam = new CombParam();
                        combParam.setPackNo(locDetl.getMatnr());
@@ -193,122 +117,297 @@
                        combParam.setPackSts(1);
                        combParam.setStepSts(4);
                        combParam.setRequestTime(DateUtils.convert(new Date()));
                        new PostMesDataUtils().postMesData("MES系统",mesUrl,inpath,combParam);
                        new PostMesDataUtils().postMesData("MES系统", mesUrl, inpath, combParam);
                        return SUCCESS;
                    }
                }
            }
        } catch (Exception e) {
            log.error(""+e);
//            e.printStackTrace();
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//            return FAIL.setMsg(e.getMessage());
            log.error("" + e);
        }
        //测试有空库位 移库
        try {
            List<LocMast> locMasts3 = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("loc_sts", "F")
                    .eq("pack_status", 0)
                    .eq("loc_type1", (short) 3)
                    .eq("fire_status",0)
                    .orderBy("io_time",true)
                    .eq("fire_status", 0)
                    .orderBy("io_time", true)
            );
            if (!Cools.isEmpty(locMasts3)){
                for (LocMast locMast:locMasts3){
            if (!Cools.isEmpty(locMasts3)) {
                for (LocMast locMast : locMasts3) {
                    boolean signCrn1 = basCrnpService.checkSiteError(1, true);
                    if (!signCrn1){
                    if (!signCrn1) {
                        log.error("向测试库位移库失败---->1号堆垛机不可用!");
                        break;
                    }
                    //移库开始,查询目标库位
                    LocMast targetLocNo = locMastService.queryFreeLocMast(equipmentRow,(short)1);
                    if (targetLocNo != null){
                        workService.locMove(locMast.getLocNo(),targetLocNo.getLocNo(),(long)9999);
                    }else {
                    LocMast targetLocNo = locMastService.queryFreeLocMast(equipmentRow, (short) 1);
                    if (targetLocNo != null) {
                        workService.locMove(locMast.getLocNo(), targetLocNo.getLocNo(), (long) 9999);
                    } else {
//                        log.error("向测试库位移库失败--->等待空库位!");
                    }
                }
            }
        } catch (Exception e) {
            log.error(""+e);
//            e.printStackTrace();
//            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//            return FAIL.setMsg(e.getMessage());
            log.error("" + e);
        }
        return SUCCESS;
    }
    public boolean outLoc(LocMast locMast){
        try {
            Date now = new Date();
            Integer ioType = 101;   //入出库类型
            LocDetl locDetl=locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no",locMast.getLocNo()));
            if (Cools.isEmpty(locDetl)){
                log.error("库位:"+locMast.getLocNo()+"没有明细");
            } else if (Cools.isEmpty(locDetl.getDeadWarn())){
                log.error("库位:"+locMast.getLocNo()+"没有静置时间");
            } else if (Cools.isEmpty(locMast.getModiTime())){
                log.error("库位:"+locMast.getLocNo()+"modiTime为空");
            } else if (Cools.isEmpty(locMast.getBarcode())){
                log.error("库位:"+locMast.getLocNo()+"托盘码为空");
            } else {
                // 生成工作号
                int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
                // 生成工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
                wrkMast.setIoType(ioType); // 入出库状态
                wrkMast.setIoPri(13D); // 优先级:13
                wrkMast.setCrnNo(1);
                wrkMast.setSourceStaNo(203); // 源站
                wrkMast.setStaNo(206); // 目标站  2号堆垛机入库站
                wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
                wrkMast.setFullPlt("Y"); // 满板:Y
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("N"); // 空板
                wrkMast.setLinkMis("N");
                wrkMast.setBarcode(locMast.getBarcode());
                wrkMast.setAppeTime(now);
                wrkMast.setModiTime(now);
                if (!wrkMastService.insert(wrkMast)) {
                    log.error("保存工作档失败,出库库位号:"+locMast.getLocNo());
                    return false;
                }
                // 生成工作档明细
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(locDetl);
                wrkDetl.setWrkNo(workNo);
                wrkDetl.setIoTime(now);
                wrkDetl.setAnfme(1.0); // 数量
                wrkDetl.setAppeTime(now);
                wrkDetl.setModiTime(now);
                if (!wrkDetlService.insert(wrkDetl)) {
                    log.error("保存工作档明细失败");
                    return false;
                }
                // 修改库位状态:   F.在库 ====>>> R.出库预约
                if (locMast.getLocSts().equals("F")) {
                    locMast.setLocSts("R");
                    locMast.setModiTime(now);
//                    locMast.setPackStatus(5); //5:开始静置
                    if (!locMastService.updateById(locMast)) {
                        log.error("预约库位状态失败,库位号:"+locMast.getLocNo());
                        return false;
                    }else {
                        return true;
                    }
                } else {
                    log.error(locMast.getLocNo() + "库位不是在库状态");
                }
            }
            return false;
        } catch (Exception e) {
            return false;
        }
    }
//    @Transactional
//    public ReturnT<String> start() {
//        //测试失败(NG)移库
//        try {
//            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
//                    .eq("loc_sts", "F")
//                    .eq("pack_status", 4)//测试失败
//                    .eq("row1", equipmentRow)
//                    .eq("loc_type1", (short) 1)
//                    .eq("fire_status", 0)
//            );
//            if (!Cools.isEmpty(locMasts)) {
//                for (LocMast locMast : locMasts) {
//                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
//                    if (Cools.isEmpty(locDetl)) {
//                        log.error("测试失败(NG)移库==>库存明细查询失败!库位号:" + locMast.getLocNo());
//                        continue;
//                    }
//                    TestMast testMast = testMastService.selectOne(new EntityWrapper<TestMast>()
//                            .eq("loc_no", locMast.getLocNo())
//                            .eq("barcode", locDetl.getMatnr())
//                            .eq("status", 4)//完成测试
//                    );
//                    if (!Cools.isEmpty(testMast)) {
//                        if (testMast.getStatus() == 4) {
//                            //移库开始,查询目标库位
//                            LocMast targetLocNo = locMastService.queryFreeLocMast(2, (short) 4);
//                            if (Cools.isEmpty(targetLocNo)) {
//                                targetLocNo = locMastService.queryFreeLocMast(1, (short) 4);
//                            }
//                            if (targetLocNo != null) {
//                                workService.locMove(locMast.getLocNo(), targetLocNo.getLocNo(), (long) Integer.parseInt("9935"));
//                                //4.测试完成上报
//                                CombParam combParam = new CombParam();
//                                combParam.setPackNo(locDetl.getMatnr());
//                                combParam.setLocNo(locMast.getLocNo());
//                                combParam.setPackSts(2);
//                                combParam.setStepSts(4);
//                                combParam.setRequestTime(DateUtils.convert(new Date()));
//                                new PostMesDataUtils().postMesData("MES系统", mesUrl, inpath, combParam);
//                                return SUCCESS;
//                            } else {
//                                log.error("测试完成自动移库--->没有空库位!");
//                            }
//                        } else if (testMast.getStatus() != 4) {
//                            log.error("测试状态异常,库位号为:" + testMast.getLocNo());
//                        }
//                    } else {
//                        log.error("测试库位:" + locMast.getLocNo() + "所属测试档为空或者不状态为4");
//                    }
//                }
//            }
//        } catch (Exception e) {
//            log.error("" + e);
////            e.printStackTrace();
////            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
////            return FAIL.setMsg(e.getMessage());
//        }
//
//        //测试成功 出库、移库
//        try {
//            List<LocMast> locMasts2 = locMastService.selectList(new EntityWrapper<LocMast>()
//                    .eq("loc_sts", "F")
//                    .eq("pack_status", 3)//测试完成
//                    .eq("row1", equipmentRow)
//                    .eq("loc_type1", (short) 1)
//                    .eq("fire_status", 0)
//            );
//            if (!Cools.isEmpty(locMasts2)) {
//                for (LocMast locMast : locMasts2) {
//                    LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
//                    if (Cools.isEmpty(locDetl)) {
//                        log.error("测试成功 出库、移库==>库存明细查询失败!库位号:" + locMast.getLocNo());
//                        continue;
//                    }
//                    TestMast testMast = testMastService.selectOne(new EntityWrapper<TestMast>()
//                            .eq("loc_no", locMast.getLocNo())
//                            .eq("barcode", locDetl.getMatnr())
//                            .eq("status", 4)
//                    );
//                    boolean sign = false;
//                    if (!Cools.isEmpty(testMast)) {
//                        if (testMast.getStatus() == 4) {
//                            boolean signCrn1 = basCrnpService.checkSiteError(1, false);
//                            if (!signCrn1) {
//                                log.error("测试完成自动移库--->1号堆垛机不可出库!");
//                                break;
//                            }
//                            //移库开始,查询目标库位
//                            LocMast targetLocNo = locMastService.queryFreeLocMast(4, (short) 2);
//                            if (Cools.isEmpty(targetLocNo)) {
//                                targetLocNo = locMastService.queryFreeLocMast(3, (short) 2);
//                            }
//                            boolean signCrn2 = basCrnpService.checkSiteError(2, true);
//                            if (!signCrn2) {
//                                targetLocNo = null;
//                                log.error("测试完成自动移库--->2号堆垛机不可入库! 开始查找1号堆垛机");
//                            }
//                            if (targetLocNo != null) {
//                                //生成出库任务
//                                if (outLoc(locMast)) {
//                                    sign = true;
//                                }
//                            } else {
//                                signCrn1 = basCrnpService.checkSiteError(1, true);
//                                if (!signCrn1) {
//                                    log.error("测试完成自动移库--->1号堆垛机不可入库!");
//                                    break;
//                                }
//                                //3\4排满  向2排移库,查询目标库位
//                                targetLocNo = locMastService.queryFreeLocMast(2, (short) 2);
//                                if (Cools.isEmpty(targetLocNo)) {
//                                    targetLocNo = locMastService.queryFreeLocMast(1, (short) 2);
//                                }
//                                if (targetLocNo != null) {
//                                    workService.locMove(locMast.getLocNo(), targetLocNo.getLocNo(), (long) 9935);
//                                    sign = true;
//                                } else {
//                                    log.error("测试完成自动移库--->没有空库位!");
//                                }
//                            }
//                        } else if (testMast.getStatus() != 4) {
//                            log.error("测试状态异常,库位号为:" + testMast.getLocNo());
//                        }
//
//                    } else {
//                        log.error("测试库位:" + locMast.getLocNo() + "所属测试档为空或者不状态为4");
//                    }
//                    if (sign) {
//                        //4.测试完成上报
//                        CombParam combParam = new CombParam();
//                        combParam.setPackNo(locDetl.getMatnr());
//                        combParam.setLocNo(locMast.getLocNo());
//                        combParam.setPackSts(1);
//                        combParam.setStepSts(4);
//                        combParam.setRequestTime(DateUtils.convert(new Date()));
//                        new PostMesDataUtils().postMesData("MES系统", mesUrl, inpath, combParam);
//                        return SUCCESS;
//                    }
//                }
//            }
//        } catch (Exception e) {
//            log.error("" + e);
////            e.printStackTrace();
////            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
////            return FAIL.setMsg(e.getMessage());
//        }
//
//        //测试有空库位 移库
//        try {
//            List<LocMast> locMasts3 = locMastService.selectList(new EntityWrapper<LocMast>()
//                    .eq("loc_sts", "F")
//                    .eq("pack_status", 0)
//                    .eq("loc_type1", (short) 3)
//                    .eq("fire_status", 0)
//                    .orderBy("io_time", true)
//            );
//            if (!Cools.isEmpty(locMasts3)) {
//                for (LocMast locMast : locMasts3) {
//                    boolean signCrn1 = basCrnpService.checkSiteError(1, true);
//                    if (!signCrn1) {
//                        log.error("向测试库位移库失败---->1号堆垛机不可用!");
//                        break;
//                    }
//                    //移库开始,查询目标库位
//                    LocMast targetLocNo = locMastService.queryFreeLocMast(equipmentRow, (short) 1);
//                    if (targetLocNo != null) {
//                        workService.locMove(locMast.getLocNo(), targetLocNo.getLocNo(), (long) 9999);
//                    } else {
////                        log.error("向测试库位移库失败--->等待空库位!");
//                    }
//                }
//            }
//        } catch (Exception e) {
//            log.error("" + e);
////            e.printStackTrace();
////            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
////            return FAIL.setMsg(e.getMessage());
//        }
//        return SUCCESS;
//    }
//
//    public boolean outLoc(LocMast locMast) {
//        try {
//            Date now = new Date();
//            Integer ioType = 101;   //入出库类型
//            LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
//            if (Cools.isEmpty(locDetl)) {
//                log.error("库位:" + locMast.getLocNo() + "没有明细");
//            } else if (Cools.isEmpty(locDetl.getDeadWarn())) {
//                log.error("库位:" + locMast.getLocNo() + "没有静置时间");
//            } else if (Cools.isEmpty(locMast.getModiTime())) {
//                log.error("库位:" + locMast.getLocNo() + "modiTime为空");
//            } else if (Cools.isEmpty(locMast.getBarcode())) {
//                log.error("库位:" + locMast.getLocNo() + "托盘码为空");
//            } else {
//                // 生成工作号
//                int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
//                // 生成工作档
//                WrkMast wrkMast = new WrkMast();
//                wrkMast.setWrkNo(workNo);
//                wrkMast.setIoTime(now);
//                wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
//                wrkMast.setIoType(ioType); // 入出库状态
//                wrkMast.setIoPri(13D); // 优先级:13
//                wrkMast.setCrnNo(1);
//                wrkMast.setSourceStaNo(203); // 源站
//                wrkMast.setStaNo(206); // 目标站  2号堆垛机入库站
//                wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
//                wrkMast.setFullPlt("Y"); // 满板:Y
//                wrkMast.setPicking("N"); // 拣料
//                wrkMast.setExitMk("N"); // 退出
//                wrkMast.setEmptyMk("N"); // 空板
//                wrkMast.setLinkMis("N");
//                wrkMast.setBarcode(locMast.getBarcode());
//                wrkMast.setAppeTime(now);
//                wrkMast.setModiTime(now);
//                if (!wrkMastService.insert(wrkMast)) {
//                    log.error("保存工作档失败,出库库位号:" + locMast.getLocNo());
//                    return false;
//                }
//                // 生成工作档明细
//                WrkDetl wrkDetl = new WrkDetl();
//                wrkDetl.sync(locDetl);
//                wrkDetl.setWrkNo(workNo);
//                wrkDetl.setIoTime(now);
//                wrkDetl.setAnfme(1.0); // 数量
//                wrkDetl.setAppeTime(now);
//                wrkDetl.setModiTime(now);
//                if (!wrkDetlService.insert(wrkDetl)) {
//                    log.error("保存工作档明细失败");
//                    return false;
//                }
//                // 修改库位状态:   F.在库 ====>>> R.出库预约
//                if (locMast.getLocSts().equals("F")) {
//                    locMast.setLocSts("R");
//                    locMast.setModiTime(now);
////                    locMast.setPackStatus(5); //5:开始静置
//                    if (!locMastService.updateById(locMast)) {
//                        log.error("预约库位状态失败,库位号:" + locMast.getLocNo());
//                        return false;
//                    } else {
//                        return true;
//                    }
//                } else {
//                    log.error(locMast.getLocNo() + "库位不是在库状态");
//                }
//            }
//            return false;
//        } catch (Exception e) {
//            return false;
//        }
//    }
}