1
5 天以前 a84e04a54fa499bcff8c9806df5c15e09ce3c504
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -4,9 +4,7 @@
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.AgvTaskAssignmentParam;
@@ -1081,7 +1079,7 @@
            //mark - 3 - ....
            this.locToLoc(crn, crnProtocol,mark);
            //预调度
//            this.crnRebackHp(crnProtocol, crnThread);
            this.crnRebackHp(crnProtocol, crnThread);
        }
//        News.infoNoLog(""+mark+" - 0"+" - 堆垛机入出库作业下发执行完成");
@@ -1097,11 +1095,11 @@
            }
            int x=1;
            switch (crnProtocol.getCrnNo()){
                case 1: x =1; break;
                case 2: x =3; break;
                case 3: x =5; break;
                case 4: x =7; break;
                case 5: x =9; break;
                case 1: x =2; break;
                case 2: x =6; break;
                case 3: x =11; break;
                case 4: x =14; break;
                case 5: x =18; break;
            }
            // 已经存在吊车执行任务时,则过滤3,12
@@ -1126,7 +1124,7 @@
            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
            crnCommand.setTaskMode(CrnTaskModeType.X_MOVE); // 任务模式:  回原点
            crnCommand.setSourcePosX((short) x);     // 源库位排
            crnCommand.setSourcePosY((short) 1);     // 源库位列
            crnCommand.setSourcePosY((short) 52);     // 源库位列
            crnCommand.setSourcePosZ((short) 1);     // 源库位层
            crnCommand.setDestinationPosX((short) 0);     // 目标库位排
            crnCommand.setDestinationPosY((short) 0);     // 目标库位列
@@ -1902,31 +1900,33 @@
                    News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                    crnThread.setResetFlag(true);
                }
            } else if (crnProtocol.getTaskNo() == 9996) {//盘点入库衔接
                //  状态:等待确认 并且  任务完成位 = 1
                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo());
                    // 获取入库待确认工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
                    // 入库 + 库位转移  ==> 4.入库完成
                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
                        wrkMast.setWrkSts(4L);
                    } else {
                        continue;
                    }
                    Date now = new Date();
                    wrkMast.setCrnEndTime(now);
                    wrkMast.setModiTime(now);
                    // 修改成功后复位堆垛机
                    if (wrkMastMapper.updateById(wrkMast) > 0) {
                        // 堆垛机复位
                        log.error(wrkMast.getWrkNo() + "任务修改状态4成功,复位堆垛机={}", crnThread.getCrnProtocol().getCrnNo());
                        News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
                        crnThread.setResetFlag(true);
                    }
                }
            }else{
            }
//            else if (crnProtocol.getTaskNo() == 9996) {//盘点入库衔接
//                //  状态:等待确认 并且  任务完成位 = 1
//                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
//                    News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo());
//
//                    // 获取入库待确认工作档
//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
//                    // 入库 + 库位转移  ==> 4.入库完成
//                    if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
//                        wrkMast.setWrkSts(4L);
//                    } else {
//                        continue;
//                    }
//                    Date now = new Date();
//                    wrkMast.setCrnEndTime(now);
//                    wrkMast.setModiTime(now);
//                    // 修改成功后复位堆垛机
//                    if (wrkMastMapper.updateById(wrkMast) > 0) {
//                        // 堆垛机复位
//                        log.error(wrkMast.getWrkNo() + "任务修改状态4成功,复位堆垛机={}", crnThread.getCrnProtocol().getCrnNo());
//                        News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo());
//                        crnThread.setResetFlag(true);
//                    }
//                }
//            }
            else{
                //  状态:等待确认 并且  任务完成位 = 1
                if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
                    News.warnNoLog("" + mark + " - 0" + " - 开始执行对工作档的完成操作,任务号:" + crnProtocol.getTaskNo());
@@ -2220,7 +2220,12 @@
                }
                // 获取工作档数据
                WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
                if (null == wrkMast) { continue; }
                if (null == wrkMast) {
                    if(staProtocol.getWorkNo() > 9999){ //异常退出
                        MessageQueue.offer(SlaveType.Led, 2, new Task(3, "异常退出"));
                    }
                    continue;
                }
                wrkMasts.add(wrkMast);
                // 组装命令
                LedCommand ledCommand = new LedCommand();
