From f2833c7f3e01c997e94a66bd5dd9be738b5c6cc7 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期四, 26 六月 2025 13:31:08 +0800 Subject: [PATCH] 波次任务下发功能优化 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java | 91 +++++++++++++++++++++++++++------------------ 1 files changed, 55 insertions(+), 36 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java index ed1130d..96dcb4b 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java @@ -68,7 +68,7 @@ @Override @Transactional(rollbackFor = Exception.class) public R publicTask(Map<String, Object> map, Long loginUserId) { - List<WaveItem> itemParams = JSONArray.parseArray(JSON.toJSONString(map.get("waveItem")), WaveItem.class); + List<WaveItem> itemParams = JSONArray.parseArray(JSON.toJSONString(map.get("waveItem")), WaveItem.class); if (Objects.isNull(itemParams) || itemParams.isEmpty()) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } @@ -113,6 +113,7 @@ /** * 閫夋嫨娉㈡鏄庣粏涓嬪彂浠诲姟 + * * @param map * @param loginUserId * @return @@ -137,6 +138,12 @@ throw new CoolException("娉㈡鏄庣粏涓嶅瓨鍦紒锛�"); } + if (!waveItemService.update(new LambdaUpdateWrapper<WaveItem>() + .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val) + .in(WaveItem::getId, waveItems))) { + throw new CoolException("鎵ц鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } + WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>() .eq(WaveRule::getType, WaveRuleType.First_In_First_Out.type)); if (Cools.isEmpty(waveRule)) { @@ -153,7 +160,14 @@ params.add(locParams); } List<OrderOutItemDto> results = LocManageUtil.getOutOrderList(params, waveRule); - + if (results.isEmpty()) { + waveService.update(new LambdaUpdateWrapper<Wave>() + .set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val) + .set(Wave::getUpdateBy, loginUserId) + .set(Wave::getUpdateTime, new Date()) + .eq(Wave::getId, waveId)); + return R.ok(); + } /**鐢熸垚鍑哄簱浠诲姟*/ try { generateOutTask(results, loginUserId, waves); @@ -162,12 +176,39 @@ throw new CoolException(e.getMessage()); } - if (!waveItemService.update(new LambdaUpdateWrapper<WaveItem>() - .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val) - .in(WaveItem::getId, waveItems))) { - throw new CoolException("涓嬪彂鎵ц寮傚父锛岃绋嶅�欓噸璇曪紒"); + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>() + .in(TaskItem::getSource, waveItems)); + if (Cools.isEmpty(taskItems)) { + throw new CoolException("鏆傛棤鍚堥�傚簱瀛樹俊鎭紒锛�"); } + for (TaskItem item : taskItems) { + WaveItem waveItem = waveItemService.getById(item.getSource()); + Double workQty = Math.round((waveItem.getWorkQty() + item.getAnfme()) * 10000) / 10000.0; + waveItem.setWorkQty(workQty); + if (workQty.compareTo(waveItem.getAnfme()) < 0) { + waveItem.setExceStatus(WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val); + } else { + waveItem.setExceStatus(WaveItemExceStatus.WAVE_EXCE_STATUS_PUBD.val); + } + + if (!waveItemService.update(new LambdaUpdateWrapper<WaveItem>() + .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_PUBD.val) + .setSql("work_qty = work_qty + " + item.getAnfme()) + .set(WaveItem::getUpdateBy, loginUserId) + .set(WaveItem::getUpdateTime, new Date()) + .eq(WaveItem::getId, item.getSource()))) { + throw new CoolException("涓嬪彂鎵ц寮傚父锛岃绋嶅�欓噸璇曪紒"); + } + } + if (!waveService.update(new LambdaUpdateWrapper<Wave>() + .set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val) + .set(Wave::getWorkQty, taskItems.stream().mapToDouble(TaskItem::getAnfme).sum()) + .set(Wave::getUpdateBy, loginUserId) + .set(Wave::getUpdateTime, new Date()) + .eq(Wave::getId, waveId))) { + throw new CoolException("娉㈡鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } return R.ok(); } @@ -183,7 +224,6 @@ @Synchronized @Transactional(rollbackFor = Exception.class) public void generateOutTask(List<OrderOutItemDto> itemParams, Long loginUserId, Wave wave) throws Exception { - for (OrderOutItemDto itemDto : itemParams) { LocToTaskParams taskParams = new LocToTaskParams(); Loc loc = locService.getById(itemDto.getLocId()); @@ -197,27 +237,6 @@ .setTarLoc(loc.getCode()); locItemService.generateTask(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val, taskParams, loginUserId); } - -// /**淇敼娉㈡鎵ц鏁伴噺*/ -// taskItems.forEach(item -> { -// boolean update = waveItemService.update(new LambdaUpdateWrapper<WaveItem>() -// .eq(WaveItem::getId, item.getSource()) -// .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_SEED.val) -// .set(WaveItem::getWorkQty, item.getAnfme())); -// if (!update) { -// throw new CoolException("娉㈡鎵ц鏁伴噺淇敼澶辫触锛侊紒"); -// } -// }); -// -// List<WaveItem> waveItems = waveItemService.list(new LambdaQueryWrapper<WaveItem>().eq(WaveItem::getWaveId, wave.getId())); -// double sum = waveItems.stream().mapToDouble(WaveItem::getWorkQty).sum(); -// /**娉㈡涓诲崟淇℃伅淇敼*/ -// if (!this.update(new LambdaUpdateWrapper<Wave>() -// .eq(Wave::getId, wave.getId()) -// .set(Wave::getWorkQty, sum) -// .set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val))) { -// throw new CoolException("娉㈡涓诲崟淇℃伅淇敼澶辫触锛侊紒"); -// } } /** @@ -248,16 +267,16 @@ } /** - * @author Ryan - * @description 鍙栨秷娉㈡ - * @param - * @return - * @time 2025/6/17 10:04 - */ + * @param + * @return + * @author Ryan + * @description 鍙栨秷娉㈡ + * @time 2025/6/17 10:04 + */ @Override @Transactional(rollbackFor = Exception.class) public R cancelWave(List<Long> ids) { - + return null; } @@ -270,7 +289,7 @@ * @time 2025/4/27 09:26 */ @Synchronized - private List<WaveItem> getLocs(List<WaveItem> waveItems) throws Exception { + private List<WaveItem> getLocs(List<WaveItem> waveItems) throws Exception { //TODO 鏍规嵁鐗╂枡缂栫爜锛屾壒娆★紝鍔ㄦ�佸瓧娈� 鏌ヨ绗﹀悎鐨勫簱浣嶏紝鍐嶆牴鎹簱浣嶄腑鐗╂枡鐨勬暟閲忛�夋嫨鏈�閫傚悎鐨勫簱浣� waveItems.forEach(waveItem -> { List<LocItem> locItems = locItemService.list(new QueryWrapper<LocItem>() -- Gitblit v1.9.1