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/OutStockServiceImpl.java | 148 ++++++++++++++++++++++++++++++------------------- 1 files changed, 90 insertions(+), 58 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java index 62c4b3e..dd29375 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java @@ -41,7 +41,7 @@ * @time 2025/3/7 08:02 */ @Service("outStockServiceImpl") -public class OutStockServiceImpl extends ServiceImpl<AsnOrderMapper, AsnOrder> implements OutStockService { +public class OutStockServiceImpl extends ServiceImpl<AsnOrderMapper, WkOrder> implements OutStockService { public Logger logger = LoggerFactory.getLogger(this.getClass()); @@ -74,6 +74,8 @@ private DeviceSiteService deviceSiteService; @Autowired private LocService locService; + @Autowired + private WaveOrderRelaServiceImpl waveOrderRelaService; /** @@ -85,7 +87,7 @@ */ @Transactional(rollbackFor = Exception.class) public void svaeOrUpdateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) throws Exception { - AsnOrder orders = params.getOrders(); + WkOrder orders = params.getOrders(); params.getItems().forEach(item -> { item.put("asnId", orders.getId()); item.put("asnCode", orders.getCode()); @@ -96,9 +98,9 @@ throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒"); } }); - List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() - .eq(AsnOrderItem::getAsnId, params.getOrders().getId())); - Double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); + List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() + .eq(WkOrderItem::getAsnId, params.getOrders().getId())); + Double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum(); orders.setAnfme(sum); if (!this.updateById(orders)) { throw new CoolException("璁″垝鏀惰揣鏁伴噺淇敼澶辫触锛侊紒"); @@ -119,7 +121,7 @@ if (Cools.isEmpty(id)) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } - AsnOrder order = this.getById(id); + WkOrder order = this.getById(id); if (Objects.isNull(order)) { throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); } @@ -127,9 +129,9 @@ throw new CoolException("褰撳墠鍗曟嵁鐘舵�佷负" + AsnExceStatus.getExceStatus(order.getExceStatus()) + "锛� 涓嶅彲鎵ц鍙栨秷鎿嶄綔锛侊紒"); } - List<AsnOrderItem> orderItems = outStockItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, id)); + List<WkOrderItem> orderItems = outStockItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getAsnId, id)); if (!orderItems.isEmpty()) { - for (AsnOrderItem orderItem : orderItems) { + for (WkOrderItem orderItem : orderItems) { if (!Objects.isNull(orderItem.getPoDetlId())) { DeliveryItem deliveryItem = deliveryItemService.getById(orderItem.getPoDetlId()); Double workQty = Math.round((deliveryItem.getWorkQty() - orderItem.getAnfme()) * 10000) / 10000.0; @@ -150,10 +152,10 @@ } } - if (!this.remove(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, id))) { + if (!this.remove(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getId, id))) { throw new CoolException("涓诲崟鍒犻櫎澶辫触锛侊紒"); } - if (!outStockItemService.remove(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, id))) { + if (!outStockItemService.remove(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getAsnId, id))) { throw new CoolException("鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛侊紒"); } return R.ok("鎿嶄綔鎴愬姛"); @@ -179,7 +181,7 @@ if (Objects.isNull(delivery)) { throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); } - AsnOrder order = new AsnOrder(); + WkOrder order = new WkOrder(); BeanUtils.copyProperties(delivery, order); String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, order); if (StringUtils.isBlank(ruleCode)) { @@ -193,14 +195,16 @@ .setId(null) .setUpdateBy(loginUserId) .setCreateBy(loginUserId) + .setCreateTime(new Date()) + .setUpdateTime(new Date()) .setPoCode(delivery.getCode()); if (!this.save(order)) { throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒"); } - List<AsnOrderItem> orderItems = new ArrayList<>(); + List<WkOrderItem> orderItems = new ArrayList<>(); listMap.get(key).forEach(item -> { DeliveryItem deliveryItem = deliveryItemService.getById(item.getId()); - AsnOrderItem orderItem = new AsnOrderItem(); + WkOrderItem orderItem = new WkOrderItem(); if (item.getAnfme().compareTo(0.0) <= 0) { throw new CoolException("鍑哄簱鏁伴噺涓嶈兘灏忎簬鎴栫瓑浜庨浂锛侊紒"); } @@ -237,7 +241,7 @@ } }); - Double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum(); + Double sum = orderItems.stream().mapToDouble(WkOrderItem::getAnfme).sum(); //淇敼璁″垝鏁伴噺 order.setAnfme(sum).setWorkQty(0.0); if (!this.saveOrUpdate(order)) { @@ -276,12 +280,14 @@ if (Objects.isNull(params.getIds()) || params.getIds().isEmpty()) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } - List<AsnOrder> orders = this.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, params.getIds())); + List<WkOrder> orders = this.list(new LambdaQueryWrapper<WkOrder>() + .eq(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val) + .in(WkOrder::getId, params.getIds())); if (orders.isEmpty()) { throw new CoolException("褰撳墠鍗曟嵁鐘舵�佷笉鑳芥墽琛屾尝娆$敓鎴愭搷浣滐紒锛�"); } - Double sum = orders.stream().mapToDouble(AsnOrder::getAnfme).sum(); - Double workQty = orders.stream().mapToDouble(AsnOrder::getWorkQty).sum(); + Double sum = orders.stream().mapToDouble(WkOrder::getAnfme).sum(); + Double workQty = orders.stream().mapToDouble(WkOrder::getWorkQty).sum(); Double anfme = Math.round((sum - workQty) * 10000) / 10000.0; Wave wave = new Wave(); String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAVE_TYPE, null); @@ -297,15 +303,17 @@ throw new CoolException("娉㈡淇濆瓨澶辫触锛侊紒"); } - List<Long> list = orders.stream().map(AsnOrder::getId).collect(Collectors.toList()); - List<AsnOrderItem> orderItems = asnOrderItemService - .list(new LambdaQueryWrapper<AsnOrderItem>() - .in(AsnOrderItem::getAsnId, list).apply("anfme > work_qty")); + List<Long> list = orders.stream().map(WkOrder::getId).collect(Collectors.toList()); + List<WkOrderItem> orderItems = asnOrderItemService + .list(new LambdaQueryWrapper<WkOrderItem>() + .in(WkOrderItem::getAsnId, list).apply("anfme > work_qty")); if (orderItems.isEmpty()) { throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); } + //鍚堝苟鐗╂枡锛岀敓鎴愭尝娆℃槑缁� List<WaveItem> waveItems = mergeWave(orderItems, wave); + if (!waveItemService.saveBatch(waveItems)) { throw new CoolException("娉㈡鏄庣粏淇濆瓨澶辫触锛侊紒"); } @@ -317,16 +325,40 @@ for (int i = 0; i < orderItems.size(); i++) { orderItems.get(i).setWorkQty(orderItems.get(i).getAnfme()); } + + /** + *璁㈠崟淇℃伅瀛樺偍鑷抽�昏緫鍏宠仈琛� + */ + for (WaveItem item : waveItems) { + List<WkOrderItem> items = orderItems.stream() + .filter(orderItem -> item.getMatnrId() + .equals(orderItem.getMatnrId())) + .collect(Collectors.toList()); + + items.forEach(orderItem -> { + WaveOrderRela orderRela = new WaveOrderRela(); + orderRela.setId(null) + .setOrderId(orderItem.getAsnId()) + .setOrderItemId(orderItem.getId()) + .setWaveId(wave.getId()) + .setWaveItemId(item.getId()); + if (!waveOrderRelaService.saveOrUpdate(orderRela)) { + throw new CoolException("<UNK>"); + } + }); + } + + if (!asnOrderItemService.saveOrUpdateBatch(orderItems)) { throw new CoolException("鍑哄簱鍗曟墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�"); } - for (AsnOrder order : orders) { + for (WkOrder order : orders) { Double wkQty = Math.round((order.getWorkQty() + order.getAnfme()) * 10000) / 10000.0; - if (!this.update(new LambdaUpdateWrapper<AsnOrder>() - .set(AsnOrder::getWaveId, wave.getId()) - .set(AsnOrder::getWorkQty, wkQty) - .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val) - .eq(AsnOrder::getId, order.getId()))) { + if (!this.update(new LambdaUpdateWrapper<WkOrder>() + .set(WkOrder::getWaveId, wave.getId()) + .set(WkOrder::getWorkQty, wkQty) + .set(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val) + .eq(WkOrder::getId, order.getId()))) { throw new CoolException("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�"); } } @@ -347,7 +379,7 @@ if (Objects.isNull(params.getOrders())) { throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖"); } - AsnOrder orders = params.getOrders(); + WkOrder orders = params.getOrders(); if (StringUtils.isBlank(orders.getWkType())) { throw new CoolException("涓氬姟绫诲瀷涓嶈兘涓虹┖锛侊紒"); } @@ -385,7 +417,7 @@ */ @Override public R updateOrderItem(AsnOrderAndItemsParams params, Long loginUserId) { - AsnOrder orders = params.getOrders(); + WkOrder orders = params.getOrders(); if (Objects.isNull(orders)) { throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖锛侊紒"); } @@ -414,7 +446,8 @@ if (Cools.isEmpty(param.getOrderId())) { throw new CoolException("鍗曟嵁ID涓虹┖"); } - WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>().eq(WaveRule::getId, param.getWaveId())); + WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>() + .eq(WaveRule::getId, param.getWaveId())); if (Cools.isEmpty(waveRule)) { throw new CoolException("鏈壘鍒板綋鍓嶇瓥鐣�"); } @@ -452,11 +485,11 @@ List<LocItem> locItems = new ArrayList<>(); LocItem locItem = locItemService.getById(param.getId()); - AsnOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<AsnOrderItem>() - .eq(AsnOrderItem::getAsnId, outId) - .eq(StringUtils.isNotBlank(locItem.getBatch()), AsnOrderItem::getSplrBatch, locItem.getBatch()) - .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), AsnOrderItem::getFieldsIndex, locItem.getFieldsIndex()) - .eq(AsnOrderItem::getMatnrId, locItem.getMatnrId())); + WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>() + .eq(WkOrderItem::getAsnId, outId) + .eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch()) + .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex()) + .eq(WkOrderItem::getMatnrId, locItem.getMatnrId())); if (Objects.isNull(orderItem)) { throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); @@ -496,7 +529,7 @@ Double sum = Items.stream().mapToDouble(OutStockToTaskParams::getOutQty).sum(); //鏇存柊鍑哄簱鍗曟槑缁嗗強涓诲崟 - AsnOrder outOrder = outStockService.getById(outId); + WkOrder outOrder = outStockService.getById(outId); if (Objects.isNull(outOrder)) { throw new CoolException("鍑哄簱鍗曟嵁涓嶅瓨鍦紒锛�"); } @@ -528,16 +561,16 @@ @Override @Transactional(rollbackFor = Exception.class) - public R cancelOutOrderByItems(List<AsnOrderItem> orderItems) { - Map<Long, List<AsnOrderItem>> listMap = orderItems.stream().collect(Collectors.groupingBy(AsnOrderItem::getAsnId)); + public R cancelOutOrderByItems(List<WkOrderItem> orderItems) { + Map<Long, List<WkOrderItem>> listMap = orderItems.stream().collect(Collectors.groupingBy(WkOrderItem::getAsnId)); for (Long key : listMap.keySet()) { - AsnOrder order = this.getById(key); + WkOrder order = this.getById(key); if (Objects.isNull(order)) { throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); } - List<AsnOrderItem> items = listMap.get(key); + List<WkOrderItem> items = listMap.get(key); if (!items.isEmpty()) { - for (AsnOrderItem orderItem : items) { + for (WkOrderItem orderItem : items) { DeliveryItem deliveryItem = deliveryItemService.getById(orderItem.getPoDetlId()); Double workQty = Math.round((deliveryItem.getWorkQty() - orderItem.getAnfme()) * 10000) / 10000.0; deliveryItem.setWorkQty(workQty.compareTo(0.0) >= 0 ? workQty : 0); @@ -556,11 +589,11 @@ } } - if (!this.remove(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, key))) { + if (!this.remove(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getId, key))) { throw new CoolException("涓诲崟鍒犻櫎澶辫触锛侊紒"); } - if (!outStockItemService.remove(new LambdaQueryWrapper<AsnOrderItem>() - .eq(AsnOrderItem::getAsnId, key))) { + if (!outStockItemService.remove(new LambdaQueryWrapper<WkOrderItem>() + .eq(WkOrderItem::getAsnId, key))) { throw new CoolException("鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛侊紒"); } } @@ -569,25 +602,24 @@ private List<OrderOutItemDto> getOutOrderList(Long orderId, WaveRule waveRule) { - List<AsnOrderItem> asnOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() - .eq(AsnOrderItem::getAsnId, orderId)); + List<WkOrderItem> wkOrderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>() + .eq(WkOrderItem::getAsnId, orderId)); List<OrderOutItemDto> list = new ArrayList<>(); Set<ExistDto> existDtos = new HashSet<>(); - - for (AsnOrderItem asnOrderItem : asnOrderItems) { - BigDecimal issued = new BigDecimal(asnOrderItem.getAnfme().toString()) - .subtract(new BigDecimal(asnOrderItem.getWorkQty().toString()) + for (WkOrderItem wkOrderItem : wkOrderItems) { + BigDecimal issued = new BigDecimal(wkOrderItem.getAnfme().toString()) + .subtract(new BigDecimal(wkOrderItem.getWorkQty().toString()) ); if (issued.doubleValue() <= 0) { continue; } List<LocItem> locItems = new ArrayList<>(); if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) { - locItems = LocManageUtil.getEfficiencyFirstItemList(asnOrderItem.getMatnrCode(), asnOrderItem.getSplrBatch(), asnOrderItem.getAnfme()); + locItems = LocManageUtil.getEfficiencyFirstItemList(wkOrderItem.getMatnrCode(), wkOrderItem.getSplrBatch(), wkOrderItem.getAnfme()); } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) { - locItems = LocManageUtil.getFirstInFirstOutItemList(asnOrderItem.getMatnrCode(), asnOrderItem.getSplrBatch(), asnOrderItem.getAnfme()); + locItems = LocManageUtil.getFirstInFirstOutItemList(wkOrderItem.getMatnrCode(), wkOrderItem.getSplrBatch(), wkOrderItem.getAnfme()); } else { - locItems = LocManageUtil.getFirstInFirstOutItemList(asnOrderItem.getMatnrCode(), asnOrderItem.getSplrBatch(), asnOrderItem.getAnfme()); + locItems = LocManageUtil.getFirstInFirstOutItemList(wkOrderItem.getMatnrCode(), wkOrderItem.getSplrBatch(), wkOrderItem.getAnfme()); } for (LocItem locItem : locItems) { Loc loc = locService.getById(locItem.getLocId()); @@ -628,13 +660,13 @@ if (issued.doubleValue() > 0) { LocItem locItem = new LocItem() .setId(new Random().nextLong()) - .setMatnrCode(asnOrderItem.getMatnrCode()) - .setMaktx(asnOrderItem.getMaktx()) + .setMatnrCode(wkOrderItem.getMatnrCode()) + .setMaktx(wkOrderItem.getMaktx()) .setAnfme(0.00) .setWorkQty(issued.doubleValue()) .setOutQty(issued.doubleValue()) - .setUnit(asnOrderItem.getStockUnit()) - .setBatch(asnOrderItem.getSplrBatch()); + .setUnit(wkOrderItem.getStockUnit()) + .setBatch(wkOrderItem.getSplrBatch()); OrderOutItemDto orderOutItemDto = new OrderOutItemDto(); orderOutItemDto.setLocItem(locItem); list.add(orderOutItemDto); @@ -653,7 +685,7 @@ * @description 鍚堝苟鐢熸垚娉㈡ * @time 2025/4/25 10:07 */ - private List<WaveItem> mergeWave(List<AsnOrderItem> orderItems, Wave wave) { + private List<WaveItem> mergeWave(List<WkOrderItem> orderItems, Wave wave) { List<WaveItem> items = new ArrayList<>(); orderItems.forEach(order -> { Double anfme = Math.round((order.getAnfme() - order.getWorkQty()) * 10000) / 10000.0; -- Gitblit v1.9.1