From a488088a18a9b8808bc57124681cee8c4ada7299 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 10 三月 2026 17:23:03 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/devlop-phyz' into devlop-phyz
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java | 234 +++++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 197 insertions(+), 37 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 ddb8c49..60635d3 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
@@ -6,10 +6,12 @@
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.api.controller.erp.params.SyncOrderParams;
import com.vincent.rsf.server.api.utils.LocUtils;
import com.vincent.rsf.server.common.constant.Constants;
import com.vincent.rsf.server.manager.controller.dto.ExistDto;
import com.vincent.rsf.server.manager.controller.dto.OrderOutItemDto;
+import com.vincent.rsf.server.manager.controller.dto.OrderOutItemPdaDto;
import com.vincent.rsf.server.manager.controller.params.*;
import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.entity.*;
@@ -274,6 +276,107 @@
*/
@Override
@Transactional(rollbackFor = Exception.class)
+ public R generateWavesOrderAuto(GenWaveParams params,String stationId,String locCode) {
+ if (Objects.isNull(params.getIds()) || params.getIds().isEmpty()) {
+ throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ 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(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);
+ if (StringUtils.isBlank(ruleCode)) {
+ throw new CoolException("缂栫爜瑙勫垯閿欒锛氳瑕佹煡鐪嬨�孲YS_WAVE_TYPE銆嶆槸鍚﹁缃垚鍔燂紒锛�");
+ }
+ wave.setOrderNum(params.getIds().size())
+ .setType(Short.parseShort("1"))
+ .setCode(ruleCode)
+ .setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_INIT.val)
+ .setAnfme(anfme);
+ if (!waveService.save(wave)) {
+ throw new CoolException("娉㈡淇濆瓨澶辫触锛侊紒");
+ }
+
+ List<Long> list = orders.stream().map(WkOrder::getId).collect(Collectors.toList());
+ List<WkOrderItem> orderItems = asnOrderItemService
+ .list(new LambdaQueryWrapper<WkOrderItem>()
+ .in(WkOrderItem::getOrderId, list).apply("anfme > work_qty"));
+ 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).setGroupQty(waveItems.size());
+ wave.setStationId(stationId);
+ wave.setLocCode(locCode);
+ if (!waveService.saveOrUpdate(wave)) {
+ throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
+ }
+ for (int i = 0; i < orderItems.size(); i++) {
+ orderItems.get(i).setWorkQty(orderItems.get(i).getAnfme());
+ }
+
+ /**
+ *璁㈠崟淇℃伅瀛樺偍鑷抽�昏緫鍏宠仈琛�
+ */
+ for (WaveItem item : waveItems) {
+ List<WkOrderItem> 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.getOrderId())
+ .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 (WkOrder order : orders) {
+ Double wkQty = Math.round((order.getWorkQty() + order.getAnfme()) * 10000) / 10000.0;
+ 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("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�");
+ }
+ }
+
+ return R.ok("鎿嶄綔瀹屾垚锛侊紒");
+ }
+
+ /**
+ * @param
+ * @return
+ * @author Ryan
+ * @description 鐢熸垚娉㈡
+ * @time 2025/4/24 15:04
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
public R generateWaves(GenWaveParams params) {
if (Objects.isNull(params.getIds()) || params.getIds().isEmpty()) {
throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
@@ -382,11 +485,12 @@
throw new CoolException("涓氬姟绫诲瀷涓嶈兘涓虹┖锛侊紒");
}
- String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, orders);
- if (StringUtils.isBlank(ruleCode)) {
- throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌ャ�孲YS_OUT_STOCK_CODE銆嶆槸鍚﹁缃纭紒锛�");
- }
- orders.setCode(ruleCode)
+// String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, orders);
+// if (StringUtils.isBlank(ruleCode)) {
+// throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌ャ�孲YS_OUT_STOCK_CODE銆嶆槸鍚﹁缃纭紒锛�");
+// }
+ orders.setCode(orders.getPoCode())
+ .setWkType(OrderWorkType.ORDER_WORK_TYPE_STOCK_UP.type)
.setType(OrderType.ORDER_OUT.type)
.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
.setUpdateBy(loginUserId)
@@ -478,7 +582,33 @@
List<Long> itemIds = new ArrayList<>();
itemIds.add(orderItemId);
locItems = getOutOrderList(param.getOrderId(), waveRule,itemIds);
- return R.ok(locItems);
+ List<OrderOutItemPdaDto> locItemList = new ArrayList<>();
+ for (OrderOutItemDto locItem : locItems) {
+ for (LocItem locItem1 : locItem.getLocItemList()) {
+ OrderOutItemPdaDto orderOutItemPdaDto = new OrderOutItemPdaDto();
+ orderOutItemPdaDto.setLocItem(locItem1);
+ locItemList.add(orderOutItemPdaDto);
+ }
+ }
+ return R.ok(locItemList);
+ }
+
+ @Override
+ public List<OrderOutItemDto> getOrderOutTaskItemAuto(OrderOutTaskParam param) {
+ if (Cools.isEmpty(param.getWaveId())) {
+ throw new CoolException("绛栫暐鍙傛暟涓虹┖");
+ }
+ if (Cools.isEmpty(param.getOrderId())) {
+ throw new CoolException("鍗曟嵁ID涓虹┖");
+ }
+ WaveRule waveRule = waveRuleService.getOne(new LambdaQueryWrapper<WaveRule>()
+ .eq(WaveRule::getId, param.getWaveId()));
+ if (Cools.isEmpty(waveRule)) {
+ throw new CoolException("鏈壘鍒板綋鍓嶇瓥鐣�");
+ }
+ List<OrderOutItemDto> locItems = null;
+ locItems = getOutOrderList(param.getOrderId(), waveRule);
+ return locItems;
}
/**
@@ -495,7 +625,7 @@
throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
}
//浼樺厛鐢熸垚娴呭簱浣嶄换鍔�
- List<OutStockToTaskParams> Items = params.stream()
+ List<OutStockToTaskParams> itemList = params.stream()
.sorted(Comparator.comparing(OutStockToTaskParams::getLocCode)
.thenComparing(item -> {
return LocUtils.isShallowLoc(item.getLocCode()) ? 1 : 0;
@@ -505,32 +635,67 @@
if (Cools.isEmpty(wkOrder)) {
throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
}
-
- for (OutStockToTaskParams param : Items) {
+ List<List<OutStockToTaskParams>> itemLists = new ArrayList<>();
+ List<String> locList = new ArrayList<>();
+ for (OutStockToTaskParams item : itemList) {
+ if (!locList.contains(item.getLocCode())) {
+ List<OutStockToTaskParams> items = new ArrayList<>();
+ locList.add(item.getLocCode());
+ items.add(item);
+ itemLists.add(items);
+ } else {
+ for (List<OutStockToTaskParams> items : itemLists){
+ boolean sign = false;
+ for (OutStockToTaskParams itemOld : items) {
+ if (itemOld.getLocCode().equals(item.getLocCode())) {
+ sign = true;
+ items.add(item);
+ }
+ break;
+ }
+ if (sign) {
+ break;
+ }
+ }
+ }
+ }
+ for (List<OutStockToTaskParams> items : itemLists){
+ OutStockToTaskParams param = items.get(0);
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()));
if (!Objects.isNull(loc)) {
List<LocItem> locItems = new ArrayList<>();
- LocItem locItem = locItemService.getById(param.getId());
+ for (OutStockToTaskParams itemOld : items) {
+ LocItem locItem = locItemService.getById(itemOld.getId());
- WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
- .eq(WkOrderItem::getOrderId, outId)
- .eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch())
- .eq(WkOrderItem::getMatnrId, locItem.getMatnrId()));
+ WkOrderItem orderItem = outStockItemService.getOne(new LambdaQueryWrapper<WkOrderItem>()
+ .eq(WkOrderItem::getOrderId, outId)
+// .eq(StringUtils.isNotBlank(locItem.getBatch()), WkOrderItem::getSplrBatch, locItem.getBatch())
+ .eq(WkOrderItem::getMatnrId, locItem.getMatnrId()));
// .eq(StringUtils.isNotBlank(locItem.getFieldsIndex()), WkOrderItem::getFieldsIndex, locItem.getFieldsIndex())
- if (Objects.isNull(orderItem)) {
- throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
- }
+ if (Objects.isNull(orderItem)) {
+ throw new CoolException("鍗曟嵁鏄庣粏涓嶅瓨鍦紒锛�");
+ }
- locItem.setOutQty(param.getOutQty())
- .setBatch(param.getBatch())
- .setSourceId(outId)
- .setSourceCode(orderItem.getOrderCode())
- .setSource(orderItem.getId());
- locItems.add(locItem);
+ locItem.setOutQty(itemOld.getOutQty())
+ .setBatch(itemOld.getBatch())
+ .setSourceId(outId)
+ .setSourceCode(orderItem.getOrderCode())
+ .setSource(orderItem.getId());
+ locItems.add(locItem);
+
+
+ Double workQty = Math.round((orderItem.getWorkQty() + locItem.getOutQty()) * 10000) / 10000.0;
+
+ orderItem.setUpdateBy(loginUserId).setUpdateTime(new Date()).setWorkQty(workQty);
+
+ if (!outStockItemService.updateById(orderItem)) {
+ throw new CoolException("鍗曟嵁鏄庣粏淇敼澶辫触锛侊紒");
+ }
+ }
LocToTaskParams taskParams = new LocToTaskParams();
taskParams.setType(Constants.TASK_TYPE_ORDER_OUT_STOCK)
@@ -549,19 +714,10 @@
logger.error("UNK", e);
throw new CoolException(e.getMessage());
}
-
-
- Double workQty = Math.round((orderItem.getWorkQty() + locItem.getOutQty()) * 10000) / 10000.0;
-
- orderItem.setUpdateBy(loginUserId).setUpdateTime(new Date()).setWorkQty(workQty);
-
- if (!outStockItemService.updateById(orderItem)) {
- throw new CoolException("鍗曟嵁鏄庣粏淇敼澶辫触锛侊紒");
- }
}
}
- Double sum = Items.stream().mapToDouble(OutStockToTaskParams::getOutQty).sum();
+ Double sum = itemList.stream().mapToDouble(OutStockToTaskParams::getOutQty).sum();
//鏇存柊鍑哄簱鍗曟槑缁嗗強涓诲崟
WkOrder outOrder = outStockService.getById(outId);
if (Objects.isNull(outOrder)) {
@@ -664,7 +820,8 @@
locItem.setOutQty(issued.doubleValue() >= locItem.getAnfme() ? locItem.getAnfme() : issued.doubleValue());
locItem.setBarcode(loc.getBarcode());
OrderOutItemDto orderOutItemDto = new OrderOutItemDto();
- orderOutItemDto.setLocItem(locItem);
+// orderOutItemDto.setLocItem(locItem);
+ orderOutItemDto.getLocItemList().add(locItem);
List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
.eq(DeviceSite::getChannel, loc.getChannel())
@@ -702,7 +859,8 @@
.setUnit(wkOrderItem.getStockUnit())
.setBatch(wkOrderItem.getSplrBatch());
OrderOutItemDto orderOutItemDto = new OrderOutItemDto();
- orderOutItemDto.setLocItem(locItem);
+// orderOutItemDto.setLocItem(locItem);
+ orderOutItemDto.getLocItemList().add(locItem);
list.add(orderOutItemDto);
}
}
@@ -740,7 +898,8 @@
locItem.setOutQty(issued.doubleValue() >= locItem.getAnfme() ? locItem.getAnfme() : issued.doubleValue());
locItem.setBarcode(loc.getBarcode());
OrderOutItemDto orderOutItemDto = new OrderOutItemDto();
- orderOutItemDto.setLocItem(locItem);
+// orderOutItemDto.setLocItem(locItem);
+ orderOutItemDto.getLocItemList().add(locItem);
List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
.eq(DeviceSite::getChannel, loc.getChannel())
@@ -778,7 +937,8 @@
.setUnit(wkOrderItem.getStockUnit())
.setBatch(wkOrderItem.getSplrBatch());
OrderOutItemDto orderOutItemDto = new OrderOutItemDto();
- orderOutItemDto.setLocItem(locItem);
+// orderOutItemDto.setLocItem(locItem);
+ orderOutItemDto.getLocItemList().add(locItem);
list.add(orderOutItemDto);
}
}
--
Gitblit v1.9.1