#
野心家
2023-11-24 271bc9e0b596ff73e887bbd7389e90e71670668d
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -96,6 +96,8 @@
    @Value("${test.url}")
    private String testUrl;
    @Autowired
    private WrkMastService wrkMastService;
    /**
     * 组托
@@ -130,7 +132,7 @@
                } else {
                    staProtocol = staProtocol.clone();
                }
                staProtocol.setPakMk(true);
                //staProtocol.setPakMk(true);
//                // 入出库模式判断
//                if ( inSta.getStaNo()==180 && devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
                // 判断是否满足入库条件
@@ -208,17 +210,17 @@
                        } else if (jsonObject.getInteger("code").equals(700) && (!barcodeThread.getBarcode().equals("NG"))){
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            barcodeThread.setBarcode("");
                            staProtocol.setWorkNo((short)9998);
                            staProtocol.setWorkNo((short)9999);
                            staProtocol.setStaNo((short)201);
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            devpThread.setPakMk(staProtocol.getSiteId(), true);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            log.error("url:{};request:{};response:{}", wmsUrl+"/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                        }else {
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            barcodeThread.setBarcode("");
                            staProtocol.setWorkNo((short)9998);
                            staProtocol.setWorkNo((short)9999);
                            staProtocol.setStaNo((short)201);
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            devpThread.setPakMk(staProtocol.getSiteId(), true);
                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl+"/rpc/pakin/loc/v1", JSON.toJSONString(param), response);
                        }
@@ -500,7 +502,7 @@
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isAutoing() && (staProtocol.isLoading()||staProtocol.getSiteId()==109) && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                if (staProtocol.isAutoing() && (staProtocol.isLoading()||staProtocol.getSiteId()==1000) && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
                    // 查询工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
                    if (wrkMast == null) {
@@ -763,9 +765,11 @@
            crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列
            crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层\
            crnCommand.setBarcode(wrkMast.getBarcode());//托盘码
            log.error("768 堆垛机命令下发"+crnCommand);
            if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
                log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
            } else {
                log.error("772 堆垛机命令下发成功"+crnCommand);
//                long startTime = System.currentTimeMillis();
//                while ((System.currentTimeMillis() - startTime) < COMMAND_TIMEOUT) {
@@ -780,6 +784,7 @@
//                }
                // 修改工作档状态 2.设备上走 => 3.吊车入库中
                log.error("787 修改工作档状态2.设备上走 => 3.吊车入库中 "+wrkMast);
                Date now = new Date();
                wrkMast.setWrkSts(3L);
                wrkMast.setCrnStrTime(now);
@@ -787,6 +792,7 @@
                if (wrkMastMapper.updateById(wrkMast) == 0) {
                    log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo());
                }
                log.error("795 修改工作档状态成功2.设备上走 => 3.吊车入库中"+wrkMast);
            }
        }
    }
@@ -849,7 +855,7 @@
                if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() !=null && staDetl.getCanouting().equals("Y")
                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                    //测试库位出库必须要按启动按钮才能出库
                    if(wrkMast.getStaNo()==206 && locMast.getCtnKind()==0){
                    if((wrkMast.getStaNo()==206 || wrkMast.getStaNo()==1000)&& locMast.getCtnKind()==0){
                        log.error("出库 ===>> 等待启动出库按钮",wrkMast);
                        continue;
                    }
@@ -907,6 +913,7 @@
                        break;
//                        return;
                    }
                    // 1.堆垛机开始移动
                    CrnCommand crnCommand = new CrnCommand();
@@ -1060,10 +1067,23 @@
     * 库位移转
     */
    public void locToLoc(CrnSlave slave, CrnProtocol crnProtocol){
        log.info("开始移库任务程序");
        //获取所有移库任务
        List<WrkMast> wrkMasts=wrkMastMapper.selectLocMoves(slave.getId());
        // 获取工作档信息
        WrkMast wrkMast = wrkMastMapper.selectLocMove(slave.getId());
        if(Cools.isEmpty(wrkMasts)){
            return;
        }
        if (null == wrkMast) {
            return;
        }
        for (WrkMast wm: wrkMasts) {
            LocMast sourceSta1 = locMastService.selectById(wm.getSourceLocNo());
            if(sourceSta1.getCtnKind()==1){
                wrkMast=wm;
                break;
            }
        }
        // 获取源库位信息
        LocMast sourceSta = locMastService.selectById(wrkMast.getSourceLocNo());
@@ -1132,6 +1152,7 @@
                log.error("【库位移转】 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo());
            }
        }
        log.info("结束移库任务程序");
    }
