From ebdfa825c07189b5f8e89f147d96d1bc612589db Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 15 七月 2025 08:32:17 +0800 Subject: [PATCH] 代码优化 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java | 217 ++++++++++++++++++++++++++++++++++------------------- 1 files changed, 138 insertions(+), 79 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 e73c78f..b833343 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 @@ -19,8 +19,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vincent.rsf.server.manager.utils.LocManageUtil; import com.vincent.rsf.server.manager.utils.OptimalAlgorithmUtil; -import com.vincent.rsf.server.system.constant.SerialRuleCode; -import com.vincent.rsf.server.system.utils.SerialRuleUtils; import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -56,6 +54,8 @@ private WaveService waveService; @Autowired private WaveRuleServiceImpl waveRuleService; + @Autowired + private WaveOrderRelaServiceImpl waveOrderRelaService; /** * @param @@ -102,14 +102,13 @@ } List<Long> orderIds = waveItems.stream().map(WaveItem::getOrderId).collect(Collectors.toList()); /**淇敼鍑哄簱鍗曠姸鎬�*/ - if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>() - .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val) - .in(AsnOrder::getId, orderIds))) { + if (!asnOrderService.update(new LambdaUpdateWrapper<WkOrder>() + .set(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val) + .in(WkOrder::getId, orderIds))) { throw new CoolException("鍑哄簱鍗曟嵁鐘舵�佷慨鏀瑰け璐ワ紒锛�"); } return R.ok(); } - /** * 閫夋嫨娉㈡鏄庣粏涓嬪彂浠诲姟 @@ -121,66 +120,148 @@ @Override @Transactional(rollbackFor = Exception.class) public R waveToTask(Map<String, Object> map, Long loginUserId) { - if (Objects.isNull(map.get("waveItem"))) { + if (Objects.isNull(map.get("ids"))) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } - String waveId = map.get("wave").toString(); - Wave waves = this.getById(Long.parseLong(waveId)); + List<Long> WaveIds = JSONArray.parseArray(JSON.toJSONString(map.get("ids")), Long.class); + List<Wave> waves = waveService.listByIds(WaveIds); if (Objects.isNull(waves)) { - throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦紒锛�"); + throw new CoolException("鏁版嵁閿欒锛� 娉㈡涓嶅瓨鍦紒锛�"); } - List<Long> waveItems = JSONArray.parseArray(JSON.toJSONString(map.get("waveItem")), Long.class); - if (waveItems.isEmpty()) { - throw new CoolException("娉㈡鏄庣粏涓嶈兘涓虹┖锛侊紒"); - } - List<WaveItem> items = waveItemService.listByIds(waveItems); - if (items.isEmpty()) { - throw new CoolException("娉㈡鏄庣粏涓嶅瓨鍦紒锛�"); - } + for (Wave wave : waves) { + if (wave.getExceStatus() >= WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val) { + throw new CoolException("褰撳墠鐘舵�佹棤娉曚笅鍙戞墽琛岋紒锛�"); + } - WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>() - .eq(WaveRule::getType, WaveRuleType.First_In_First_Out.type)); - if (Cools.isEmpty(waveRule)) { - throw new CoolException("鏈壘鍒板綋鍓嶇瓥鐣�"); - } - - List<WaveToLocParams> params = new ArrayList<>(); - for (WaveItem item : items) { - WaveToLocParams locParams = new WaveToLocParams(); - BeanUtils.copyProperties(item, locParams); - locParams.setBatch(item.getSplrBatch()) - .setItemId(item.getId()) - .setWaveId(item.getWaveId()); - params.add(locParams); - } - List<OrderOutItemDto> results = LocManageUtil.getOutOrderList(params, waveRule); - - /**鐢熸垚鍑哄簱浠诲姟*/ - try { - generateOutTask(results, loginUserId, waves); - } catch (Exception e) { - log.error("UNK", e); - throw new CoolException(e.getMessage()); - } - - List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getSource, waveItems)); - if (Cools.isEmpty(taskItems)) { - throw new CoolException("鏁版嵁閿欒锛氭尝娆℃槑缁嗗凡涓嶅瓨鍦紒锛�"); - } - for (TaskItem item : taskItems) { + List<WaveItem> items = waveItemService.list(new LambdaQueryWrapper<WaveItem>().eq(WaveItem::getWaveId, wave.getId())); + if (items.isEmpty()) { + throw new CoolException("娉㈡鏄庣粏涓嶅瓨鍦紒锛�"); + } + List<Long> ids = items.stream().map(WaveItem::getId).collect(Collectors.toList()); if (!waveItemService.update(new LambdaUpdateWrapper<WaveItem>() - .set(WaveItem::getExceStatus, WaveItemExceStatus.WAVE_EXCE_STATUS_ING.val) - .set(WaveItem::getWorkQty, item.getAnfme()) - .in(WaveItem::getId, waveItems))) { - throw new CoolException("涓嬪彂鎵ц寮傚父锛岃绋嶅�欓噸璇曪紒"); + .set(WaveItem::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val) + .in(WaveItem::getId, ids))) { + throw new CoolException("鎵ц鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + } + + WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>() + .eq(WaveRule::getType, WaveRuleType.First_In_First_Out.type)); + if (Cools.isEmpty(waveRule)) { + throw new CoolException("鏈壘鍒板綋鍓嶇瓥鐣�"); + } + + List<WaveToLocParams> params = new ArrayList<>(); + for (WaveItem item : items) { + WaveToLocParams locParams = new WaveToLocParams(); + BeanUtils.copyProperties(item, locParams); + locParams.setBatch(item.getSplrBatch()) + .setItemId(item.getId()) + .setWaveId(item.getWaveId()); + params.add(locParams); + } + List<OrderOutItemDto> results = LocManageUtil.getOutOrderList(params, waveRule); + if (results.isEmpty()) { + wave.setUpdateBy(loginUserId).setUpdateTime(new Date()); + if (wave.getAnfme().compareTo(wave.getWorkQty()) == 0) { + wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_TASK.val); + } else { + wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val); + } + wave.setMemo("-->搴撳瓨涓嶈冻"); + waveService.updateById(wave); + return R.ok(); + } + try { + /**鐢熸垚鍑哄簱浠诲姟*/ + generateOutTask(results, loginUserId, wave); + } catch (Exception e) { + log.error("UNK", e); + throw new CoolException(e.getMessage()); + } + + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>() + .in(TaskItem::getSource, ids)); + 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(WaveExceStatus.WAVE_EXCE_STATUS_EXCING.val); + } else { + waveItem.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_TASK.val); + } + + if (!waveItemService.update(new LambdaUpdateWrapper<WaveItem>() + .set(WaveItem::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK.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, wave.getId()))) { + 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()) - .eq(Wave::getId, waveId))) { - throw new CoolException("娉㈡鐘舵�佷慨鏀瑰け璐ワ紒锛�"); + + return R.ok(); + } + + /** + * 缁堟娉㈡涓嬪彂浠诲姟 + * + * @param id + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public R stopPubTask(Long id) { + Wave wave = this.getById(id); + if (Objects.isNull(wave)) { + throw new CoolException("娉㈡鍗曚笉瀛樺湪锛侊紒"); } + + List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>() + .eq(TaskItem::getSourceId, wave.getId())); + if (!taskItems.isEmpty()) { + throw new CoolException("宸茬敓鎴愪换鍔′笉鍙粓姝㈠綋鍓嶆尝娆★紒锛�"); + } + + List<WaveOrderRela> orderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>().eq(WaveOrderRela::getWaveId, id)); + if (orderRelas.isEmpty()) { + throw new CoolException("鏃犲叧鑱旀槑缁�!!"); + } + + List<Long> orderIds = orderRelas.stream().map(WaveOrderRela::getOrderItemId).collect(Collectors.toList()); + List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().in(WkOrderItem::getId, orderIds)); + orderItems.forEach(asnOrderItem -> { + asnOrderItem.setWorkQty(0.0); + if (!asnOrderItemService.updateById(asnOrderItem)) { + throw new CoolException("鍗曟嵁鏄庣粏鏇存柊澶辫触锛�!"); + } + }); + + List<Long> orders = orderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toList()); + if (!asnOrderService.update(new LambdaUpdateWrapper<WkOrder>() + .set(WkOrder::getWorkQty, 0.0) + .set(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val) + .in(WkOrder::getId, orders))) { + throw new CoolException("鍗曟嵁鏇存柊澶辫触锛�!"); + } + + this.update(new LambdaUpdateWrapper<Wave>() + .eq(Wave::getId, id) + .set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK.val)); + return R.ok(); } @@ -196,7 +277,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()); @@ -210,27 +290,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("娉㈡涓诲崟淇℃伅淇敼澶辫触锛侊紒"); -// } } /** -- Gitblit v1.9.1