#
1
2 天以前 b3280d431ea42f46afe020782b677b11d504be31
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -314,7 +314,7 @@
                    }
                    WrkMast checkPick = wrkMastService.selectOne(new EntityWrapper<WrkMast>()
                            .eq("barcode", barcode)
                            .in("io_type", 107,103,57));
                            .in("io_type", 107,103,57,53));
                    if (!Cools.isEmpty(checkPick)) {
                        continue;
                    }
@@ -537,6 +537,44 @@
//                if (devpThread.ioMode != IoModeType.PAKIN_MODE) { continue; }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) {
                    // 判断重复工作档
                    WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1(pickSta.getStaNo(), barcode);
                    if (wrkMast1 != null) {
                        int wrkNo1 = basDevpService.selectCount(new EntityWrapper<BasDevp>().eq("wrk_no", wrkMast1.getWrkNo()));
                        if (wrkNo1 != 0){
                            News.error(barcode + "条码已存在状态为( 2.设备上走 )的数据,请查看WCS输送线界面,工作号={}", wrkMast1.getWrkNo());
                            StaProtocol staProtocolNew = new StaProtocol();
                            staProtocolNew.setWorkNo(wrkMast1.getWrkNo());
                            staProtocolNew.setStaNo(RouteUtils.SouStaEnd(wrkMast1.getStaNo(),wrkMast1.getSourceStaNo()));
                            staProtocolNew.setSiteId(staProtocol.getSiteId());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            staProtocolNew.setBarcode(barcode);
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocolNew));
                            if (ledThread != null) {
                                MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(3, barcode + "条码已存在状态为( 2.设备上走 )的任务,工作号="+ wrkMast1.getWrkNo()));
                            }
                            continue;
                        }
                        barcodeThread.setBarcode("");
                        staProtocol.setWorkNo(wrkMast1.getWrkNo());
                        staProtocol.setStaNo(RouteUtils.SouStaEnd(null,wrkMast1.getSourceStaNo()));
                        staProtocol.setBarcode(barcode);
                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        log.info("输送线下发(存在设备上走的工作档,直接下发!)):"+wrkMast1.getWrkNo()+","+wrkMast1.getStaNo());
                        ledThread.errorReset();
                        log.info("组托请求后LED错误清除");
                        if (!result) {
                            News.error( ":更新plc站点信息失败");
                            log.error("输送线下发(存在设备上走的工作档,直接下发!)==>更新plc站点信息失败");
                            continue;
                        }
                        continue;
                    }
                    News.warnNoLog(""+mark+" - 0"+" - 开始执行");
                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue());
@@ -1184,7 +1222,7 @@
            //mark - 3 - ....
            this.locToLoc(crn, crnProtocol,mark);
            //预调度
//            this.crnRebackHp(crn, crnProtocol, crnThread);
            this.crnRebackHp(crn, crnProtocol, crnThread);
        }
//        News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成");
@@ -1202,6 +1240,9 @@
                    new EntityWrapper<BasCrnp>().eq("crn_no", crnProtocol.getCrnNo())
            );
            boolean result = true;
            if(crnProtocol.getCrnNo() == 3){
                return;
            }
            for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
@@ -1541,14 +1582,14 @@
                // 判断堆垛机出库站状态
//                     if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
//                        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) {
                if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && !staProtocol.isLoading()
                boolean unLoading = !staProtocol.isLoading();
                Config configAGVAUTOIN = configService.selectConfigByCode("COB");
                if(Boolean.parseBoolean(configAGVAUTOIN.getValue())){
                    unLoading = true;
                }
                if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && unLoading
                        ) {
//                    if (slave.getId() == 1 || slave.getId() == 2){
//                        if (staProtocol.isLoading() || staProtocol.getWorkNo() != 0 || !staProtocol.isOutEnable()){
//                            continue;
//                        }
//                    }
//
                    // 命令下发区 --------------------------------------------------------------------------
                    // 堆垛机控制过滤
@@ -4118,6 +4159,9 @@
                log.error("{}号RGV尚未在数据库进行维护!4", slave.getId());
                continue;
            }
            if(staProtocol == null){
                continue;
            }
            if(staProtocol.getWorkNo() == 0){
                continue;
            }