@@ -2270,13 +2275,13 @@
                            total = locDetl.getAnfme();
                        }
                        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                        }
                        if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                        }
                        if (wrkMast.getIoType() == 107) {
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total));
                            ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getOrderNo(), wrkDetl.getSupp(), wrkDetl.getSku(),wrkDetl.getAnfme(),total));
                        }
                    });
                }
@@ -3324,7 +3329,7 @@
                        continue;
                    }
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号
                    basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
                    Integer workNo = 0;
                    if(rgvProtocol.getTaskNo2() > 9999|| rgvProtocol.getTaskNo1() > 9999){
                        workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1() : rgvProtocol.getTaskNo2();
@@ -3390,7 +3395,7 @@
                        continue;
                    }
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号
                    basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
                    Integer workNo = 0;
                    if(basRgv.getPakToCrn().equals("1")){
                        workNo = rgvProtocol.getTaskNo1() !=0 ? rgvProtocol.getTaskNo1():rgvProtocol.getTaskNo2();  //正常情况出库放货优先工位1放
@@ -3486,6 +3491,11 @@
                basRgvService.updateById(basRgv);
                rgvThread.setPakMk(true);
            }
            List<WrkMastSta> wrkMastStaPakingNum = wrkMastStaService.selectPakingWrkNum(basRgv.getRgvNo());
            if(wrkMastStaPakingNum.size() <1){
                basRgv.setPakAll("1"); //防止无其他任务时,连续取货无法恢复
                basRgvService.updateById(basRgv);
            }
        }
    }
@@ -3515,6 +3525,7 @@
                basRgv.setPakAll("1");
                basRgvService.updateById(basRgv);
            }
            // 只有当RGV空闲 并且 无任务时才继续执行
            if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE &&
                    rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk()
@@ -3557,58 +3568,14 @@
            WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWorkSta(1, (int) rgvProtocol.getRgvNo());
            if(wrkMastSta1 != null && wrkMastSta2 != null){
                rgvThread.setPakMk(false);  //小车双工位锁定
            }
//            if(basRgv.getPakToCrn().equals("0")){
//                rgvRunWrkToCrn(rgv, rgvProtocol,mark); //若小车取到一个接驳任务,第二个工位只能取接驳任务
//            }
//            if(rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getTaskNo1() == 0 && rgvThread.isPakIn() && rgvThread.isPakRgv()){
//                rgvPreScheduling();//若暂无下发任务预调度提前到取货点
//            }
//            if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE && rgvProtocol.getModeType() == RgvModeType.AUTO) {
//                //小车执行放货任务
//                rgvOutExecute();
//
//            }
        }
    }
    public synchronized void rgvRunWrkMastInTest(){
        BasRgvMap basRgvMap = basRgvMapMapper.selectById(1);
        List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());
        basRgvMap.setNowRoute(1021); //更新小车当前位置站点号
        WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(342);//根据站点工作号和小车工作范围检索任务档
//        WrkMastSta wrkMastSta2 = wrkMastStaMapper.selectByWorkSta(2, 1);
        boolean result = false;
//        if(wrkMastSta2 != null && rgvProtocol.getRgvNo() == 1){ //距离计算   2楼单入库口不需要计算
//            result = rgvCalcDistance((int) rgvProtocol.getRgvNo(),wrkMastSta2.getStaEnd(),wrkMastSta.getStaStart());//工位2放货站点,工位1取货站点
//        }
//        if(result){//若小车距离放货点距离近于取货点则跳过取货 true跳过取货/false优先取货
//            rgvThread.setPakRgv(false);
//            continue;
//        }
        wrkMastSta.setWorkSta(1);
        wrkMastSta.setRgvNo(1);
        wrkMastSta.setStaStart(1035);
        Short direction = 2;//双工位最终抵达位置
        boolean sign = false;
