#
zjj
2024-05-09 cb2d5d9ac39efdb38d8a301f7396ac1ab171efc1
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -90,6 +90,8 @@
    private BasCrnErrorMapper basCrnErrorMapper;
    @Autowired
    private EmptyBarrelInService emptyBarrelInService;
    @Autowired
    private WrkMastStaService wrkMastStaService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -2299,7 +2301,7 @@
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) {
//                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()) {
                    // 查询工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(crnStn.getStaNo());
                    if (wrkMast == null) {
@@ -2334,7 +2336,7 @@
                    }
                }
//                }
            }
        }
    }
@@ -2491,111 +2493,219 @@
        for (RgvSlave rgvSlave:slaveProperties.getRgv()){
            ZyRgvThread rgvThread = (ZyRgvThread)SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (rgvProtocol.getModeType() != RgvModeType.AUTO){
            if (Cools.isEmpty(rgvProtocol)){
                continue;
            }
            int workNo1 = 0;
            int workNo2 = 0;
            short souSta1 = 0;
            short sta1 = 0;
            short souSta2 = 0;
            short sta2 = 0;
            //工位一任务
            for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId());
                StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo());
                if (staProtocol == null) {
                    break;
//                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isLoading() && staProtocol.isLoading() && staProtocol.isInEnable()){
                    if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){
                        WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo());
                        if (Cools.isEmpty(wrkMast)){
                            log.error("未找到工作档");
                            continue;
                        }
                        workNo1 = wrkMast.getWrkNo();
                        souSta1 = inStn.getSourceStaNo().shortValue();
                        sta1 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo());
                        break;
                    }
                    workNo1 = workNo++;
                    souSta1 = inStn.getSourceStaNo().shortValue();
                    sta1 = inStn.getStaNo().shortValue();
                    break;
                }
            }
            //工位二任务
            for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){
                if (souSta1 == inStn.getSourceStaNo()){
                    continue;
                }
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId());
                StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo());
                if (staProtocol == null) {
                    break;
//                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isLoading() && staProtocol.isLoading() && staProtocol.isInEnable()){
                    if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){
                        WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo());
                        if (Cools.isEmpty(wrkMast)){
                            log.error("未找到工作档");
                            continue;
                        }
                        workNo2 = wrkMast.getWrkNo();
                        souSta2 = inStn.getSourceStaNo().shortValue();
                        sta2 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo());
                        break;
                    }
                    workNo2 = workNo++;
                    souSta2 = inStn.getSourceStaNo().shortValue();
                    sta2 = inStn.getStaNo().shortValue();
                    break;
                }
            }
            //rgv任务下发--------------------------------------------------------------
            RgvCommand command = new RgvCommand();
            command.setRgvNo(rgvSlave.getId()); // RGV编号
            //工位1
            command.setTaskNo1(workNo1); // 工作号
            command.setSourceStaNo1(souSta1); // 源站
            command.setDestinationStaNo1(sta1);  // 目标站
            command.setAckFinish1(false);  // 任务完成确认位
            //工位2
            command.setTaskNo2(workNo2); // 工作号
            command.setSourceStaNo2(souSta2); // 源站
            command.setDestinationStaNo2(sta2);  // 目标站
            command.setAckFinish2(false);  // 任务完成确认位
            if (workNo1 != 0 && workNo2 ==0){
                command.setTaskMode(RgvTaskModeType.FETCH_PUT2); // 任务模式: 取放货
            } else if (workNo1 == 0 && workNo2 !=0) {
                command.setTaskMode(RgvTaskModeType.FETCH_PUT1); // 任务模式: 取放货
            }else {
                command.setTaskMode(RgvTaskModeType.FETCH_PUT_ALL); // 任务模式: 取放货
                rgvProtocol = rgvProtocol.clone();
            }
            command.setCommand(false);
            MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(2, command));
            log.info("rgv任务下发:"+JSON.toJSONString(command));
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.IDLE && rgvProtocol.getLoaded1() == 0){
                boolean work1 = false;
                boolean work2 = false;
                int workNo1 = 0;
                int workNo2 = 0;
                short souSta1 = 0;
                short sta1 = 0;
                short souSta2 = 0;
                short sta2 = 0;
                //工位一任务
                for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId());
                    StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo());
                    if (staProtocol == null) {
                        break;
//                    continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()){
                        if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){
                            WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo());
                            if (Cools.isEmpty(wrkMast)){
                                log.error("未找到工作档");
                                continue;
                            }
                            workNo1 = wrkMast.getWrkNo();
                            souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),wrkMast.getSourceStaNo());
                            sta1 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo());
                            work1 = true;
                            devpThread.setPakMk(inStn.getSourceStaNo(),false);
                            break;
                        }
                        workNo1 = workNo++;
                        souSta1 = Utils.getRgvStaNo(rgvSlave.getId(),inStn.getSourceStaNo());
                        sta1 = Utils.getRgvStaNo(rgvSlave.getId(),inStn.getStaNo());
                        work1 = true;
                        devpThread.setPakMk(inStn.getSourceStaNo(),false);
                        break;
                    }
                }
                //工位二任务
                for (RgvSlave.Sta inStn :  rgvSlave.getInStn()){
                    if (souSta1 == inStn.getSourceStaNo()){
                        continue;
                    }
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, inStn.getSourcePlcId());
                    StaProtocol staProtocol = devpThread.getStation().get(inStn.getSourceStaNo());
                    if (staProtocol == null) {
                        break;
//                    continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()&& staProtocol.isPakMk()){
                        if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() <9900){
                            WrkMast wrkMast = wrkMastService.selectByworkNo(staProtocol.getWorkNo());
                            if (Cools.isEmpty(wrkMast)){
                                log.error("未找到工作档");
                                continue;
                            }
                            workNo2 = wrkMast.getWrkNo();
                            souSta2 = inStn.getSourceStaNo().shortValue();
                            sta2 = Utils.getRgvEndStaNo(rgvSlave.getId(),wrkMast.getStaNo());
                            work2 = true;
                            devpThread.setPakMk(inStn.getSourceStaNo(),false);
                            break;
                        }
                        workNo2 = workNo++;
                        souSta2 = inStn.getSourceStaNo().shortValue();
                        sta2 = inStn.getStaNo().shortValue();
                        work2 = true;
                        devpThread.setPakMk(inStn.getSourceStaNo(),false);
                        break;
                    }
                }
                if (work1 || work2){
                    //rgv任务下发--------------------------------------------------------------
                    RgvCommand command = new RgvCommand();
                    command.setRgvNo(rgvSlave.getId()); // RGV编号
                    //工位1
                    command.setTaskNo1(workNo1); // 工作号
                    command.setSourceStaNo1(souSta1); // 源站
                    command.setDestinationStaNo1(sta1);  // 目标站
                    command.setAckFinish1(false);  // 任务完成确认位
                    //工位2
                    command.setTaskNo2(workNo2); // 工作号
                    command.setSourceStaNo2(souSta2); // 源站
                    command.setDestinationStaNo2(sta2);  // 目标站
                    command.setAckFinish2(false);  // 任务完成确认位
                    if (workNo1 == 0 && workNo2 !=0){
                        command.setTaskMode(RgvTaskModeType.FETCH_PUT2); // 任务模式: 取放货
                    } else if (workNo1 != 0 && workNo2 ==0) {
                        command.setTaskMode(RgvTaskModeType.FETCH_PUT1); // 任务模式: 取放货
                    }else {
                        command.setTaskMode(RgvTaskModeType.FETCH_PUT_ALL); // 任务模式: 取放货
                    }
                    command.setCommand(false);
                    rgvTaskSave(command);
                    MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(2, command));
                    log.info("rgv任务下发:"+JSON.toJSONString(command));
                }
            }
        }
    }
    public synchronized void RGVTaskOver() {
        for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
            ZyRgvThread rgvThread = (ZyRgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
            RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
            if (Cools.isEmpty(rgvProtocol)){
                continue;
            }else {
                rgvProtocol = rgvProtocol.clone();
            }
            //工位一任务完成
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING && rgvProtocol.getLoaded1() == 1) {
                WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo1());
                if (Cools.isEmpty(wrkMastSta)){
                    log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo1());
                    continue;
                }
                for (RgvSlave.Sta outStn :rgvSlave.getOutStn()){
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, outStn.getSourcePlcId());
                    StaProtocol staProtocol = devpThread.getStation().get(outStn.getSourceStaNo());
                    if (staProtocol == null) {
                        continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    if (staProtocol.isAutoing() && staProtocol.isLoading()  && staProtocol.isPakMk()){
//                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
//                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                        if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) {
                            continue;
                        }
                    }
                }
                MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(3,new RgvCommand()));
                log.info("{}号rgv工位一工作完成复位,工作号:{}",rgvSlave.getId(),wrkMastSta.getWrkNo());
            }
            //工位二任务完成
            if (rgvProtocol.getModeType() == RgvModeType.AUTO && rgvProtocol.getStatusType() == RgvStatusType.WAITING2 && rgvProtocol.getLoaded1() == 1) {
                WrkMastSta wrkMastSta = wrkMastStaService.selectByRgvNoandWrkNo(rgvProtocol.getRgvNo(), rgvProtocol.getTaskNo2());
                if (Cools.isEmpty(wrkMastSta)){
                    log.error("未查询到rgv工作任务,rgv编号{},工作号{}",rgvProtocol.getRgvNo(),rgvProtocol.getTaskNo2());
                    continue;
                }
                for (RgvSlave.Sta outStn :rgvSlave.getOutStn()){
                    SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, outStn.getSourcePlcId());
                    StaProtocol staProtocol = devpThread.getStation().get(outStn.getSourceStaNo());
                    if (staProtocol == null) {
                        continue;
                    } else {
                        staProtocol = staProtocol.clone();
                    }
                    if (staProtocol.isAutoing() && staProtocol.isLoading()  && staProtocol.isPakMk()){
//                        staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue());
//                        staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                        if (!MessageQueue.offer(SlaveType.Devp, outStn.getStaPlcId(), new Task(2, staProtocol))) {
                            continue;
                        }
                    }
                }
                MessageQueue.offer(SlaveType.Rgv, rgvSlave.getId(), new Task(4,new RgvCommand()));
                log.info("{}号rgv工位二工作完成复位,工作号:{}",rgvSlave.getId(),wrkMastSta.getWrkNo2());
            }
        }
    }
    public boolean rgvTaskSave(RgvCommand command){
        Wrapper<WrkMastSta> wrkMastStaWrapper = new EntityWrapper<WrkMastSta>().eq("wrk_crn", command.getRgvNo()).eq("wrk_no", command.getTaskNo1());
        WrkMastSta wrkMastSta1 = wrkMastStaService.selectOne(wrkMastStaWrapper);
        if (!Cools.isEmpty(wrkMastSta1)){
            wrkMastStaService.delete(wrkMastStaWrapper);
        }
        WrkMastSta wrkMastSta = new WrkMastSta();
        wrkMastSta.setWrkNo(Long.valueOf(command.getTaskNo1()));
        wrkMastSta.setWrkNo2(Long.valueOf(command.getTaskNo2()));
        wrkMastSta.setWrkStart(command.getSourceStaNo1().intValue());
        wrkMastSta.setWrkEnd(command.getDestinationStaNo1().intValue());
        wrkMastSta.setStaStart(command.getSourceStaNo2().intValue());
        wrkMastSta.setStaEnd(command.getDestinationStaNo2().intValue());
        wrkMastSta.setWrkSts(1);
        Date now = new Date();
        wrkMastSta.setCreateTime(now);
        wrkMastSta.setUpdateTime(now);
        wrkMastSta.setWrkCrn(command.getRgvNo());
        wrkMastSta.setWrkType(command.getTaskMode().intValue());
        return wrkMastStaService.insert(wrkMastSta);
    }
}