From c48e3aabf2947e45a9db2eac3ef91190e8647655 Mon Sep 17 00:00:00 2001 From: skyouc <958836976@qq.com> Date: 星期二, 02 九月 2025 17:03:34 +0800 Subject: [PATCH] agv站点功能调整 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java | 212 ++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 145 insertions(+), 67 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java index e1459e4..01fdedd 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java @@ -12,7 +12,7 @@ import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.*; import com.vincent.rsf.server.manager.service.*; -import com.vincent.rsf.server.manager.service.impl.DeviceSiteServiceImpl; +import com.vincent.rsf.server.manager.service.impl.BasStationServiceImpl; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.service.ConfigService; import com.vincent.rsf.server.system.utils.SerialRuleUtils; @@ -52,43 +52,47 @@ @Autowired private DeviceSiteService deviceSiteService; - /** - * @author Ryan - * @date 2025/9/1 - * @description: 鑷姩鐢熸垚鐩樼偣璺戝簱鍗� - * @version 1.0 - */ - public void autoCheckOrders() { - Boolean autoRunArea = configService.getVal("AUTO_RUN_CHECK_ORDERS", Boolean.class); - if (!autoRunArea) { - return; - } - //鑾峰彇浠诲姟鍒楄〃涓紝涓虹洏鐐瑰嚭搴撶殑浠诲姟 - List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() - .in(Task::getTaskType, Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type))); - if (tasks.size() >= 10) { - return; - } - List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type).last("limit 1")); - locs.forEach(loc -> { - List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId())); - if (!locItems.isEmpty()) { - DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>().eq(DeviceSite::getType, TaskType.TASK_TYPE_CHECK_OUT.type), false); - //鐢熸垚鐩樼偣浠诲姟鍙傛暟 - LocToTaskParams locToTaskParams = new LocToTaskParams(); - locToTaskParams.setType(Constants.TASK_TYPE_OUT_CHECK) - .setItems(locItems) - .setSiteNo(deviceSite.getSite()) - .setOrgLoc(loc.getCode()); - try { - locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, locToTaskParams, getLoginUserId()); - } catch (Exception e) { - throw new CoolException(e.getMessage()); - } + /** + * 鑷姩鐢熸垚搴撲綅鏄庣粏 + */ + @Transactional(rollbackFor = Exception.class) +// @Scheduled(cron = "0/25 * * * * ?") + public void insertRandomMats() { + List<Loc> list = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type)); + for (Loc loc : list) { + List<LocItem> items = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId())); + if (!items.isEmpty()) { + continue; } - }); + List<Matnr> matnrs = matnrService.list(new LambdaQueryWrapper<Matnr>().orderByAsc(Matnr::getBarcode).last("limit 100")); + Collections.shuffle(matnrs); + Matnr matnr = matnrs.stream().findFirst().get(); + LocItem locItem = new LocItem(); + BeanUtils.copyProperties(matnr, locItem); + locItem.setBarcode(loc.getBarcode()) + .setLocId(loc.getId()) + .setMatnrCode(matnr.getCode()) + .setMaktx(matnr.getName()) + .setMatnrId(matnr.getId()) + .setId(null) + .setAnfme(45.0) + .setLocCode(loc.getCode()); + locItemService.save(locItem); + } } + +// /** +// * @author Ryan +// * @date 2025/9/1 +// * @description: 鑷姩鐢熸垚鐩樼偣璺戝簱鍗� +// * @version 1.0 +// */ +// @Scheduled(cron = "0/25 * * * * ?") +// public void autoCheckOrders() { +// +// +// } /** * @author Ryan @@ -96,6 +100,7 @@ * @description: 鑷姩瀹屾垚鐩樼偣鍔熻兘 * @version 1.0 */ + @Scheduled(cron = "0/35 * * * * ?") public void autoCheckComplete() { Boolean autoRunArea = configService.getVal("AUTO_RUN_CHECK_ORDERS", Boolean.class); if (!autoRunArea) { @@ -111,23 +116,37 @@ if (!tasks.isEmpty()) { tasks.forEach(task -> { if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) { - if (task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id)) { - task.setTaskStatus(TaskStsType.COMPLETE_IN.id); - if (!taskService.updateById(task)) { - throw new CoolException("鐩樼偣鍐嶅叆搴撲换鍔″畬鎴愬け璐ワ紒锛�"); + if (task.getTaskStatus().equals(TaskStsType.COMPLETE_IN.id)) { + if (!stationService.update(new LambdaUpdateWrapper<BasStation>() + .eq(BasStation::getStationName, task.getOrgSite()) + .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type))) { + throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�"); } } } else { //鍒涘缓鍑哄簱浠诲姟鐘舵�� - if (task.getTaskStatus().equals(TaskStsType.GENERATE_OUT.id)) { - task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); - if (!taskService.updateById(task)) { - throw new CoolException("鐩樼偣鍑哄簱浠诲姟瀹屾垚澶辫触锛侊紒"); +// if (task.getTaskStatus().equals(TaskStsType.WCS_EXECUTE_OUT.id)) { +// task.setTaskStatus(TaskStsType.COMPLETE_OUT.id); +// if (!taskService.updateById(task)) { +// throw new CoolException("鐩樼偣鍑哄簱浠诲姟瀹屾垚澶辫触锛侊紒"); +// } +// //鍑哄簱宸插畬鎴愶紝绛夊緟鐩樼偣涓� +// } else + + if (task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) { + if (!stationService.update(new LambdaUpdateWrapper<BasStation>() + .eq(BasStation::getStationName, task.getOrgSite()) + .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_F.type))) { + throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�"); } - //鍑哄簱宸插畬鎴愶紝绛夊緟鐩樼偣涓� - } else if (task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) { try { taskService.pickOrCheckTask(task.getId(), Constants.TASK_TYPE_OUT_CHECK); + + if (!stationService.update(new LambdaUpdateWrapper<BasStation>() + .eq(BasStation::getStationName, task.getOrgSite()) + .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_R.type))) { + throw new CoolException("绔欑偣鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } } catch (Exception e) { throw new CoolException(e.getMessage()); } @@ -138,7 +157,24 @@ } + /** + * @author Ryan + * @date 2025/9/1 + * @description: 鑷姩瀹屾垚鐩樼偣鍔熻兘 + * @version 1.0 + */ + @Scheduled(cron = "0/25 * * * * ?") public void genRun() { + Boolean flagAuto = configService.getVal("AUTO_RUN_CHECK_ORDERS", Boolean.class); + if (!flagAuto) { + return; + } + //鑾峰彇浠诲姟鍒楄〃涓紝涓虹洏鐐瑰嚭搴撶殑浠诲姟 + List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() + .in(Task::getTaskType, Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type))); + if (tasks.size() >= 6) { + return; + } String autoRunArea = configService.getVal("AUTO_RUN_AREA", String.class); if (Cools.isEmpty(autoRunArea)) { return; @@ -169,38 +205,79 @@ private void autoRun(List<Integer> locGroupList, List<String> staGroupList) { List<String> staPreNos = getStaPrefixes(staGroupList); String staTaskMemo = "DEMO_STA_" + String.join("-", staPreNos); - log.error("=========>"); - log.info(staTaskMemo); - System.out.println(staTaskMemo); - List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getMemo, staTaskMemo)); - if (!Cools.isEmpty(list) && list.size() > 30) { + if (!Cools.isEmpty(list) && list.size() >= 1) { return; } - // 鍏ュ簱 搴旇鏍规嵁宸ヤ綔妗e洖鍘� - this.runStaToLoc(locGroupList, staGroupList, staTaskMemo); - // 鍑哄簱,闇�瑕佹牎楠屽伐浣滄。鏄惁瀛樺湪锛屽瓨鍦ㄥ氨璇存槑绔欑偣澶勪簬蹇欑鐘舵�� - this.runLocToSta(locGroupList, staGroupList, staTaskMemo); - // 绉诲簱 - this.runLocToLoc(locGroupList, staTaskMemo); + List<Loc> locs = getAreaLocs(locGroupList, staGroupList, staTaskMemo); + + for (Loc loc : locs) { + List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId())); + if (!locItems.isEmpty()) { + locItems.forEach(locItem -> { + locItem.setOutQty(locItem.getAnfme()); + }); + List<BasStation> stations = stationService.list(new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)); + if (Cools.isEmpty(stations)) { + throw new CoolException("鏃犲彲鐢ㄧ珯鐐癸紒锛�"); + } + DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() + .in(DeviceSite::getSite, stations) + .eq(DeviceSite::getType, TaskType.TASK_TYPE_CHECK_OUT.type), false); + if (Cools.isEmpty(deviceSite)) { + throw new CoolException("鏃犲彲鐢ㄨ矾寰勶紒锛�"); + } + //鐢熸垚鐩樼偣浠诲姟鍙傛暟 + LocToTaskParams locToTaskParams = new LocToTaskParams(); + locToTaskParams.setType(Constants.TASK_TYPE_OUT_CHECK) + .setItems(locItems) + .setSiteNo(deviceSite.getSite()) + .setOrgLoc(loc.getCode()); + + List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTargSite, deviceSite.getSite())); + if (!tasks.isEmpty()) { + continue; + } + try { + //鐢熸垚鐩樼偣鍑哄簱浠诲姟锛岀珯鐐归绾� + if (!stationService.update(new LambdaUpdateWrapper<BasStation>() + .eq(BasStation::getStationName, deviceSite.getSite()) + .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_S.type))) { + throw new CoolException("绔欑偣鐘舵�佹洿鏂板け璐ワ紒锛�"); + } + locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, locToTaskParams, getLoginUserId()); + } catch (Exception e) { + throw new CoolException(e.getMessage()); + } + } + } + + + // 鍏ュ簱 搴旇鏍规嵁宸ヤ綔妗e洖鍘� +// this.runStaToLoc(locGroupList, staGroupList, staTaskMemo); + +// // 鍑哄簱,闇�瑕佹牎楠屽伐浣滄。鏄惁瀛樺湪锛屽瓨鍦ㄥ氨璇存槑绔欑偣澶勪簬蹇欑鐘舵�� +// this.runLocToSta(locGroupList, staGroupList, staTaskMemo); +// // 绉诲簱 +// this.runLocToLoc(locGroupList, staTaskMemo); } - // 鍏ュ簱 - private void runStaToLoc(List<Integer> locGroupList, List<String> staGroupList, String memo) { + + private List<Loc> getAreaLocs(List<Integer> locGroupList, List<String> staGroupList, String memo) { Integer startRow = Collections.min(locGroupList); Integer endRow = Collections.max(locGroupList); // STA IDLE - LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_F.type).in(BasStation::getStationName, staGroupList); - List<BasStation> idleList = stationService.list(idleWrapper); - if (Cools.isEmpty(idleList)) { - return; - } - Collections.shuffle(idleList); +// LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type).in(BasStation::getStationName, staGroupList); +// List<BasStation> idleList = stationService.list(idleWrapper); +// if (Cools.isEmpty(idleList)) { +// return new ArrayList<>(); +// } +// Collections.shuffle(idleList); // LOC STOCK - LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type); + LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type); if (null != startRow) { stockWrapper.ge(Loc::getRow, startRow); } @@ -209,12 +286,13 @@ } List<Loc> stockList = locService.list(stockWrapper); if (Cools.isEmpty(stockList)) { - return; + return new ArrayList<>(); } Collections.shuffle(stockList); + return stockList; //鐢熸垚鍏ュ簱宸ヤ綔妗� - generateTask(idleList.get(0).getStationName(), stockList.get(0).getCode(), idleList.get(0).getBarcode()); +// generateTask(idleList.get(0).getStationName(), stockList.get(0).getCode(), idleList.get(0).getBarcode()); } -- Gitblit v1.9.1