From 273f2e5d3941b0e720e5eabd7dba9cfc042c3267 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期二, 17 六月 2025 17:04:53 +0800 Subject: [PATCH] 出库单生成波次功能开发 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java | 46 +++++++++++++++++++++++++--------------------- 1 files changed, 25 insertions(+), 21 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 849a6fd..46d5648 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 @@ -279,13 +279,13 @@ if (Objects.isNull(ids) || ids.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<AsnOrder> orders = this.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, ids)); if (orders.isEmpty()) { throw new CoolException("褰撳墠鍗曟嵁鐘舵�佷笉鑳芥墽琛屾尝娆$敓鎴愭搷浣滐紒锛�"); } - double sum = orders.stream().mapToDouble(AsnOrder::getAnfme).sum(); + Double sum = orders.stream().mapToDouble(AsnOrder::getAnfme).sum(); + Double workQty = orders.stream().mapToDouble(AsnOrder::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)) { @@ -295,7 +295,7 @@ .setType(Short.parseShort("1")) .setCode(ruleCode) .setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_INIT.val) - .setAnfme(sum); + .setAnfme(anfme); if (!waveService.save(wave)) { throw new CoolException("娉㈡淇濆瓨澶辫触锛侊紒"); } @@ -306,13 +306,13 @@ 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("涓诲崟淇敼澶辫触锛侊紒"); } @@ -325,14 +325,17 @@ 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 (AsnOrder 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) + .in(AsnOrder::getId, ids))) { + throw new CoolException("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�"); + } } + return R.ok("鎿嶄綔瀹屾垚锛侊紒"); } @@ -442,12 +445,14 @@ 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::getCode, param.getLocCode()).eq(Loc::getBarcode, param.getBarcode())); @@ -697,12 +702,11 @@ private List<WaveItem> mergeWave(List<AsnOrderItem> 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()) @@ -735,7 +739,7 @@ p1.getUpdateBy(), p1.getMemo() ), - WaveItem::getSplrBatch, WaveItem::getMatnrCode, WaveItem::getFieldsIndex + WaveItem::getSplrBatch, WaveItem::getMatnrId, WaveItem::getFieldsIndex ); return waveItems; -- Gitblit v1.9.1