#
lsh
2024-01-12 3d9d870ef185961c598943ea45ea71b66f299511
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -148,13 +148,13 @@
                        && staProtocol.isLoading()
                        && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk()
                        && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9990)
                        && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() > 9999)
                        && staProtocol.isPakMk()) {// && !Cools.isEmpty(barcode)) {
//                    if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode)) {
//                        log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode);
//                        //条码为空或者不符合,退库到172站点
//                        staProtocol.setWorkNo((short)9999);
//                        staProtocol.setWorkNo((short)29999);
//                        staProtocol.setStaNo((short)172);
//                        devpThread.setPakMk(staProtocol.getSiteId(), false);
//                        boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
@@ -252,7 +252,7 @@
                // 判断是否满足入库条件
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 9999)
                        && !staProtocol.isEmptyMk() && (staProtocol.getWorkNo() == 0 || staProtocol.getWorkNo() == 29999)
                        && staProtocol.isPakMk()) {
                    // 判断重复工作档
                    WrkMast wrkMast = wrkMastMapper.selectPakInStep11(inSta.getStaNo());
@@ -423,6 +423,10 @@
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                BasDevp basDevp = basDevpService.selectById(staProtocol.getSiteId());
                if (Cools.isEmpty(basDevp) || basDevp.getReportSign()!=1){
                    continue;
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo()==0 && !staProtocol.isOutEnable() && staProtocol.isInEnable()) {
@@ -1343,7 +1347,7 @@
            // 命令下发区 --------------------------------------------------------------------------
            CrnCommand crnCommand = new CrnCommand();
            crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号
            crnCommand.setTaskNo((short) 9999); // 工作号
            crnCommand.setTaskNo((short) 29999); // 工作号
            crnCommand.setAckFinish((short) 0);  // 任务完成确认位
            crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式:  回原点
            crnCommand.setSourcePosX((short) 0);     // 源库位排
@@ -2959,6 +2963,7 @@
     */
    public synchronized void storeEmptyPlt() {
        for (DevpSlave devp : slaveProperties.getDevp()) {
            if (devp.getId()==1) continue;
            // 遍历空板入库口
            for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
                // 获取空板入库站信息
@@ -2972,7 +2977,7 @@
                // 站点条件判断
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                        && staProtocol.isEmptyMk() && (staProtocol.getWorkNo() > 9990 && staProtocol.getWorkNo() <= 9999) && staProtocol.isPakMk()) {
                        && staProtocol.isEmptyMk() && ((staProtocol.getWorkNo() > 29990 && staProtocol.getWorkNo() <= 29999) || staProtocol.getWorkNo()==0)  && staProtocol.isPakMk()) {
                    try {
                        LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
@@ -3008,6 +3013,108 @@
                    }
                }
            }
        }
    }
    /**
     * 入库  ===>> 空栈板初始化入库,1楼叠盘机叠盘
     */
    public synchronized void storeEmptyPlt2() {
        for (DevpSlave devp : slaveProperties.getDevp()) {
            if (devp.getId()==2) continue;
            // 遍历空板入库口
            for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) {
                // 获取空板入库站信息
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                StaProtocol staProtocol = devpThread.getStation().get(emptyInSta.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                // 站点条件判断
                if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                        && staProtocol.isEmptyMk() && ((staProtocol.getWorkNo() > 29990 && staProtocol.getWorkNo() <= 29999) || staProtocol.getWorkNo()==0) && staProtocol.isPakMk()) {
                    try {
                        WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 9999L);
                        if (Cools.isEmpty(wrkMastSta)){
                            WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),staProtocol.getSiteId());
                            wrkMastSta1.setType(2);
                            wrkMastSta1.setWrkType(1);//工作类型  1:取(叠盘)  2:拆盘  3:取放 5:满取  6:满放
                            wrkMastStaMapper.insert(wrkMastSta1);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    }
                }
            }
        }
    }
    /**
     * 空栈板初始化入库,叉车入库站放货
     */
    public synchronized void storeEmptyPlt3() {
        try{
            for (RgvSlave rgvSlave:slaveProperties.getRgv()) {
                RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId());
                RgvProtocol rgvProtocol = rgvThread.getRgvProtocol();
                if (rgvProtocol == null) {
                    continue;
                }
                BasRgv basRgv = basRgvService.selectById(rgvSlave.getId());
                if (basRgv == null) {
                    log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId());
                    continue;
                }
                // 只有当RGV空闲、自动,工位二有物//rgv可用
                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
                        && rgvProtocol.getModeType() == RgvModeType.AUTO
                        &&  (rgvProtocol.getLoaded2()==2  || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物  ;2一层有物二层无物 (只能满放);3  1、2层都有物
                ) {
                    try {
                        // 获取空板入库站信息
                        SearchLocParam param = new SearchLocParam();
                        param.setIoType(10);
                        param.setSourceStaNo(122);
                        param.setLocType1((short)1);
                        String response = new HttpHandler.Builder()
                                .setUri(wmsUrl)
                                .setPath("/rpc/pakin/empty/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);
                            // 更新站点信息 且 下发plc命令
                            WrkMast wrkMast = wrkMastMapper.selectPakInStep3(dto.getWorkNo());
                            if (!Cools.isEmpty(wrkMast) && wrkMast.getIoType()==10 && wrkMast.getWrkSts()==2){
                                WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(wrkMast.getWrkNo().longValue());
                                if (Cools.isEmpty(wrkMastSta)){
                                    WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),0);
                                    wrkMastSta1.setWrkNo(wrkMast.getWrkNo().longValue());
                                    wrkMastSta1.setType(2);
                                    wrkMastSta1.setWrkType(6);//工作类型  1:取(叠盘)  2:拆盘  3:取放 5:满取  6:满放
                                    wrkMastStaMapper.insert(wrkMastSta1);
                                }
                            }
                        } else {
                            log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/empty/loc/v1", JSON.toJSONString(param), response);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
                    }
                }
            }
        }catch (Exception e){
            log.error("3933行执行小车放空板任务下发失败");
            log.error("3933行"+e);
        }
    }
@@ -4129,7 +4236,7 @@
                        && rgvProtocol.getLoaded1()==0
                        && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
                ) {
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo());
                    BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo());
                    if (basRgvMap == null) {
                        log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo());
                        continue;
@@ -4168,7 +4275,7 @@
        }
    }
    /**
     * 执行小车搬运任务
     * 执行小车搬运任务//拆盘
     */
    public synchronized void rgvRunWrkMastEmptyStaPut() {//拆盘
        try{
@@ -4184,7 +4291,7 @@
                    continue;
                }
                // 只有当RGV空闲、自动,工位二有物//rgv可用
                // 只有当RGV空闲、自动,工位二有物//rgv可用//拆盘
                if (rgvProtocol.getStatusType() == RgvStatusType.IDLE
                        && rgvProtocol.getModeType() == RgvModeType.AUTO
                        && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0
@@ -4396,7 +4503,7 @@
                            continue;
                        }
                        boolean sign = false;
                        if (wrkMastSta.getStaEnd()==0 && wrkMastSta.getStaStart()!=0){//取
                        if (wrkMastSta.getStaEnd()==0 && wrkMastSta.getStaStart()!=0){//满取
                            sign = rgvTakeEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta);
                        }else {
                            continue;