1
4 天以前 82374fe4b32d58956810f445b7889f1a370f1ab9
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3486,6 +3486,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 +3520,7 @@
                basRgv.setPakAll("1");
                basRgvService.updateById(basRgv);
            }
            // 只有当RGV空闲 并且 无任务时才继续执行
            if (rgvProtocol.getStatusType1() == RgvStatusType.IDLE &&
                    rgvProtocol.getModeType() == RgvModeType.AUTO && rgvThread.isPakMk()
@@ -3559,57 +3565,12 @@
                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());
        }
    }
    /**
@@ -3710,7 +3671,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);
@@ -3815,7 +3776,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楼单入库口不需要计算
@@ -4603,8 +4564,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)
@@ -4614,17 +4576,22 @@
                .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任务下发:AGV库位==》输送线站点
     * */