@@ -2285,18 +2306,21 @@
    public void fierCrn() {
        try {
            for (CrnSlave crn :slaveProperties.getCrn()) {
                if(crn.getId()!=1){
                    continue;
                }
                // 获取堆垛机信息
                CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
                CrnProtocol crnProtocol = crnThread.getCrnProtocol();
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("fire_status", 1));
                if (!Cools.isEmpty(locMast)){
                    //报警信号写入1
                    if (!MessageQueue.offer(SlaveType.Crn, 1, new Task(4, "1"))) {
                    if (!MessageQueue.offer(SlaveType.Crn, 1, new Task(4, 1))) {
                        log.error("火警  ===>> 给堆垛机发送报警信号失败");
                    }
                } else {
                    //报警信号没有后,复位地址
                    if (!MessageQueue.offer(SlaveType.Crn, 1, new Task(4, "0"))) {
                    if (!MessageQueue.offer(SlaveType.Crn, 1, new Task(4, 0))) {
                        log.error("火警  ===>> 给堆垛机清零复位报警信号失败");
                    }
                }
@@ -2342,18 +2366,24 @@
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
                log.info("2363行程序开始运行");
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                if(null != devpThread){
                    for (int i = 0; i < 48; i++){
                        log.info("2367行程序开始运行,第"+i+"次");
                        boolean fig=false;
                        //查询在库和预约出库
                        LocMast locMast=locMastService.selectztgx("F","R",i);
                        if(!Cools.isEmpty(locMast)){
                            log.info("2372行程序开始运行,查询测试档");
                            TestMast testMast=testMastService.selectOne(new EntityWrapper<TestMast>()
                                    .eq("loc_no",locMast.getLocNo())
                                    .eq("user_id",locMast.getBarcode()));
                            if(Cools.isEmpty(testMast)){
                                log.info("2377行程序开始运行,测试档为空,跳过");
                                continue;
                            }
                            log.info("2380行程序开始运行,测试档不为空,下一步");
                            //devpThread.startSignal[i][0]
                            //0:空,1:启动中,2:工作中,3:自动暂停,4:正常完成(OK),5:异常停止(NG),6:在线,7:离线,8:空闲
@@ -2362,23 +2392,59 @@
                            //testMast.setStatus
                            //"状态 0: 待申请  1: 申请中  2: 已复核 3:测试中 4:完成 5:移库 6:火警"
                            if(devpThread.startSignal[i][0]==1){
                            if(devpThread.startSignal[i][0]==8){
                                log.info("2390行程序开始运行,修改测试档状态为 1、申请中,开始修改前:"+testMast);
                                testMast.setStatus(1);
                                locMast.setPackStatus(1);
                                testMast.setModiTime(new Date());
                            }else if(devpThread.startSignal[i][0]==2){
                                log.info("2394行程序开始运行,修改测试档状态为 1、申请中,修改数据后、未更新"+testMast);
                            }else if(devpThread.startSignal[i][0]==2 && locMast.getPackStatus()!=2){
                                log.info("2396行程序开始运行,修改测试档状态为 3、测试中,开始修改前:"+testMast);
                                testMast.setStatus(3);
                                locMast.setPackStatus(2);
                                testMast.setModiTime(new Date());
                                log.info("2400,修改测试档状态为 3、测试中,修改数据后、未更新"+testMast);
                                //NG转OK需要还原源库位和目标库位状态,OK转NG 删除任务档
                                WrkMast wrkMast=wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                                        .eq("source_loc_no",locMast.getLocNo())
                                        .eq("wrk_sts",11));
                                log.info("2405,查询状态为生成出库id的测试完成(NG或OK)任务档,"+wrkMast);
                                if(!Cools.isEmpty(wrkMast)){
                                    if(wrkMast.getWrkSts()==11){
                                        if(wrkMast.getIoType()==11){
                                            log.info("2409,删除任务档为移库的,"+wrkMast);
                                            LocMast locMast1=locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no",wrkMast.getLocNo()));
                                            locMast1.setLocSts("O");
                                            locMastService.update(locMast1,new EntityWrapper<LocMast>().eq("loc_no",wrkMast.getLocNo()));
                                        }
                                        wrkMastMapper.deleteById(wrkMast);
                                        log.info("2415,删除工作档"+wrkMast);
                                        locMast.setLocSts("F");
                                        log.info("2417,删除工作档"+wrkMast);
                                        wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no",wrkMast.getWrkNo()));
                                        log.info("2419,删除工作明细"+wrkMast.getWrkNo());
                                        if(!locMastService.update(locMast,new EntityWrapper<LocMast>()
                                                .eq("channel",i+1))){
                                            log.error("2422修改测试库位状态失败"+locMast.getLocNo(),locMast);
                                        }else{
                                            log.error("2424"+locMast.getLocNo(),locMast);
                                            fig=true;
                                        }
                                    }
                                }
                            }else if(devpThread.startSignal[i][0]==3){
                                locMast.setPackStatus(7);
                                testMast.setModiTime(new Date());
                            }else if(devpThread.startSignal[i][0]==4){
                            }else if(devpThread.startSignal[i][0]==4 && testMast.getStatus()!=4&&locMast.getFireStatus()!=1&&testMast.getStatus()!=6){
                                locMast.setPackStatus(3);
                                testMast.setStatus(4);
                                testMast.setModiTime(new Date());
                            }else if(devpThread.startSignal[i][0]==5){
                                testMastService.insertPackQualified(true,new Date(),testMast.getBarcode());
                            }else if(devpThread.startSignal[i][0]==5 && testMast.getStatus()!=4&&locMast.getFireStatus()!=1&&testMast.getStatus()!=6){
                                locMast.setPackStatus(4);
                                testMast.setStatus(4);
                                testMast.setModiTime(new Date());
                                testMastService.insertPackQualified(false,new Date(),testMast.getBarcode());
                            }
//                            else if(devpThread.startSignal[i][0]==6||devpThread.startSignal[i][0]==7||devpThread.startSignal[i][0]==8){
//                                locMast.setPackStatus(devpThread.startSignal[i][0]+3);
@@ -2392,10 +2458,12 @@
                                    log.error("修改启动按钮状态,测试库位状态失败"+locMast.getLocNo(),locMast);
                                }
                            }else if(!locMast.getLocSts().equals("R")){
                                if(!locMastService.update(locMast,new EntityWrapper<LocMast>()
                                        .eq("loc_sts","F")
                                        .eq("channel",i+1))){
                                    log.error("修改测试库位状态失败"+locMast.getLocNo(),locMast);
                                if(!fig){
                                    if(!locMastService.update(locMast,new EntityWrapper<LocMast>()
                                            .eq("loc_sts","F")
                                            .eq("channel",i+1))){
                                        log.error("修改测试库位状态失败"+locMast.getLocNo(),locMast);
                                    }
                                }
                                if(!testMastService.update(testMast,new EntityWrapper<TestMast>()
                                        .eq("loc_no",locMast.getLocNo())
@@ -2405,12 +2473,18 @@
                            }
                        }
                    }
                    //当充放电库位为O空库位时
                    //库位状态改为8空闲
                    //给PLC写消防信号
                    for (int i=0;i<48;i++){
                        LocMast locMast=locMastService.selectOne(new EntityWrapper<LocMast>().eq("channel",i+1));
                        TestMast testMast=testMastService.selectOne(new EntityWrapper<TestMast>()
                                .eq("loc_no",locMast.getLocNo())
                                .eq("user_id",locMast.getBarcode()));
                        if((locMast.getLocSts().equals("O")||locMast.getLocSts().equals("S"))&&devpThread.startSignal[i][0]!=8){
                            Thread.sleep(1000);
                            MessageQueue.offer(SlaveType.Devp, 1, new Task(6,locMast.getChannel()-1));
                        }
                        try{
                            if(locMast.getFireStatus()!=devpThread.startSignal[i][1]){
                                messageQueueOffer2(i,(short)((int)locMast.getFireStatus()),SlaveType.Devp, devp.getId());
@@ -2431,6 +2505,8 @@
                        }
                    }
                }
            }