@@ -4670,15 +4714,15 @@
                targetPosition = wrkMastSta.getStaEnd();
                typeNo = "3";
            }
            Date now = new Date();
            BasRgvOpt basRgvOpt = basRgvOptService.getBasRgvOpt(rgvId);
            // 防止重复下发命令
            if (basRgvOpt != null) {
                if (typeNo.equals(basRgvOpt.getMode()) && basRgvOpt.getPosSta().equals(wrkMastSta.getWorkSta())) {
                if (basRgvOpt.getMode().equals(typeNo) && basRgvOpt.getPosSta().equals(wrkMastSta.getWorkSta())) {
                    // 如果最新记录的 mode 和 posSta 与当前命令相同,认为是重复命令
                    log.error("命令重复下发,当前命令与最新记录相同,任务不下发!");
                    return false;
                }
                log.info("rgv命令日志wrkNo={},posSta={},mode={}",wrkMastSta.getWrkNo(),basRgvOpt.getPosSta(),basRgvOpt.getMode());
            }
            rgvCommand.setTaskNo(Math.toIntExact(wrkMastSta.getWrkNo())); // 工位工作号
            rgvCommand.setTaskStatus(type); // 工位任务模式:  取货
@@ -4820,6 +4864,10 @@
     * arm任务完成自动组托
     * */
    public synchronized void  armMissionAccomplished1() {
        Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN");
        if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){
            return;
        }
        try{
            for (DevpSlave devp : slaveProperties.getDevp()) {
                // 遍历拣料入库口
@@ -4918,6 +4966,10 @@
     * arm任务完成自动组托
     * */
    public synchronized void  armMissionAccomplished2() {
        Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN");
        if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){
            return;
        }
        try{
            List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4));
            for (BasArm basArm : basArmList) {
@@ -5198,6 +5250,10 @@
     * arm任务下发
     * */
    public synchronized void armTaskAssignment2() {
        Config configAGVAUTOIN = configService.selectConfigByCode("AGVAUTOIN");
        if(!Boolean.parseBoolean(configAGVAUTOIN.getValue())){
            return;
        }
        try{
            List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>().gt("arm_no",4));
            for (BasArm basArm : basArmList) {
@@ -5353,7 +5409,7 @@
        // 遍历结果集,检查时间戳差值是否小于 5 分钟
        for (ApiLog apiLog : apiLogs) {
            long parseLong = Long.parseLong(apiLog.getTimestamp());
            if (new Date().getTime() - parseLong < 5 * 1000 * 60) {
            if (new Date().getTime() - parseLong < 30 * 1000 * 60) {
                // 如果找到符合条件的记录且时间差小于 5 分钟,则不保存新记录,直接返回
                return;
            }
@@ -5380,7 +5436,7 @@
        // 遍历结果集,检查时间戳差值是否小于 5 分钟
        for (ApiLog apiLog : apiLogs) {
            long parseLong = Long.parseLong(apiLog.getTimestamp());
            if (new Date().getTime() - parseLong < 5 * 1000 * 60) {
            if (new Date().getTime() - parseLong < 30 * 1000 * 60) {
                // 如果找到符合条件的记录且时间差小于 5 分钟,则不保存新记录,直接返回
                return;
            }
@@ -5532,7 +5588,7 @@
                    // 任务生成区 --------------------------------------------------------------------------
                    BasAgvMast basAgvMast = new BasAgvMast();
                    BasAgvWrkDetl basAgvWrkDetl = new BasAgvWrkDetl();
                    try {
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
@@ -5944,23 +6000,6 @@
                    if ((!Cools.isEmpty(staProtocol.getWorkNo()) && staProtocol.getWorkNo().equals(basAgvMast.getTaskNo())) || basAgvMast.getSourceStaNo().equals(2033)){
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                        if(basAgvMast.getFloorNo()==1) {
//                            WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo());
//                            AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam(basAgvMast);
//                            agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString());
//                            agvBindCtnrAndBinParam.setCtnrTyp("1");
//                            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataAgv("AGV容器绑定解绑", AgvConstant.AGV_URL, AgvConstant.AGV_CTNRANDBING, agvBindCtnrAndBinParam);
//                            if (resultBind.getCode()==200){
//                                //任务下发
//                                ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
//                                if (result.getCode()==200){
//                                    basAgvMast.setStatus(1);
//                                    basAgvMastService.updateById(basAgvMast);
//                                } else {
//                                    agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV任务下发失败", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
//                                }
//                            } else {
//                                agvTaskAssignmentCallApiLogSave(basAgvMast, "AGV容器绑定解绑", "任务号:"+basAgvMast.getTaskNo()+"任务信息下发失败!!!", false);
//                            }
                            //任务下发
                            ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                            if (result.getCode()==200){
@@ -5978,7 +6017,7 @@
                                    agvBindCtnrAndBinTwoParam.setPodcode(basAgvMast.getBarcode());
                                    agvBindCtnrAndBinTwoParam.setPositionCode(basAgvMast.getSourceStaNo().toString());
                                    agvBindCtnrAndBinTwoParam.setIndBind("1");;
                                    ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定解绑",
                                    ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定",
                                            AgvConstant.AGV_URL+"/"+AgvConstant.AGV_hikRpcService,AgvConstant.getAGVADAPTOR(2), agvBindCtnrAndBinTwoParam);
                                    if (resultBind.getCode()!=200){
                                        basAgvMast.setStatus(4);