From ffa9b04fbb25726c77458da5607c1b43bdd62603 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 15 七月 2025 08:25:46 +0800 Subject: [PATCH] no message --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java | 121 +++++++++++++++++++--------------------- 1 files changed, 58 insertions(+), 63 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 7068b65..cc537cf 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 @@ -15,6 +15,7 @@ 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; @@ -40,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()); @@ -73,6 +74,8 @@ private DeviceSiteService deviceSiteService; @Autowired private LocService locService; + @Autowired + private WaveOrderRelaServiceImpl waveOrderRelaService; /** @@ -84,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()); @@ -118,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("鍗曟嵁涓嶅瓨鍦紒锛�"); } @@ -149,7 +152,7 @@ } } - 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))) { @@ -178,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)) { @@ -192,6 +195,8 @@ .setId(null) .setUpdateBy(loginUserId) .setCreateBy(loginUserId) + .setCreateTime(new Date()) + .setUpdateTime(new Date()) .setPoCode(delivery.getCode()); if (!this.save(order)) { throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒"); @@ -275,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); @@ -296,15 +303,17 @@ throw new CoolException("娉㈡淇濆瓨澶辫触锛侊紒"); } - List<Long> list = orders.stream().map(AsnOrder::getId).collect(Collectors.toList()); + List<Long> list = orders.stream().map(WkOrder::getId).collect(Collectors.toList()); List<AsnOrderItem> orderItems = asnOrderItemService .list(new LambdaQueryWrapper<AsnOrderItem>() .in(AsnOrderItem::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("娉㈡鏄庣粏淇濆瓨澶辫触锛侊紒"); } @@ -316,16 +325,40 @@ for (int i = 0; i < orderItems.size(); i++) { orderItems.get(i).setWorkQty(orderItems.get(i).getAnfme()); } + + /** + *璁㈠崟淇℃伅瀛樺偍鑷抽�昏緫鍏宠仈琛� + */ + for (WaveItem item : waveItems) { + List<AsnOrderItem> 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("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�"); } } @@ -346,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("涓氬姟绫诲瀷涓嶈兘涓虹┖锛侊紒"); } @@ -384,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("涓诲崟淇℃伅涓嶈兘涓虹┖锛侊紒"); } @@ -413,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("鏈壘鍒板綋鍓嶇瓥鐣�"); } @@ -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("鍑哄簱鍗曟嵁涓嶅瓨鍦紒锛�"); } @@ -530,7 +564,7 @@ public R cancelOutOrderByItems(List<AsnOrderItem> orderItems) { Map<Long, List<AsnOrderItem>> listMap = orderItems.stream().collect(Collectors.groupingBy(AsnOrderItem::getAsnId)); for (Long key : listMap.keySet()) { - AsnOrder order = this.getById(key); + WkOrder order = this.getById(key); if (Objects.isNull(order)) { throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�"); } @@ -555,7 +589,7 @@ } } - 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>() @@ -567,50 +601,11 @@ } - 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()))); - List<LocItem> locsSet = locItems.stream().filter(locItem -> locItem.getAnfme().compareTo(asnOrderItem.getAnfme()) == 0.0).collect(Collectors.toList()); - if (!locsSet.isEmpty()) { - return locsSet; - } - return locItems; - } - - 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<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()) @@ -620,11 +615,11 @@ } List<LocItem> locItems = new ArrayList<>(); if (WaveRuleType.Efficiency_First.type.equals(waveRule.getType())) { - locItems = getEfficiencyFirstItemList(asnOrderItem); + locItems = LocManageUtil.getEfficiencyFirstItemList(asnOrderItem.getMatnrCode(), asnOrderItem.getSplrBatch(), asnOrderItem.getAnfme()); } else if (WaveRuleType.First_In_First_Out.type.equals(waveRule.getType())) { - locItems = getFirstInFirstOutItemList(asnOrderItem); + locItems = LocManageUtil.getFirstInFirstOutItemList(asnOrderItem.getMatnrCode(), asnOrderItem.getSplrBatch(), asnOrderItem.getAnfme()); } else { - locItems = getFirstInFirstOutItemList(asnOrderItem); + locItems = LocManageUtil.getFirstInFirstOutItemList(asnOrderItem.getMatnrCode(), asnOrderItem.getSplrBatch(), asnOrderItem.getAnfme()); } for (LocItem locItem : locItems) { Loc loc = locService.getById(locItem.getLocId()); -- Gitblit v1.9.1