From b003a49794f49a329e2702918ecfc8d14b371d0d Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期三, 04 三月 2026 14:51:25 +0800
Subject: [PATCH] 云仓WMS接口流程
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java | 186 ++++++++++++++++++++++------------------------
1 files changed, 89 insertions(+), 97 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
index 137fa7a..eea2499 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -11,6 +11,7 @@
import com.vincent.rsf.server.manager.mapper.MatnrMapper;
import com.vincent.rsf.server.manager.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vincent.rsf.server.common.utils.QuantityUtils;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import org.apache.commons.lang3.StringUtils;
@@ -66,9 +67,9 @@
WaitPakin pakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
.eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
- // 濡傛灉瀹瑰櫒鍙峰凡缁忕粍鎵樿繃锛屾彁绀哄凡缁勬墭锛岃鏇存崲瀹瑰櫒鏉$爜
+ // 濡傛灉鏂欑鐮佸凡缁忕粍鎵樿繃锛屾彁绀哄凡缁勬墭锛岃鏇存崲鏂欑鐮�
if (!Objects.isNull(pakin)) {
- throw new CoolException("宸茬粍鎵橈紝璇锋洿鎹㈠鍣ㄦ潯鐮�");
+ throw new CoolException("宸茬粍鎵橈紝璇锋洿鎹㈡枡绠辩爜");
}
List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, waitPakin.getBarcode()));
@@ -76,13 +77,13 @@
throw new CoolException("褰撳墠鏂欑宸叉湁浠诲姟妗e湪鎵ц锛屼笉鑳藉啀娆$粍鎵橈紒锛�");
}
- // 妫�鏌ュ鍣ㄥ彿鏄惁鍦ㄥ簱瀛樹腑瀛樺湪锛堥�氳繃搴撲綅琛ㄦ煡璇級
+ // 妫�鏌ユ枡绠辩爜鏄惁鍦ㄥ簱瀛樹腑瀛樺湪锛堥�氳繃搴撲綅琛ㄦ煡璇級
List<Loc> locs = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, waitPakin.getBarcode()));
if (!locs.isEmpty()) {
- throw new CoolException("鍦ㄥ簱锛岃鏇存崲瀹瑰櫒鏉$爜");
+ throw new CoolException("鍦ㄥ簱锛岃鏇存崲鏂欑鐮�");
}
- double sum = waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum();
+ Double sum = QuantityUtils.roundToScale(waitPakin.getItems().stream().mapToDouble(PakinItem::getReceiptQty).sum());
WaitPakin waitPakin1 = new WaitPakin();
if (Objects.isNull(pakin)) {
@@ -144,47 +145,49 @@
if (pakinItem1.getReceiptQty() == null || pakinItem1.getReceiptQty().compareTo(0.0) <= 0) {
throw new CoolException("缁勬墭鏁伴噺涓嶈兘灏忎簬绛変簬闆讹紒锛�");
}
- pakinItem.setAnfme(pakinItem1.getReceiptQty())
+ pakinItem.setAnfme(QuantityUtils.roundToScale(pakinItem1.getReceiptQty()))
.setTrackCode(pakinItem1.getTrackCode());
} else {
- // 鏈堿SN鍗曞彿锛屼粠鏀惰揣鍖鸿幏鍙栫墿鏂欎俊鎭�
- WarehouseAreasItem warehouseAreasItems = warehouseAreasItemService.getById(pakinItem1.getId());
- if (null == warehouseAreasItems) {
- throw new CoolException("鐗╂枡鏈�佽嚦鏀惰揣鍖猴紒锛�");
+ // 鏀惰揣鍖哄凡鍋滅敤锛氭湁ASN鍗曞彿鏃朵粠璁㈠崟鏄庣粏鑾峰彇鐗╂枡淇℃伅
+ WkOrderItem orderItem = asnOrderItemService.getById(pakinItem1.getId());
+ if (null == orderItem) {
+ throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦紒锛�");
}
-
- pakinItem.setAnfme(warehouseAreasItems.getAnfme())
+ WkOrder order = asnOrderService.getById(orderItem.getOrderId());
+ if (null == order) {
+ throw new CoolException("璁㈠崟涓嶅瓨鍦紒锛�");
+ }
+ pakinItem.setAnfme(QuantityUtils.roundToScale(orderItem.getAnfme()))
.setPakinId(waitPakin1.getId())
- .setSource(warehouseAreasItems.getId())
- .setAsnId(warehouseAreasItems.getAsnId())
- .setAsnCode(warehouseAreasItems.getAsnCode())
- .setAsnItemId(warehouseAreasItems.getAsnItemId())
- .setIsptResult(warehouseAreasItems.getIsptResult())
- .setPlatItemId(warehouseAreasItems.getPlatItemId())
- .setPlatOrderCode(warehouseAreasItems.getPlatOrderCode())
- .setPlatWorkCode(warehouseAreasItems.getPlatWorkCode())
- .setProjectCode(warehouseAreasItems.getProjectCode())
- .setBatch(warehouseAreasItems.getSplrBatch())
- .setUnit(warehouseAreasItems.getStockUnit())
- .setFieldsIndex(warehouseAreasItems.getFieldsIndex())
- .setMatnrId(warehouseAreasItems.getMatnrId())
- .setMaktx(warehouseAreasItems.getMaktx())
+ .setSource(null) // 鏀惰揣鍖哄凡鍋滅敤锛屼笉鍏宠仈鏀惰揣鍖�
+ .setAsnId(order.getId())
+ .setAsnCode(order.getCode())
+ .setAsnItemId(orderItem.getId())
+ .setIsptResult(orderItem.getIsptResult())
+ .setPlatItemId(orderItem.getPlatItemId())
+ .setPlatOrderCode(orderItem.getPlatOrderCode())
+ .setPlatWorkCode(orderItem.getPlatWorkCode())
+ .setProjectCode(orderItem.getProjectCode())
+ .setBatch(orderItem.getSplrBatch())
+ .setUnit(orderItem.getStockUnit())
+ .setFieldsIndex(orderItem.getFieldsIndex())
+ .setMatnrId(orderItem.getMatnrId())
+ .setMaktx(orderItem.getMaktx())
.setUpdateBy(userId)
.setCreateBy(userId)
- .setMatnrCode(warehouseAreasItems.getMatnrCode());
-
- WkOrder order = asnOrderService.getById(warehouseAreasItems.getAsnId());
- if (!Objects.isNull(order)) {
- pakinItem.setType(null == order.getType() ? null : order.getType())
- .setWkType(null == order.getWkType() ? null : Short.parseShort(order.getWkType()));
- }
+ .setMatnrCode(orderItem.getMatnrCode());
+ pakinItem.setType(null == order.getType() ? null : order.getType())
+ .setWkType(StringUtils.isNotBlank(order.getWkType()) ? Short.parseShort(order.getWkType()) : null);
for (PakinItem waitPakinItem : waitPakin.getItems()) {
- if (waitPakinItem.getId().equals(warehouseAreasItems.getId())) {
- if (waitPakinItem.getReceiptQty() > warehouseAreasItems.getAnfme() || waitPakinItem.getReceiptQty().compareTo(0.0) <= 0) {
- throw new CoolException("缁勬墭鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺涓斾笉鑳藉皬浜庨浂锛侊紒");
+ if (waitPakinItem.getId().equals(orderItem.getId())) {
+ if (waitPakinItem.getReceiptQty() == null || waitPakinItem.getReceiptQty().compareTo(0.0) <= 0) {
+ throw new CoolException("缁勬墭鏁伴噺涓嶈兘灏忎簬绛変簬闆讹紒锛�");
}
- pakinItem.setAnfme(waitPakinItem.getReceiptQty())
+ if (QuantityUtils.compare(waitPakinItem.getReceiptQty(), orderItem.getAnfme()) > 0) {
+ throw new CoolException("缁勬墭鏁伴噺涓嶈兘澶т簬璁″垝鏁伴噺锛侊紒");
+ }
+ pakinItem.setAnfme(QuantityUtils.roundToScale(waitPakinItem.getReceiptQty()))
.setTrackCode(waitPakinItem.getTrackCode());
}
}
@@ -200,31 +203,22 @@
List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>().eq(WaitPakinItem::getPakinId, waitPakin1.getId()));
Double waitSum = 0.0;
if (!pakinItems.isEmpty()) {
- waitSum = pakinItems.stream().mapToDouble(WaitPakinItem::getAnfme).sum();
+ waitSum = QuantityUtils.roundToScale(pakinItems.stream().mapToDouble(WaitPakinItem::getAnfme).sum());
}
// Double total = Math.round((sum + waitSum) * 100) / 100.0;
- for (WaitPakinItem pakinItem : items) {
- // 濡傛灉source涓虹┖锛堟病鏈堿SN鍗曞彿锛屼笉鍦ㄦ敹璐у尯锛夛紝璺宠繃鏀惰揣鍖烘洿鏂�
- if (Objects.isNull(pakinItem.getSource())) {
- continue;
- }
-
- WarehouseAreasItem one = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>()
- .eq(WarehouseAreasItem::getId, pakinItem.getSource()));
- if (Objects.isNull(one)) {
- throw new CoolException("鏀惰揣鍖烘暟鎹敊璇紒锛�");
- }
- Double workQty = Math.round((one.getWorkQty() + pakinItem.getAnfme()) * 1000000) / 1000000.0;
- Double qty = Math.round((workQty + one.getQty()) * 1000000) / 1000000.0;
- one.setWorkQty(workQty);
- if (qty.compareTo(one.getAnfme()) > 0) {
- throw new CoolException("缁勬墭鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺锛侊紒");
- }
- if (!warehouseAreasItemService.saveOrUpdate(one)) {
- throw new CoolException("鏀惰揣鍖烘墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�");
- }
- }
+ // 鏀惰揣鍖哄凡鍋滅敤锛屼笉鍐嶆洿鏂版敹璐у尯
+ // for (WaitPakinItem pakinItem : items) {
+ // if (Objects.isNull(pakinItem.getSource())) continue;
+ // WarehouseAreasItem one = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>()
+ // .eq(WarehouseAreasItem::getId, pakinItem.getSource()));
+ // if (Objects.isNull(one)) throw new CoolException("鏀惰揣鍖烘暟鎹敊璇紒锛�");
+ // Double workQty = Math.round((one.getWorkQty() + pakinItem.getAnfme()) * 1000000) / 1000000.0;
+ // Double qty = Math.round((workQty + one.getQty()) * 1000000) / 1000000.0;
+ // one.setWorkQty(workQty);
+ // if (qty.compareTo(one.getAnfme()) > 0) throw new CoolException("缁勬墭鏁伴噺涓嶈兘澶т簬鏀惰揣鏁伴噺锛侊紒");
+ // if (!warehouseAreasItemService.saveOrUpdate(one)) throw new CoolException("鏀惰揣鍖烘墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�");
+ // }
waitPakin1.setAnfme(waitSum);
if (!this.updateById(waitPakin1)) {
@@ -265,21 +259,22 @@
// if (!waitPakinItemService.removeByIds(ids)) {
// throw new CoolException("缁勬墭鏄庣粏瑙g粦澶辫触锛侊紒");
// }
- List<Long> list2 = pakinItems.stream().map(WaitPakinItem::getSource).collect(Collectors.toList());
- List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.listByIds(list2);
+ // 鏀惰揣鍖哄凡鍋滅敤锛氫粎淇濈暀闈炵┖ source 鐢ㄤ簬鍏煎鏃ф暟鎹紝涓嶅啀鏇存柊鏀惰揣鍖�
+ List<Long> list2 = pakinItems.stream().map(WaitPakinItem::getSource).filter(Objects::nonNull).collect(Collectors.toList());
+ List<WarehouseAreasItem> warehouseAreasItems = list2.isEmpty() ? Collections.emptyList() : warehouseAreasItemService.listByIds(list2);
for (int i1 = 0; i1 < pakinItems.size(); i1++) {
for (PakinItem item : paramItems) {
if (item.getId().equals(pakinItems.get(i1).getId())) {
- if (pakinItems.get(i1).getAnfme().compareTo(item.getReceiptQty()) > 0) {
- if (item.getReceiptQty().compareTo(0.00) == 0) {
+ if (QuantityUtils.compare(pakinItems.get(i1).getAnfme(), item.getReceiptQty()) > 0) {
+ if (QuantityUtils.compare(item.getReceiptQty(), 0.00) == 0) {
throw new CoolException("瑙g粦鏁伴噺涓嶈兘涓洪浂锛侊紒");
}
- Double reslt = Math.round((pakinItems.get(i1).getAnfme() - pakinItems.get(i1).getWorkQty() - pakinItems.get(i1).getQty()) * 1000000) / 1000000.0;
- if (item.getReceiptQty().compareTo(reslt) > 0) {
+ Double reslt = QuantityUtils.subtract(QuantityUtils.subtract(pakinItems.get(i1).getAnfme(), pakinItems.get(i1).getWorkQty()), pakinItems.get(i1).getQty());
+ if (QuantityUtils.compare(item.getReceiptQty(), reslt) > 0) {
throw new CoolException("瑙g粦鏁伴噺涓嶈兘澶т簬鍓╀綑鍙墽琛屾暟锛侊紒");
}
- Double anfme = Math.round((pakinItems.get(i1).getAnfme() - item.getReceiptQty()) * 1000000) / 1000000.0;
+ Double anfme = QuantityUtils.subtract(pakinItems.get(i1).getAnfme(), item.getReceiptQty());
pakinItems.get(i1).setAnfme(anfme);
if (!waitPakinItemService.updateById(pakinItems.get(i1))) {
throw new CoolException("缁勬墭鏄庣粏鏁伴噺淇敼澶辫触锛侊紒");
@@ -289,28 +284,28 @@
throw new CoolException("缁勬墭鏄庣粏鍒犻櫎澶辫触锛侊紒");
}
}
- for (int i = 0; i < warehouseAreasItems.size(); i++) {
- if (warehouseAreasItems.get(i).getId().equals(pakinItems.get(i1).getSource())) {
- double v = Math.round((warehouseAreasItems.get(i).getWorkQty() - item.getReceiptQty()) * 1000000) / 1000000.0;
- warehouseAreasItems.get(i).setWorkQty(v);
- if (!warehouseAreasItemService.updateById(warehouseAreasItems.get(i))) {
- throw new CoolException("鏀惰揣鍖烘暟閲忎慨鏀瑰け璐ワ紒锛�");
- }
- }
- }
+ // 鏀惰揣鍖哄凡鍋滅敤锛屼笉鍐嶅洖鍐欐敹璐у尯
+ // for (int i = 0; i < warehouseAreasItems.size(); i++) {
+ // if (warehouseAreasItems.get(i).getId().equals(pakinItems.get(i1).getSource())) {
+ // double v = Math.round((warehouseAreasItems.get(i).getWorkQty() - item.getReceiptQty()) * 1000000) / 1000000.0;
+ // warehouseAreasItems.get(i).setWorkQty(v);
+ // if (!warehouseAreasItemService.updateById(warehouseAreasItems.get(i))) {
+ // throw new CoolException("鏀惰揣鍖烘暟閲忎慨鏀瑰け璐ワ紒锛�");
+ // }
+ // }
+ // }
}
}
}
- double anfmes = paramItems.stream().mapToDouble(PakinItem::getReceiptQty).sum();
+ Double anfmes = QuantityUtils.roundToScale(paramItems.stream().mapToDouble(PakinItem::getReceiptQty).sum());
// double anfmes = warehouseAreasItems.stream().mapToDouble(WarehouseAreasItem::getAnfme).sum();
- if (waitPakins.getAnfme().compareTo(anfmes) <= 0) {
+ if (QuantityUtils.compare(waitPakins.getAnfme(), anfmes) <= 0) {
if (!waitPakinService.removeById(waitPakins.getId())) {
throw new CoolException("缁勬墭鍒犻櫎澶辫触锛侊紒");
}
} else {
- Double anfme = Math.round((waitPakins.getAnfme() - anfmes) * 1000000) / 1000000.0;
- waitPakins.setAnfme(anfme);
+ waitPakins.setAnfme(QuantityUtils.subtract(waitPakins.getAnfme(), anfmes));
if (!waitPakinService.updateById(waitPakins)) {
throw new CoolException("缁勬墭鏁版嵁淇敼澶辫触锛侊紒");
}
@@ -338,26 +333,23 @@
return R.error("缁勬嫋妗f湁鏄庣粏浠诲姟");
}
- Set<Long> sourceIds = pakinItems.stream().map(WaitPakinItem::getSource).collect(Collectors.toSet());
+ Set<Long> sourceIds = pakinItems.stream().map(WaitPakinItem::getSource).filter(Objects::nonNull).collect(Collectors.toSet());
- List<WarehouseAreasItem> areasItems = warehouseAreasItemService.list(new LambdaQueryWrapper<WarehouseAreasItem>()
- .in(WarehouseAreasItem::getId, sourceIds));
+ List<WarehouseAreasItem> areasItems = sourceIds.isEmpty() ? Collections.emptyList() : warehouseAreasItemService.list(new LambdaQueryWrapper<WarehouseAreasItem>().in(WarehouseAreasItem::getId, sourceIds));
- if (areasItems.isEmpty()) {
- return R.error("鏀惰揣鍖烘暟鎹笉瀛樺湪锛侊紒");
- }
-
- Map<Long, List<WaitPakinItem>> listMap = pakinItems.stream().collect(Collectors.groupingBy(WaitPakinItem::getSource));
- for (WarehouseAreasItem item : areasItems) {
- List<WaitPakinItem> pakin = listMap.get(item.getId());
- if (Objects.isNull(pakin)) {
- continue;
- }
- double sum = pakin.stream().mapToDouble(WaitPakinItem::getAnfme).sum();
- Double workQty = Math.round((item.getWorkQty() - sum) * 1000000) / 1000000.0;
- item.setWorkQty(workQty);
- if (!warehouseAreasItemService.updateById(item)) {
- throw new CoolException("鏀惰揣鍖烘暟鎹洖婊氬け璐ワ紒锛�");
+ // 鏀惰揣鍖哄凡鍋滅敤锛屼粎鍏煎鏃ф暟鎹椂鍥炴粴鏀惰揣鍖烘暟閲�
+ if (!areasItems.isEmpty()) {
+ Map<Long, List<WaitPakinItem>> listMap = pakinItems.stream().collect(Collectors.groupingBy(WaitPakinItem::getSource));
+ for (WarehouseAreasItem item : areasItems) {
+ List<WaitPakinItem> pakin = listMap.get(item.getId());
+ if (Objects.isNull(pakin)) {
+ continue;
+ }
+ Double sum = QuantityUtils.roundToScale(pakin.stream().mapToDouble(WaitPakinItem::getAnfme).sum());
+ item.setWorkQty(QuantityUtils.subtract(item.getWorkQty(), sum));
+ if (!warehouseAreasItemService.updateById(item)) {
+ throw new CoolException("鏀惰揣鍖烘暟鎹洖婊氬け璐ワ紒锛�");
+ }
}
}
--
Gitblit v1.9.1