修复采购入库之后更新库存商品内装数,再去更新采购入库,商品总库存没有变化的问题
This commit is contained in:
1 parent
2b7bc8deab
commit
1198def17e
5 files changed
+58
-38
No files matched your search
+1
@@ -96,5 +96,6 @@ public class InventoryRecordEditItemDTO {
|
||||
@Schema(description="包装单位id")
|
||||
private Long unitId;
|
||||
|
||||
// 注意:packageNum 不需要前端传递,由后端根据 unitId 自动查询并设置
|
||||
|
||||
}
|
||||
+1
@@ -55,5 +55,6 @@ public class InventoryRecordSaveItemDTO {
|
||||
@Schema(description="实际进价")
|
||||
private Integer realPrice;
|
||||
|
||||
// 注意:packageNum 不需要前端传递,由后端根据 unitId 自动查询并设置
|
||||
|
||||
}
|
||||
+6
@@ -166,4 +166,10 @@ public class SmErpInventoryRecordsItemEntity extends Model<SmErpInventoryRecords
|
||||
|
||||
@Schema(description="实际单价")
|
||||
private Integer realPrice;
|
||||
|
||||
/**
|
||||
* 内装数(保存时的内装数,用于编辑时准确计算库存)
|
||||
*/
|
||||
@Schema(description="内装数")
|
||||
private Integer packageNum;
|
||||
}
|
||||
+8
-2
@@ -155,10 +155,16 @@ public class SmErpInventoryRecordsController {
|
||||
updateStockDTO.setId(cgPlanItemEntity.getErpSpuId());
|
||||
Double quantity = cgPlanItemEntity.getQuantity();
|
||||
String orderType = one.getOrderType();
|
||||
// 使用保存时的内装数,如果没有则查询当前的
|
||||
Integer packageNum = cgPlanItemEntity.getPackageNum();
|
||||
if (packageNum == null) {
|
||||
SmErpUnitEntity unit = smErpUnitService.getById(cgPlanItemEntity.getUnitId());
|
||||
packageNum = unit != null ? unit.getPackageNum() : 1;
|
||||
}
|
||||
if (orderType.equals(OrderTypeEnum.RK.getType())){
|
||||
updateStockDTO.setIncrCount(quantity);
|
||||
updateStockDTO.setIncrCount(packageNum * quantity);
|
||||
}else if (orderType.equals(OrderTypeEnum.CK.getType())){
|
||||
updateStockDTO.setIncrCount(-quantity);
|
||||
updateStockDTO.setIncrCount(-packageNum * quantity);
|
||||
}else if (orderType.equals(OrderTypeEnum.No.getType())){
|
||||
//无需更新库存
|
||||
}else {
|
||||
|
||||
+42
-36
@@ -120,6 +120,8 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
String orderType = smErpCgDdEntity.getOrderType();
|
||||
cgPlanItemEntity.setOrderType(orderType);
|
||||
Integer packageNum = unitMap.get(cgPlanItemEntity.getUnitId()).getPackageNum();
|
||||
// 保存内装数到item中,用于编辑时准确计算库存
|
||||
cgPlanItemEntity.setPackageNum(packageNum);
|
||||
if (orderType.equals(OrderTypeEnum.RK.getType())){
|
||||
updateStockDTO.setIncrCount(packageNum*quantity);
|
||||
}else if (orderType.equals(OrderTypeEnum.CK.getType())){
|
||||
@@ -216,13 +218,19 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
//收集userids
|
||||
Set<Long> userIds = records.stream()
|
||||
.map(SmErpInventoryRecordsEntity::getHandlerUserId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toSet());
|
||||
//收集supplierIds
|
||||
Set<Long> supplierIds = records.stream()
|
||||
.map(SmErpInventoryRecordsEntity::getSupplierId)
|
||||
.collect(Collectors.toSet());
|
||||
//请求得到所有的userIds
|
||||
Map<Long, SysUser> userMap = remoteUserService.getUserMap(userIds).getData();
|
||||
Map<Long, SysUser> userMap;
|
||||
if (!CollectionUtils.isEmpty(userIds)){
|
||||
userMap = remoteUserService.getUserMap(userIds).getData();
|
||||
} else {
|
||||
userMap = new HashMap<>();
|
||||
}
|
||||
// List<String> processInstanceIds= records.stream().map(SmErpInventoryRecordsEntity::getProcessInstanceId).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
|
||||
LambdaQueryWrapper<SmErpInventoryRecordsItemEntity> smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
@@ -248,7 +256,6 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
// Integer totalAmount = inventoryTotalAmountMap.getOrDefault(record.getId(), 0);
|
||||
List<SmErpInventoryRecordsItemEntity> smErpInventoryRecordsItemEntityList = smerpInventoryRecordsItemEntityMap.get(record.getId());
|
||||
// record.setTotalAmount(totalAmount);
|
||||
//todo 这里有一个问题就是出入库编辑的时候,没有更新主表的totalAmount,所以一直用的子表的totalAmount,子表的totalAmount又存在为空的情况,涉及到多个业务
|
||||
//存在脏数据,判断下,防止空数据查询报错
|
||||
if (!CollectionUtils.isEmpty(smErpInventoryRecordsItemEntityList)) {
|
||||
record.setTotalAmount(smErpInventoryRecordsItemEntityList.stream().mapToInt(item -> item.getTotalAmount()==null?0:item.getTotalAmount()).sum());
|
||||
@@ -279,19 +286,6 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
Collectors.toList()
|
||||
)
|
||||
));
|
||||
//查询代办任务的task
|
||||
// TaskQueryParamDto taskQueryParamDto = new TaskQueryParamDto();
|
||||
// taskQueryParamDto.setProcessInstanceIds(processInstanceIds);
|
||||
// taskQueryParamDto.setCurrent(1);
|
||||
// taskQueryParamDto.setSize(processInstanceIds.size());
|
||||
// R<Page<TaskDto>> pageR = remoteFlowApiFlowService.queryMineTask(taskQueryParamDto);
|
||||
// Page<TaskDto> data = pageR.getData();
|
||||
//
|
||||
// final Map<String, TaskDto> processInstanceIdMap = (data != null && !ObjectUtil.isEmpty(data.getRecords()))
|
||||
// ? data.getRecords().stream()
|
||||
// .collect(Collectors.toMap(TaskDto::getProcessInstanceId, taskDto -> taskDto))
|
||||
// : Collections.emptyMap();
|
||||
|
||||
// 设置商品名称到主表实体
|
||||
records.forEach(plan -> {
|
||||
//移动端自动扣款入库,无需经办人
|
||||
@@ -304,15 +298,6 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
String supplierName = supplierMap.getOrDefault(plan.getSupplierId(), new SmErpSupplierEntity()).getSupplierName();
|
||||
plan.setSupplierName(supplierName);
|
||||
|
||||
// if (!processInstanceIdMap.isEmpty()) {
|
||||
// TaskDto taskDto = processInstanceIdMap.get(plan.getProcessInstanceId());
|
||||
// if (taskDto != null) {
|
||||
// plan.setTaskId(taskDto.getTaskId());
|
||||
// plan.setFlowId(taskDto.getFlowId());
|
||||
// plan.setParamMap(taskDto.getParamMap());
|
||||
// plan.setNodeId(taskDto.getNodeId());
|
||||
// }
|
||||
// }
|
||||
});
|
||||
return pageData;
|
||||
}
|
||||
@@ -506,6 +491,8 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
String orderType = item.getOrderType();
|
||||
smErpInventoryRecordsItemEntity.setOrderType(orderType);
|
||||
Integer packageNum = unitMap.get(item.getUnitId()).getPackageNum();
|
||||
// 保存内装数到item中,用于下次编辑时准确计算库存
|
||||
smErpInventoryRecordsItemEntity.setPackageNum(packageNum);
|
||||
if (orderType.equals(OrderTypeEnum.RK.getType())){
|
||||
updateStockDTO.setIncrCount(packageNum*quantity);
|
||||
}else if (orderType.equals(OrderTypeEnum.CK.getType())){
|
||||
@@ -535,14 +522,15 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
List<SmErpInventoryRecordsItemEntity> dataBaseSmErpInventoryRecordsItemEntityList = smErpInventoryRecordsItemMapper
|
||||
.selectList(new LambdaQueryWrapper<SmErpInventoryRecordsItemEntity>().eq(SmErpInventoryRecordsItemEntity::getInventoryId, inventoryRecordEditDTO.getId()));
|
||||
|
||||
|
||||
Set<Long> unitsRemoved = dataBaseSmErpInventoryRecordsItemEntityList.stream().map(s -> s.getUnitId()).collect(Collectors.toSet());
|
||||
List<SmErpUnitEntity> smErpUnitEntitiesRemoved = smErpUnitMapper.selectList(new LambdaQueryWrapper<SmErpUnitEntity>().in(SmErpUnitEntity::getId, unitsRemoved));
|
||||
Map<Long, SmErpUnitEntity> unitMapRemoved = smErpUnitEntitiesRemoved.stream().collect(Collectors.toMap(SmErpUnitEntity::getId, unit -> unit));
|
||||
|
||||
//这部分是数据库原本添加的库存数据,需要全部减掉,重新添加更新的库存数据进去
|
||||
dataBaseSmErpInventoryRecordsItemEntityList.forEach(item -> {
|
||||
Integer packageNum = unitMapRemoved.get(item.getUnitId()).getPackageNum();
|
||||
// 使用保存时的内装数,而不是查询最新的内装数,这样即使内装数改变了也能正确计算
|
||||
Integer packageNum = item.getPackageNum();
|
||||
// 如果之前的数据没有保存内装数(旧数据),则查询当前的内装数作为兜底
|
||||
if (packageNum == null) {
|
||||
SmErpUnitEntity unit = smErpUnitMapper.selectById(item.getUnitId());
|
||||
packageNum = unit != null ? unit.getPackageNum() : 1;
|
||||
}
|
||||
UpdateStockDTO updateStockDTO = new UpdateStockDTO();
|
||||
updateStockDTO.setId(item.getErpSpuId());
|
||||
if (item.getOrderType().equals(OrderTypeEnum.RK.getType())){
|
||||
@@ -555,8 +543,14 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
});
|
||||
|
||||
|
||||
smErpInventoryRecordsItemMapper.updateById(updateItems);
|
||||
smErpInventoryRecordsItemMapper.insert(insertItems);
|
||||
// 批量更新已存在的明细(包括 packageNum 字段)
|
||||
if (!CollectionUtils.isEmpty(updateItems)) {
|
||||
updateItems.forEach(item -> smErpInventoryRecordsItemMapper.updateById(item));
|
||||
}
|
||||
// 批量插入新增的明细
|
||||
if (!CollectionUtils.isEmpty(insertItems)) {
|
||||
smErpInventoryRecordsItemMapper.insert(insertItems);
|
||||
}
|
||||
|
||||
List<Long> existingCodeIds = smErpInventoryRecordsItemMapper.selectList(
|
||||
new LambdaQueryWrapper<SmErpInventoryRecordsItemEntity>()
|
||||
@@ -631,11 +625,17 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
updateStockDTO.setId(item.getErpSpuId());
|
||||
Double quantity = item.getQuantity();
|
||||
String orderType = item.getOrderType();
|
||||
// 使用保存时的内装数,如果没有则查询当前的
|
||||
Integer packageNum = item.getPackageNum();
|
||||
if (packageNum == null) {
|
||||
SmErpUnitEntity unit = smErpUnitMapper.selectById(item.getUnitId());
|
||||
packageNum = unit != null ? unit.getPackageNum() : 1;
|
||||
}
|
||||
//入库的删除就是减去入的库存,所以是负数
|
||||
if (orderType.equals(OrderTypeEnum.RK.getType())){
|
||||
updateStockDTO.setIncrCount(-quantity);
|
||||
updateStockDTO.setIncrCount(-packageNum * quantity);
|
||||
}else if (orderType.equals(OrderTypeEnum.CK.getType())){
|
||||
updateStockDTO.setIncrCount(quantity);
|
||||
updateStockDTO.setIncrCount(packageNum * quantity);
|
||||
}else {
|
||||
throw new RuntimeException("订单类型错误");
|
||||
}
|
||||
@@ -788,8 +788,14 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
|
||||
updateStockDTOS.add(updateStockDTO);
|
||||
});
|
||||
|
||||
smErpInventoryRecordsItemMapper.updateById(updateItems);
|
||||
smErpInventoryRecordsItemMapper.insert(insertItems);
|
||||
// 批量更新已存在的明细
|
||||
if (!CollectionUtils.isEmpty(updateItems)) {
|
||||
updateItems.forEach(item -> smErpInventoryRecordsItemMapper.updateById(item));
|
||||
}
|
||||
// 批量插入新增的明细
|
||||
if (!CollectionUtils.isEmpty(insertItems)) {
|
||||
smErpInventoryRecordsItemMapper.insert(insertItems);
|
||||
}
|
||||
|
||||
List<Long> existingCodeIds = smErpInventoryRecordsItemMapper.selectList(
|
||||
new LambdaQueryWrapper<SmErpInventoryRecordsItemEntity>()
|
||||
|
||||
Reference in new issue
Block a user