feat(inventory): 添加储位管理功能支持

- 在OutDifferenceItemVO中新增推荐储位和扫码储位字段
- 修改OutMaterialScanRecord添加基于储位的唯一键生成
- 更新InventoryController中的库存出库逻辑,增加储位信息传递
- 在扫描记录控制器中实现储位匹配和差异对比功能
- 修复注释中的布尔值说明错误
- 优化代码格式和空行清理
This commit is contained in:
曹鹏飞 2026-03-18 18:42:49 +08:00
parent 7fab12f680
commit a76ee52afb
6 changed files with 35 additions and 8 deletions

View File

@ -81,6 +81,9 @@ public class InCostCenterBackController extends BaseController {
@Resource @Resource
private IWmsQrCodeMasterService qrCodeMasterService; private IWmsQrCodeMasterService qrCodeMasterService;
// @Resource
// private IWmsWarehouseService
/** /**
* 查询SAP领料订单数据 * 查询SAP领料订单数据
*/ */
@ -183,7 +186,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();
return vo; return vo;
}).toList() }).toList()
) )

View File

@ -285,7 +285,8 @@ public class InventoryController extends BaseController {
@PostMapping("getForOut") @PostMapping("getForOut")
public ApiResult<List<InventoryForOutVO>> getForOut(@Valid @RequestBody @NotNull InventoryForOutQO qo) { public ApiResult<List<InventoryForOutVO>> getForOut(@Valid @RequestBody @NotNull InventoryForOutQO qo) {
List<WmsInventory> inventories = inventoryService.getForOutFIFO(qo.getFactoryNo(), qo.getWarehouseNo() List<WmsInventory> inventories = inventoryService.getForOutFIFO(qo.getFactoryNo(), qo.getWarehouseNo()
, qo.getItems().stream().map(InventoryForOutItemQO::getMaterialNo).collect(Collectors.toSet())); , qo.getItems().stream().map(InventoryForOutItemQO::getMaterialNo).collect(Collectors.toSet())
);
List<InventoryForOutVO> vos = new ArrayList<>(); List<InventoryForOutVO> vos = new ArrayList<>();
qo.getItems().forEach(item -> { qo.getItems().forEach(item -> {
InventoryForOutVO vo = new InventoryForOutVO() InventoryForOutVO vo = new InventoryForOutVO()
@ -298,7 +299,7 @@ public class InventoryController extends BaseController {
BigDecimal num = item.getNum(); BigDecimal num = item.getNum();
for (WmsInventory inventory : mis) { for (WmsInventory inventory : mis) {
BigDecimal outNum = NumberUtil.min(num, inventory.getNum()); BigDecimal outNum = NumberUtil.min(num, inventory.getNum());
vo.getItems().add(new InventoryForOutItemVO(inventory.getBatchNo(), inventory.getSerialNo(), outNum)); vo.getItems().add(new InventoryForOutItemVO(inventory.getBatchNo(), inventory.getSerialNo(), inventory.getBinLocation(), outNum));
num = num.subtract(outNum); num = num.subtract(outNum);
if (num.compareTo(BigDecimal.ZERO) == 0) { if (num.compareTo(BigDecimal.ZERO) == 0) {
break; break;

View File

@ -103,15 +103,19 @@ public class ScanRecordController extends BaseController {
OutDifferenceItemVO itemVO = new OutDifferenceItemVO() OutDifferenceItemVO itemVO = new OutDifferenceItemVO()
.setRecommendbatchNo(item.getBatchNo()) .setRecommendbatchNo(item.getBatchNo())
.setRecommendSerialNo(item.getSerialNo()) .setRecommendSerialNo(item.getSerialNo())
.setRecommendBinNo(item.getBinNo())
.setRecommendNum(item.getNum()); .setRecommendNum(item.getNum());
List<OutMaterialScanRecord> mrecords = records.stream() List<OutMaterialScanRecord> mrecords = records.stream()
.filter(r -> StrUtil.equals(r.getMaterialNo(), dto.getMaterialNo()) .filter(r -> StrUtil.equals(r.getMaterialNo(), dto.getMaterialNo())
&& StrUtil.equals(r.getBatchNo(), item.getBatchNo()) && StrUtil.equals(r.getBatchNo(), item.getBatchNo())
&& StrUtil.equals(r.getSerialNo(), item.getSerialNo())) && StrUtil.equals(r.getSerialNo(), item.getSerialNo())
&& StrUtil.equals(r.getBinNo(), item.getBinNo())
)
.toList(); .toList();
if (CollectionUtil.isNotEmpty(mrecords)) { if (CollectionUtil.isNotEmpty(mrecords)) {
itemVO.setScanBatchNo(item.getBatchNo()); itemVO.setScanBatchNo(item.getBatchNo());
itemVO.setScanSerialNo(item.getSerialNo()); itemVO.setScanSerialNo(item.getSerialNo());
itemVO.setScanBinNo(item.getBinNo());
itemVO.setScanNum(mrecords.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)); itemVO.setScanNum(mrecords.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add));
records.removeAll(mrecords); records.removeAll(mrecords);
} }
@ -126,8 +130,8 @@ public class ScanRecordController extends BaseController {
OutDifferenceVO vo = vos.stream() OutDifferenceVO vo = vos.stream()
.filter(it -> StrUtil.equals(it.getMaterialNo(), k)) .filter(it -> StrUtil.equals(it.getMaterialNo(), k))
.findFirst() .findFirst()
.orElseGet(()-> { .orElseGet(() -> {
OutDifferenceVO tv=new OutDifferenceVO().setMaterialNo(k); OutDifferenceVO tv = new OutDifferenceVO().setMaterialNo(k);
vos.add(tv); vos.add(tv);
return tv; return tv;
}); });
@ -137,9 +141,11 @@ public class ScanRecordController extends BaseController {
vo.getItems().add(new OutDifferenceItemVO() vo.getItems().add(new OutDifferenceItemVO()
.setRecommendbatchNo("") .setRecommendbatchNo("")
.setRecommendSerialNo("") .setRecommendSerialNo("")
.setRecommendNum(BigDecimal.ZERO) .setRecommendBinNo("")
// .setRecommendNum(BigDecimal.ZERO)
.setScanBatchNo(StrUtil.split(key, "|").get(1)) .setScanBatchNo(StrUtil.split(key, "|").get(1))
.setScanSerialNo(StrUtil.split(key, "|").get(2)) .setScanSerialNo(StrUtil.split(key, "|").get(2))
.setScanBinNo(StrUtil.split(key, "|").get(3))
.setScanNum(vv.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))); .setScanNum(vv.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)));
}); });
}); });

View File

@ -176,4 +176,11 @@ public class OutMaterialScanRecord {
public String getKey8() { public String getKey8() {
return materialNo + "|" + batchNo + "|" + this.serialNo; return materialNo + "|" + batchNo + "|" + this.serialNo;
} }
@Transient
private String key9;
public String getKey9() {
return materialNo + "|" + batchNo + "|" + this.serialNo + "|" + this.binNo;
}
} }

View File

@ -19,6 +19,11 @@ public class OutDifferenceItemVO {
*/ */
private String recommendSerialNo; private String recommendSerialNo;
/**
* 推荐储位
*/
private String recommendBinNo;
/** /**
* 推荐数量 * 推荐数量
*/ */
@ -34,6 +39,11 @@ public class OutDifferenceItemVO {
*/ */
private String scanSerialNo; private String scanSerialNo;
/**
* 扫码储位
*/
private String scanBinNo;
/** /**
* 扫码数量 * 扫码数量
*/ */

View File

@ -78,7 +78,7 @@ public class OutProduceItemVO {
} }
/** /**
* 是否启用储位管理 * 是否启用储位管理true为启用,false为不启用
*/ */
@JsonProperty("isDisableLocation") @JsonProperty("isDisableLocation")
private Boolean isDisableLocation = true; private Boolean isDisableLocation = true;