| | |
| | | private BasConveyorPathService basConveyorPathService; |
| | | @Autowired |
| | | private BasLedService basLedService; |
| | | @Autowired |
| | | private DeviceBarcodeService deviceBarcodeService; |
| | | @Autowired |
| | | private ShuttleChargeStaService shuttleChargeStaService; |
| | | |
| | | /** |
| | | * 组托 |
| | |
| | | BasConveyor basConveyor = basConveyorService.getOne(new LambdaQueryWrapper<BasConveyor>().eq(BasConveyor::getDeviceId, devp.getId()).eq(BasConveyor::getHostId, devp.getHostId())); |
| | | // 遍历入库口 |
| | | for (StaDto inSta : JSON.parseArray(basConveyor.getInSta(), StaDto.class)) { |
| | | BasConveyorSta basConveyorSta = basConveyorStaService.selectBySiteNo(inSta.getStaNo().toString()); |
| | | if(basConveyorSta == null) { |
| | | continue; |
| | | } |
| | | |
| | | // 获取入库站信息 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, devp.getId().intValue()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); |
| | |
| | | ) { |
| | | |
| | | // 获取条码扫描仪信息 |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); |
| | | DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId()); |
| | | if(deviceBarcode == null) { |
| | | continue; |
| | | } |
| | | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId())); |
| | | if (barcodeThread == null) { |
| | | continue; |
| | | } |
| | | String barcode = barcodeThread.getBarcode(); |
| | | if (!Cools.isEmpty(barcode)) { |
| | | News.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); |
| | | News.info("{}号条码扫描器检测条码信息:{}", deviceBarcode.getId(), barcode); |
| | | |
| | | if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode) || "00000000".equals(barcode)) { |
| | | staProtocol.setWorkNo((short) 32002); |
| | | staProtocol.setStaNo(inSta.getBackSta().shortValue()); |
| | |
| | | param.setBarcode(barcode); |
| | | param.setIoType(1); |
| | | param.setSourceStaNo(inSta.getStaNo()); |
| | | param.setLocType1(staProtocol.getLocType1().shortValue()); |
| | | param.setLocType1((short)1); |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/pakin/loc/v2") |
| | | .setPath("/rpc/pakin/loc/v1") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | |
| | | mapNode.setNo(object.getString("row") + "-" + object.getString("bay")); |
| | | mapNode.setXBase(object.getInteger("refx")); |
| | | mapNode.setYBase(object.getInteger("refy")); |
| | | |
| | | if(mapNode.getValue() == MapNodeType.CONVEYOR.id) { |
| | | //输送线,判断小车是否可走 |
| | | if (object.containsKey("conveyorHasGo")) { |
| | | if(object.getBoolean("conveyorHasGo")) { |
| | | //小车可走 |
| | | mapNode.setValue(MapNodeType.CONVEYOR_CAR_GO.id); |
| | | } |
| | | } |
| | | } |
| | | |
| | | nodes.add(mapNode); |
| | | } |
| | | |
| | |
| | | //存在空缺节点,自动补足 |
| | | for (int i = defaultBay; i < node.getBay(); i++) { |
| | | MapNode mapNode = new MapNode(); |
| | | mapNode.setValue(-1); |
| | | mapNode.setValue(MapNodeType.DISABLE.id); |
| | | mapNode.setTop(1000); |
| | | mapNode.setBottom(1000); |
| | | mapNode.setLeft(1000); |
| | |
| | | ArrayList<ArrayList<MapNode>> lists = entry.getValue();//获取地图 |
| | | |
| | | MapNode mapNode = new MapNode(); |
| | | mapNode.setValue(-1); |
| | | mapNode.setValue(MapNodeType.DISABLE.id); |
| | | mapNode.setTop(1000); |
| | | mapNode.setBottom(1000); |
| | | mapNode.setLeft(1000); |
| | |
| | | // 解析入库工作档 |
| | | public synchronized void analyzeInBoundTask() { |
| | | for (Task task : taskService.selectWaitAnalyzeInBoundTask()) { |
| | | BasConveyorSta basConveyorSta = basConveyorStaService.getOne(new LambdaQueryWrapper<BasConveyorSta>().eq(BasConveyorSta::getSiteNo, task.getDestSite())); |
| | | if (basConveyorSta == null) { |
| | | continue; |
| | | } |
| | | BasConveyor basConveyor = basConveyorService.getById(basConveyorSta.getConveyorId()); |
| | | if (basConveyor == null) { |
| | | continue; |
| | | } |
| | | // DeviceBarcode deviceBarcode = deviceBarcodeService.getById(basConveyorSta.getBarcodeId()); |
| | | // if (deviceBarcode == null) { |
| | | // continue; |
| | | // } |
| | | // BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, Integer.parseInt(deviceBarcode.getDeviceId())); |
| | | // if (barcodeThread == null) { |
| | | // continue; |
| | | // } |
| | | // if (!barcodeThread.getBarcode().equals(task.getZpallet())) { |
| | | // continue; |
| | | // } |
| | | if (Cools.isEmpty(basConveyorSta.getTaskNo())){ |
| | | continue; |
| | | } |
| | | if (!basConveyorSta.getTaskNo().toString().equals(task.getWmsTaskNo())){ |
| | | continue; |
| | | } |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Conveyor, basConveyor.getDeviceId().intValue()); |
| | | if (devpThread == null) { |
| | | continue; |
| | | } |
| | | StaProtocol staProtocol = devpThread.getStation().get(basConveyorSta.getSiteNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | } |
| | | if (!(staProtocol.isAutoing() |
| | | && staProtocol.isLoading() |
| | | && staProtocol.isInEnable())) { |
| | | continue; |
| | | } |
| | | |
| | | |
| | | if (Cools.isEmpty(task.getShuttleNo())) { |
| | | //分配小车 |
| | | //搜索空闲车 |
| | |
| | | // staProtocol1 = staProtocol1.clone(); |
| | | } |
| | | |
| | | // 判断堆垛机出库站状态 |
| | | // 判断出库站状态 |
| | | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { |
| | | // if (!(staProtocol1.isAutoing() && !staProtocol1.isLoading() && staProtocol1.getWorkNo() == 0 && staProtocol1.isOutEnable())) { |
| | | // continue; |
| | |
| | | String currentLocNo = shuttleProtocol.getCurrentLocNo(); |
| | | int lev = Utils.getLev(currentLocNo);//获取小车楼层 |
| | | //搜索小车当前楼层充电桩 |
| | | ArrayList<Loc> allChargeLoc = new ArrayList<>(); |
| | | List<Loc> list1 = locService.list(new LambdaQueryWrapper<Loc>() |
| | | .eq(Loc::getLocSts, LocStsType.C.val()) |
| | | .eq(Loc::getStatus, 1) |
| | | .eq(Loc::getLev, lev)); |
| | | ArrayList<ShuttleChargeSta> allChargeLoc = new ArrayList<>(); |
| | | |
| | | List<ShuttleChargeSta> list1 = shuttleChargeStaService.list(new LambdaQueryWrapper<ShuttleChargeSta>() |
| | | .eq(ShuttleChargeSta::getDeviceLev, lev) |
| | | .eq(ShuttleChargeSta::getStatus, 1)); |
| | | if (!list1.isEmpty()) { |
| | | allChargeLoc.addAll(list1); |
| | | } |
| | | |
| | | //搜索其他楼层充电桩 |
| | | List<Loc> list2 = locService.list(new LambdaQueryWrapper<Loc>() |
| | | .eq(Loc::getLocSts, LocStsType.C.val()) |
| | | .eq(Loc::getStatus, 1) |
| | | .notIn(Loc::getLev, lev)); |
| | | List<ShuttleChargeSta> list2 = shuttleChargeStaService.list(new LambdaQueryWrapper<ShuttleChargeSta>() |
| | | .notIn(ShuttleChargeSta::getDeviceLev, lev) |
| | | .eq(ShuttleChargeSta::getStatus, 1)); |
| | | if (!list2.isEmpty()) { |
| | | allChargeLoc.addAll(list2); |
| | | } |
| | |
| | | } |
| | | |
| | | //选择空闲充电桩 |
| | | Loc chargeLoc = null; |
| | | for (Loc loc : allChargeLoc) { |
| | | ShuttleChargeSta chargeSta = null; |
| | | for (ShuttleChargeSta shuttleChargeSta : allChargeLoc) { |
| | | // 判断充电位是否被占用(车辆位置) |
| | | if (Utils.hasShuttleInLoc(loc.getLocNo(), device.getId())) { |
| | | if (Utils.hasShuttleInLoc(shuttleChargeSta.getDeviceLoc(), device.getId())) { |
| | | continue; |
| | | } |
| | | |
| | | // 盘点充电位是否存在任务档 |
| | | List<Task> tasks = taskService.hasChargeInLoc(loc.getLocNo()); |
| | | List<Task> tasks = taskService.hasChargeInLoc(shuttleChargeSta.getDeviceLoc()); |
| | | if (!tasks.isEmpty()) { |
| | | continue; |
| | | } |
| | | |
| | | chargeLoc = loc; |
| | | Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() |
| | | .eq(Loc::getLocNo, shuttleChargeSta.getDeviceLoc())); |
| | | if (loc == null) { |
| | | continue; |
| | | } |
| | | |
| | | if (!loc.getLocSts().equals(LocStsType.C.val())) { |
| | | continue;//库位不是充电桩 |
| | | } |
| | | |
| | | chargeSta = shuttleChargeSta; |
| | | break; |
| | | } |
| | | |
| | | if (chargeLoc == null) { |
| | | if (chargeSta == null) { |
| | | continue;//未找到充电桩 |
| | | } |
| | | |
| | |
| | | continue; |
| | | } |
| | | |
| | | String chargeLocNo = chargeLoc.getLocNo(); |
| | | String chargeLocNo = chargeSta.getDeviceLoc(); |
| | | Task task = new Task(); |
| | | task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); |
| | | task.setTaskNo(String.valueOf(Utils.getTaskNo("CHARGE"))); |
| | |
| | | * 四向穿梭车电量检测 ===>> 满电后回到待机位 |
| | | */ |
| | | public synchronized void loopShuttleToStandbyCauseCharge() { |
| | | Integer enoughPower = 90; |
| | | Dict dict = dictService.getOne(new LambdaQueryWrapper<Dict>() |
| | | .eq(Dict::getFlag, "chargeMaxValue") |
| | | .eq(Dict::getStatus, 1)); |
| | | if (dict != null) { |
| | | enoughPower = Integer.parseInt(dict.getValue()); |
| | | } |
| | | |
| | | //获取迁移任务类型 |
| | | TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>() |
| | | .eq(TaskCtg::getFlag, String.valueOf(TaskCtgType.MOVE)) |
| | |
| | | continue; |
| | | } |
| | | |
| | | ShuttleChargeSta chargeSta = shuttleChargeStaService.getOne(new LambdaQueryWrapper<ShuttleChargeSta>() |
| | | .eq(ShuttleChargeSta::getDeviceLoc, chargeTask.getDestLoc()) |
| | | .eq(ShuttleChargeSta::getStatus, 1)); |
| | | if (chargeSta == null) { |
| | | continue;//充电桩不存在,异常 |
| | | } |
| | | |
| | | String standbyLoc = chargeSta.getStandbyLoc(); |
| | | if (standbyLoc == null) { |
| | | continue;//避让位置数据不存在 |
| | | } |
| | | List<String> availableLoc = JSON.parseArray(standbyLoc, String.class); |
| | | |
| | | //获取避让位置 |
| | | String standByLocNo = shuttleDispatcher.searchStandByLocNo(Integer.valueOf(device.getDeviceNo()), device.getHostId(), shuttleThread.getStatus().getCurrentLocNo()); |
| | | String standByLocNo = shuttleDispatcher.searchAvailableLocNo(Integer.valueOf(device.getDeviceNo()), device.getHostId(), shuttleThread.getStatus().getCurrentLocNo(), availableLoc); |
| | | |
| | | Task task = new Task(); |
| | | task.setUuid(String.valueOf(snowflakeIdWorker.nextId())); |