feat(inventory): 重构入库功能并优化物料扫描处理

- 移除 NoUtil 和 MaterialQRCodeContentDTO 依赖
- 重命名 InCostcenterBackSubmitItemQO 等类名,统一命名规范
- 添加新的库存入库相关 QO 类 (InventoryInQO, InventoryInItemQO, InventoryInItemQRCodeQO)
- 修复 WmsWarehouseService 注入和使用问题
- 更新提交接口参数验证和逻辑处理
- 优化二维码集合处理和物料扫描记录创建
- 添加储位禁用状态判断和设置功能
- 重构物料扫描记录分组逻辑,新增 getKey9 方法支持更精确的分组
- 统一更新多个控制器中的相关实现以保持一致性
- 修复批量更新二维码主数据的方法调用
This commit is contained in:
曹鹏飞 2026-03-19 09:24:23 +08:00
parent e8116fe2dd
commit fa4c26dc10
20 changed files with 196 additions and 92 deletions

View File

@ -9,7 +9,6 @@ import com.nflg.wms.admin.pojo.dto.PdfPageDTO;
import com.nflg.wms.admin.repository.InMaterialScanRecordRespository; import com.nflg.wms.admin.repository.InMaterialScanRecordRespository;
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService; import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
import com.nflg.wms.admin.service.SapService; import com.nflg.wms.admin.service.SapService;
import com.nflg.wms.admin.util.NoUtil;
import com.nflg.wms.admin.util.PdfGeneratorUtil; import com.nflg.wms.admin.util.PdfGeneratorUtil;
import com.nflg.wms.admin.util.QRCodeUtil; import com.nflg.wms.admin.util.QRCodeUtil;
import com.nflg.wms.admin.util.ThymeleafUtil; import com.nflg.wms.admin.util.ThymeleafUtil;
@ -20,7 +19,6 @@ import com.nflg.wms.common.pojo.document.InMaterialScanRecord;
import com.nflg.wms.common.pojo.dto.C_MaterialReturnDTO; import com.nflg.wms.common.pojo.dto.C_MaterialReturnDTO;
import com.nflg.wms.common.pojo.dto.DepartmentMaterialReturnSlipDTO; import com.nflg.wms.common.pojo.dto.DepartmentMaterialReturnSlipDTO;
import com.nflg.wms.common.pojo.dto.InventoryInDTO; import com.nflg.wms.common.pojo.dto.InventoryInDTO;
import com.nflg.wms.common.pojo.dto.MaterialQRCodeContentDTO;
import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.pojo.vo.*;
import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.UserUtil;
@ -81,8 +79,8 @@ public class InCostCenterBackController extends BaseController {
@Resource @Resource
private IWmsQrCodeMasterService qrCodeMasterService; private IWmsQrCodeMasterService qrCodeMasterService;
// @Resource @Resource
// private IWmsWarehouseService private IWmsWarehouseService warehouseService;
/** /**
* 查询SAP领料订单数据 * 查询SAP领料订单数据
@ -186,7 +184,7 @@ public class InCostCenterBackController extends BaseController {
vo.setLgort2(CollectionUtil.get(storageService.getWarehouseNo(order.getWerks(), item.getMatnr()), 0)); vo.setLgort2(CollectionUtil.get(storageService.getWarehouseNo(order.getWerks(), item.getMatnr()), 0));
} }
vo.setLgpbe(storageService.getBinNo(item.getMatnr(), order.getWerks(), vo.getLgort2())); vo.setLgpbe(storageService.getBinNo(item.getMatnr(), order.getWerks(), vo.getLgort2()));
// vo.setIsDisableLocation(); vo.setIsDisableLocation(warehouseService.isEnableLocation(order.getWerks(), order.getLgort()));
return vo; return vo;
}).toList() }).toList()
) )
@ -198,80 +196,83 @@ public class InCostCenterBackController extends BaseController {
*/ */
@Transactional @Transactional
@PostMapping("pda/submit") @PostMapping("pda/submit")
public ApiResult<Void> submit(@Valid @RequestBody InCostcenterBackSubmitQO request) { public ApiResult<Void> submit(@Valid @RequestBody InventoryInQO request) {//InCostCenterBackSubmitQO
WmsInCostcenterBack order = inCostcenterBackService.lambdaQuery().eq(WmsInCostcenterBack::getNo, request.getNo()).one(); WmsInCostcenterBack order = inCostcenterBackService.getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
VUtil.trueThrowBusinessError(Objects.equals(order.getState(), 2)).throwMessage("该订单已完成"); VUtil.trueThrowBusinessError(Objects.equals(order.getState(), 2)).throwMessage("该订单已完成");
WmsInCostcenterBackTicket ticket = new WmsInCostcenterBackTicket() WmsInCostcenterBackTicket ticket = new WmsInCostcenterBackTicket()
.setId(IdUtil.getSnowflakeNextId()) .setId(IdUtil.getSnowflakeNextId())
.setNo(serialNumberControllerService.generateSerialNumber(11)) .setNo(serialNumberControllerService.generateSerialNumber(11))
.setOrderId(order.getId()) .setOrderId(order.getId())
.setLgort(request.getLgort()) .setLgort(request.getWarehouseNo())
.setCreateBy(UserUtil.getUserName()) .setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now()); .setCreateTime(LocalDateTime.now());
List<WmsInCostcenterBackItem> datas = inCostcenterBackItemService.getList(order.getId()); List<WmsInCostcenterBackItem> datas = inCostcenterBackItemService.getList(order.getId());
List<InMaterialScanRecord> records = new ArrayList<>(); List<InMaterialScanRecord> records = new ArrayList<>();
List<WmsInCostcenterBackTicketItem> ticketItems = new ArrayList<>(); List<WmsInCostcenterBackTicketItem> ticketItems = new ArrayList<>();
Set<String> allQrCodes = new HashSet<>(); Set<String> allQrCodes = request.getItems().stream()
request.getItems().forEach(it -> { .map(InventoryInItemQO::getQrCodes)
it.getItems().forEach(item -> { .flatMap(Collection::stream)
allQrCodes.addAll(item.getQrCodes()); .map(InventoryInItemQRCodeQO::getQrCode)
}); .collect(Collectors.toSet());
});
List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.lambdaQuery() List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.lambdaQuery()
.ne(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState()) .ne(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes) .in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
.list(); .list();
request.getItems().forEach(it -> { request.getItems().forEach(it -> {
WmsInCostcenterBackItem item = datas.stream().filter(d -> Objects.equals(it.getOrderItemId(), d.getId())).findFirst().orElse(null); WmsInCostcenterBackItem item = datas.stream()
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效"); .filter(d -> Objects.equals(it.getItemId(), d.getId()))
.findFirst()
.orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效:" + it.getItemId());
WmsInCostcenterBackTicketItem ti = new WmsInCostcenterBackTicketItem() WmsInCostcenterBackTicketItem ti = new WmsInCostcenterBackTicketItem()
.setId(IdUtil.getSnowflakeNextId()) .setId(IdUtil.getSnowflakeNextId())
.setTicketId(ticket.getId()) .setTicketId(ticket.getId())
.setOrderItemId(item.getId()) .setOrderItemId(item.getId())
.setLgpbe(StrUtil.join(",", it.getItems().stream().map(InCostcenterBackSubmitItemQRQO::getBinNo).toList())) .setLgpbe(StrUtil.join(",", it.getQrCodes().stream().map(InventoryInItemQRCodeQO::getBinNo).collect(Collectors.toSet())))
.setNum(BigDecimal.ZERO); .setNum(BigDecimal.ZERO);
ticketItems.add(ti); ticketItems.add(ti);
it.getItems().forEach(iit -> { it.getQrCodes().forEach(iit -> {
iit.getQrCodes().forEach(qrCode -> { WmsQrCodeMaster qrCodeMaster = qrCodeMasters.stream()
WmsQrCodeMaster qrCodeContent = qrCodeMasterService.getByCode(qrCode); .filter(q -> StrUtil.equals(q.getBarcodeCode(), iit.getQrCode()))
String materialNo = qrCodeContent.getMaterialCode(); .findFirst()
.orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效的二维码:"+iit.getQrCode());
VUtil.trueThrowBusinessError(Objects.equals(qrCodeMaster.getProcessStage(),BarCodeProcessStage.InBound.getState()))
.throwMessage("二维码" + iit.getQrCode() + "已入库");
String materialNo = qrCodeMaster.getMaterialCode();
VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr())) VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr()))
.throwMessage("订单项与物料不符"); .throwMessage("订单项与物料不符");
item.setLeft(item.getLeft().subtract(qrCodeContent.getQuantity())); VUtil.trueThrowBusinessError(iit.getNum().compareTo(qrCodeMaster.getQuantity())>0)
.throwMessage("二维码" + iit.getQrCode() + "数量"+iit.getNum()+"不能大于实际数量"+qrCodeMaster.getQuantity());
item.setLeft(item.getLeft().subtract(iit.getNum()));
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0) VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + materialNo + "的入库数量超出申请数量"); .throwMessage("物料" + materialNo + "的入库数量超出申请数量");
ti.setNum(ti.getNum().add(qrCodeContent.getQuantity())); ti.setNum(ti.getNum().add(iit.getNum()));
qrCodeMaster.setFactoryCode(order.getWerks());
qrCodeMaster.setStorageLocation(request.getWarehouseNo());
qrCodeMaster.setBinLocation(iit.getBinNo());
qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState());
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
records.add(new InMaterialScanRecord() records.add(new InMaterialScanRecord()
.setSource(2) .setSource(2)
.setSourceId(order.getId()) .setSourceId(order.getId())
.setSourceItemId(item.getId()) .setSourceItemId(item.getId())
.setTicketItemId(ti.getId()) .setTicketItemId(ti.getId())
.setMaterialNo(materialNo) .setMaterialNo(materialNo)
.setContent(qrCode) .setContent(iit.getQrCode())
.setBatchNo(qrCodeContent.getBatchNo()) .setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeContent.getSerialNo()) .setSerialNo(qrCodeMaster.getSerialNo())
.setFactoryNo(order.getWerks()) .setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(request.getLgort()) .setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(iit.getBinNo()) .setBinNo(qrCodeMaster.getBinLocation())
.setUniqNo(qrCodeContent.getBarcodeCode()) .setUniqNo(qrCodeMaster.getBarcodeCode())
.setNum(qrCodeContent.getQuantity()) .setNum(iit.getNum())
.setCreateBy(UserUtil.getUserName()) .setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now()) .setCreateTime(Instant.now())
); );
WmsQrCodeMaster qrCodeMaster = qrCodeMasters.stream()
.filter(q -> StrUtil.equals(q.getBarcodeCode(), qrCode))
.findFirst()
.orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("二维码" + qrCode + "无效");
qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState());
qrCodeMaster.setFactoryCode(order.getWerks());
qrCodeMaster.setStorageLocation(request.getLgort());
qrCodeMaster.setBinLocation(iit.getBinNo());
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
});
}); });
}); });
inCostcenterBackItemService.updateBatchById(datas); inCostcenterBackItemService.updateBatchById(datas);
@ -284,9 +285,9 @@ public class InCostCenterBackController extends BaseController {
.set(WmsInCostcenterBack::getState, datas.stream().map(WmsInCostcenterBackItem::getLeft).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(BigDecimal.ZERO) > 0 ? 1 : 2) .set(WmsInCostcenterBack::getState, datas.stream().map(WmsInCostcenterBackItem::getLeft).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(BigDecimal.ZERO) > 0 ? 1 : 2)
.eq(WmsInCostcenterBack::getId, order.getId()) .eq(WmsInCostcenterBack::getId, order.getId())
.update(); .update();
qrCodeMasterService.updateBatchById(qrCodeMasters); qrCodeMasterService.updateBarCode(qrCodeMasters);
inventoryService.in(records.stream() inventoryService.in(records.stream()
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey)) .collect(Collectors.groupingBy(InMaterialScanRecord::getKey9))
.values() .values()
.stream() .stream()
.map(list -> new InventoryInDTO() .map(list -> new InventoryInDTO()
@ -295,6 +296,7 @@ public class InCostCenterBackController extends BaseController {
.setSerialNo(list.get(0).getSerialNo()) .setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(order.getWerks()) .setFactoryNo(order.getWerks())
.setWarehouseNo(order.getLgort()) .setWarehouseNo(order.getLgort())
.setBinLocation(list.get(0).getBinNo())
.setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) .setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList() ).toList()
); );
@ -307,7 +309,7 @@ public class InCostCenterBackController extends BaseController {
.setResbRspos(item.getRspos()) .setResbRspos(item.getRspos())
.setResbMatnr(item.getMatnr()) .setResbMatnr(item.getMatnr())
.setMaktx(item.getMaktx()) .setMaktx(item.getMaktx())
.setResbLgort(request.getLgort()) .setResbLgort(request.getWarehouseNo())
.setResbWerks(order.getWerks()) .setResbWerks(order.getWerks())
.setResbMeins(item.getMeins()) .setResbMeins(item.getMeins())
.setErfmg(its.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) .setErfmg(its.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))

