新增无码收货-生产订单副产品功能

This commit is contained in:
yf001217 2026-06-01 09:11:08 +08:00
parent b6ab5205f7
commit bc93e904fe
1 changed files with 83 additions and 76 deletions

View File

@ -6,6 +6,8 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.nflg.wms.admin.pojo.dto.PdfPageDTO;
import com.nflg.wms.admin.pojo.request.NoScanningItemDataRequest;
import com.nflg.wms.admin.pojo.request.NoScanningItemRequest;
import com.nflg.wms.admin.pojo.request.NoScanningRequest;
import com.nflg.wms.admin.repository.InMaterialScanRecordRespository;
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
@ -698,41 +700,44 @@ public class InProduceOrderController extends BaseController {
@Transactional
@PostMapping("receiveNoScanning")
public ApiResult<Void> receiveNoScanning(@Valid @RequestBody @NotEmpty List<NoScanningRequest> requests) {
List<WmsInProduceOrderItem> orderItems = produceOrderItemService.lambdaQuery()
.in(WmsInProduceOrderItem::getId, requests.stream().map(NoScanningRequest::getOrderItemId).distinct().toList())
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItems)).throwMessage("订单项不存在");
VUtil.trueThrowBusinessError(orderItems.size() != requests.stream().map(NoScanningRequest::getOrderItemId).distinct().count())
.throwMessage("存在无效的订单项");
List<InMaterialScanRecord> records = new ArrayList<>();
List<InventoryInDTO> inventories = new ArrayList<>();
List<Zwm00Mb107QO> input1 = new ArrayList<>();
List<String> sernrs = new ArrayList<>();
Set<Long> orderIds = new HashSet<>();
Set<Long> orderIds = orderItems.stream().map(WmsInProduceOrderItem::getOrderId).collect(Collectors.toSet());
VUtil.trueThrowBusinessError(orderIds.size() != 1).throwMessage("请一次只提交同一个订单的无码收货");
WmsInProduceOrder order = produceOrderService.getById(orderIds.iterator().next());
for (NoScanningRequest request : requests) {
WmsInProduceOrder order = produceOrderService.getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
VUtil.trueThrowBusinessError(!Objects.equals(order.getState(), (short) 0))
.throwMessage("该订单非待收货状态");
List<WmsInProduceOrderItem> orderItems = produceOrderItemService.lambdaQuery()
.eq(WmsInProduceOrderItem::getOrderId, order.getId())
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItems)).throwMessage("订单项不存在");
Map<Long, WmsInProduceOrderItem> orderItemMap = orderItems.stream()
.collect(Collectors.toMap(WmsInProduceOrderItem::getId, item -> item));
List<InMaterialScanRecord> records = new ArrayList<>();
List<InventoryInDTO> inventories = new ArrayList<>();
requests.forEach(request -> {
WmsInProduceOrderItem orderItem = orderItemMap.get(request.getOrderItemId());
orderIds.add(order.getId());
VUtil.trueThrowBusinessError(orderIds.size() != 1).throwMessage("请一次只提交同一个订单的无码收货");
for (NoScanningItemRequest item : request.getItems()) {
WmsInProduceOrderItem orderItem = orderItemMap.get(item.getOrderItemId());
VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("订单项不存在");
VUtil.trueThrowBusinessError(!StrUtil.equals(request.getMaterialNo(), orderItem.getMaterialNo()))
.throwMessage("订单项与物料不匹配:" + request.getMaterialNo());
VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMaterialNo()))
.throwMessage("订单项与物料不匹配:" + item.getMaterialNo());
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMaterialNo()))
.throwMessage("物料" + orderItem.getMaterialNo() + "已生成二维码,不允许无码收货");
BigDecimal totalNum = request.getItems().stream()
.peek(item -> VUtil.trueThrowBusinessError(Objects.isNull(item.getNum()) || item.getNum().compareTo(BigDecimal.ZERO) <= 0)
BigDecimal totalNum = item.getDatas().stream()
.peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0)
.throwMessage("物料" + orderItem.getMaterialNo() + "的无码收货数量必须大于0"))
.map(item -> item.getNum())
.map(NoScanningItemDataRequest::getNum)
.reduce(BigDecimal.ZERO, BigDecimal::add);
VUtil.trueThrowBusinessError(totalNum.compareTo(orderItem.getNum()) != 0)
.throwMessage("物料" + orderItem.getMaterialNo() + "的无码收货数量与订单数量不一致");
request.getItems().forEach(item -> {
item.getDatas().forEach(data -> {
records.add(new InMaterialScanRecord()
.setSource(4)
.setSourceId(order.getId())
@ -742,11 +747,11 @@ public class InProduceOrderController extends BaseController {
.setMaterialDesc(orderItem.getMaterialDesc())
.setFactoryNo(orderItem.getFactoryNo())
.setWarehouseNo(orderItem.getWarehouseNo())
.setBinNo(StrUtil.blankToDefault(item.getBinNo(), ""))
.setBinNo(StrUtil.blankToDefault(data.getBinNo(), ""))
.setContent("")
.setBatchNo(StrUtil.blankToDefault(item.getBatchNo(), ""))
.setSerialNo(StrUtil.blankToDefault(item.getSerialNo(), ""))
.setNum(item.getNum())
.setBatchNo(StrUtil.blankToDefault(data.getBatchNo(), ""))
.setSerialNo(StrUtil.blankToDefault(data.getSerialNo(), ""))
.setNum(data.getNum())
.setUnit(orderItem.getUnit())
.setUniqNo("NO_SCAN_" + IdUtil.getSnowflakeNextId())
.setCreateBy(UserUtil.getUserName())
@ -756,35 +761,37 @@ public class InProduceOrderController extends BaseController {
.setMaterialNo(orderItem.getMaterialNo())
.setFactoryNo(orderItem.getFactoryNo())
.setWarehouseNo(orderItem.getWarehouseNo())
.setBatchNo(StrUtil.blankToDefault(item.getBatchNo(), ""))
.setSerialNo(StrUtil.blankToDefault(item.getSerialNo(), ""))
.setBatchNo(StrUtil.blankToDefault(data.getBatchNo(), ""))
.setSerialNo(StrUtil.blankToDefault(data.getSerialNo(), ""))
.setBinLocation("")
.setNum(item.getNum())
.setNum(data.getNum())
);
});
});
}
input1.addAll(orderItems.stream()
.filter(it -> Objects.equals(it.getParentId(), 0L))
.map(it -> new Zwm00Mb107QO()
.setPWERK(it.getFactoryNo())
.setPSMNG(it.getNum())
.setAMEIN(it.getUnit())
.setLGORT(it.getWarehouseNo())
.setCHARG(it.getBatchNo()))
.toList());
sernrs.addAll(orderItems.stream()
.filter(it -> Objects.equals(it.getParentId(), 0L))
.map(WmsInProduceOrderItem::getSernr)
.toList());
}
inventoryService.in(mergeInventories(inventories));
WmsInProduceOrder order = produceOrderService.getById(requests.get(0).getId());
OptRecordDTO optRecordDTO = new OptRecordDTO();
optRecordDTO.setOperationType((short) 1)
.setOrderId(order.getNo());
optRecordService.add(optRecordDTO);
Zwm00Mb107DTO dto = sapService.zwm00_mb107(
order.getOrderNo(),
UserUtil.getUserName(),
records.stream().collect(Collectors.groupingBy(InMaterialScanRecord::getKey8))
.values()
.stream()
.map(items -> new Zwm00Mb107QO()
.setPWERK(items.get(0).getFactoryNo())
.setPSMNG(items.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
.setAMEIN(items.get(0).getUnit())
.setLGORT(items.get(0).getWarehouseNo())
.setCHARG(items.get(0).getBatchNo()))
.toList(),
records.stream().map(InMaterialScanRecord::getSerialNo).toList()
);
Zwm00Mb107DTO dto = sapService.zwm00_mb107(order.getOrderNo(), UserUtil.getUserName(), input1, sernrs);
order.setMblnr(dto.getE_MBLNR());
order.setMjahr(dto.getE_MJAHR());
order.setState((short) 1);