From 91831843f3b9fa4c9f29e518e10dae5d3f9aead8 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期四, 30 四月 2026 10:40:51 +0800
Subject: [PATCH] 增加几种出入库单类型
---
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java | 140 ++++++++++++++++++++++++++++------------------
1 files changed, 85 insertions(+), 55 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
index a8b30e1..535bd96 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -406,64 +406,58 @@
return R.error("鍗曟嵁淇℃伅涓嶅瓨鍦紒锛�");
}
List<TaskItem> taskItems = params.getTaskItems();
- Map<String, List<TaskItem>> listMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getMatnrCode));
- // 鎷h揣瀹屾垚浠呮墸鍑忓簱浣嶆暟閲忓苟绱姞 TaskItem.qty锛屼笉鏇存柊鍑哄簱鍗�/璁㈠崟锛涘緟鎵樼洏鍏ㄩ儴鎷e畬鍦� saveWavePick 鍐嶆寜椤哄簭鏇存柊搴撳瓨骞舵牎楠�
+ // 鎸夎鍗曟槑缁嗚鍖哄垎锛氬悓鍗曞悓鐗╂枡澶氳涓嶅緱鎸� matnr 鍚堝苟
Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
- listMap.keySet().forEach(code -> {
- List<TaskItem> items = listMap.get(code);
- WkOrderItem orderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
- .eq(WkOrderItem::getMatnrCode, code)
- .eq(WkOrderItem::getOrderId, order.getId()));
+ Map<Long, Double> batchPickSumByOrderItem = new HashMap<>();
+ for (TaskItem taskItemParam : taskItems) {
+ TaskItem item = taskItemService.getById(taskItemParam.getId());
+ if (Objects.isNull(item)) {
+ throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+ WkOrderItem orderItem = resolveOrderItemForPick(item, order.getId());
if (Objects.isNull(orderItem)) {
throw new CoolException("鏁版嵁閿欒锛屾嫞鏂欎笉鍦ㄥ崟鎹渶姹備腑锛侊紒");
}
- Double summed = items.stream().mapToDouble(ti -> ti.getAnfme() != null ? ti.getAnfme() : 0.0).sum();
- Double pickQty = Math.round((orderItem.getQty() != null ? orderItem.getQty() : 0.0) + summed) * 1000000.0 / 1000000.0;
+ Double pickInc = taskItemParam.getAnfme() != null ? taskItemParam.getAnfme() : 0.0;
+ Double prevBatch = batchPickSumByOrderItem.getOrDefault(orderItem.getId(), 0.0);
+ Double pickQty = Math.round((orderItem.getQty() != null ? orderItem.getQty() : 0.0) + prevBatch + pickInc) * 1000000.0 / 1000000.0;
if (!Objects.isNull(config) && !Boolean.parseBoolean(config.getVal())) {
if (pickQty.compareTo(orderItem.getAnfme()) > 0.0) {
throw new CoolException("鎾鏁伴噺涓嶈兘瓒呭嚭璁㈠崟闇�姹傛暟閲�");
}
+ Double v = Math.round(((item.getQty() != null ? item.getQty() : 0.0) + pickInc) * 1000000.0) / 1000000.0;
+ if (item.getAnfme() != null && item.getAnfme().compareTo(v) < 0.0) {
+ throw new CoolException("褰撳墠鐗╂枡宸茶秴鍑哄彲鎷h寖鍥达紝璇锋牳瀵瑰悗鍐嶆搷浣滐紒锛�");
+ }
}
-
- items.forEach(taskItem -> {
- TaskItem item = taskItemService.getById(taskItem.getId());
- if (Objects.isNull(item)) {
- throw new CoolException("浠诲姟鏄庣粏涓嶅瓨鍦紒锛�");
- }
- if (!Objects.isNull(config) && !Boolean.parseBoolean(config.getVal())) {
- Double v = Math.round(((item.getQty() != null ? item.getQty() : 0.0) + (taskItem.getAnfme() != null ? taskItem.getAnfme() : 0.0)) * 1000000.0) / 1000000.0;
- if (item.getAnfme() != null && item.getAnfme().compareTo(v) < 0.0) {
- throw new CoolException("褰撳墠鐗╂枡宸茶秴鍑哄彲鎷h寖鍥达紝璇锋牳瀵瑰悗鍐嶆搷浣滐紒锛�");
- }
- }
- Double picQty = Math.round(((item.getQty() != null ? item.getQty() : 0.0) + (taskItem.getAnfme() != null ? taskItem.getAnfme() : 0.0)) * 1000000.0) / 1000000.0;
- item.setQty(picQty).setOrderId(order.getId()).setOrderItemId(orderItem.getId());
- if (!taskItemService.updateById(item)) {
- throw new CoolException("鎷h揣鏁伴噺鏇存柊澶辫触锛侊紒");
- }
- if (StringUtils.isNotBlank(task.getOrgLoc())) {
- LocItem locItem = locItemService.getOne(new LambdaQueryWrapper<LocItem>()
- .eq(LocItem::getLocCode, task.getOrgLoc())
- .eq(LocItem::getMatnrId, item.getMatnrId())
- .eq(StringUtils.isNotBlank(item.getBatch()), LocItem::getBatch, item.getBatch())
- .eq(StringUtils.isNotBlank(item.getFieldsIndex()), LocItem::getFieldsIndex, item.getFieldsIndex()));
- if (Objects.nonNull(locItem)) {
- Double pickAmt = taskItem.getAnfme() != null ? taskItem.getAnfme() : 0.0;
- Double newAnfme = Math.round((locItem.getAnfme() - pickAmt) * 1000000.0) / 1000000.0;
- if (newAnfme.compareTo(0.0) <= 0) {
- locItemService.removeById(locItem.getId());
- } else {
- locItem.setAnfme(newAnfme)
- .setUpdateBy(SystemAuthUtils.getLoginUserId())
- .setUpdateTime(new Date());
- if (!locItemService.updateById(locItem)) {
- throw new CoolException("搴撲綅鏄庣粏鏁伴噺鎵e噺澶辫触锛侊紒");
- }
+ batchPickSumByOrderItem.merge(orderItem.getId(), pickInc, (a, b) -> (a != null ? a : 0.0) + (b != null ? b : 0.0));
+ Double picQty = Math.round(((item.getQty() != null ? item.getQty() : 0.0) + pickInc) * 1000000.0) / 1000000.0;
+ item.setQty(picQty).setOrderId(order.getId()).setOrderItemId(orderItem.getId());
+ if (!taskItemService.updateById(item)) {
+ throw new CoolException("鎷h揣鏁伴噺鏇存柊澶辫触锛侊紒");
+ }
+ if (StringUtils.isNotBlank(task.getOrgLoc())) {
+ LocItem locItem = locItemService.getOne(new LambdaQueryWrapper<LocItem>()
+ .eq(LocItem::getLocCode, task.getOrgLoc())
+ .eq(LocItem::getMatnrId, item.getMatnrId())
+ .eq(StringUtils.isNotBlank(item.getBatch()), LocItem::getBatch, item.getBatch())
+ .eq(StringUtils.isNotBlank(item.getFieldsIndex()), LocItem::getFieldsIndex, item.getFieldsIndex()));
+ if (Objects.nonNull(locItem)) {
+ Double pickAmt = pickInc;
+ Double newAnfme = Math.round((locItem.getAnfme() - pickAmt) * 1000000.0) / 1000000.0;
+ if (newAnfme.compareTo(0.0) <= 0) {
+ locItemService.removeById(locItem.getId());
+ } else {
+ locItem.setAnfme(newAnfme)
+ .setUpdateBy(SystemAuthUtils.getLoginUserId())
+ .setUpdateTime(new Date());
+ if (!locItemService.updateById(locItem)) {
+ throw new CoolException("搴撲綅鏄庣粏鏁伴噺鎵e噺澶辫触锛侊紒");
}
}
}
- });
- });
+ }
+ }
return R.ok();
}
@@ -607,18 +601,27 @@
WkOrder order = asnOrderService.getById(orderId);
if (order == null) continue;
List<TaskItem> items = byOrder.get(orderId);
- Map<String, List<TaskItem>> byMatnr = items.stream().collect(Collectors.groupingBy(TaskItem::getMatnrCode));
- for (String code : byMatnr.keySet()) {
- List<TaskItem> matItems = byMatnr.get(code);
- WkOrderItem orderItem = asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
- .eq(WkOrderItem::getMatnrCode, code)
- .eq(WkOrderItem::getOrderId, orderId));
- if (orderItem == null) continue;
+ Map<Long, List<TaskItem>> byOrderItem = new LinkedHashMap<>();
+ for (TaskItem ti : items) {
+ WkOrderItem oi = resolveOrderItemForPick(ti, orderId);
+ if (oi == null) {
+ continue;
+ }
+ byOrderItem.computeIfAbsent(oi.getId(), k -> new ArrayList<>()).add(ti);
+ }
+ for (Map.Entry<Long, List<TaskItem>> e : byOrderItem.entrySet()) {
+ WkOrderItem orderItem = asnOrderItemService.getById(e.getKey());
+ if (orderItem == null) {
+ continue;
+ }
+ List<TaskItem> matItems = e.getValue();
Double summed = matItems.stream().mapToDouble(t -> t.getQty() != null ? t.getQty() : 0.0).sum();
orderItem.setQty(summed);
asnOrderItemService.updateById(orderItem);
String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_CODE, null);
- if (StringUtils.isBlank(ruleCode)) continue;
+ if (StringUtils.isBlank(ruleCode)) {
+ continue;
+ }
Stock stock = new Stock();
stock.setCode(ruleCode)
.setUpdateBy(loginUserId)
@@ -630,7 +633,9 @@
.setSourceCode(orderItem.getOrderCode())
.setUpdateTime(new Date())
.setAnfme(summed);
- if (!stockService.save(stock)) continue;
+ if (!stockService.save(stock)) {
+ continue;
+ }
List<StockItem> stockItems = new ArrayList<>();
for (TaskItem ti : matItems) {
StockItem si = new StockItem();
@@ -666,6 +671,31 @@
}
+ /**
+ * 娉㈡鎷h揣锛氫换鍔℃槑缁嗕笌璁㈠崟琛屽搴旓紙orderItemId 浼樺厛锛屽惁鍒欒鍐呯爜 platItemId锛夛紝閬垮厤鍚屽崟鍚屾枡澶氳鍙懡涓竴鏉�
+ */
+ private WkOrderItem resolveOrderItemForPick(TaskItem taskItem, Long orderId) {
+ if (taskItem.getOrderItemId() != null) {
+ WkOrderItem oi = asnOrderItemService.getById(taskItem.getOrderItemId());
+ if (oi != null && orderId.equals(oi.getOrderId())) {
+ return oi;
+ }
+ }
+ if (StringUtils.isNotBlank(taskItem.getPlatItemId())) {
+ WkOrderItem oi = asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
+ .eq(WkOrderItem::getOrderId, orderId)
+ .eq(WkOrderItem::getPlatItemId, taskItem.getPlatItemId())
+ .last("LIMIT 1"));
+ if (oi != null) {
+ return oi;
+ }
+ }
+ return asnOrderItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
+ .eq(WkOrderItem::getMatnrCode, taskItem.getMatnrCode())
+ .eq(WkOrderItem::getOrderId, orderId)
+ .last("LIMIT 1"));
+ }
+
private Boolean checkWaveComplete(TaskItem taskItem) {
Wave wave = waveService.getById(taskItem.getSourceId());
List<WkOrder> wkOrderList = asnOrderService.list(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getWaveId, wave.getId()));
--
Gitblit v1.9.1