From 1068673dcf41cdf7a7a06a26aaeb5652d734eb2d Mon Sep 17 00:00:00 2001
From: skyouc <creaycat@gmail.com>
Date: 星期四, 27 十一月 2025 09:36:08 +0800
Subject: [PATCH] 添加是否允许超收判断 出库上报明细问题修复
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java | 11 +-
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java | 31 +++++--
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java | 15 +++
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java | 153 +++++++++++++++++--------------------
4 files changed, 110 insertions(+), 100 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 52a5c8c..d8b524c 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
@@ -280,7 +280,7 @@
if (Objects.isNull(orderItem)) {
throw new CoolException("鏁版嵁閿欒锛屾嫞鏂欎笉鍦ㄥ崟鎹渶姹備腑锛侊紒");
}
-
+ //taskItems涓烘嫞璐ф槑缁嗭紝浣滃弬鏁颁笂鎶�
Double summed = items.stream().mapToDouble(TaskItem::getAnfme).sum();
//鍔犱笂鍘嗗彶鎷f枡鏁伴噺
Double pickQty = Math.round((orderItem.getQty() + summed) * 100) / 100.0;
@@ -326,6 +326,14 @@
TaskItem item = taskItemService.getById(taskItem.getId());
//鍒ゆ柇鏄惁鍏佽瓒呮敹锛屼笉鍏佽瓒呮敹娣诲姞鎷掓敹鍒ゆ柇
if (!Objects.isNull(config)) {
+ LocItemWorking serviceOne = locItemWorkingService.getOne(new LambdaQueryWrapper<LocItemWorking>().eq(LocItemWorking::getFieldsIndex, item.getFieldsIndex()));
+ if (Objects.isNull(serviceOne)) {
+ throw new CoolException("缂撳瓨鏁版嵁涓㈠け锛侊紒");
+ }
+ //涓嶇鏄惁鍏佽瓒呮敹锛岄兘闇�鍒ゆ柇鏄惁瓒呭嚭搴撳瓨鑼冨洿
+ if (taskItem.getAnfme().compareTo(serviceOne.getAnfme()) > 0) {
+ throw new CoolException("鎷h揣鏁伴噺瓒呭嚭褰撳墠绁ㄥ彿搴撳瓨鏁伴噺锛侊紒");
+ }
if (!Boolean.parseBoolean(config.getVal())) {
if (item.getAnfme().compareTo(item.getQty() + taskItem.getAnfme()) < 0.0) {
throw new CoolException("鍓嶅綋鐗╂枡宸茶秴鍑哄彲鎷h寖鍥达紝璇锋牳瀵瑰悗鍐嶆搷浣滐紒锛�");
@@ -338,8 +346,9 @@
throw new CoolException("鐘舵�佸畬鎴愬け璐ワ紒锛�");
}
StockItem stockItem = new StockItem();
- BeanUtils.copyProperties(taskItem, stockItem);
- stockItem.setStockId(stock.getId()).setStockCode(stock.getCode()).setSourceItemId(orderItem.getId());
+ BeanUtils.copyProperties(item, stockItem);
+ //taskItem涓轰笂鎶ユ暟鎹�
+ stockItem.setStockId(stock.getId()).setAnfme(taskItem.getAnfme()).setStockCode(stock.getCode()).setSourceItemId(orderItem.getId());
stockItems.add(stockItem);
});
if (!stockItemService.saveBatch(stockItems)) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java
index 4db0ee7..4f31915 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReportMsgServiceImpl.java
@@ -382,94 +382,83 @@
throw new RuntimeException(e);
}
} else if (order.getType().equals(OrderType.ORDER_OUT.type)){
- List<Stock> stocks = stockService.list(new LambdaQueryWrapper<Stock>().eq(Stock::getSourceCode, order.getCode()));
- if (stocks.isEmpty()) {
- throw new CoolException("鍑哄韩姝峰彶涓嶅瓨鍦紒锛�");
+ List<StockItem> stockItems = stockItemService.list(new LambdaQueryWrapper<StockItem>().eq(StockItem::getSourceItemId, orderItem.getId()));
+ if (stockItems.isEmpty()) {
+ return;
}
String finalNickName = nickName;
- stocks.forEach(stock -> {
- //绛涢�夊綋鍓嶅敮涓�瀛楁鎵�鏈夊嚭鍏ュ簱淇℃伅
- List<StockItem> stockItems = stockItemService.list(new LambdaQueryWrapper<StockItem>()
- .eq(StockItem::getStockId, stock.getId()));
- if (stockItems.isEmpty()) {
- throw new CoolException("鍑哄韩鍠槑绱颁笉瀛樺湪锛侊紒");
- }
- //鑾峰彇搴撳瓨涓鍗曞簱浣�
-// Set<Long> longSet = stockItems.stream().map(StockItem::getStockId).collect(Collectors.toSet());
- stockItems.forEach(items -> {
- List<ReportDataParam> dataParams = new ArrayList<>();
- //鑾峰彇绱㈠紩鍐呭
- Map<String, String> fields = FieldsUtils.getFields(items.getFieldsIndex());
- //璁剧疆閫氱敤鍙傛暟
- param.setWMSNO(order.getCode())
- .setPONO(order.getPoCode())
- .setOrderNO(order.getPoCode())
- .setOrderDate(order.getCreateTime())
- .setItemCode(items.getMatnrCode())
- .setEditUser(finalNickName)
- .setEditDate(order.getUpdateTime())
- .setGoodsNO(fields.get("crushNo"))
- .setMemoDtl(order.getMemo());
-
- if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_DONE_IN.type)) {
- //閲囪喘鍏ュ簱鍗�
- params.setOrderType("PO_Instock").setAction("Update");
- //鑾峰彇鎸囧畾鏌ヨ瀛楁CrushNo 绁ㄥ彿
- param.setInQty(items.getQty());
- } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE_RETURN.type)) {
- //閲囪喘閫�璐�
- params.setOrderType("PR_Outstock").setAction("Update");
- param.setOutQty(items.getQty());
- } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER_IN.type)) {
- //璋冩嫈鍏ュ簱鍗�
- params.setOrderType("Mv_Instock").setAction("Update");
- } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD.type)) {
- //鐢熶骇鍏ュ簱鍗�
+ stockItems.forEach(stockItem -> {
+ List<ReportDataParam> dataParams = new ArrayList<>();
+ //鑾峰彇绱㈠紩鍐呭
+ Map<String, String> fields = FieldsUtils.getFields(stockItem.getFieldsIndex());
+ //璁剧疆閫氱敤鍙傛暟
+ param.setWMSNO(order.getCode())
+ .setPONO(order.getPoCode())
+ .setOrderNO(order.getPoCode())
+ .setOrderDate(order.getCreateTime())
+ .setItemCode(stockItem.getMatnrCode())
+ .setEditUser(finalNickName)
+ .setEditDate(order.getUpdateTime())
+ .setGoodsNO(fields.get("crushNo"))
+ .setMemoDtl(order.getMemo());
+ if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_DONE_IN.type)) {
+ //閲囪喘鍏ュ簱鍗�
+ params.setOrderType("PO_Instock").setAction("Update");
+ //鑾峰彇鎸囧畾鏌ヨ瀛楁CrushNo 绁ㄥ彿
+ param.setInQty(stockItem.getAnfme());
+ } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE_RETURN.type)) {
+ //閲囪喘閫�璐�
+ params.setOrderType("PR_Outstock").setAction("Update");
+ param.setOutQty(stockItem.getAnfme());
+ } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_TERANSFER_IN.type)) {
+ //璋冩嫈鍏ュ簱鍗�
+ params.setOrderType("Mv_Instock").setAction("Update");
+ } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD.type)) {
+ //鐢熶骇鍏ュ簱鍗�
// params.setOrderType("WO_Outstock").setAction("Update");
- } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type)) {
- //鐢熶骇閫�鏂�
- params.setOrderType("WR_Instock").setAction("Update");
- param.setInQty(items.getQty());
- } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) {
- //鐢熶骇棰嗘枡
- params.setOrderType("WO_Outstock").setAction("Update");
- param.setOutQty(items.getQty());
- } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD_ADDITION.type)) {
- //鐢熶骇琛ユ枡
- params.setOrderType("WR_Instock_BL").setAction("Update");
- param.setOutQty(items.getQty());
- } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_FIX_OUT.type)) {
- params.setOrderType("WO_Outstock_WR").setAction("Update");
- param.setOutQty(items.getQty());
- } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) {
- //鍏跺畠鍏ュ簱鍗�/鎵嬪姩鍏ュ簱鍗�
- params.setOrderType("In_Instock").setAction("Update");
- param.setInQty(items.getQty());
+ } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PURCHASE.type)) {
+ //鐢熶骇閫�鏂�
+ params.setOrderType("WR_Instock").setAction("Update");
+ param.setInQty(stockItem.getAnfme());
+ } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_RETURN_ORDER.type)) {
+ //鐢熶骇棰嗘枡
+ params.setOrderType("WO_Outstock").setAction("Update");
+ param.setOutQty(stockItem.getAnfme());
+ } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_PROD_ADDITION.type)) {
+ //鐢熶骇琛ユ枡
+ params.setOrderType("WR_Instock_BL").setAction("Update");
+ param.setOutQty(stockItem.getAnfme());
+ } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_FIX_OUT.type)) {
+ params.setOrderType("WO_Outstock_WR").setAction("Update");
+ param.setOutQty(stockItem.getAnfme());
+ } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER_IN.type)) {
+ //鍏跺畠鍏ュ簱鍗�/鎵嬪姩鍏ュ簱鍗�
+ params.setOrderType("In_Instock").setAction("Update");
+ param.setInQty(stockItem.getAnfme());
- } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)) {
- //鍏跺畠鍑哄簱鍗�/鎵嬪姩鍑哄簱鍗�
- params.setOrderType("Io_Outstock").setAction("Update");
- param.setOutQty(items.getQty());
- }
- dataParams.add(param);
+ } else if (order.getWkType().equals(OrderWorkType.ORDER_WORK_TYPE_OTHER.type)) {
+ //鍏跺畠鍑哄簱鍗�/鎵嬪姩鍑哄簱鍗�
+ params.setOrderType("Io_Outstock").setAction("Update");
+ param.setOutQty(stockItem.getAnfme());
+ }
+ dataParams.add(param);
- params.setData(dataParams);
- try {
- R reported = uploadReportOrders(params);
- if (Integer.valueOf(reported.get("code").toString()) == 200) {
- order.setReportOnce(5);
- asnOrderService.updateById(order);
- }
- } catch (Exception e) {
- log.error("<UNK>", e);
+ params.setData(dataParams);
+ try {
+ R reported = uploadReportOrders(params);
+ if (Integer.valueOf(reported.get("code").toString()) == 200) {
+ order.setReportOnce(5);
+ asnOrderService.updateById(order);
}
- try {
- //浼戠湢3绉�
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- });
+ } catch (Exception e) {
+ log.error("<UNK>", e);
+ }
+ try {
+ //浼戠湢3绉�
+ Thread.sleep(3000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
});
}
});
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
index b0239c1..db94bf4 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -611,19 +611,30 @@
if (wkOrders.isEmpty()) {
throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
}
+
+ Config allowChang = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.ALLOW_OVER_CHANGE));
+
wkOrders.forEach(order -> {
- //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
- if (order.getAnfme().compareTo(order.getQty()) == 0) {
- order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
-// if (order.getType().equals(OrderType.ORDER_IN)) {
-// order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val);
-// } else {
-// order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
-// }
- if (!asnOrderService.updateById(order)) {
- throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+ //鍒ゆ柇鏄惁鍏佽瓒呮敹锛屼笉鍏佽瓒呮敹娣诲姞鎷掓敹鍒ゆ柇
+ if (!Objects.isNull(allowChang)) {
+ if (!Boolean.parseBoolean(allowChang.getVal())) {
+ if (order.getAnfme().compareTo(order.getQty()) == 0) {
+ order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+ if (!asnOrderService.updateById(order)) {
+ throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+ }
+ }
+ } else {
+ if (order.getAnfme().compareTo(order.getQty()) <= 0) {
+ order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+ if (!asnOrderService.updateById(order)) {
+ throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+ }
+ }
}
}
+ //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
+
});
//鍑哄簱鍗曚笂鎶CS淇敼搴撲綅鐘舵��
try {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
index 484ccf4..43a111b 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -737,10 +737,10 @@
LocItemWorking locWorking = locItemWorkingService.getOne(new LambdaQueryWrapper<LocItemWorking>()
.eq(LocItemWorking::getTaskId, taskItem.getTaskId())
.eq(LocItemWorking::getFieldsIndex, taskItem.getFieldsIndex())
- .eq(StringUtils.isNotBlank(taskItem.getBatch()), LocItemWorking::getBatch, taskItem.getBatch())
+ .eq(StringUtils.isNotEmpty(taskItem.getBatch()), LocItemWorking::getBatch, taskItem.getBatch())
.eq(LocItemWorking::getMatnrId, taskItem.getMatnrId()));
if (Objects.isNull(locWorking)) {
- throw new CoolException("鏁版嵁閿欒锛屼綔涓氫腑搴撳瓨鏁版嵁涓㈠け锛侊紒");
+ continue;
}
if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) {
locWorking.setAnfme(taskItem.getAnfme());
@@ -1048,12 +1048,12 @@
tempLocs.forEach(working -> {
taskItems.forEach(taskItem -> {
- if (taskItem.getId().equals(working.getMatnrId()) && taskItem.getFieldsIndex().equals(working.getFieldsIndex())) {
+ if (taskItem.getFieldsIndex().equals(working.getFieldsIndex())) {
Double minQty = taskItem.getAnfme();
if (!task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) {
- minQty = Math.round((working.getAnfme() - taskItem.getAnfme()) * 100) / 100.0;
+ minQty = Math.round((working.getAnfme() - taskItem.getQty()) * 100) / 100.0;
}
- if (minQty.compareTo(0.0) > 0) {
+ if (minQty.compareTo(0.0) >= 0) {
taskItem.setAnfme(minQty);
if (!taskItemService.updateById(taskItem)) {
throw new CoolException("浠诲姟鏄庣粏淇敼澶辫触锛侊紒");
@@ -1104,6 +1104,7 @@
LocItemWorking itemWorking = new LocItemWorking();
BeanUtils.copyProperties(taskItem, itemWorking);
itemWorking.setTaskId(task.getId())
+ .setQty(0.0)
.setLocId(loc1.getId())
.setLocCode(loc1.getCode());
workings.add(itemWorking);
--
Gitblit v1.9.1