修改了零部件出口的 二维码不验证唯一性的问题

修改批量无码上架的问题
This commit is contained in:
zhangke 2025-09-30 09:36:49 +08:00
parent c8722c267a
commit afb0b214a9
5 changed files with 70 additions and 30 deletions

View File

@ -140,7 +140,7 @@ public class ComponentOutboundController {
List<WmsComponentOutboundItem> outboundItems = new ArrayList<>(); List<WmsComponentOutboundItem> outboundItems = new ArrayList<>();
List<WmsComponentOutboundScanCodes> outboundScanCodes = new ArrayList<>(); List<WmsComponentOutboundScanCodes> outboundScanCodes = new ArrayList<>();
List<InventoryDTO> inventories = new ArrayList<>(); List<InventoryDTO> inventories = new ArrayList<>();
List<String> codeIds = new ArrayList<>(); //List<String> codeIds = new ArrayList<>();
ZWM3A20DTO zwm3a20DTO = new ZWM3A20DTO() ZWM3A20DTO zwm3a20DTO = new ZWM3A20DTO()
.setItSernrPatch(new ArrayList<>()) .setItSernrPatch(new ArrayList<>())
.setItem(new ArrayList<>()) .setItem(new ArrayList<>())
@ -153,19 +153,37 @@ public class ComponentOutboundController {
if (Objects.isNull(outboundItem)) if (Objects.isNull(outboundItem))
continue; continue;
outboundItems.add(outboundItem); outboundItems.add(outboundItem);
//处理条码先根据批次号序列号进行一次数量汇总
if (CollectionUtil.isNotEmpty(item.getScanCodes())) { if (CollectionUtil.isNotEmpty(item.getScanCodes())) {
List<ScanCodeQO> scanCodesGroup=new ArrayList<>();
for (ScanCodeQO code : item.getScanCodes())
{
ScanCodeQO codeItem=scanCodesGroup.stream().filter(c->c.getBatchNumber().equals(code.getBatchNumber())
&& c.getSerialNumber().equals(code.getSerialNumber())
).findFirst().orElse(null);
if(Objects.isNull(codeItem))
{
scanCodesGroup.add(code);
}
else
{
codeItem.setCodeNum(codeItem.getCodeNum().add(code.getCodeNum()));
}
}
//判断扫码数量是否等于了出货数量 //判断扫码数量是否等于了出货数量
BigDecimal qty = item.getScanCodes().stream().map(ScanCodeQO::getCodeNum).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal qty = scanCodesGroup.stream().map(ScanCodeQO::getCodeNum).reduce(BigDecimal.ZERO, BigDecimal::add);
VUtil.trueThrowBusinessError(outboundItem.getOutQty().equals(qty)).throwMessage("物料[" + outboundItem.getIdnrk() + "]的出库数量[" + qty + "]不等于装箱数量[" + outboundItem.getOutQty() + "]"); VUtil.trueThrowBusinessError(outboundItem.getOutQty().equals(qty)).throwMessage("物料[" + outboundItem.getIdnrk() + "]的出库数量[" + qty + "]不等于装箱数量[" + outboundItem.getOutQty() + "]");
//判断是否有多个批次号 //判断是否有多个批次号
List<String> batchNumbers = item.getScanCodes().stream().map(ScanCodeQO::getBatchNumber).distinct().toList(); List<String> batchNumbers = scanCodesGroup.stream().map(ScanCodeQO::getBatchNumber).distinct().toList();
if (batchNumbers.size() == 1) { if (batchNumbers.size() == 1) {
// 只需要组装一个批次号剩下的放入到批次拆分信息中 // 只需要组装一个批次号剩下的放入到批次拆分信息中
set3A20Item(batchNumbers.get(0), outboundItem, outboundItem.getOutQty(), zwm3a20DTO); set3A20Item(batchNumbers.get(0), outboundItem, outboundItem.getOutQty(), zwm3a20DTO);
//判断是否有多个序列号 //判断是否有多个序列号
List<String> serialNumbers = item.getScanCodes().stream() List<String> serialNumbers = scanCodesGroup.stream()
.map(ScanCodeQO::getSerialNumber) .map(ScanCodeQO::getSerialNumber)
.filter(StrUtil::isNotBlank) .filter(StrUtil::isNotBlank)
.distinct() .distinct()
@ -186,16 +204,16 @@ public class ComponentOutboundController {
//首先要组装物料详情信息此时物料详情的批次号和数量是无效的可以忽略不计 //首先要组装物料详情信息此时物料详情的批次号和数量是无效的可以忽略不计
set3A20Item(batchNumbers.get(0), outboundItem, outboundItem.getOutQty(), zwm3a20DTO); set3A20Item(batchNumbers.get(0), outboundItem, outboundItem.getOutQty(), zwm3a20DTO);
//接着处理序号和批次的关系列表 //接着处理序号和批次的关系列表
for (ScanCodeQO code : item.getScanCodes()) { for (ScanCodeQO code : scanCodesGroup) {
// 批次和序号的组装 // 批次和序号的组装
setItLipsItem(code, zwm3a20DTO, outboundItem); setItLipsItem(code, zwm3a20DTO, outboundItem);
} }
} }
for (ScanCodeQO code : item.getScanCodes()) { for (ScanCodeQO code : scanCodesGroup) {
VUtil.trueThrowBusinessError(codeIds.contains(code.getCodeId())).throwMessage("物料[" + outboundItem.getIdnrk() + "]的条码[" + code.getCodeId() + "]被重复使用"); // VUtil.trueThrowBusinessError(codeIds.contains(code.getCodeId())).throwMessage("物料[" + outboundItem.getIdnrk() + "]的条码[" + code.getCodeId() + "]被重复使用");
codeIds.add(code.getCodeId()); // codeIds.add(code.getCodeId());
// 组装条码信息 // 组装条码信息
WmsComponentOutboundScanCodes scanCodes = new WmsComponentOutboundScanCodes(); WmsComponentOutboundScanCodes scanCodes = new WmsComponentOutboundScanCodes();
scanCodes.setOutboundItemId(outboundItem.getId()) scanCodes.setOutboundItemId(outboundItem.getId())
@ -217,8 +235,8 @@ public class ComponentOutboundController {
} }
} }
// 判断下当前的条码是否有已经使用过得 // 判断下当前的条码是否有已经使用过得
List<WmsComponentOutboundScanCodes> existScanCodes = wmsComponentOutboundScanCodesService.findByCodeIdIn(codeIds); // List<WmsComponentOutboundScanCodes> existScanCodes = wmsComponentOutboundScanCodesService.findByCodeIdIn(codeIds);
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(existScanCodes)).throwMessage("存在已经使用过的条码"); // VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(existScanCodes)).throwMessage("存在已经使用过的条码");
componentOutboundControllerService.confirmPda(outbound, outboundItems, outboundScanCodes, zwm3a20DTO, inventories); componentOutboundControllerService.confirmPda(outbound, outboundItems, outboundScanCodes, zwm3a20DTO, inventories);
return ApiResult.success(); return ApiResult.success();
} }

View File

@ -131,6 +131,7 @@ public class NormalQMController extends BaseController {
QCReceiveDTO qcReceiveDTO = new QCReceiveDTO() QCReceiveDTO qcReceiveDTO = new QCReceiveDTO()
.setUnqualifiedInventories(new ArrayList<>()) .setUnqualifiedInventories(new ArrayList<>())
.setQcIdList(new ArrayList<>()) .setQcIdList(new ArrayList<>())
.setReceiveIds(new ArrayList<>())
.setWaitModifyItems(new ArrayList<>()) .setWaitModifyItems(new ArrayList<>())
.setStorageLocationDTOS(new ArrayList<>()) .setStorageLocationDTOS(new ArrayList<>())
.setQualifiednventories(new ArrayList<>()); .setQualifiednventories(new ArrayList<>());
@ -146,6 +147,9 @@ public class NormalQMController extends BaseController {
if (Objects.isNull(wmsQcReceiveItem)) { if (Objects.isNull(wmsQcReceiveItem)) {
continue; continue;
} }
if (!qcReceiveDTO.getReceiveIds().stream().anyMatch(id -> id.equals(wmsQcReceiveItem.getReceiveId()))) {
qcReceiveDTO.getReceiveIds().add(wmsQcReceiveItem.getReceiveId());
}
qcReceiveDTO.setZwm3a18DTO(new ZWM3A18DTO() qcReceiveDTO.setZwm3a18DTO(new ZWM3A18DTO()
.setEbeln(item.getPoNum()) .setEbeln(item.getPoNum())
@ -262,12 +266,21 @@ public class NormalQMController extends BaseController {
@PostMapping("unscan/task/confirm") @PostMapping("unscan/task/confirm")
@ApiMark(moduleName = "质检物料管理", apiName = "无码质检任务上架确认") @ApiMark(moduleName = "质检物料管理", apiName = "无码质检任务上架确认")
public ApiResult<Void> confirmNoScan(@Valid @RequestBody ReceiveQO request) { public ApiResult<Void> confirmNoScan(@Valid @RequestBody ReceiveQO request) {
WmsQcReceive qcReceive = wmsQcReceiveService.getById( request.getId()); List<WmsQcReceive> qcReceives = wmsQcReceiveService
.lambdaQuery()
.in(WmsQcReceive::getId, request.getIds())
.ne(WmsQcReceive::getIsCompleted, 2)
.eq(WmsQcReceive::getIsCheck, true)
.list();
VUtil.trueThrowBusinessError(Objects.isNull(qcReceive)).throwMessage("无此任务");
VUtil.trueThrowBusinessError(!qcReceive.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单"); //.getById(request.getId());
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qcReceives)).throwMessage("无有效的上架任务");
//VUtil.trueThrowBusinessError(!qcReceive.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单");
//根据ID获取到任务单 //根据ID获取到任务单
List<QCReceiveTaskConfirmQO> taskConfirmQOS = new ArrayList<>(); List<QCReceiveTaskConfirmQO> taskConfirmQOS = new ArrayList<>();
for (WmsQcReceive qcReceive : qcReceives) {
List<QCTaskItemVO> tasks = normalQMControllerService.getTaskItem(qcReceive.getId()); List<QCTaskItemVO> tasks = normalQMControllerService.getTaskItem(qcReceive.getId());
if (CollectionUtil.isNotEmpty(tasks)) { if (CollectionUtil.isNotEmpty(tasks)) {
for (QCTaskItemVO item : tasks) { for (QCTaskItemVO item : tasks) {
@ -286,9 +299,9 @@ public class NormalQMController extends BaseController {
taskConfirmQOS.add(taskConfirmQO); taskConfirmQOS.add(taskConfirmQO);
} }
} }
}
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(taskConfirmQOS)).throwMessage("无效的上架任务"); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(taskConfirmQOS)).throwMessage("无效的上架任务");
return confirm(taskConfirmQOS); return confirm(taskConfirmQOS);
} }

View File

@ -32,4 +32,9 @@ public class QCReceiveDTO {
* 质检单ID,更改入库标记 * 质检单ID,更改入库标记
*/ */
private List<Long> QcIdList; private List<Long> QcIdList;
/**
* 入库单ID,更改入库标记
*/
private List<Long> receiveIds;
} }

View File

@ -104,22 +104,24 @@ public class NormalQMControllerService {
qcReceiveDTO.getWaitModifyItems().forEach(item -> { qcReceiveDTO.getWaitModifyItems().forEach(item -> {
wmsQcReceiveItemService.updateInQty(item.getId(), item.getInQty(), item.getUnqualifiedQty(), item.getQualifiedQty()); wmsQcReceiveItemService.updateInQty(item.getId(), item.getInQty(), item.getUnqualifiedQty(), item.getQualifiedQty());
}); });
// 修改表头的状态
Long id = qcReceiveDTO.getWaitModifyItems().get(0).getId(); }
WmsQcReceiveItem wmsQcReceiveItem = wmsQcReceiveItemService.getById(id); // 修改表头的状态
Long receiveId = wmsQcReceiveItem.getReceiveId(); if (CollectionUtil.isNotEmpty(qcReceiveDTO.getReceiveIds())) {
List<Long> ids = wmsQcReceiveItemService.getUnReceivedItems(receiveId); for (Long receiveId : qcReceiveDTO.getReceiveIds()) {
List<Long> ids = wmsQcReceiveItemService.getUnReceivedItems(receiveId);
//判断是否全部完成 //判断是否全部完成
if (CollectionUtil.isEmpty(ids)) { if (CollectionUtil.isEmpty(ids)) {
iWmsQcReceiveService.lambdaUpdate() iWmsQcReceiveService.lambdaUpdate()
.eq(WmsQcReceive::getId, receiveId) .eq(WmsQcReceive::getId, receiveId)
.set(WmsQcReceive::getIsCompleted, 2) .set(WmsQcReceive::getIsCompleted, 2)
.update(); .update();
} else { } else {
iWmsQcReceiveService.lambdaUpdate() iWmsQcReceiveService.lambdaUpdate()
.eq(WmsQcReceive::getId, receiveId) .eq(WmsQcReceive::getId, receiveId)
.set(WmsQcReceive::getIsCompleted, 1) .set(WmsQcReceive::getIsCompleted, 1)
.update(); .update();
}
} }
} }
// 上传SAP // 上传SAP

View File

@ -3,8 +3,10 @@ package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class ReceiveQO { public class ReceiveQO {
@NotNull @NotNull
private Long id; private List<Long> ids;
} }