//        sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta,direction,); //命令下发
        if (sign){
            wrkMastSta.setWrkSts(1);
            try{
                wrkMastStaMapper.updateById(wrkMastSta);
                log.error("更新小车任务成功");
            }catch (Exception e){
                log.error("更新小车任务失败");
            }
//            rgvThread.setPakOut(false);//出库不允许
            boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(),"2526");
            if (!signMap){
                log.error("货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo());
            }
        } else {
            log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo());
        }
    }
    /**
@@ -3679,7 +3646,7 @@
                case 1: route = RouteUtils.getRouteOne();break;
                case 2: route = RouteUtils.getRouteTwo();break;
            }
            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMapService.updateById(basRgvMap);
            WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档
            if( null == wrkMastSta ) {
@@ -3709,7 +3676,7 @@
                if(wrkMastSta3 != null ){
                    List<WrkMastSta> wrkMastStaPaking = wrkMastStaService.selectPakingWrk(wrkMastSta3.getStaStart());
                    if(wrkMastStaPaking.size() < 1){//已有标记不再标记
                    if(wrkMastStaPaking.size() < 1 ){//已有标记不再标记
                        wrkMastSta3.setMk(1);
                        basRgv.setPakAll("0");
                        basRgvService.updateById(basRgv);
@@ -3805,7 +3772,7 @@
                case 1: route = RouteUtils.getRouteOne();break;
                case 2: route = RouteUtils.getRouteTwo();break;
            }
            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMapService.updateById(basRgvMap);
            WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档
            if( null == wrkMastSta ) {
@@ -3814,7 +3781,7 @@
            }
            WrkMastSta wrkMastSta1 = wrkMastStaMapper.selectByWrkNo( rgvProtocol.getTaskNo1());
            if(basRgv.getPakToCrn().equals("0")){
                wrkMastSta = wrkMastStaMapper.selectNoInterfereCrn(route, route, Long.valueOf(staProtocol.getWorkNo()));
                wrkMastSta = wrkMastStaMapper.selectNoInterfereCrn(route, route, Long.valueOf(staProtocol.getWorkNo()));//处理接驳任务时,连续只取接驳任务
            }
            boolean result = false;
            if(wrkMastSta1!= null && rgvProtocol.getRgvNo() == 1){ //距离计算   2楼单入库口不需要计算
@@ -3940,7 +3907,7 @@
                case 1: route = RouteUtils.getRouteOne();break;
                case 2: route = RouteUtils.getRouteTwo();break;
            }
            basRgvMap.setNowRoute(rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMap.setNowRoute(rgvProtocol.getRgvNo() == 1?rgvProtocol.getRgvPosI1():rgvProtocol.getRgvPosI2()); //更新小车当前位置站点号
            basRgvMapService.updateById(basRgvMap);
            WrkMastSta wrkMastSta = wrkMastStaMapper.selectNoInterfere(route, route, Long.valueOf(staProtocol.getWorkNo()));//根据站点工作号和小车工作范围检索任务档
            if( null == wrkMastSta ) {
@@ -4538,9 +4505,20 @@
                                                .eq("status", 2)
                                                .eq("binding_tags", basArmMast.getBindingTags())
                                );
                                if (binding_tags<2){
                                    armTaskAssignmentCallApiLogSave(staProtocol, "条码数据已存在!!!", staProtocol.getSiteId()+"码垛位置,条码数据正在自动组托===>>" + barcode, false);
                                    continue;
                                    BasArmMast basArmMastOne = basArmMastService.selectOne(
                                            new EntityWrapper<BasArmMast>()
                                                    .eq("status", 2)
                                                    .eq("binding_tags", basArmMast.getBindingTags())
                                    );
                                    Double anfmeSignOne = basArmMastService.selectBasArmMastSignValue(basArmMastOne.getOrderNo(), basArmMastOne.getSku(),basArmMastOne.getBindingTags());
                                    if (anfmeSignOne>1D){
                                        armTaskAssignmentCallApiLogSave(staProtocol, "条码数据已存在!!!", staProtocol.getSiteId()+"码垛位置,条码数据正在自动组托===>>" + barcode, false);
                                        continue;
                                    }
                                }
                            }
                            OrderDetlValueResultUtil orderDetlValueResultUtil = basArmMastService.selectOrderDetlValue(basArmMast.getOrderNo(), basArmMast.getSku());
@@ -4591,8 +4569,9 @@
        }
    }
    public void armTaskAssignmentCallApiLogSave(StaProtocol staProtocol ,String tableName, String response, Boolean bool) {
        ApiLog apiLog = apiLogService.selectOne(new EntityWrapper<ApiLog>()
    public void armTaskAssignmentCallApiLogSave(StaProtocol staProtocol, String tableName, String response, Boolean bool) {
        // 查询符合条件的所有 ApiLog
        List<ApiLog> apiLogs = apiLogService.selectList(new EntityWrapper<ApiLog>()
                .eq("namespace", "机械臂任务相关")
                .eq("request", "站点号:" + staProtocol.getSiteId())
                .eq("response", response)
@@ -4602,16 +4581,189 @@
                .orderBy("create_time", false)
        );
        if (!Cools.isEmpty(apiLog)){
        // 遍历结果集,检查时间戳差值是否小于 5 分钟
        for (ApiLog apiLog : apiLogs) {
            long parseLong = Long.parseLong(apiLog.getTimestamp());
            if (new Date().getTime()-parseLong<5*1000*60){
            if (new Date().getTime() - parseLong < 5 * 1000 * 60) {
                // 如果找到符合条件的记录且时间差小于 5 分钟,则不保存新记录,直接返回
                return;
            }
        }
        // 如果没有符合条件的记录,或者所有记录时间差大于 5 分钟,保存新的日志
        apiLogService.save("机械臂任务相关", tableName, "null", staProtocol.getBarcode(),
                "站点号:" + staProtocol.getSiteId() ,
                "站点号:" + staProtocol.getSiteId(),
                response, bool);
    }
    /*
     * agv任务生成  Full
     * */
    public synchronized void agvTaskCreateFull() {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历出库口
            for (DevpSlave.Sta outStaAgv : devp.getOutStaAgvFull())  {
                // 获取入库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(outStaAgv.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                // 判断是否满足入库条件
                if (!staProtocol.isLoading()){
                    continue;
                }
                if (staProtocol.isAutoing() ) {
                    WrkMast wrkMast = wrkMastService.selectByWrkNo(staProtocol.getWorkNo());
                    if (Cools.isEmpty(wrkMast) || Cools.isEmpty(wrkMast.getTakeNone()) || !wrkMast.getTakeNone().equals("1")){
                        continue;
                    }
                    // 判断重复工作档
                    List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("task_no", staProtocol.getWorkNo()));
                    if (!basAgvMastList.isEmpty()) {
                        wrkMast.setTakeNone("2");
                        wrkMastMapper.updateById(wrkMast);
                        continue;
                    }
                    // 任务生成区 --------------------------------------------------------------------------
                    BasAgvMast basAgvMast = new BasAgvMast();
                    try {
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                        SearchLocParam param = new SearchLocParam();
                        param.setBarcode(wrkMast.getBarcode());
                        param.setIoType(1);
                        param.setSourceStaNo(outStaAgv.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
                        String response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath("/rpc/pakin/agv/loc/v1")
                                .setJson(JSON.toJSONString(param))
                                .build()
                                .doPost();
                        JSONObject jsonObject = JSON.parseObject(response);
                        if (jsonObject.getInteger("code").equals(200)) {
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            basAgvMast.setTaskNo(wrkMast.getWrkNo());
                            basAgvMast.setSourceStaNo(outStaAgv.getStaNo());
                            basAgvMast.setLocNo(dto.getLocNo());
                            basAgvMast.setSourceLocNo(wrkMast.getSourceLocNo());
                            basAgvMast.setDevpId(devp.getId());
                            basAgvMast.setIoType(2);
                            basAgvMastService.insert(basAgvMast);
                            wrkMast.setTakeNone("2");
                            wrkMastMapper.updateById(wrkMast);
                        } else {
                            News.error(JSON.toJSONString(staProtocol));
                        }
                    } catch (Exception e) {
                        News.error(JSON.toJSONString(e.getMessage()));
                    }
                }
            }
        }
    }
    /*
     * agv任务生成  Empty
     * */
    public synchronized void agvTaskCreateEmpty() {
        // 根据输送线plc遍历
        for (DevpSlave devp : slaveProperties.getDevp()) {
            // 遍历出库口
            for (DevpSlave.Sta outStaAgv : devp.getOutStaAgvEmpty())  {
                // 获取入库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(outStaAgv.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                // 判断是否满足入库条件
                if (!staProtocol.isLoading()){
                    continue;
                }
                String barcode = staProtocol.getBarcode();
                if(!Cools.isEmpty(barcode)) {
                    if("NG".endsWith(barcode) || "NoRead".equals(barcode)) {
                        News.info("{}号站点扫描器检测条码信息:{}", outStaAgv.getStaNo(), barcode);
                        continue;
                    }
                } else {
                    News.info("{}号站点扫描器检测条码信息:{}", outStaAgv.getStaNo(), barcode);
                    continue;
                }
                if (staProtocol.isAutoing()) {
                    // 判断重复工作档
                    List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("source_sta_no", outStaAgv.getStaNo()));
                    if (!basAgvMastList.isEmpty()) {
                        News.info("{}号站点存在任务执行中,请等待任务执行完毕:{}", outStaAgv.getStaNo(), barcode);
                        continue;
                    }
                    List<LocMast> locMastList = locMastService.selectList(new EntityWrapper<LocMast>().eq("barcode", barcode));
                    if (!locMastList.isEmpty()) {
                        News.info("{}号站点条码信息重复:{}", outStaAgv.getStaNo(), barcode);
                        continue;
                    }
                    // 任务生成区 --------------------------------------------------------------------------
                    BasAgvMast basAgvMast = new BasAgvMast();
                    try {
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
                        SearchLocParam param = new SearchLocParam();
                        param.setBarcode(barcode);
                        param.setIoType(1);
                        param.setSourceStaNo(outStaAgv.getStaNo());
                        param.setLocType1(locTypeDto.getLocType1());
                        String response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath("/rpc/pakin/agv/loc/v1")
                                .setJson(JSON.toJSONString(param))
                                .build()
                                .doPost();
                        JSONObject jsonObject = JSON.parseObject(response);
                        if (jsonObject.getInteger("code").equals(200)) {
                            StartupDto dto = jsonObject.getObject("data", StartupDto.class);
                            basAgvMast.setTaskNo(outStaAgv.getStaNo());
                            basAgvMast.setSourceStaNo(outStaAgv.getStaNo());
                            basAgvMast.setLocNo(dto.getLocNo());
                            basAgvMast.setDevpId(devp.getId());
                            basAgvMast.setIoType(2);
                            basAgvMastService.insert(basAgvMast);
                        } else {
                            News.error(JSON.toJSONString(staProtocol));
                        }
                    } catch (Exception e) {
                        News.error(JSON.toJSONString(e.getMessage()));
                    }
                }
            }
        }
    }
    /*
     * agv任务下发:AGV库位==》输送线站点
@@ -4620,7 +4772,7 @@
        try{
            List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("status", 0));
            for (BasAgvMast basAgvMast : basAgvMastList) {
                if (basAgvMast.getStatus()!=0 && basAgvMast.getIoType()!=0){//0==》AGV库位==》输送线站点
                if (basAgvMast.getStatus()!=0 || basAgvMast.getIoType()!=0){//0==》AGV库位==》输送线站点
                    continue;
                }
                try{
@@ -4638,7 +4790,7 @@
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                        //任务下发
                        ReturnT<String> result = new PostMesDataUtils().postMesData("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                        ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                        if (result.getCode()==200){
                            basAgvMast.setStatus(1);
                            basAgvMastService.updateById(basAgvMast);
@@ -4662,14 +4814,14 @@
        try{
            List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("status", 0));
            for (BasAgvMast basAgvMast : basAgvMastList) {
                if (basAgvMast.getStatus()!=0 && basAgvMast.getIoType()!=1){//1==》AGV库位==》AGV库位
                if (basAgvMast.getStatus()!=0 || basAgvMast.getIoType()!=1){//1==》AGV库位==》AGV库位
                    continue;
                }
                try{
                    AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam();
                    AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                    //任务下发
                    ReturnT<String> result = new PostMesDataUtils().postMesData("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                    ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                    if (result.getCode()==200){
                        basAgvMast.setStatus(1);
                        basAgvMastService.updateById(basAgvMast);
@@ -4693,7 +4845,7 @@
        try{
            List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("status", 0));
            for (BasAgvMast basAgvMast : basAgvMastList) {
                if (basAgvMast.getStatus()!=0 && basAgvMast.getIoType()!=2){//2==》输送线站点==》AGV库位
                if (basAgvMast.getStatus()!=0 || basAgvMast.getIoType()!=2){//2==》输送线站点==》AGV库位
                    continue;
                }
                try{
@@ -4706,12 +4858,14 @@
                        staProtocol = staProtocol.clone();
                    }
                    if (!Cools.isEmpty(staProtocol.getWorkNo()) && staProtocol.getWorkNo().equals(basAgvMast.getTaskNo())){
                    if ((!Cools.isEmpty(staProtocol.getWorkNo()) && staProtocol.getWorkNo().equals(basAgvMast.getTaskNo()))
                            ||
                            (basAgvMast.getSourceStaNo().equals(2033))){
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam();
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                        //任务下发
                        ReturnT<String> result = new PostMesDataUtils().postMesData("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                        ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                        if (result.getCode()==200){
                            basAgvMast.setStatus(1);
                            basAgvMastService.updateById(basAgvMast);
@@ -4735,7 +4889,7 @@
        try{
            List<BasAgvMast> basAgvMastList = basAgvMastService.selectList(new EntityWrapper<BasAgvMast>().eq("status", 0));
            for (BasAgvMast basAgvMast : basAgvMastList) {
                if (basAgvMast.getStatus()!=0 && basAgvMast.getIoType()!=3){//3==》输送线站点==》输送线站点
                if (basAgvMast.getStatus()!=0 || basAgvMast.getIoType()!=3){//3==》输送线站点==》输送线站点
                    continue;
                }
                try{
@@ -4757,10 +4911,10 @@
                    if (!Cools.isEmpty(staProtocol.getWorkNo()) && staProtocol.getWorkNo().equals(basAgvMast.getTaskNo())){
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam();
                        AgvTaskAssignmentParam agvTaskAssignmentParam = new AgvTaskAssignmentParam(basAgvMast);
                        //任务下发
                        ReturnT<String> result = new PostMesDataUtils().postMesData("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                        ReturnT<String> result = new PostMesDataUtils().postMesDataAgv("AGV任务下发", AgvConstant.AGV_URL, AgvConstant.AGV_ADAPTOR, agvTaskAssignmentParam);
                        if (result.getCode()==200){
                            basAgvMast.setStatus(1);
                            basAgvMastService.updateById(basAgvMast);