View File

@ -294,7 +294,7 @@ public class InProduceBackController extends BaseController {
qrCodeMasterService.updateBatchById(qrCodeMasters); qrCodeMasterService.updateBatchById(qrCodeMasters);
inProduceBackTicketItemService.saveBatch(ticketItems); inProduceBackTicketItemService.saveBatch(ticketItems);
inventoryService.in(records.stream() inventoryService.in(records.stream()
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey)) .collect(Collectors.groupingBy(InMaterialScanRecord::getKey9))
.values() .values()
.stream() .stream()
.map(list -> new InventoryInDTO() .map(list -> new InventoryInDTO()
@ -303,6 +303,7 @@ public class InProduceBackController extends BaseController {
.setSerialNo(list.get(0).getSerialNo()) .setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(order.getDwerk()) .setFactoryNo(order.getDwerk())
.setWarehouseNo(order.getLgort2()) .setWarehouseNo(order.getLgort2())
.setBinLocation(list.get(0).getBinNo())
.setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) .setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList() ).toList()
); );

View File

@ -372,6 +372,7 @@ public class InProduceOrderController extends BaseController {
child.setMustScan(false); child.setMustScan(false);
} }
child.setBinNo(binService.getBinNo(child.getMaterialNo(), child.getFactoryNo(), child.getWarehouseNo())); child.setBinNo(binService.getBinNo(child.getMaterialNo(), child.getFactoryNo(), child.getWarehouseNo()));
child.setIsDisableLocation(warehouseService.isEnableLocation(child.getFactoryNo(), child.getWarehouseNo()));
}); });
datas.addAll(children); datas.addAll(children);
}); });
@ -379,6 +380,7 @@ public class InProduceOrderController extends BaseController {
} else { } else {
list.forEach(it -> { list.forEach(it -> {
it.setBinNo(binService.getBinNo(it.getMaterialNo(), it.getFactoryNo(), it.getWarehouseNo())); it.setBinNo(binService.getBinNo(it.getMaterialNo(), it.getFactoryNo(), it.getWarehouseNo()));
it.setIsDisableLocation(warehouseService.isEnableLocation(it.getFactoryNo(), it.getWarehouseNo()));
}); });
return ApiResult.success(list); return ApiResult.success(list);
} }
@ -551,6 +553,7 @@ public class InProduceOrderController extends BaseController {
.setWarehouseNo(it.getWarehouseNo()) .setWarehouseNo(it.getWarehouseNo())
.setBatchNo(it.getBatchNo()) .setBatchNo(it.getBatchNo())
.setSerialNo(it.getSernr()) .setSerialNo(it.getSernr())
.setBinLocation(it.getBinNo())
).toList() ).toList()
); );
if (CollectionUtil.isNotEmpty(warehouseNoChange)) { if (CollectionUtil.isNotEmpty(warehouseNoChange)) {

View File

@ -17,7 +17,6 @@ import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.document.InMaterialScanRecord; import com.nflg.wms.common.pojo.document.InMaterialScanRecord;
import com.nflg.wms.common.pojo.dto.InventoryInDTO; import com.nflg.wms.common.pojo.dto.InventoryInDTO;
import com.nflg.wms.common.pojo.dto.MaterialQRCodeContentDTO;
import com.nflg.wms.common.pojo.dto.QrCodeMasterPrintDTO; import com.nflg.wms.common.pojo.dto.QrCodeMasterPrintDTO;
import com.nflg.wms.common.pojo.qo.*; import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.pojo.vo.*;
@ -84,6 +83,9 @@ public class InProduceOrderSurplusController extends BaseController {
@Resource @Resource
private IWmsQrCodeMasterService qrCodeMasterService; private IWmsQrCodeMasterService qrCodeMasterService;
@Resource
private IWmsWarehouseService warehouseService;
/** /**
* 从SAP查询订单信息 * 从SAP查询订单信息
*/ */
@ -210,7 +212,9 @@ public class InProduceOrderSurplusController extends BaseController {
.setMaktx2(item.getMaktx2()) .setMaktx2(item.getMaktx2())
.setMatnr(item.getMatnr()) .setMatnr(item.getMatnr())
.setMeins(item.getMeins()) .setMeins(item.getMeins())
.setNum(item.getLeftNum())) .setNum(item.getLeftNum())
.setIsDisableLocation(warehouseService.isEnableLocation(order.getDwerk(), order.getLgort2()))
)
.toList() .toList()
) )
); );
@ -221,7 +225,7 @@ public class InProduceOrderSurplusController extends BaseController {
*/ */
@Transactional @Transactional
@PostMapping("pda/submit") @PostMapping("pda/submit")
public ApiResult<Void> submit(@Valid @RequestBody InCostcenterBackSubmitQO request) { public ApiResult<Void> submit(@Valid @RequestBody InCostCenterBackSubmitQO request) {
WmsInProduceOrderSurplus order = inProduceOrderSurplusService.lambdaQuery().eq(WmsInProduceOrderSurplus::getNo, request.getNo()).one(); WmsInProduceOrderSurplus order = inProduceOrderSurplusService.lambdaQuery().eq(WmsInProduceOrderSurplus::getNo, request.getNo()).one();
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
WmsInProduceOrderSurplusTicket ticket = new WmsInProduceOrderSurplusTicket() WmsInProduceOrderSurplusTicket ticket = new WmsInProduceOrderSurplusTicket()
@ -241,7 +245,7 @@ public class InProduceOrderSurplusController extends BaseController {
.setId(IdUtil.getSnowflakeNextId()) .setId(IdUtil.getSnowflakeNextId())
.setTicketId(ticket.getId()) .setTicketId(ticket.getId())
.setOrderItemId(item.getId()) .setOrderItemId(item.getId())
.setLgpbe(StrUtil.join(",", it.getItems().stream().map(InCostcenterBackSubmitItemQRQO::getBinNo).toList())) .setLgpbe(StrUtil.join(",", it.getItems().stream().map(InCostCenterBackSubmitItemQRQO::getBinNo).toList()))
.setNum(BigDecimal.ZERO); .setNum(BigDecimal.ZERO);
ticketItems.add(ti); ticketItems.add(ti);
it.getItems().forEach(iit -> { it.getItems().forEach(iit -> {
@ -287,7 +291,7 @@ public class InProduceOrderSurplusController extends BaseController {
.eq(WmsInProduceOrderSurplus::getId, order.getId()) .eq(WmsInProduceOrderSurplus::getId, order.getId())
.update(); .update();
inventoryService.in(records.stream() inventoryService.in(records.stream()
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey)) .collect(Collectors.groupingBy(InMaterialScanRecord::getKey9))
.values() .values()
.stream() .stream()
.map(list -> new InventoryInDTO() .map(list -> new InventoryInDTO()
@ -297,6 +301,7 @@ public class InProduceOrderSurplusController extends BaseController {
.setSerialNo(list.get(0).getSerialNo()) .setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(order.getDwerk()) .setFactoryNo(order.getDwerk())
.setWarehouseNo(ticket.getLgort()) .setWarehouseNo(ticket.getLgort())
.setBinLocation(list.get(0).getBinNo())
.setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) .setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList() ).toList()
); );

View File

@ -472,7 +472,7 @@ public class NormalPGIController extends BaseController {
.setLastScanTime(LocalDateTime.now()); .setLastScanTime(LocalDateTime.now());
qrCodeMasters.add(wmsQrCodeMaster); qrCodeMasters.add(wmsQrCodeMaster);
if (CollectionUtil.isNotEmpty(qo.getItems())) { if (CollectionUtil.isNotEmpty(qo.getItems())) {
InCostcenterBackSubmitItemQRQO qrqo = qo.getItems() InCostCenterBackSubmitItemQRQO qrqo = qo.getItems()
.stream() .stream()
.filter(iit -> iit.getQrCodes().contains(code.getCodeId())) .filter(iit -> iit.getQrCodes().contains(code.getCodeId()))
.findFirst() .findFirst()
@ -1256,7 +1256,7 @@ public class NormalPGIController extends BaseController {
.setItems( .setItems(
new ArrayList<>() { new ArrayList<>() {
{ {
add(new InCostcenterBackSubmitItemQRQO() add(new InCostCenterBackSubmitItemQRQO()
.setBinNo(item.getStorageLocation()) .setBinNo(item.getStorageLocation())
.setQrCodes( .setQrCodes(
qrCodeMasters.stream() qrCodeMasters.stream()

View File

@ -516,7 +516,7 @@ public class TransferCompanyController extends BaseController {
List<InMaterialScanRecord> records = new ArrayList<>(); List<InMaterialScanRecord> records = new ArrayList<>();
List<WmsQrCodeMaster> qrCodeMasters = new ArrayList<>(); List<WmsQrCodeMaster> qrCodeMasters = new ArrayList<>();
records1.forEach(record -> { records1.forEach(record -> {
InCostcenterBackSubmitItemQRQO qrqo = qo.getItems() InCostCenterBackSubmitItemQRQO qrqo = qo.getItems()
.stream() .stream()
.map(InSubmitItemQO::getItems) .map(InSubmitItemQO::getItems)
.flatMap(Collection::stream) .flatMap(Collection::stream)
@ -561,7 +561,7 @@ public class TransferCompanyController extends BaseController {
.setBinNos1( .setBinNos1(
StrUtil.join(",", q.getItems() StrUtil.join(",", q.getItems()
.stream() .stream()
.map(InCostcenterBackSubmitItemQRQO::getQrCodes) .map(InCostCenterBackSubmitItemQRQO::getQrCodes)
.flatMap(Collection::stream) .flatMap(Collection::stream)
.toList() .toList()
) )
@ -571,7 +571,7 @@ public class TransferCompanyController extends BaseController {
transferCompanyTicketItemService.updateBatchById(ticketItems); transferCompanyTicketItemService.updateBatchById(ticketItems);
} }
inventoryService.in(records.stream() inventoryService.in(records.stream()
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey)) .collect(Collectors.groupingBy(InMaterialScanRecord::getKey9))
.values() .values()
.stream() .stream()
.map(list -> new InventoryInDTO() .map(list -> new InventoryInDTO()
@ -580,6 +580,7 @@ public class TransferCompanyController extends BaseController {
.setSerialNo(list.get(0).getSerialNo()) .setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(list.get(0).getFactoryNo()) .setFactoryNo(list.get(0).getFactoryNo())
.setWarehouseNo(list.get(0).getWarehouseNo()) .setWarehouseNo(list.get(0).getWarehouseNo())
.setBinLocation(list.get(0).getBinNo())
.setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) .setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList() ).toList()
); );

View File

@ -11,7 +11,6 @@ import com.nflg.wms.admin.repository.InventoryForOutRepository;
import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository; import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository;
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService; import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
import com.nflg.wms.admin.service.SapService; import com.nflg.wms.admin.service.SapService;
import com.nflg.wms.admin.util.NoUtil;
import com.nflg.wms.admin.util.PdfGeneratorUtil; import com.nflg.wms.admin.util.PdfGeneratorUtil;
import com.nflg.wms.admin.util.QRCodeUtil; import com.nflg.wms.admin.util.QRCodeUtil;
import com.nflg.wms.admin.util.ThymeleafUtil; import com.nflg.wms.admin.util.ThymeleafUtil;
@ -509,7 +508,14 @@ public class TransferFactoryController extends BaseController {
.setSerialNo(record.getSerialNo()) .setSerialNo(record.getSerialNo())
.setFactoryNo(ticket.getWerks()) .setFactoryNo(ticket.getWerks())
.setWarehouseNo(qo.getLgort1()) .setWarehouseNo(qo.getLgort1())
.setBinNo("") .setBinNo(qo.getItems().stream()
.map(InSubmitItemQO::getItems)
.flatMap(Collection::stream)
.filter(q -> q.getQrCodes().contains(record.getUniqNo()))
.findFirst()
.map(InCostCenterBackSubmitItemQRQO::getBinNo)
.orElse("")
)
.setUniqNo(record.getUniqNo()) .setUniqNo(record.getUniqNo())
.setRspos(record.getRspos()) .setRspos(record.getRspos())
.setNum(record.getNum()) .setNum(record.getNum())
@ -531,7 +537,7 @@ public class TransferFactoryController extends BaseController {
// .setBinNos1(it.getBinNos()) // .setBinNos1(it.getBinNos())
// ).toList()); // ).toList());
inventoryService.in(records.stream() inventoryService.in(records.stream()
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey)) .collect(Collectors.groupingBy(InMaterialScanRecord::getKey9))
.values() .values()
.stream() .stream()
.map(list -> new InventoryInDTO() .map(list -> new InventoryInDTO()
@ -540,6 +546,7 @@ public class TransferFactoryController extends BaseController {
.setSerialNo(list.get(0).getSerialNo()) .setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(list.get(0).getFactoryNo()) .setFactoryNo(list.get(0).getFactoryNo())
.setWarehouseNo(list.get(0).getWarehouseNo()) .setWarehouseNo(list.get(0).getWarehouseNo())
.setBinLocation(list.get(0).getBinNo())
.setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) .setNum(list.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList() ).toList()
); );

View File

@ -170,4 +170,11 @@ public class InMaterialScanRecord {
public String getKey8() { public String getKey8() {
return batchNo + "|" + factoryNo + "|" + unit + "|" + warehouseNo; return batchNo + "|" + factoryNo + "|" + unit + "|" + warehouseNo;
} }
@Transient
private String key9;
public String getKey9() {
return this.materialNo + "|" + this.batchNo + "|" + this.getSerialNo() + "|" + this.factoryNo + "|" + this.warehouseNo + "|" + this.binNo;
}
} }

View File

@ -1,7 +1,6 @@
package com.nflg.wms.common.pojo.qo; package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
@ -9,7 +8,7 @@ import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class InCostcenterBackSubmitItemQO { public class InCostCenterBackSubmitItemQO {
/** /**
* 订单项ID * 订单项ID
@ -22,5 +21,5 @@ public class InCostcenterBackSubmitItemQO {
*/ */
@Valid @Valid
@NotEmpty @NotEmpty
private List<InCostcenterBackSubmitItemQRQO> items; private List<InCostCenterBackSubmitItemQRQO> items;
} }

View File

@ -8,7 +8,7 @@ import java.util.List;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
public class InCostcenterBackSubmitItemQRQO { public class InCostCenterBackSubmitItemQRQO {
/** /**
* 实际入库储位编号列表 * 实际入库储位编号列表

View File

@ -8,7 +8,7 @@ import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class InCostcenterBackSubmitQO { public class InCostCenterBackSubmitQO {
@NotBlank @NotBlank
private String no; private String no;
@ -24,5 +24,5 @@ public class InCostcenterBackSubmitQO {
*/ */
@Valid @Valid
@NotEmpty @NotEmpty
private List<InCostcenterBackSubmitItemQO> items; private List<InCostCenterBackSubmitItemQO> items;
} }

View File

@ -24,5 +24,5 @@ public class InProduceBackSubmitQO {
*/ */
@Valid @Valid
@NotEmpty @NotEmpty
private List<InCostcenterBackSubmitItemQRQO> items; private List<InCostCenterBackSubmitItemQRQO> items;
} }

View File

@ -2,7 +2,6 @@ package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
@ -26,5 +25,5 @@ public class InProduceOrderReceiveMaterialQO {
* 二维码列表 * 二维码列表
*/ */
@Valid @Valid
private List<InCostcenterBackSubmitItemQRQO> items; private List<InCostCenterBackSubmitItemQRQO> items;
} }

View File

@ -1,7 +1,6 @@
package com.nflg.wms.common.pojo.qo; package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
@ -20,5 +19,5 @@ public class InSubmitItemQO {
* 二维码列表 * 二维码列表
*/ */
@Valid @Valid
private List<InCostcenterBackSubmitItemQRQO> items; private List<InCostCenterBackSubmitItemQRQO> items;
} }

View File

@ -0,0 +1,20 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
@Data
public class InventoryInItemQO {
/**
* 项id
*/
@NotNull
private Long itemId;
@Valid
private List<InventoryInItemQRCodeQO> qrCodes;
}

View File

@ -0,0 +1,28 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class InventoryInItemQRCodeQO {
/**
* 二维码唯一码
*/
@NotBlank
private String qrCode;
/**
* 数量
*/
@NotNull
private BigDecimal num;
/**
* 储位编号
*/
private String binNo;
}

View File

@ -0,0 +1,32 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
@Data
public class InventoryInQO {
/**
* 单据id
*/
@NotNull
private Long id;
/**
* 仓库编号
*/
@NotBlank
private String warehouseNo;
/**
* 订单项列表
*/
@Valid
@NotEmpty
private List<InventoryInItemQO> items;
}

View File

@ -1,11 +1,9 @@
package com.nflg.wms.common.pojo.qo; package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
@Data @Data
@ -39,5 +37,5 @@ public class PoReceiveTaskItemConfirmQO {
* 二维码列表 * 二维码列表
*/ */
@Valid @Valid
private List<InCostcenterBackSubmitItemQRQO> items; private List<InCostCenterBackSubmitItemQRQO> items;
} }

View File

@ -1,12 +1,9 @@
package com.nflg.wms.common.pojo.qo; package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
@Data @Data
@ -56,5 +53,5 @@ public class QCReceiveTaskConfirmQO {
* 二维码列表 * 二维码列表
*/ */
@Valid @Valid
private List<InCostcenterBackSubmitItemQRQO> items; private List<InCostCenterBackSubmitItemQRQO> items;
} }

View File

@ -77,4 +77,10 @@ public class InProduceOrderItemVO {
* 是否必须扫码如果为false的话可以不扫码 * 是否必须扫码如果为false的话可以不扫码
*/ */
private boolean mustScan = true; private boolean mustScan = true;
/**
* 是否启用储位管理true为启用,false为不启用
*/
@JsonProperty("isDisableLocation")
private Boolean isDisableLocation = true;
} }