Merge remote-tracking branch 'origin/dev_WMS20260401' into dev_WMS20260401
This commit is contained in:
+76
-38
@@ -562,16 +562,22 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void kctzjl(MaterialInventoryParamDO materialInventoryParamDO,
|
public synchronized void kctzjl(MaterialInventoryParamDO materialInventoryParamDO,
|
||||||
String adjustAction,LoginUser loginUser) {
|
String adjustAction,LoginUser loginUser) {
|
||||||
//库存调整记录
|
//库存调整记录(在 xgkc 更新库存前调用,materialInventory 为调整前快照)
|
||||||
Long materialInventoryId = materialInventoryParamDO.getMaterialInventoryId();
|
Long materialInventoryId = materialInventoryParamDO.getMaterialInventoryId();
|
||||||
MaterialInventory materialInventory = materialInventoryMapper.selectOne(new QueryWrapper<MaterialInventory>().lambda()
|
MaterialInventory materialInventory = materialInventoryMapper.selectOne(new QueryWrapper<MaterialInventory>().lambda()
|
||||||
.eq(MaterialInventory::getMaterialInventoryId, materialInventoryId));
|
.eq(MaterialInventory::getMaterialInventoryId, materialInventoryId));
|
||||||
|
if (materialInventory == null) {
|
||||||
|
throw new ServiceException("物料库存不存在,无法生成库存调整记录");
|
||||||
|
}
|
||||||
Long materialBaseInfoId = materialInventory.getMaterialBaseInfoId();
|
Long materialBaseInfoId = materialInventory.getMaterialBaseInfoId();
|
||||||
MaterialBaseInfo materialBaseInfo = materialBaseInfoService.getOne(new QueryWrapper<MaterialBaseInfo>().lambda()
|
MaterialBaseInfo materialBaseInfo = materialBaseInfoService.getOne(new QueryWrapper<MaterialBaseInfo>().lambda()
|
||||||
.eq(MaterialBaseInfo::getMaterialBaseInfoId, materialBaseInfoId).eq(BaseVOEntity::getDelFlag,1));
|
.eq(MaterialBaseInfo::getMaterialBaseInfoId, materialBaseInfoId).eq(BaseVOEntity::getDelFlag,1));
|
||||||
InventoryAdjustmentRecord inventoryAdjustmentRecord = new InventoryAdjustmentRecord();
|
InventoryAdjustmentRecord inventoryAdjustmentRecord = new InventoryAdjustmentRecord();
|
||||||
inventoryAdjustmentRecord.setAdjustAction(adjustAction);
|
inventoryAdjustmentRecord.setAdjustAction(adjustAction);
|
||||||
inventoryAdjustmentRecord.setRelateNo(materialInventoryParamDO.getInOrderNumber());
|
String relateNo = StringUtils.hasText(materialInventoryParamDO.getRelateNo())
|
||||||
|
? materialInventoryParamDO.getRelateNo()
|
||||||
|
: materialInventoryParamDO.getInOrderNumber();
|
||||||
|
inventoryAdjustmentRecord.setRelateNo(relateNo);
|
||||||
inventoryAdjustmentRecord.setAdjustAfterStatusCode(materialInventory.getMaterialStatusCode() == null ? "" : materialInventory.getMaterialStatusCode());
|
inventoryAdjustmentRecord.setAdjustAfterStatusCode(materialInventory.getMaterialStatusCode() == null ? "" : materialInventory.getMaterialStatusCode());
|
||||||
inventoryAdjustmentRecord.setAdjustBeforeStatusCode(materialInventory.getMaterialStatusCode() == null ? "" : materialInventory.getMaterialStatusCode());
|
inventoryAdjustmentRecord.setAdjustBeforeStatusCode(materialInventory.getMaterialStatusCode() == null ? "" : materialInventory.getMaterialStatusCode());
|
||||||
inventoryAdjustmentRecord.setAdjustAfterStatusName(materialInventory.getMaterialStatusName() == null ? "" : materialInventory.getMaterialStatusName());
|
inventoryAdjustmentRecord.setAdjustAfterStatusName(materialInventory.getMaterialStatusName() == null ? "" : materialInventory.getMaterialStatusName());
|
||||||
@@ -616,23 +622,45 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
|
|||||||
if (userPo != null) inventoryAdjustmentRecord.setCreateByName(userPo.getUserName());
|
if (userPo != null) inventoryAdjustmentRecord.setCreateByName(userPo.getUserName());
|
||||||
inventoryAdjustmentRecord.setCreateTime(new Date());
|
inventoryAdjustmentRecord.setCreateTime(new Date());
|
||||||
|
|
||||||
|
BigDecimal qty = nz(materialInventoryParamDO.getQuantity());
|
||||||
if ("分配库存".equals(adjustAction)) {
|
if ("分配库存".equals(adjustAction)) {
|
||||||
inventoryAdjustmentRecord.setAllocationBeforeQuantity(materialInventory.getAllocationQuantity());
|
// 总库存不变;可用减少、冻结增加(数量从可用转至冻结)
|
||||||
inventoryAdjustmentRecord.setAllocationAfterQuantity(materialInventory.getAllocationQuantity().subtract(materialInventoryParamDO.getQuantity()));
|
BigDecimal invBefore = nz(materialInventory.getInventoryQuantity());
|
||||||
inventoryAdjustmentRecord.setFreezeBeforeQuantity(materialInventory.getFreezeQuantity());
|
BigDecimal allocBefore = nz(materialInventory.getAllocationQuantity());
|
||||||
inventoryAdjustmentRecord.setFreezeAfterQuantity(materialInventory.getFreezeQuantity().add(materialInventoryParamDO.getQuantity()));//调整后 冻结-出库
|
BigDecimal freezeBefore = nz(materialInventory.getFreezeQuantity());
|
||||||
inventoryAdjustmentRecord.setInventoryBeforeQuantity(materialInventory.getInventoryQuantity());
|
inventoryAdjustmentRecord.setInventoryBeforeQuantity(invBefore); //调整前库存数量
|
||||||
inventoryAdjustmentRecord.setInventoryAfterQuantity(materialInventory.getInventoryQuantity());
|
inventoryAdjustmentRecord.setInventoryAfterQuantity(invBefore); //调整后库存数量
|
||||||
// 调整前:库存数量(净重、毛重、体积、面积)
|
inventoryAdjustmentRecord.setAllocationBeforeQuantity(allocBefore); //调整前可用数量
|
||||||
inventoryAdjustmentRecord.setNetWeight(materialInventory.getNetWeight());
|
inventoryAdjustmentRecord.setAllocationAfterQuantity(allocBefore.subtract(qty));//调整后可用数量
|
||||||
inventoryAdjustmentRecord.setGrossWeight(materialInventory.getGrossWeight());
|
inventoryAdjustmentRecord.setFreezeBeforeQuantity(freezeBefore);//调整前冻结数量
|
||||||
inventoryAdjustmentRecord.setVolume(materialInventory.getVolume());
|
inventoryAdjustmentRecord.setFreezeAfterQuantity(freezeBefore.add(qty));//调整后冻结数量
|
||||||
inventoryAdjustmentRecord.setArea(materialInventory.getArea());
|
inventoryAdjustmentRecord.setNetWeight(nz(materialInventory.getNetWeight()));//净重
|
||||||
// 调整后:库存数量 - 复核时填写的数量
|
inventoryAdjustmentRecord.setGrossWeight(nz(materialInventory.getGrossWeight()));//毛重
|
||||||
inventoryAdjustmentRecord.setAdjustedNetWeight(materialInventory.getNetWeight());
|
inventoryAdjustmentRecord.setVolume(nz(materialInventory.getVolume()));//体积
|
||||||
inventoryAdjustmentRecord.setAdjustedGrossWeight(materialInventory.getGrossWeight());
|
inventoryAdjustmentRecord.setArea(nz(materialInventory.getArea()));//积
|
||||||
inventoryAdjustmentRecord.setAdjustedVolume(materialInventory.getVolume());
|
inventoryAdjustmentRecord.setAdjustedNetWeight(nz(materialInventory.getNetWeight()));//净重
|
||||||
inventoryAdjustmentRecord.setAdjustedArea(materialInventory.getArea());
|
inventoryAdjustmentRecord.setAdjustedGrossWeight(nz(materialInventory.getGrossWeight()));//毛重
|
||||||
|
inventoryAdjustmentRecord.setAdjustedVolume(nz(materialInventory.getVolume()));//体积
|
||||||
|
inventoryAdjustmentRecord.setAdjustedArea(nz(materialInventory.getArea()));//积
|
||||||
|
} else if ("取消分配".equals(adjustAction)) {
|
||||||
|
// 与分配相反:可用增加、冻结减少,总库存不变
|
||||||
|
BigDecimal invBefore = nz(materialInventory.getInventoryQuantity());
|
||||||
|
BigDecimal allocBefore = nz(materialInventory.getAllocationQuantity());
|
||||||
|
BigDecimal freezeBefore = nz(materialInventory.getFreezeQuantity());
|
||||||
|
inventoryAdjustmentRecord.setInventoryBeforeQuantity(invBefore);
|
||||||
|
inventoryAdjustmentRecord.setInventoryAfterQuantity(invBefore);
|
||||||
|
inventoryAdjustmentRecord.setAllocationBeforeQuantity(allocBefore);
|
||||||
|
inventoryAdjustmentRecord.setAllocationAfterQuantity(allocBefore.add(qty));
|
||||||
|
inventoryAdjustmentRecord.setFreezeBeforeQuantity(freezeBefore);
|
||||||
|
inventoryAdjustmentRecord.setFreezeAfterQuantity(freezeBefore.subtract(qty));
|
||||||
|
inventoryAdjustmentRecord.setNetWeight(nz(materialInventory.getNetWeight()));
|
||||||
|
inventoryAdjustmentRecord.setGrossWeight(nz(materialInventory.getGrossWeight()));
|
||||||
|
inventoryAdjustmentRecord.setVolume(nz(materialInventory.getVolume()));
|
||||||
|
inventoryAdjustmentRecord.setArea(nz(materialInventory.getArea()));
|
||||||
|
inventoryAdjustmentRecord.setAdjustedNetWeight(nz(materialInventory.getNetWeight()));
|
||||||
|
inventoryAdjustmentRecord.setAdjustedGrossWeight(nz(materialInventory.getGrossWeight()));
|
||||||
|
inventoryAdjustmentRecord.setAdjustedVolume(nz(materialInventory.getVolume()));
|
||||||
|
inventoryAdjustmentRecord.setAdjustedArea(nz(materialInventory.getArea()));
|
||||||
} else if ("入库".equals(adjustAction)){
|
} else if ("入库".equals(adjustAction)){
|
||||||
if ("1".equals(materialInventoryParamDO.getIsNew())) {
|
if ("1".equals(materialInventoryParamDO.getIsNew())) {
|
||||||
inventoryAdjustmentRecord.setAllocationBeforeQuantity(BigDecimal.ZERO);
|
inventoryAdjustmentRecord.setAllocationBeforeQuantity(BigDecimal.ZERO);
|
||||||
@@ -670,22 +698,28 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
|
|||||||
inventoryAdjustmentRecord.setAdjustedArea(materialInventory.getArea().add(inventoryAdjustmentRecord.getArea()));
|
inventoryAdjustmentRecord.setAdjustedArea(materialInventory.getArea().add(inventoryAdjustmentRecord.getArea()));
|
||||||
}
|
}
|
||||||
} else if ("出库".equals(adjustAction)){
|
} else if ("出库".equals(adjustAction)){
|
||||||
inventoryAdjustmentRecord.setAllocationBeforeQuantity(materialInventory.getAllocationQuantity());
|
// 出库交接:总库存与冻结同减 checkQuantity;可用数量不变(与 ckjj 中不修改 allocation_quantity 一致)
|
||||||
inventoryAdjustmentRecord.setAllocationAfterQuantity(materialInventory.getAllocationQuantity());
|
BigDecimal invBefore = nz(materialInventory.getInventoryQuantity());
|
||||||
inventoryAdjustmentRecord.setFreezeBeforeQuantity(materialInventory.getFreezeQuantity());
|
BigDecimal allocBefore = nz(materialInventory.getAllocationQuantity());
|
||||||
inventoryAdjustmentRecord.setFreezeAfterQuantity(materialInventory.getFreezeQuantity());//调整后 冻结-出库
|
BigDecimal freezeBefore = nz(materialInventory.getFreezeQuantity());
|
||||||
inventoryAdjustmentRecord.setInventoryBeforeQuantity(materialInventory.getInventoryQuantity());
|
inventoryAdjustmentRecord.setInventoryBeforeQuantity(invBefore);// 调整前:库存数量
|
||||||
inventoryAdjustmentRecord.setInventoryAfterQuantity(materialInventory.getInventoryQuantity().subtract(materialInventoryParamDO.getQuantity()));
|
inventoryAdjustmentRecord.setInventoryAfterQuantity(invBefore.subtract(qty));// 调整后:库存数量
|
||||||
// 调整前:库存数量(净重、毛重、体积、面积)
|
inventoryAdjustmentRecord.setAllocationBeforeQuantity(allocBefore);// 调整前:可用数量
|
||||||
inventoryAdjustmentRecord.setNetWeight(materialInventory.getNetWeight());
|
inventoryAdjustmentRecord.setAllocationAfterQuantity(allocBefore);// 调整后:可用数量
|
||||||
inventoryAdjustmentRecord.setGrossWeight(materialInventory.getGrossWeight());
|
inventoryAdjustmentRecord.setFreezeBeforeQuantity(freezeBefore);// 调整前:冻结数量
|
||||||
inventoryAdjustmentRecord.setVolume(materialInventory.getVolume());
|
inventoryAdjustmentRecord.setFreezeAfterQuantity(freezeBefore.subtract(qty));// 调整后:冻结数量
|
||||||
inventoryAdjustmentRecord.setArea(materialInventory.getArea());
|
BigDecimal nw = nz(materialInventory.getNetWeight());
|
||||||
// 调整后:库存数量 - 复核时填写的数量
|
BigDecimal gw = nz(materialInventory.getGrossWeight());
|
||||||
inventoryAdjustmentRecord.setAdjustedNetWeight(materialInventory.getNetWeight().subtract(inventoryAdjustmentRecord.getNetWeight()));
|
BigDecimal vol = nz(materialInventory.getVolume());
|
||||||
inventoryAdjustmentRecord.setAdjustedGrossWeight(materialInventory.getGrossWeight().subtract(inventoryAdjustmentRecord.getGrossWeight()));
|
BigDecimal ar = nz(materialInventory.getArea());
|
||||||
inventoryAdjustmentRecord.setAdjustedVolume(materialInventory.getVolume().subtract(inventoryAdjustmentRecord.getVolume()));
|
inventoryAdjustmentRecord.setNetWeight(nw);
|
||||||
inventoryAdjustmentRecord.setAdjustedArea(materialInventory.getArea().subtract(inventoryAdjustmentRecord.getArea()));
|
inventoryAdjustmentRecord.setGrossWeight(gw);
|
||||||
|
inventoryAdjustmentRecord.setVolume(vol);
|
||||||
|
inventoryAdjustmentRecord.setArea(ar);
|
||||||
|
inventoryAdjustmentRecord.setAdjustedNetWeight(nw.subtract(nz(materialInventoryParamDO.getNetWeight())));
|
||||||
|
inventoryAdjustmentRecord.setAdjustedGrossWeight(gw.subtract(nz(materialInventoryParamDO.getGrossWeight())));
|
||||||
|
inventoryAdjustmentRecord.setAdjustedVolume(vol.subtract(nz(materialInventoryParamDO.getVolume())));
|
||||||
|
inventoryAdjustmentRecord.setAdjustedArea(ar.subtract(nz(materialInventoryParamDO.getArea())));
|
||||||
} else if ("移位".equals(adjustAction)){
|
} else if ("移位".equals(adjustAction)){
|
||||||
inventoryAdjustmentRecord.setAllocationBeforeQuantity(materialInventory.getAllocationQuantity());
|
inventoryAdjustmentRecord.setAllocationBeforeQuantity(materialInventory.getAllocationQuantity());
|
||||||
inventoryAdjustmentRecord.setAllocationAfterQuantity(materialInventoryParamDO.getQuantity());
|
inventoryAdjustmentRecord.setAllocationAfterQuantity(materialInventoryParamDO.getQuantity());
|
||||||
@@ -704,10 +738,10 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
|
|||||||
inventoryAdjustmentRecord.setAdjustedVolume(materialInventory.getVolume());
|
inventoryAdjustmentRecord.setAdjustedVolume(materialInventory.getVolume());
|
||||||
inventoryAdjustmentRecord.setAdjustedArea(materialInventory.getArea());
|
inventoryAdjustmentRecord.setAdjustedArea(materialInventory.getArea());
|
||||||
} else if ("库存冻结".equals(adjustAction)) {
|
} else if ("库存冻结".equals(adjustAction)) {
|
||||||
inventoryAdjustmentRecord.setAllocationBeforeQuantity(materialInventory.getAllocationQuantity());
|
inventoryAdjustmentRecord.setAllocationBeforeQuantity(nz(materialInventory.getAllocationQuantity()));
|
||||||
inventoryAdjustmentRecord.setAllocationAfterQuantity(materialInventory.getAllocationQuantity().subtract(materialInventoryParamDO.getQuantity()));
|
inventoryAdjustmentRecord.setAllocationAfterQuantity(nz(materialInventory.getAllocationQuantity()).subtract(qty));
|
||||||
inventoryAdjustmentRecord.setFreezeBeforeQuantity(materialInventory.getFreezeQuantity());
|
inventoryAdjustmentRecord.setFreezeBeforeQuantity(nz(materialInventory.getFreezeQuantity()));
|
||||||
inventoryAdjustmentRecord.setFreezeAfterQuantity(materialInventory.getFreezeQuantity().add(materialInventoryParamDO.getQuantity()));//调整后 冻结-出库
|
inventoryAdjustmentRecord.setFreezeAfterQuantity(nz(materialInventory.getFreezeQuantity()).add(qty));//调整后 冻结-出库
|
||||||
inventoryAdjustmentRecord.setInventoryBeforeQuantity(materialInventory.getInventoryQuantity());
|
inventoryAdjustmentRecord.setInventoryBeforeQuantity(materialInventory.getInventoryQuantity());
|
||||||
inventoryAdjustmentRecord.setInventoryAfterQuantity(materialInventory.getInventoryQuantity());
|
inventoryAdjustmentRecord.setInventoryAfterQuantity(materialInventory.getInventoryQuantity());
|
||||||
|
|
||||||
@@ -729,6 +763,10 @@ public class MaterialInventoryImpl extends ServiceImpl<MaterialInventoryMapper,
|
|||||||
inventoryAdjustmentRecordMapper.insert(inventoryAdjustmentRecord);
|
inventoryAdjustmentRecordMapper.insert(inventoryAdjustmentRecord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static BigDecimal nz(BigDecimal v) {
|
||||||
|
return v == null ? BigDecimal.ZERO : v;
|
||||||
|
}
|
||||||
|
|
||||||
private void getBarCode(MaterialInventory materialInventoryPO, InventoryAdjustmentRecord inventoryAdjustmentRecord) {
|
private void getBarCode(MaterialInventory materialInventoryPO, InventoryAdjustmentRecord inventoryAdjustmentRecord) {
|
||||||
List<MaterialBarCodePO> materialBarCodePOList = materialBarCodeService.getInfoByMaterialBaseInfoIds(materialInventoryPO.getMaterialBaseInfoId());
|
List<MaterialBarCodePO> materialBarCodePOList = materialBarCodeService.getInfoByMaterialBaseInfoIds(materialInventoryPO.getMaterialBaseInfoId());
|
||||||
if (materialBarCodePOList != null && !materialBarCodePOList.isEmpty()) {
|
if (materialBarCodePOList != null && !materialBarCodePOList.isEmpty()) {
|
||||||
|
|||||||
+3
@@ -102,4 +102,7 @@ public class MaterialInventoryParamDO extends MaterialBaseDO {
|
|||||||
|
|
||||||
private String isNew;
|
private String isNew;
|
||||||
|
|
||||||
|
/** 业务关联单号(出库单号、交接单对应单号等),用于库存调整记录 relate_no;可与入库单号区分 */
|
||||||
|
private String relateNo;
|
||||||
|
|
||||||
}
|
}
|
||||||
+92
-28
@@ -285,11 +285,17 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
}
|
}
|
||||||
StockOutOrderPO stockOutOrderPO = new StockOutOrderPO();
|
StockOutOrderPO stockOutOrderPO = new StockOutOrderPO();
|
||||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||||
List<OutMaterialDetail> outMaterialDetailDbList = outMaterialDetailMapper.selectList(new QueryWrapper<OutMaterialDetail>().lambda()
|
// 同单全部明细(含子行),用于子行补全 material_inventory_id / unique_id
|
||||||
|
List<OutMaterialDetail> orderAllDetailsDb = outMaterialDetailMapper.selectList(new QueryWrapper<OutMaterialDetail>().lambda()
|
||||||
.eq(OutMaterialDetail::getOutOrderNumber, outOrderNumber)
|
.eq(OutMaterialDetail::getOutOrderNumber, outOrderNumber)
|
||||||
.eq(OutMaterialDetail::getLevel, 1)
|
|
||||||
.eq(OutMaterialDetail::getDelFlag, 1));
|
.eq(OutMaterialDetail::getDelFlag, 1));
|
||||||
|
List<OutMaterialDetail> outMaterialDetailDbList = orderAllDetailsDb.stream()
|
||||||
|
.filter(d -> d.getLevel() != null && d.getLevel() == 1)
|
||||||
|
.collect(Collectors.toList());
|
||||||
Map<Long, OutMaterialDetail> materialDetailMap = outMaterialDetailDbList.stream().collect(Collectors.toMap(OutMaterialDetail::getMaterialDetailId, Function.identity()));
|
Map<Long, OutMaterialDetail> materialDetailMap = outMaterialDetailDbList.stream().collect(Collectors.toMap(OutMaterialDetail::getMaterialDetailId, Function.identity()));
|
||||||
|
Map<Long, OutMaterialDetail> orderDetailByMaterialDetailId = orderAllDetailsDb.stream()
|
||||||
|
.filter(d -> d.getMaterialDetailId() != null)
|
||||||
|
.collect(Collectors.toMap(OutMaterialDetail::getMaterialDetailId, Function.identity(), (a, b) -> a));
|
||||||
//批量新增或修改物料信息
|
//批量新增或修改物料信息
|
||||||
List<OutMaterialDetail> outMaterialDetailList = new ArrayList<>();
|
List<OutMaterialDetail> outMaterialDetailList = new ArrayList<>();
|
||||||
BigDecimal totalAllocationQuantity = BigDecimal.ZERO;//入库单总分配作业数量
|
BigDecimal totalAllocationQuantity = BigDecimal.ZERO;//入库单总分配作业数量
|
||||||
@@ -319,34 +325,50 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
for (OutMaterialDetailDO outMaterialDetailDOChild : materialDetailDOChildList){
|
for (OutMaterialDetailDO outMaterialDetailDOChild : materialDetailDOChildList){
|
||||||
OutMaterialDetail outMaterialDetailChild = new OutMaterialDetail();
|
OutMaterialDetail outMaterialDetailChild = new OutMaterialDetail();
|
||||||
BeanUtils.copyProperties(outMaterialDetailDOChild, outMaterialDetailChild, IgnoreNullUtil.getNullPropertyNames(outMaterialDetailDOChild));
|
BeanUtils.copyProperties(outMaterialDetailDOChild, outMaterialDetailChild, IgnoreNullUtil.getNullPropertyNames(outMaterialDetailDOChild));
|
||||||
//outMaterialDetailChild.setMaterialDetailId(null);
|
// 已落库子行:保留库中 unique_id、material_inventory_id;若前端未传库存行则从库补全,否则 xgkc 会静默跳过子项
|
||||||
|
OutMaterialDetail childDbRow = outMaterialDetailDOChild.getMaterialDetailId() != null
|
||||||
|
? orderDetailByMaterialDetailId.get(outMaterialDetailDOChild.getMaterialDetailId()) : null;
|
||||||
|
if (childDbRow != null && childDbRow.getUniqueId() != null) {
|
||||||
|
outMaterialDetailChild.setUniqueId(childDbRow.getUniqueId());
|
||||||
|
} else {
|
||||||
outMaterialDetailChild.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
|
outMaterialDetailChild.setUniqueId(idGenerator.snowflakeId(SnowFlakeConstants.wmsId));
|
||||||
|
}
|
||||||
|
if (outMaterialDetailChild.getMaterialInventoryId() == null && childDbRow != null && childDbRow.getMaterialInventoryId() != null) {
|
||||||
|
outMaterialDetailChild.setMaterialInventoryId(childDbRow.getMaterialInventoryId());
|
||||||
|
}
|
||||||
outMaterialDetailChild.setLevel(2);
|
outMaterialDetailChild.setLevel(2);
|
||||||
outMaterialDetailChild.setParentUniqueId(outMaterialDetailDO.getUniqueId());
|
outMaterialDetailChild.setParentUniqueId(outMaterialDetailDO.getUniqueId());
|
||||||
outMaterialDetailChild.setCreateBy(loginUser.getUserid());
|
outMaterialDetailChild.setCreateBy(loginUser.getUserid());
|
||||||
outMaterialDetailChild.setCreateByName(loginUser.getUsername());
|
outMaterialDetailChild.setCreateByName(loginUser.getUsername());
|
||||||
outMaterialDetailChild.setCreateTime(new Date());
|
outMaterialDetailChild.setCreateTime(new Date());
|
||||||
BigDecimal allocationQuantity = outMaterialDetailChild.getAllocationQuantity() != null ? outMaterialDetailChild.getAllocationQuantity() : BigDecimal.ZERO;
|
// 本次分配 = 目标 allocationQuantity − 库表中原已分配(不依赖请求里的 already,避免与 target 相同被算成 0)
|
||||||
BigDecimal alreadyAllocationQuantity = outMaterialDetailChild.getAlreadyAllocationQuantity() != null ? outMaterialDetailChild.getAlreadyAllocationQuantity() : BigDecimal.ZERO;
|
BigDecimal childTarget = outMaterialDetailChild.getAllocationQuantity() != null ? outMaterialDetailChild.getAllocationQuantity() : BigDecimal.ZERO;
|
||||||
BigDecimal nowAllocationQuantity = allocationQuantity.subtract(alreadyAllocationQuantity);
|
BigDecimal childDbAlready = childDbRow != null && childDbRow.getAlreadyAllocationQuantity() != null
|
||||||
|
? childDbRow.getAlreadyAllocationQuantity() : BigDecimal.ZERO;
|
||||||
|
BigDecimal nowAllocationQuantity = childTarget.subtract(childDbAlready);
|
||||||
outMaterialDetailChild.setNowAllocationQuantity(nowAllocationQuantity);
|
outMaterialDetailChild.setNowAllocationQuantity(nowAllocationQuantity);
|
||||||
outMaterialDetailChild.setAlreadyAllocationQuantity(allocationQuantity);
|
outMaterialDetailChild.setAlreadyAllocationQuantity(childTarget);
|
||||||
outMaterialDetailListChild.add(outMaterialDetailChild);
|
outMaterialDetailListChild.add(outMaterialDetailChild);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (CollectionUtil.isNotEmpty(outMaterialDetailListChild)){
|
if (CollectionUtil.isNotEmpty(outMaterialDetailListChild)){
|
||||||
outMaterialDetailList.addAll(outMaterialDetailListChild);
|
outMaterialDetailList.addAll(outMaterialDetailListChild);
|
||||||
// 有子项时,父项不参与库存扣减,避免父项+子项重复扣减导致数量翻倍(子项已代表实际分配)
|
|
||||||
outMaterialDetail.setNowAllocationQuantity(BigDecimal.ZERO);
|
|
||||||
}
|
}
|
||||||
// 单头「分配数量」= 本计划行主行已分配 + 各子行已分配(主行字段不再存主+子合计)
|
// 主行本次分配:目标 − 库表原已分配(与上同理)
|
||||||
BigDecimal lineAllocatedSum = outMaterialDetail.getAlreadyAllocationQuantity() != null
|
BigDecimal parentTarget = outMaterialDetail.getAllocationQuantity() != null ? outMaterialDetail.getAllocationQuantity() : BigDecimal.ZERO;
|
||||||
? outMaterialDetail.getAlreadyAllocationQuantity() : BigDecimal.ZERO;
|
BigDecimal parentDbAlready = outMaterialDetailDb.getAlreadyAllocationQuantity() != null ? outMaterialDetailDb.getAlreadyAllocationQuantity() : BigDecimal.ZERO;
|
||||||
|
outMaterialDetail.setNowAllocationQuantity(parentTarget.subtract(parentDbAlready));
|
||||||
|
// 单头分配数量汇总监:主行 + 各子行「本条的目标分配量」;优先 allocationQuantity,避免子行只传 allocation、不传 already 时漏加
|
||||||
|
BigDecimal lineMain = outMaterialDetail.getAllocationQuantity() != null
|
||||||
|
? outMaterialDetail.getAllocationQuantity()
|
||||||
|
: (outMaterialDetail.getAlreadyAllocationQuantity() != null ? outMaterialDetail.getAlreadyAllocationQuantity() : BigDecimal.ZERO);
|
||||||
|
BigDecimal lineAllocatedSum = lineMain;
|
||||||
if (!CollectionUtils.isEmpty(materialDetailDOChildList)) {
|
if (!CollectionUtils.isEmpty(materialDetailDOChildList)) {
|
||||||
for (OutMaterialDetailDO childDo : materialDetailDOChildList) {
|
for (OutMaterialDetailDO childDo : materialDetailDOChildList) {
|
||||||
BigDecimal childAlloc = childDo.getAlreadyAllocationQuantity() != null
|
BigDecimal childLine = childDo.getAllocationQuantity() != null
|
||||||
? childDo.getAlreadyAllocationQuantity() : BigDecimal.ZERO;
|
? childDo.getAllocationQuantity()
|
||||||
lineAllocatedSum = lineAllocatedSum.add(childAlloc);
|
: (childDo.getAlreadyAllocationQuantity() != null ? childDo.getAlreadyAllocationQuantity() : BigDecimal.ZERO);
|
||||||
|
lineAllocatedSum = lineAllocatedSum.add(childLine);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
totalAllocationQuantity = totalAllocationQuantity.add(lineAllocatedSum);
|
totalAllocationQuantity = totalAllocationQuantity.add(lineAllocatedSum);
|
||||||
@@ -355,6 +377,14 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
processingCodeCopyingData(outMaterialDetailDO);
|
processingCodeCopyingData(outMaterialDetailDO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 本单本次分配增量合计,回写主表「已分配」= 库表原值 + 本次增量
|
||||||
|
BigDecimal orderThisAssignIncrement = BigDecimal.ZERO;
|
||||||
|
for (OutMaterialDetail d : outMaterialDetailList) {
|
||||||
|
if (d.getNowAllocationQuantity() != null && d.getNowAllocationQuantity().compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
orderThisAssignIncrement = orderThisAssignIncrement.add(d.getNowAllocationQuantity());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stockOutOrderPO.setAlreadyAllocationQuantity(orderThisAssignIncrement);
|
||||||
stockOutOrderPO.setAllocationQuantity(totalAllocationQuantity);
|
stockOutOrderPO.setAllocationQuantity(totalAllocationQuantity);
|
||||||
//分配(修改库存)
|
//分配(修改库存)
|
||||||
xgkc(outMaterialDetailList,outOrderNumber,loginUser);
|
xgkc(outMaterialDetailList,outOrderNumber,loginUser);
|
||||||
@@ -492,6 +522,12 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Long materialInventoryId = outMaterialDetail.getMaterialInventoryId();
|
Long materialInventoryId = outMaterialDetail.getMaterialInventoryId();
|
||||||
|
if (materialInventoryId == null) {
|
||||||
|
String hint = outMaterialDetail.getMaterialDetailId() != null
|
||||||
|
? "明细ID=" + outMaterialDetail.getMaterialDetailId()
|
||||||
|
: "明细";
|
||||||
|
throw new ServiceException(hint + " 未绑定库存行,无法分配;请确认子行已选库位或刷新后重试");
|
||||||
|
}
|
||||||
|
|
||||||
//分配数量为本次分配数量
|
//分配数量为本次分配数量
|
||||||
BigDecimal allocationQuantity = outMaterialDetail.getNowAllocationQuantity();
|
BigDecimal allocationQuantity = outMaterialDetail.getNowAllocationQuantity();
|
||||||
@@ -499,7 +535,9 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
allocationQuantity = BigDecimal.ZERO;
|
allocationQuantity = BigDecimal.ZERO;
|
||||||
}
|
}
|
||||||
MaterialInventory materialInventoryPO = materialInventoryMapper.selectById(materialInventoryId);
|
MaterialInventory materialInventoryPO = materialInventoryMapper.selectById(materialInventoryId);
|
||||||
if (materialInventoryPO != null) {
|
if (materialInventoryPO == null) {
|
||||||
|
throw new ServiceException("库存行不存在,materialInventoryId=" + materialInventoryId);
|
||||||
|
}
|
||||||
//更新库存数量
|
//更新库存数量
|
||||||
//可用数量
|
//可用数量
|
||||||
BigDecimal oldAllocationQuantity = materialInventoryPO.getAllocationQuantity();
|
BigDecimal oldAllocationQuantity = materialInventoryPO.getAllocationQuantity();
|
||||||
@@ -522,6 +560,14 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
materialInventoryParamDO.setQuantity(allocationQuantity);
|
materialInventoryParamDO.setQuantity(allocationQuantity);
|
||||||
materialInventoryParamDO.setType("2");
|
materialInventoryParamDO.setType("2");
|
||||||
materialInventoryParamDO.setMaterialInventoryId(materialInventoryPO.getMaterialInventoryId());
|
materialInventoryParamDO.setMaterialInventoryId(materialInventoryPO.getMaterialInventoryId());
|
||||||
|
// 关联单号:出库单号 + 明细 uniqueId,避免同一单多库位/多子行只显示一条或唯一键冲突
|
||||||
|
String relateNo = outMaterialDetail.getUniqueId() != null
|
||||||
|
? outOrderNumber + "#" + outMaterialDetail.getUniqueId()
|
||||||
|
: outOrderNumber;
|
||||||
|
materialInventoryParamDO.setRelateNo(relateNo);
|
||||||
|
materialInventoryParamDO.setBatchNumber(outMaterialDetail.getBatchNumber());
|
||||||
|
materialInventoryParamDO.setLotNumber(outMaterialDetail.getLotNo());
|
||||||
|
materialInventoryParamDO.setInOrderNumber(outMaterialDetail.getInOrderNumber());
|
||||||
materialInventoryService.kctzjl(materialInventoryParamDO,"分配库存",loginUser);
|
materialInventoryService.kctzjl(materialInventoryParamDO,"分配库存",loginUser);
|
||||||
materialInventoryService.xgkc(materialInventoryParamDO);
|
materialInventoryService.xgkc(materialInventoryParamDO);
|
||||||
//materialInventoryMapper.updateById(materialInventory);
|
//materialInventoryMapper.updateById(materialInventory);
|
||||||
@@ -579,7 +625,6 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
// inventoryAdjustmentRecord.setAdjustedVolume(materialInventoryPO.getVolume() == null ? BigDecimal.ZERO : materialInventoryPO.getVolume());
|
// inventoryAdjustmentRecord.setAdjustedVolume(materialInventoryPO.getVolume() == null ? BigDecimal.ZERO : materialInventoryPO.getVolume());
|
||||||
// inventoryAdjustmentRecord.setAdjustedArea(materialInventoryPO.getArea() == null ? BigDecimal.ZERO : materialInventoryPO.getArea());
|
// inventoryAdjustmentRecord.setAdjustedArea(materialInventoryPO.getArea() == null ? BigDecimal.ZERO : materialInventoryPO.getArea());
|
||||||
// inventoryAdjustmentRecordMapper.insert(inventoryAdjustmentRecord);
|
// inventoryAdjustmentRecordMapper.insert(inventoryAdjustmentRecord);
|
||||||
}
|
|
||||||
/*Long uniqueId = outMaterialDetail.getUniqueId();
|
/*Long uniqueId = outMaterialDetail.getUniqueId();
|
||||||
String outOrderNumber1 = outMaterialDetail.getOutOrderNumber();
|
String outOrderNumber1 = outMaterialDetail.getOutOrderNumber();
|
||||||
List<OutMaterialDetail> outMaterialDetails = outMaterialDetailMapper.selectList(new QueryWrapper<OutMaterialDetail>().lambda().eq(OutMaterialDetail::getParentUniqueId, uniqueId).eq(OutMaterialDetail::getOutOrderNumber, outOrderNumber1));
|
List<OutMaterialDetail> outMaterialDetails = outMaterialDetailMapper.selectList(new QueryWrapper<OutMaterialDetail>().lambda().eq(OutMaterialDetail::getParentUniqueId, uniqueId).eq(OutMaterialDetail::getOutOrderNumber, outOrderNumber1));
|
||||||
@@ -744,9 +789,10 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
outMaterialDetail.setUpdateTime(new Date());
|
outMaterialDetail.setUpdateTime(new Date());
|
||||||
outMaterialDetail.setAllowModify(1);
|
outMaterialDetail.setAllowModify(1);
|
||||||
//判断是否存在子项
|
//判断是否存在子项
|
||||||
// actualQuantity 是取消分配的数量,从 outMaterialDetailDO 获取
|
// actualQuantity 是取消分配的数量;有子行时 allocationQuantity 会累加主行+各子行,用于整单校验与主行 allocation 汇总
|
||||||
BigDecimal allocationQuantity = outMaterialDetailDO.getActualQuantity();
|
BigDecimal parentCancelQty = outMaterialDetailDO.getActualQuantity() != null
|
||||||
BigDecimal alreadyAllocationQuantity = outMaterialDetailDO.getAlreadyAllocationQuantity();
|
? outMaterialDetailDO.getActualQuantity() : BigDecimal.ZERO;
|
||||||
|
BigDecimal allocationQuantity = parentCancelQty;
|
||||||
List<OutMaterialDetailDO> materialDetailDOChildList = outMaterialDetailDO.getChildren();
|
List<OutMaterialDetailDO> materialDetailDOChildList = outMaterialDetailDO.getChildren();
|
||||||
BigDecimal childAllocationQuantity = BigDecimal.ZERO;
|
BigDecimal childAllocationQuantity = BigDecimal.ZERO;
|
||||||
if (!CollectionUtils.isEmpty(materialDetailDOChildList)){
|
if (!CollectionUtils.isEmpty(materialDetailDOChildList)){
|
||||||
@@ -813,15 +859,24 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
outMaterialDetailList.add(outMaterialDetailChild);
|
outMaterialDetailList.add(outMaterialDetailChild);
|
||||||
materialDetailIdsByUpdate.add(outMaterialDetailDOChild.getMaterialDetailId());
|
materialDetailIdsByUpdate.add(outMaterialDetailDOChild.getMaterialDetailId());
|
||||||
allocationQuantity = allocationQuantity.add(childCancelQty);
|
allocationQuantity = allocationQuantity.add(childCancelQty);
|
||||||
alreadyAllocationQuantity = alreadyAllocationQuantity.add(childCancelQty);
|
|
||||||
childAllocationQuantity = childAllocationQuantity.add(childDbAllocationQty);
|
childAllocationQuantity = childAllocationQuantity.add(childDbAllocationQty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//判断取消分配数量不能大于已分配数量(取消分配应该检查alreadyAllocationQuantity,而不是allocationQuantity)
|
// 已分配数量:主行+(若本次带出的)子行在库中的已分配之和;避免「主30+子20=50」与仅主行 already30 比较误报
|
||||||
BigDecimal dbAlreadyAllocationQuantity = outMaterialDetailDb.getAlreadyAllocationQuantity() != null
|
BigDecimal dbAlreadyAllocationQuantity = outMaterialDetailDb.getAlreadyAllocationQuantity() != null
|
||||||
? outMaterialDetailDb.getAlreadyAllocationQuantity()
|
? outMaterialDetailDb.getAlreadyAllocationQuantity()
|
||||||
: BigDecimal.ZERO;
|
: BigDecimal.ZERO;
|
||||||
if(allocationQuantity.compareTo(dbAlreadyAllocationQuantity) > 0){
|
BigDecimal dbTotalAlreadyAllocated = dbAlreadyAllocationQuantity;
|
||||||
|
if (!CollectionUtils.isEmpty(materialDetailDOChildList)) {
|
||||||
|
for (OutMaterialDetailDO childDo : materialDetailDOChildList) {
|
||||||
|
OutMaterialDetail childDb = materialDetailMap.get(childDo.getMaterialDetailId());
|
||||||
|
if (childDb != null) {
|
||||||
|
dbTotalAlreadyAllocated = dbTotalAlreadyAllocated.add(
|
||||||
|
childDb.getAlreadyAllocationQuantity() != null ? childDb.getAlreadyAllocationQuantity() : BigDecimal.ZERO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (allocationQuantity.compareTo(dbTotalAlreadyAllocated) > 0) {
|
||||||
throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于已分配数量");
|
throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于已分配数量");
|
||||||
}
|
}
|
||||||
BigDecimal dbAllocationQuantity = outMaterialDetailDb.getAllocationQuantity() != null
|
BigDecimal dbAllocationQuantity = outMaterialDetailDb.getAllocationQuantity() != null
|
||||||
@@ -833,7 +888,8 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于分配总数");
|
throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于分配总数");
|
||||||
}
|
}
|
||||||
outMaterialDetail.setAllocationQuantity(newAllocationQuantity);
|
outMaterialDetail.setAllocationQuantity(newAllocationQuantity);
|
||||||
outMaterialDetail.setAlreadyAllocationQuantity(dbAlreadyAllocationQuantity.subtract(allocationQuantity));
|
// 主行「已分配」只扣主行本次取消量;子行已在上面各自扣减
|
||||||
|
outMaterialDetail.setAlreadyAllocationQuantity(dbAlreadyAllocationQuantity.subtract(parentCancelQty));
|
||||||
|
|
||||||
// 同时清空该明细的目标仓库/库区/库位信息(回到未分配状态)
|
// 同时清空该明细的目标仓库/库区/库位信息(回到未分配状态)
|
||||||
outMaterialDetail.setWarehouseId(null);
|
outMaterialDetail.setWarehouseId(null);
|
||||||
@@ -855,13 +911,13 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
outMaterialDetail.setContainerCode(null);
|
outMaterialDetail.setContainerCode(null);
|
||||||
outMaterialDetail.setContainerType(null);
|
outMaterialDetail.setContainerType(null);
|
||||||
outMaterialDetail.setContainerTypeName(null);
|
outMaterialDetail.setContainerTypeName(null);
|
||||||
// 设置 actualQuantity 用于 qxfp 方法更新库存(取消分配的数量)
|
// 主行 actualQuantity 仅主行取消量;qxfp 用入参 DO 中主/子各自 actualQuantity
|
||||||
outMaterialDetail.setActualQuantity(allocationQuantity);
|
outMaterialDetail.setActualQuantity(parentCancelQty);
|
||||||
outMaterialDetailList.add(outMaterialDetail);
|
outMaterialDetailList.add(outMaterialDetail);
|
||||||
materialDetailIdsByUpdate.add(outMaterialDetailDO.getMaterialDetailId());
|
materialDetailIdsByUpdate.add(outMaterialDetailDO.getMaterialDetailId());
|
||||||
//记录收货单收货总数
|
//记录收货单收货总数(主+子本次取消合计)
|
||||||
totalAllocationQuantity = totalAllocationQuantity.add(allocationQuantity);
|
totalAllocationQuantity = totalAllocationQuantity.add(allocationQuantity);
|
||||||
totalAlreadyAllocationQuantity = totalAlreadyAllocationQuantity.add(alreadyAllocationQuantity);
|
totalAlreadyAllocationQuantity = totalAlreadyAllocationQuantity.add(allocationQuantity);
|
||||||
|
|
||||||
//抄码商品取消分配
|
//抄码商品取消分配
|
||||||
if (!CollectionUtils.isEmpty(outMaterialDetailDO.getCopyCodeReferenceIdsCancel())){
|
if (!CollectionUtils.isEmpty(outMaterialDetailDO.getCopyCodeReferenceIdsCancel())){
|
||||||
@@ -893,6 +949,10 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
materialInventoryParamDO.setMaterialInventoryId(materialInventoryId);
|
materialInventoryParamDO.setMaterialInventoryId(materialInventoryId);
|
||||||
materialInventoryParamDO.setQuantity(allocationQuantity);
|
materialInventoryParamDO.setQuantity(allocationQuantity);
|
||||||
materialInventoryParamDO.setType("3");
|
materialInventoryParamDO.setType("3");
|
||||||
|
String cancelRelateNo = outMaterialDetail.getUniqueId() != null
|
||||||
|
? outOrderNumber + "#" + outMaterialDetail.getUniqueId()
|
||||||
|
: outOrderNumber;
|
||||||
|
materialInventoryParamDO.setRelateNo(cancelRelateNo);
|
||||||
materialInventoryService.kctzjl(materialInventoryParamDO,"取消分配",loginUser);
|
materialInventoryService.kctzjl(materialInventoryParamDO,"取消分配",loginUser);
|
||||||
materialInventoryService.xgkc(materialInventoryParamDO);
|
materialInventoryService.xgkc(materialInventoryParamDO);
|
||||||
// //更新库存数量
|
// //更新库存数量
|
||||||
@@ -984,6 +1044,10 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
|||||||
materialInventoryParamDO.setMaterialInventoryId(materialInventoryId);
|
materialInventoryParamDO.setMaterialInventoryId(materialInventoryId);
|
||||||
materialInventoryParamDO.setQuantity(allocationQuantity);
|
materialInventoryParamDO.setQuantity(allocationQuantity);
|
||||||
materialInventoryParamDO.setType("3");
|
materialInventoryParamDO.setType("3");
|
||||||
|
String cancelRelateNoCh = outMaterialDetail.getUniqueId() != null
|
||||||
|
? outOrderNumber + "#" + outMaterialDetail.getUniqueId()
|
||||||
|
: outOrderNumber;
|
||||||
|
materialInventoryParamDO.setRelateNo(cancelRelateNoCh);
|
||||||
materialInventoryService.kctzjl(materialInventoryParamDO,"取消分配",loginUser);
|
materialInventoryService.kctzjl(materialInventoryParamDO,"取消分配",loginUser);
|
||||||
materialInventoryService.xgkc(materialInventoryParamDO);
|
materialInventoryService.xgkc(materialInventoryParamDO);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user