From 450320f28d8db37264d7fc448c01fb32f64610b2 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 13 十一月 2025 16:53:06 +0800
Subject: [PATCH] 波次出库修改
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java | 6
rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java | 17 +
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java | 43 +++
rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java | 19 ++
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java | 330 ++++++++++++++++++++++++++---------
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ContainerWaveParam.java | 4
rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/ExistDto.java | 1
rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java | 58 +++---
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/WavePickItemsParams.java | 24 ++
9 files changed, 375 insertions(+), 127 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
index d1fc67f..1e287d7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/controller/pda/PdaOutStockController.java
@@ -3,6 +3,7 @@
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto;
import com.vincent.rsf.server.api.entity.params.ContainerWaveParam;
+import com.vincent.rsf.server.api.entity.params.WavePickItemsParams;
import com.vincent.rsf.server.api.service.PdaOutStockService;
import com.vincent.rsf.server.system.controller.BaseController;
import io.swagger.annotations.Api;
@@ -54,10 +55,28 @@
}
@PreAuthorize("hasAuthority('manager:task:list')")
+ @PostMapping("/wave/order/items")
+ @ApiOperation("鑾峰彇娉㈡鎷h揣鏄庣粏")
+ public R getWaveOrderItem(@RequestBody Map<String, Object> params) {
+ return pdaOutStockService.getWaveOrderItems(params);
+ }
+
+ @PreAuthorize("hasAuthority('manager:task:list')")
+ @ApiOperation("娉㈡鏄庣粏鎷h揣")
+ @PostMapping("/wave/pick/item")
+ public R wavePickItems(@RequestBody WavePickItemsParams items) {
+ return pdaOutStockService.wavePickItems(items);
+ }
+
+
+ @PreAuthorize("hasAuthority('manager:task:list')")
@PostMapping("/saveWavePick")
@ApiOperation("鏍规嵁瀹瑰櫒鐮佹煡璇㈡尝娆″強鍑哄簱鍗�")
public R saveWavePick(@RequestBody ContainerWaveParam containerWaveParam) {
return pdaOutStockService.saveWavePick(containerWaveParam,getLoginUserId());
}
+
+
+
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ContainerWaveParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ContainerWaveParam.java
index 93cf2c2..eb8b5e6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ContainerWaveParam.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ContainerWaveParam.java
@@ -1,6 +1,8 @@
package com.vincent.rsf.server.api.entity.params;
import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto;
+import com.vincent.rsf.server.manager.entity.TaskItem;
+import com.vincent.rsf.server.manager.entity.WkOrderItem;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -14,5 +16,7 @@
private String container;
+ private List<WkOrderItem> orderItems;
+
private List<ContainerWaveDto> containerWaveDtos;
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/WavePickItemsParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/WavePickItemsParams.java
new file mode 100644
index 0000000..96ad0c9
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/WavePickItemsParams.java
@@ -0,0 +1,24 @@
+package com.vincent.rsf.server.api.entity.params;
+
+import com.vincent.rsf.server.manager.entity.TaskItem;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "WavePickItemsParams", description = "娉㈡鎷h揣鏄庣粏")
+public class WavePickItemsParams {
+
+ @ApiModelProperty("鎵樼洏鐮�")
+ private String barcode;
+
+ @ApiModelProperty("璁㈠崟ID")
+ private Long orderId;
+
+ @ApiModelProperty("浠诲姟鏄庣粏")
+ private List<TaskItem> taskItems;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java
index 0cb81ca..8224bca 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/PdaOutStockService.java
@@ -3,6 +3,7 @@
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto;
import com.vincent.rsf.server.api.entity.params.ContainerWaveParam;
+import com.vincent.rsf.server.api.entity.params.WavePickItemsParams;
import java.util.List;
import java.util.Map;
@@ -17,4 +18,20 @@
R saveWavePick(ContainerWaveParam containerWaveParam,Long loginUserId);
R saveOutTaskSts(String barcode);
+
+ /**
+ * @author Ryan
+ * @date 2025/11/13
+ * @description: 鑾峰彇娉㈡璁㈠崟鏄庣粏
+ * @version 1.0
+ */
+ R getWaveOrderItems(Map<String, Object> params);
+
+ /**
+ * @author Ryan
+ * @date 2025/11/13
+ * @description: 娉㈡鏄庣粏鎷h揣
+ * @version 1.0
+ */
+ R wavePickItems(WavePickItemsParams items);
}
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 a00e287..4775bf7 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
@@ -6,19 +6,24 @@
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.entity.dto.ContainerWaveDto;
import com.vincent.rsf.server.api.entity.params.ContainerWaveParam;
+import com.vincent.rsf.server.api.entity.params.WavePickItemsParams;
import com.vincent.rsf.server.api.service.PdaOutStockService;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.AsnExceStatus;
import com.vincent.rsf.server.manager.enums.TaskStsType;
import com.vincent.rsf.server.manager.service.*;
+import com.vincent.rsf.server.system.entity.Fields;
import com.vincent.rsf.server.system.entity.FieldsItem;
import com.vincent.rsf.server.system.service.FieldsItemService;
+import com.vincent.rsf.server.system.service.FieldsService;
import com.vincent.rsf.server.system.service.impl.FieldsItemServiceImpl;
+import com.vincent.rsf.server.system.service.impl.FieldsServiceImpl;
import lombok.Synchronized;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
import javax.annotation.Resource;
import java.math.BigDecimal;
@@ -42,6 +47,8 @@
private WaveOrderRelaService waveOrderRelaService;
@Autowired
private FieldsItemService fieldsItemService;
+ @Autowired
+ private FieldsService fieldsService;
@Override
public R getOutStockTaskItem(String barcode) {
@@ -98,7 +105,6 @@
@Override
public R getContainerWaveList(Map<String, String> map) {
String barcode = map.get("barcode");
-
if (Cools.isEmpty(barcode)) {
throw new CoolException("鍙傛暟鏈夎");
}
@@ -109,37 +115,183 @@
if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
}
- ArrayList<ContainerWaveDto> containerWaveDtos = new ArrayList<>();
List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
- for (TaskItem taskItem : taskItems) {
- ContainerWaveDto containerWaveDto = new ContainerWaveDto();
- containerWaveDto.setTaskItem(taskItem);
- Wave wave = waveService.getById(taskItem.getSourceId());
- if (null == wave) {
- throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
- }
- List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
- .eq(WaveOrderRela::getWaveId, wave.getId()));
- if (Cools.isEmpty(waveOrderRelas)) {
- throw new CoolException("娉㈡瀵瑰簲鍏宠仈鍗曟湭鎵惧埌");
- }
- Set<Long> ids = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
- ArrayList<WkOrderItem> list = new ArrayList<>();
- List<WkOrder> wkOrderList = asnOrderService.list(new LambdaQueryWrapper<WkOrder>().in(WkOrder::getId, ids));
- for (WkOrder wkOrder : wkOrderList) {
- List<WkOrderItem> orderItem = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
- .eq(WkOrderItem::getOrderId, wkOrder.getId())
- .eq(StringUtils.isNotEmpty(taskItem.getMatnrCode()), WkOrderItem::getMatnrCode, taskItem.getMatnrCode())
- .eq(StringUtils.isNotEmpty(taskItem.getBatch()), WkOrderItem::getSplrBatch, taskItem.getBatch()));
- if (null != orderItem) {
- list.addAll(orderItem);
- }
- }
- containerWaveDto.setWkOrderItems(list);
- containerWaveDtos.add(containerWaveDto);
+ Set<Long> longSet = taskItems.stream().map(TaskItem::getSourceId).collect(Collectors.toSet());
+ List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
+ .in(WaveOrderRela::getWaveId, longSet));
+ if (Cools.isEmpty(waveOrderRelas)) {
+ throw new CoolException("娉㈡瀵瑰簲鍏宠仈鍗曟湭鎵惧埌");
}
+ Set<Long> orderIds = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
+ List<WkOrder> wkOrders = asnOrderService.listByIds(orderIds);
+ if (wkOrders.isEmpty()) {
+ throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
+ }
+ Set<String> codes = taskItems.stream().map(TaskItem::getMatnrCode).collect(Collectors.toSet());
+ List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
+ .in(WkOrderItem::getMatnrCode, codes)
+ .in(WkOrderItem::getOrderId, orderIds));
- return R.ok(containerWaveDtos);
+ return R.ok("鏌ヨ鎴愬姛").add(orderItems);
+
+// ArrayList<ContainerWaveDto> containerWaveDtos = new ArrayList<>();
+//// List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId()));
+// for (TaskItem taskItem : taskItems) {
+// ContainerWaveDto containerWaveDto = new ContainerWaveDto();
+// containerWaveDto.setTaskItem(taskItem);
+// Wave wave = waveService.getById(taskItem.getSourceId());
+// if (null == wave) {
+// throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
+// }
+// List<WaveOrderRela> waveOrderRelas = waveOrderRelaService.list(new LambdaQueryWrapper<WaveOrderRela>()
+// .eq(WaveOrderRela::getWaveId, wave.getId()));
+// if (Cools.isEmpty(waveOrderRelas)) {
+// throw new CoolException("娉㈡瀵瑰簲鍏宠仈鍗曟湭鎵惧埌");
+// }
+// Set<Long> ids = waveOrderRelas.stream().map(WaveOrderRela::getOrderId).collect(Collectors.toSet());
+// ArrayList<WkOrderItem> list = new ArrayList<>();
+// List<WkOrder> wkOrderList = asnOrderService.list(new LambdaQueryWrapper<WkOrder>().in(WkOrder::getId, ids));
+// for (WkOrder wkOrder : wkOrderList) {
+// List<WkOrderItem> orderItem = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>()
+// .eq(WkOrderItem::getOrderId, wkOrder.getId())
+// .eq(StringUtils.isNotEmpty(taskItem.getMatnrCode()), WkOrderItem::getMatnrCode, taskItem.getMatnrCode())
+// .eq(StringUtils.isNotEmpty(taskItem.getBatch()), WkOrderItem::getSplrBatch, taskItem.getBatch()));
+// if (null != orderItem) {
+// list.addAll(orderItem);
+// }
+// }
+// containerWaveDto.setWkOrderItems(list);
+// containerWaveDtos.add(containerWaveDto);
+// }
+// return R.ok("鏌ヨ鎴愬姛").add(wkOrders);
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/11/13
+ * @description: 鑾峰彇娉㈡鎷h揣鏄庣粏
+ * @version 1.0
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R getWaveOrderItems(Map<String, Object> param) {
+ if (Objects.isNull(param)) {
+ return R.error("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+ }
+ if (Objects.isNull(param.get("fieldsIndex"))) {
+ return R.error("绁ㄥ彿涓嶈兘涓虹┖锛侊紒");
+ }
+ if (Objects.isNull(param.get("barcode"))) {
+ return R.error("瀹瑰櫒鍙蜂笉鑳戒负绌猴紒锛�");
+ }
+ if (Objects.isNull(param.get("orderId"))) {
+ return R.error("璁㈠崟ID涓嶈兘涓虹┖锛侊紒");
+ }
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, param.get("barcode").toString()));
+ if (Objects.isNull(task)) {
+ throw new CoolException("鏁版嵁閿欒锛屼换鍔℃。宸蹭笉瀛樺湪锛侊紒");
+ }
+ FieldsItem fieldsItem = fieldsItemService.getOne(new LambdaQueryWrapper<FieldsItem>()
+ .eq(FieldsItem::getValue, param.get("fieldsIndex").toString())
+ .last("limit 1"));
+ if (Objects.isNull(fieldsItem)) {
+ return R.error("鏁版嵁閿欒锛岀エ鍙蜂笉瀛樺湪锛侊紒");
+ }
+ TaskItem taskItem = taskItemService.getOne(new LambdaQueryWrapper<TaskItem>()
+ .eq(TaskItem::getFieldsIndex, fieldsItem.getUuid())
+ .eq(TaskItem::getTaskId, task.getId()));
+ if (Objects.isNull(taskItem)) {
+ return R.error("鏁版嵁閿欒锛屼换鍔℃。鏄庣粏涓嶅瓨鍦紒锛�");
+ }
+// Long orderId = Long.valueOf(param.get("orderId").toString());
+// List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, orderId));
+// if (orderItems.isEmpty()) {
+// return R.error("鏁版嵁閿欒锛岃鍗曟暟鎹笉瀛樺湪锛侊紒");
+// }
+ //鏍规嵁绱㈠紩鑾峰彇鍔ㄦ�佸瓧娈礦alue鍊�
+ Map<String, String> fields = new HashMap<>();
+ Fields fields1 = fieldsService.getById(fieldsItem.getFieldsId());
+ fields.put(fields1.getFields(), fieldsItem.getValue());
+ taskItem.setExtendFields(fields);
+
+ return R.ok().add(taskItem);
+ }
+
+ /**
+ * @author Ryan
+ * @date 2025/11/13
+ * @description: 娉㈡鏄庣粏鎷h揣
+ * @version 1.0
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R wavePickItems(WavePickItemsParams params) {
+ if (Objects.isNull(params.getBarcode())) {
+ return R.error("鎵樼洏鐮佷笉鑳戒负绌猴紒锛�");
+ }
+ if (Objects.isNull(params.getOrderId())) {
+ return R.error("璁㈠崟ID涓嶈兘涓虹┖锛侊紒");
+ }
+ if (Objects.isNull(params.getTaskItems()) || params.getTaskItems().isEmpty()) {
+ return R.error("鎷h揣鏄庣粏涓嶈兘涓虹┖锛�");
+ }
+ Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getBarcode()));
+ if (null == task) {
+ return R.error("鏈壘鍒版墭鐩樺搴旂殑浠诲姟");
+ }
+ if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)) {
+ return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
+ }
+ WkOrder order = asnOrderService.getById(params.getOrderId());
+ if (Objects.isNull(order)) {
+ return R.error("鍗曟嵁淇℃伅涓嶅瓨鍦紒锛�");
+ }
+ List<TaskItem> taskItems = params.getTaskItems();
+ Map<String, List<TaskItem>> listMap = taskItems.stream().collect(Collectors.groupingBy(TaskItem::getMatnrCode));
+ 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()));
+ if (Objects.isNull(orderItem)) {
+ throw new CoolException("鏁版嵁閿欒锛屾嫞鏂欎笉鍦ㄥ崟鎹渶姹備腑锛侊紒");
+ }
+ Double summed = items.stream().mapToDouble(TaskItem::getAnfme).sum();
+ //鍔犱笂鍘嗗彶鎷f枡鏁伴噺
+ Double pickQty = Math.round((orderItem.getQty() + summed) * 10000) / 10000.0;
+ if (pickQty.compareTo(orderItem.getAnfme()) > 0.0) {
+ throw new CoolException("鎾鏁伴噺涓嶈兘瓒呭嚭璁㈠崟闇�姹傛暟閲�");
+ }
+ orderItem.setQty(pickQty);
+
+ if (!asnOrderItemService.updateById(orderItem)) {
+ throw new CoolException("鍑哄簱鍗曟槑缁嗘洿鏂板け璐ワ紒锛�");
+ }
+
+ items.forEach(taskItem -> {
+ taskItem.setQty(taskItem.getAnfme());
+ if (!taskItemService.updateById(taskItem)) {
+ throw new CoolException("鐘舵�佸畬鎴愬け璐ワ紒锛�");
+ }
+ });
+ });
+
+ List<WkOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<WkOrderItem>().eq(WkOrderItem::getOrderId, params.getOrderId()));
+ double total = orderItems.stream().mapToDouble(WkOrderItem::getQty).sum();
+ order.setQty(total);
+ if (!asnOrderService.updateById(order)) {
+ throw new CoolException("璁㈠崟鏁伴噺鏇存柊澶辫触锛侊紒");
+ }
+// //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
+// if (order.getAnfme().compareTo(order.getQty()) == 0) {
+// order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+// if (!asnOrderService.updateById(order)) {
+// throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+// }
+// }
+
+ return R.ok();
}
/**
@@ -163,73 +315,75 @@
return R.error("浠诲姟鐘舵�佷笉鏄瓑寰呯‘璁�");
}
- for (ContainerWaveDto containerWaveDto : containerWaveParam.getContainerWaveDtos()) {
- //鍋氫竴娆℃牎楠岋紝鍒ゆ柇鍓嶇鎵�鏈夊嚭搴撴暟閲忔槸鍚﹁秴杩囨湰鎵樺嚭搴撴暟閲�
- double sum = containerWaveDto.getWkOrderItems().stream().mapToDouble(WkOrderItem::getDemandQty).sum();
- BigDecimal total = new BigDecimal(String.valueOf(sum));
- BigDecimal anfme = new BigDecimal(containerWaveDto.getTaskItem().getAnfme().toString());
- if (!anfme.equals(total)) {
- throw new CoolException("鎾鏁伴噺涓嶇瓑浜庡鍣ㄥ嚭搴撴暟閲忥紝璇锋鏌�");
- }
- for (WkOrderItem oldOrderItem : containerWaveDto.getWkOrderItems()) {
- if (Double.compare(oldOrderItem.getDemandQty(), 0.0) == 0) {
- continue;
- }
- WkOrderItem orderItem = asnOrderItemService.getById(oldOrderItem.getId());
- BigDecimal num = new BigDecimal(orderItem.getWorkQty().toString()).subtract(new BigDecimal(orderItem.getQty().toString()));
- BigDecimal orderDemandQty = new BigDecimal(oldOrderItem.getDemandQty().toString());
- if (num.compareTo(orderDemandQty) < 0) {
- throw new CoolException("鎾鏁伴噺澶т簬鍗曟嵁鍑哄簱鏁伴噺锛岃妫�鏌�");
- }
- WkOrder wkOrder = asnOrderService.getById(orderItem.getOrderId());
- if (Cools.isEmpty(wkOrder)) {
- throw new CoolException("鍑哄簱鍗曚富鍗曟湭鎵惧埌");
- }
- wkOrder.setQty(new BigDecimal(wkOrder.getQty().toString()).add(orderDemandQty).doubleValue());
- if (!asnOrderService.updateById(wkOrder)) {
- throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
- }
-
- if (Objects.isNull(oldOrderItem.getFieldsIndex())) {
- throw new CoolException("绁ㄥ彿涓嶈兘涓虹┖锛侊紒");
- }
- //Fix 杩欓噷鍙拡瀵瑰笇鏃ラ」鐩殑绁ㄥ彿鍔熻兘锛岀エ鍙峰拰uuid涓轰竴瀵逛竴鐨勬儏鍐碉紝涓嶄細鍑虹幇閲嶅鐨勬儏鍐�
- FieldsItem fieldsItem = fieldsItemService.getOne(new LambdaQueryWrapper<FieldsItem>().eq(FieldsItem::getValue, oldOrderItem.getFieldsIndex()).last("limit 1"));
- if (!Objects.isNull(fieldsItem)) {
- orderItem.setFieldsIndex(fieldsItem.getUuid());
- }
- orderItem.setQty(new BigDecimal(orderItem.getQty().toString()).add(orderDemandQty).doubleValue());
- if (!asnOrderItemService.updateById(orderItem)) {
- throw new CoolException("鍗曟嵁鏄庣粏鏇存柊澶辫触");
- }
- //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
- Boolean orderChecked = checkOrderComplete(orderItem);
- if (orderChecked) {
- wkOrder.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
- if (!asnOrderService.updateById(wkOrder)) {
- throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
- }
- }
- }
- //妫�鏌ユ尝娆℃槸鍚﹀畬鎴�
-// Boolean waveChecked = checkWaveComplete(containerWaveDto.getTaskItem());
-// if (waveChecked){
-// Wave wave = waveService.getById(containerWaveDto.getTaskItem().getSourceId());
-// if (null == wave){
-// throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
+// containerWaveParam.getOrderItems().forEach(orderItem -> {
+//
+// });
+// for (ContainerWaveDto containerWaveDto : containerWaveParam.getContainerWaveDtos()) {
+// //鍋氫竴娆℃牎楠岋紝鍒ゆ柇鍓嶇鎵�鏈夊嚭搴撴暟閲忔槸鍚﹁秴杩囨湰鎵樺嚭搴撴暟閲�
+// double sum = containerWaveDto.getWkOrderItems().stream().mapToDouble(WkOrderItem::getDemandQty).sum();
+// BigDecimal total = new BigDecimal(String.valueOf(sum));
+// BigDecimal anfme = new BigDecimal(containerWaveDto.getTaskItem().getAnfme().toString());
+// if (!anfme.equals(total)) {
+// throw new CoolException("鎾鏁伴噺涓嶇瓑浜庡鍣ㄥ嚭搴撴暟閲忥紝璇锋鏌�");
+// }
+// for (WkOrderItem oldOrderItem : containerWaveDto.getWkOrderItems()) {
+// if (Double.compare(oldOrderItem.getDemandQty(), 0.0) == 0) {
+// continue;
// }
-// wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_TASK.val);
-// if (!waveService.updateById(wave)){
-// throw new CoolException("娉㈡鍗曟洿鏂扮姸鎬佸け璐�");
+// WkOrderItem orderItem = asnOrderItemService.getById(oldOrderItem.getId());
+// BigDecimal num = new BigDecimal(orderItem.getWorkQty().toString()).subtract(new BigDecimal(orderItem.getQty().toString()));
+// BigDecimal orderDemandQty = new BigDecimal(oldOrderItem.getDemandQty().toString());
+// if (num.compareTo(orderDemandQty) < 0) {
+// throw new CoolException("鎾鏁伴噺澶т簬鍗曟嵁鍑哄簱鏁伴噺锛岃妫�鏌�");
+// }
+// WkOrder wkOrder = asnOrderService.getById(orderItem.getOrderId());
+// if (Cools.isEmpty(wkOrder)) {
+// throw new CoolException("鍑哄簱鍗曚富鍗曟湭鎵惧埌");
+// }
+// wkOrder.setQty(new BigDecimal(wkOrder.getQty().toString()).add(orderDemandQty).doubleValue());
+// if (!asnOrderService.updateById(wkOrder)) {
+// throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+// }
+//
+// if (Objects.isNull(oldOrderItem.getFieldsIndex())) {
+// throw new CoolException("绁ㄥ彿涓嶈兘涓虹┖锛侊紒");
+// }
+// //Fix 杩欓噷鍙拡瀵瑰笇鏃ラ」鐩殑绁ㄥ彿鍔熻兘锛岀エ鍙峰拰uuid涓轰竴瀵逛竴鐨勬儏鍐碉紝涓嶄細鍑虹幇閲嶅鐨勬儏鍐�
+// FieldsItem fieldsItem = fieldsItemService.getOne(new LambdaQueryWrapper<FieldsItem>().eq(FieldsItem::getValue, oldOrderItem.getFieldsIndex()).last("limit 1"));
+// if (!Objects.isNull(fieldsItem)) {
+// orderItem.setFieldsIndex(fieldsItem.getUuid());
+// }
+// orderItem.setQty(new BigDecimal(orderItem.getQty().toString()).add(orderDemandQty).doubleValue());
+// if (!asnOrderItemService.updateById(orderItem)) {
+// throw new CoolException("鍗曟嵁鏄庣粏鏇存柊澶辫触");
+// }
+// //妫�鏌ュ崟鎹槸鍚﹀畬鎴�
+// Boolean orderChecked = checkOrderComplete(orderItem);
+// if (orderChecked) {
+// wkOrder.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_DONE.val);
+// if (!asnOrderService.updateById(wkOrder)) {
+// throw new CoolException("鍑哄簱鍗曟洿鏂扮姸鎬佸け璐�");
+// }
// }
// }
- }
+// //妫�鏌ユ尝娆℃槸鍚﹀畬鎴�
+//// Boolean waveChecked = checkWaveComplete(containerWaveDto.getTaskItem());
+//// if (waveChecked){
+//// Wave wave = waveService.getById(containerWaveDto.getTaskItem().getSourceId());
+//// if (null == wave){
+//// throw new CoolException("鏈壘鍒板鍣ㄥ彿瀵瑰簲娉㈡");
+//// }
+//// wave.setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_TASK.val);
+//// if (!waveService.updateById(wave)){
+//// throw new CoolException("娉㈡鍗曟洿鏂扮姸鎬佸け璐�");
+//// }
+//// }
+// }
task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
if (!taskService.updateById(task)) {
throw new CoolException("浠诲姟鐘舵�佹洿鏂板け璐�");
}
-
return R.ok();
}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/ExistDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/ExistDto.java
index 90a8f54..93d682e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/ExistDto.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/ExistDto.java
@@ -9,4 +9,5 @@
private String locNo;
private String matnr;
private String batch;
+ private String lastSite;
}
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 50df08e..6cf090d 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
@@ -345,8 +345,8 @@
}
});
}
-
-
+
+
if (!asnOrderItemService.saveOrUpdateBatch(orderItems)) {
throw new CoolException("鍑哄簱鍗曟墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�");
}
@@ -723,7 +723,7 @@
p1.getUpdateBy(),
p1.getMemo()
),
- WaveItem::getSplrBatch, WaveItem::getMatnrCode, WaveItem::getFieldsIndex
+ WaveItem::getMatnrCode
);
return waveItems;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
index 42fe873..ebe1571 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
@@ -279,21 +279,48 @@
@Synchronized
@Transactional(rollbackFor = Exception.class)
public void generateOutTask(List<OrderOutItemDto> itemParams, Long loginUserId, Wave wave) throws Exception {
- for (OrderOutItemDto itemDto : itemParams) {
+ Map<Long, List<OrderOutItemDto>> listMap = itemParams.stream().collect(Collectors.groupingBy(OrderOutItemDto::getLocId));
+ listMap.keySet().forEach(id -> {
+ double sum = listMap.get(id).stream().mapToDouble(OrderOutItemDto::getAnfme).sum();
+ List<LocItem> items = new ArrayList<>();
+ //鐢熸垚鏄庣粏
+ listMap.get(id).forEach(orderOutItemDto -> {
+ items.add(orderOutItemDto.getLocItem());
+ });
+ //鑾峰彇涓嶄负绌虹珯鐐�
+ List<OrderOutItemDto> itemDtos = listMap.get(id).stream().filter(orderOutItemDto -> !Objects.isNull(orderOutItemDto.getSitesNo())).collect(Collectors.toList());
+ OrderOutItemDto itemDto = itemDtos.stream().findFirst().get();
+ itemDto.setAnfme(sum);
LocToTaskParams taskParams = new LocToTaskParams();
Loc loc = locService.getById(itemDto.getLocId());
- if (Objects.isNull(loc)) {
- continue;
- }
- taskParams.setItems(Arrays.asList(itemDto.getLocItem()))
+ taskParams.setItems(items)
.setSiteNo(itemDto.getSitesNo())
.setType(Constants.TASK_TYPE_WAVE_OUT_STOCK)
.setSourceId(wave.getId())
.setTarLoc(loc.getCode());
-
//TODO 鐢熸垚鍑哄簱浠诲姟锛岃幏鍙栨尝娆″崟鎹俊鎭�
- locItemService.generateTask(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val, taskParams, loginUserId);
- }
+ try {
+ locItemService.generateTask(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val, taskParams, loginUserId);
+ } catch (Exception e) {
+ throw new CoolException("鍑哄簱浠诲姟鐢熸垚澶辫触锛�");
+ }
+ });
+
+// for (OrderOutItemDto itemDto : itemParams) {
+// LocToTaskParams taskParams = new LocToTaskParams();
+// Loc loc = locService.getById(itemDto.getLocId());
+// if (Objects.isNull(loc)) {
+// continue;
+// }
+// taskParams.setItems(Arrays.asList(itemDto.getLocItem()))
+// .setSiteNo(itemDto.getSitesNo())
+// .setType(Constants.TASK_TYPE_WAVE_OUT_STOCK)
+// .setSourceId(wave.getId())
+// .setTarLoc(loc.getCode());
+//
+// //TODO 鐢熸垚鍑哄簱浠诲姟锛岃幏鍙栨尝娆″崟鎹俊鎭�
+// locItemService.generateTask(TaskResouceType.TASK_RESOUCE_WAVE_TYPE.val, taskParams, loginUserId);
+// }
}
/**
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
index cc667d6..f16250a 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
@@ -13,7 +13,7 @@
import com.vincent.rsf.server.manager.enums.WaveRuleType;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.enums.LocStsType;
-import io.swagger.models.auth.In;
+
import org.apache.commons.lang3.StringUtils;
import javax.swing.*;
@@ -158,7 +158,8 @@
List<OrderOutItemDto> list = new ArrayList<>();
//涓嶈绔欑偣閲嶅浣跨敤闂
List<BasStation> stations = new ArrayList<>();
- Set<ExistDto> existDtos = new HashSet<>();
+ List<ExistDto> existDtos = new ArrayList<>();
+ Set<Loc> locs = new HashSet<>();
for (WaveToLocParams item : params) {
BigDecimal issued = new BigDecimal(item.getAnfme().toString())
.subtract(new BigDecimal(item.getWorkQty().toString()));
@@ -189,41 +190,42 @@
.setSource(item.getItemId());//娉㈡鏄庣粏ID
OrderOutItemDto orderOutItemDto = new OrderOutItemDto();
orderOutItemDto.setLocItem(locItem);
-
+ orderOutItemDto.setSource(item.getItemId())
+ .setSourceId(item.getWaveId());
List<DeviceSite> deviceSites = deviceSiteService.list(new LambdaQueryWrapper<DeviceSite>()
.eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel())
.eq(DeviceSite::getType, issued.doubleValue() >= locItem.getAnfme() && itemList.size() == 1 ? TaskType.TASK_TYPE_OUT.type : TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
);
- if (!deviceSites.isEmpty()) {
- List<OrderOutItemDto.staListDto> maps = new ArrayList<>();
- for (DeviceSite sta : deviceSites) {
- OrderOutItemDto.staListDto staListDto = new OrderOutItemDto.staListDto();
- staListDto.setStaNo(sta.getSite());
- staListDto.setStaName(sta.getSite());
- maps.add(staListDto);
- }
- orderOutItemDto.setStaNos(maps);
- //鑾峰彇婊¤冻鏉′欢绔欑偣
- Set<String> stationSet = deviceSites.stream().map(DeviceSite::getSite).collect(Collectors.toSet());
- //宸蹭娇鐢ㄧ珯鐐�
- Set<String> stas = stations.stream().map(BasStation::getStationName).collect(Collectors.toSet());
- BasStationService basStationService = SpringUtils.getBean(BasStationService.class);
- BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
- .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
- .in(BasStation::getStationName, stationSet)
- .notIn(!stas.isEmpty(), BasStation::getStationName, stas)
- .last("LIMIT 1"));
- stations.add(basStation);
+ if (locs.add(loc)) {
+ if (!deviceSites.isEmpty()) {
+ List<OrderOutItemDto.staListDto> maps = new ArrayList<>();
+ for (DeviceSite sta : deviceSites) {
+ OrderOutItemDto.staListDto staListDto = new OrderOutItemDto.staListDto();
+ staListDto.setStaNo(sta.getSite());
+ staListDto.setStaName(sta.getSite());
+ maps.add(staListDto);
+ }
+ orderOutItemDto.setStaNos(maps);
+ //鑾峰彇婊¤冻鏉′欢绔欑偣
+ Set<String> stationSet = deviceSites.stream().map(DeviceSite::getSite).collect(Collectors.toSet());
+ //宸蹭娇鐢ㄧ珯鐐�
+ Set<String> stas = stations.stream().map(BasStation::getStationName).collect(Collectors.toSet());
+ BasStationService basStationService = SpringUtils.getBean(BasStationService.class);
+ BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ .in(BasStation::getStationName, stationSet)
+ .notIn(!stas.isEmpty(), BasStation::getStationName, stas)
+ .last("LIMIT 1"));
+ stations.add(basStation);
- if (Objects.isNull(basStation)) {
- throw new CoolException("绔欓粸涓嶅瓨鍦紒锛�");
+ if (Objects.isNull(basStation)) {
+ throw new CoolException("绔欓粸涓嶅瓨鍦紒锛�");
+ }
+ orderOutItemDto.setSitesNo(basStation.getStationName());
}
- orderOutItemDto.setSitesNo(basStation.getStationName());
}
- orderOutItemDto.setSource(item.getItemId())
- .setSourceId(item.getWaveId());
list.add(orderOutItemDto);
--
Gitblit v1.9.1