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 | 286 +++++++++++++++++++++++++++++++++----------------------- 1 files changed, 168 insertions(+), 118 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 c93da6b..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 @@ -10,14 +10,12 @@ import com.vincent.rsf.server.common.constant.Constants; import com.vincent.rsf.server.manager.controller.dto.ExistDto; import com.vincent.rsf.server.manager.controller.dto.OrderOutItemDto; -import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; -import com.vincent.rsf.server.manager.controller.params.OrderOutTaskParam; -import com.vincent.rsf.server.manager.controller.params.OutStockToTaskParams; +import com.vincent.rsf.server.manager.controller.params.*; import com.vincent.rsf.server.manager.enums.*; -import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.mapper.AsnOrderMapper; import com.vincent.rsf.server.manager.service.*; +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; @@ -43,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()); @@ -76,6 +74,8 @@ private DeviceSiteService deviceSiteService; @Autowired private LocService locService; + @Autowired + private WaveOrderRelaServiceImpl waveOrderRelaService; /** @@ -87,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()); @@ -98,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("璁″垝鏀惰揣鏁伴噺淇敼澶辫触锛侊紒"); @@ -121,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("鍗曟嵁涓嶅瓨鍦紒锛�"); } @@ -129,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; @@ -152,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("鎿嶄綔鎴愬姛"); @@ -171,13 +171,9 @@ */ @Override @Transactional(rollbackFor = Exception.class) - public R genOutStock(List<Long> ids, Long loginUserId) { - if (Objects.isNull(ids) || ids.isEmpty()) { - throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); - } - List<DeliveryItem> items = deliveryItemService.list(new LambdaQueryWrapper<DeliveryItem>().in(DeliveryItem::getId, ids)); + public R genOutStock(List<DeliveryItem> items, Long loginUserId) { if (items.isEmpty()) { - throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); + throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } Map<Long, List<DeliveryItem>> listMap = items.stream().collect(Collectors.groupingBy(DeliveryItem::getDeliveryId)); listMap.keySet().forEach(key -> { @@ -185,10 +181,10 @@ 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 (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) { + if (StringUtils.isBlank(ruleCode)) { throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌� 銆孲YS_OUT_STOCK_CODE銆嶇紪鐮佹槸鍚﹁缃垚鍔�"); } order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val) @@ -199,21 +195,31 @@ .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 -> { - AsnOrderItem orderItem = new AsnOrderItem(); - Double anfme = Math.round((item.getAnfme() - item.getWorkQty() - item.getQty()) * 10000) / 10000.0; + DeliveryItem deliveryItem = deliveryItemService.getById(item.getId()); + WkOrderItem orderItem = new WkOrderItem(); + if (item.getAnfme().compareTo(0.0) <= 0) { + throw new CoolException("鍑哄簱鏁伴噺涓嶈兘灏忎簬鎴栫瓑浜庨浂锛侊紒"); + } + Double anfme = Math.round((deliveryItem.getAnfme() - item.getAnfme()) * 10000) / 10000.0; + if (anfme.compareTo(0.0) < 0) { + throw new CoolException("鍑哄簱鏁伴噺涓嶈冻锛侊紒"); + } + BeanUtils.copyProperties(item, orderItem); orderItem.setId(null) .setPoCode(order.getPoCode()) .setMaktx(item.getMaktx()) .setMatnrCode(item.getMatnrCode()) .setFieldsIndex(item.getFieldsIndex()) - .setAnfme(anfme) + .setAnfme(item.getAnfme()) .setWorkQty(0.0) .setAsnId(order.getId()) .setAsnCode(order.getCode()) @@ -235,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)) { @@ -257,7 +263,6 @@ .eq(Delivery::getId, key))) { throw new CoolException("涓诲崟淇敼澶辫触锛侊紒"); } - }); return R.ok(); } @@ -271,64 +276,93 @@ */ @Override @Transactional(rollbackFor = Exception.class) - public R generateWaves(List<Long> ids) { - if (Objects.isNull(ids) || ids.isEmpty()) { + public R generateWaves(GenWaveParams params) { + if (Objects.isNull(params.getIds()) || params.getIds().isEmpty()) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } - List<AsnOrder> orders = this.list(new LambdaQueryWrapper<AsnOrder>() - .in(AsnOrder::getId, ids) - .eq(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)); + 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 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); - if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) { + if (StringUtils.isBlank(ruleCode)) { throw new CoolException("缂栫爜瑙勫垯閿欒锛氳瑕佹煡鐪嬨�孲YS_WAVE_TYPE銆嶆槸鍚﹁缃垚鍔燂紒锛�"); } - wave.setOrderNum(ids.size()) + wave.setOrderNum(params.getIds().size()) .setType(Short.parseShort("1")) .setCode(ruleCode) .setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_INIT.val) - .setAnfme(sum); + .setAnfme(anfme); if (!waveService.save(wave)) { 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)); + + 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("娉㈡鏄庣粏淇濆瓨澶辫触锛侊紒"); } double sum1 = waveItems.stream().mapToDouble(WaveItem::getAnfme).sum(); - wave.setAnfme(sum1); + wave.setAnfme(sum1).setGroupQty(waveItems.size()); if (!waveService.saveOrUpdate(wave)) { throw new CoolException("涓诲崟淇敼澶辫触锛侊紒"); } - 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("鍑哄簱鍗曟墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�"); } - - double sum2 = orderItems.stream().mapToDouble(AsnOrderItem::getWorkQty).sum(); - if (!this.update(new LambdaUpdateWrapper<AsnOrder>() - .set(AsnOrder::getWaveId, wave.getId()) - .set(AsnOrder::getWorkQty, sum2) - .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val) - .in(AsnOrder::getId, ids))) { - throw new CoolException("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�"); + for (WkOrder order : orders) { + Double wkQty = Math.round((order.getWorkQty() + order.getAnfme()) * 10000) / 10000.0; + 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("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�"); + } } + return R.ok("鎿嶄綔瀹屾垚锛侊紒"); } @@ -345,16 +379,13 @@ if (Objects.isNull(params.getOrders())) { throw new CoolException("涓诲崟淇℃伅涓嶈兘涓虹┖"); } - AsnOrder orders = params.getOrders(); - if (Objects.isNull(orders)) { - throw new CoolException("鍗曟嵁涓嶈兘涓虹┖锛侊紒"); - } + WkOrder orders = params.getOrders(); if (StringUtils.isBlank(orders.getWkType())) { throw new CoolException("涓氬姟绫诲瀷涓嶈兘涓虹┖锛侊紒"); } String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, orders); - if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) { + if (StringUtils.isBlank(ruleCode)) { throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌ャ�孲YS_OUT_STOCK_CODE銆嶆槸鍚﹁缃纭紒锛�"); } orders.setCode(ruleCode) @@ -386,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("涓诲崟淇℃伅涓嶈兘涓虹┖锛侊紒"); } @@ -415,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("鏈壘鍒板綋鍓嶇瓥鐣�"); } @@ -438,24 +470,26 @@ throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } //浼樺厛鐢熸垚娴呭簱浣嶄换鍔� - List<OutStockToTaskParams> Items = params.stream().sorted(Comparator.comparing(OutStockToTaskParams::getLocCode).thenComparing(item -> { + List<OutStockToTaskParams> Items = params.stream() + .sorted(Comparator.comparing(OutStockToTaskParams::getLocCode) + .thenComparing(item -> { return LocUtils.isShallowLoc(item.getLocCode()) ? 1 : 0; }).reversed()).collect(Collectors.toList()); for (OutStockToTaskParams param : Items) { - if (Objects.isNull(param)) { + if (Objects.isNull(param) || StringUtils.isBlank(param.getLocCode())) { continue; } - Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, param.getBarcode())); + Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, param.getLocCode()).eq(Loc::getBarcode, param.getBarcode())); if (!Objects.isNull(loc)) { 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("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�"); @@ -476,7 +510,7 @@ .setSiteNo(param.getSiteNo()); try { //鐢熸垚鍑哄簱浠诲姟 - locItemService.generateTask(taskParams, loginUserId); + locItemService.generateTask(TaskResouceType.TASK_RESOUCE_ORDER_TYPE.val, taskParams, loginUserId); } catch (Exception e) { logger.error("UNK", e); throw new CoolException(e.getMessage()); @@ -495,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("鍑哄簱鍗曟嵁涓嶅瓨鍦紒锛�"); } @@ -512,6 +546,7 @@ /** * 鑾峰彇鍑哄簱绔欑偣 + * * @return */ @Override @@ -524,63 +559,67 @@ return R.ok(sites); } + @Override + @Transactional(rollbackFor = Exception.class) + public R cancelOutOrderByItems(List<WkOrderItem> orderItems) { + Map<Long, List<WkOrderItem>> listMap = orderItems.stream().collect(Collectors.groupingBy(WkOrderItem::getAsnId)); + for (Long key : listMap.keySet()) { + WkOrder order = this.getById(key); + if (Objects.isNull(order)) { + throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); + } + List<WkOrderItem> items = listMap.get(key); + if (!items.isEmpty()) { + 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); + if (!deliveryItemService.updateById(deliveryItem)) { + throw new CoolException("DO鍗曟槑缁嗘洿鏂板け璐ワ紒锛�"); + } - private List<LocItem> getEfficiencyFirstItemList(AsnOrderItem asnOrderItem) { - LambdaQueryWrapper<LocItem> locItemQueryWrapper = new LambdaQueryWrapper<>(); - locItemQueryWrapper.eq(LocItem::getMatnrCode, asnOrderItem.getMatnrCode()); - locItemQueryWrapper.eq(LocItem::getBatch, asnOrderItem.getSplrBatch()); - String applySql = String.format( - "EXISTS (SELECT 1 FROM man_loc ml " + - "WHERE ml.use_status = '%s'" + - "AND ml.id = man_loc_item.loc_id " + - ")", - LocStsType.LOC_STS_TYPE_F.type - ); - locItemQueryWrapper.apply(applySql); - List<LocItem> locItems = locItemService.list(locItemQueryWrapper); - locItems.sort(Comparator - .comparing((LocItem item) -> !LocUtils.isShallowLoc(item.getLocCode())) - ); - return locItems; + Delivery delivery = deliveryService.getOne(new LambdaQueryWrapper<Delivery>().eq(Delivery::getCode, orderItem.getPoCode())); + if (!Objects.isNull(delivery)) { + Double wkQty = Math.round((delivery.getWorkQty() - delivery.getAnfme()) * 10000) / 10000.0; + delivery.setWorkQty(wkQty.compareTo(0.0) >= 0 ? wkQty : 0).setExceStatus(POExceStatus.PO_EXCE_STATUS_UN_EXCE.val); + if (!deliveryService.updateById(delivery)) { + throw new CoolException("DO鍗曟嵁淇敼澶辫触锛侊紒"); + } + } + } + } + + if (!this.remove(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getId, key))) { + throw new CoolException("涓诲崟鍒犻櫎澶辫触锛侊紒"); + } + if (!outStockItemService.remove(new LambdaQueryWrapper<WkOrderItem>() + .eq(WkOrderItem::getAsnId, key))) { + throw new CoolException("鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛侊紒"); + } + } + return R.ok("鎿嶄綔鎴愬姛"); } - private List<LocItem> getFirstInFirstOutItemList(AsnOrderItem asnOrderItem) { - LambdaQueryWrapper<LocItem> locItemQueryWrapper = new LambdaQueryWrapper<>(); - locItemQueryWrapper.eq(LocItem::getMatnrCode, asnOrderItem.getMatnrCode()); - locItemQueryWrapper.eq(LocItem::getBatch, asnOrderItem.getSplrBatch()); - locItemQueryWrapper.orderByAsc(LocItem::getCreateTime); - String applySql = String.format( - "EXISTS (SELECT 1 FROM man_loc ml " + - "WHERE ml.use_status = '%s'" + - "AND ml.id = man_loc_item.loc_id " + - ")", - LocStsType.LOC_STS_TYPE_F.type - ); - locItemQueryWrapper.apply(applySql); - List<LocItem> locItems = locItemService.list(locItemQueryWrapper); - return locItems; - } 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 = null; + List<LocItem> locItems = new ArrayList<>(); if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) { - locItems = getEfficiencyFirstItemList(asnOrderItem); + locItems = LocManageUtil.getEfficiencyFirstItemList(wkOrderItem.getMatnrCode(), wkOrderItem.getSplrBatch(), wkOrderItem.getAnfme()); } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) { - locItems = getFirstInFirstOutItemList(asnOrderItem); + locItems = LocManageUtil.getFirstInFirstOutItemList(wkOrderItem.getMatnrCode(), wkOrderItem.getSplrBatch(), wkOrderItem.getAnfme()); } else { - locItems = getFirstInFirstOutItemList(asnOrderItem); + locItems = LocManageUtil.getFirstInFirstOutItemList(wkOrderItem.getMatnrCode(), wkOrderItem.getSplrBatch(), wkOrderItem.getAnfme()); } for (LocItem locItem : locItems) { Loc loc = locService.getById(locItem.getLocId()); @@ -616,9 +655,21 @@ issued = issued.subtract(new BigDecimal(locItem.getAnfme().toString())); } - } else { - } + } + if (issued.doubleValue() > 0) { + LocItem locItem = new LocItem() + .setId(new Random().nextLong()) + .setMatnrCode(wkOrderItem.getMatnrCode()) + .setMaktx(wkOrderItem.getMaktx()) + .setAnfme(0.00) + .setWorkQty(issued.doubleValue()) + .setOutQty(issued.doubleValue()) + .setUnit(wkOrderItem.getStockUnit()) + .setBatch(wkOrderItem.getSplrBatch()); + OrderOutItemDto orderOutItemDto = new OrderOutItemDto(); + orderOutItemDto.setLocItem(locItem); + list.add(orderOutItemDto); } } @@ -634,15 +685,14 @@ * @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; WaveItem item = new WaveItem(); BeanUtils.copyProperties(order, item); - item.setOrderItemId(order.getId()) - .setId(null) - .setOrderCode(order.getAsnCode()) - .setOrderId(order.getAsnId()) + item.setId(null) + .setAnfme(anfme) .setMatnrId(order.getMatnrId()) .setMaktx(order.getMaktx()) .setWaveId(wave.getId()) -- Gitblit v1.9.1