diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditItemDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditItemDTO.java index 34c0d6cbf..8d0845edf 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditItemDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordEditItemDTO.java @@ -96,5 +96,6 @@ public class InventoryRecordEditItemDTO { @Schema(description="包装单位id") private Long unitId; + // 注意:packageNum 不需要前端传递,由后端根据 unitId 自动查询并设置 } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveItemDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveItemDTO.java index e4507037f..e4dd6f994 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveItemDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveItemDTO.java @@ -55,5 +55,6 @@ public class InventoryRecordSaveItemDTO { @Schema(description="实际进价") private Integer realPrice; + // 注意:packageNum 不需要前端传递,由后端根据 unitId 自动查询并设置 } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsItemEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsItemEntity.java index 2596741f8..89c0c36e4 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsItemEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsItemEntity.java @@ -166,4 +166,10 @@ public class SmErpInventoryRecordsItemEntity extends Model userIds = records.stream() .map(SmErpInventoryRecordsEntity::getHandlerUserId) + .filter(Objects::nonNull) .collect(Collectors.toSet()); //收集supplierIds Set supplierIds = records.stream() .map(SmErpInventoryRecordsEntity::getSupplierId) .collect(Collectors.toSet()); //请求得到所有的userIds - Map userMap = remoteUserService.getUserMap(userIds).getData(); + Map userMap; + if (!CollectionUtils.isEmpty(userIds)){ + userMap = remoteUserService.getUserMap(userIds).getData(); + } else { + userMap = new HashMap<>(); + } // List processInstanceIds= records.stream().map(SmErpInventoryRecordsEntity::getProcessInstanceId).filter(Objects::nonNull).collect(Collectors.toList()); LambdaQueryWrapper smErpCgPlanItemEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -248,7 +256,6 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl 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> pageR = remoteFlowApiFlowService.queryMineTask(taskQueryParamDto); -// Page data = pageR.getData(); -// -// final Map 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 dataBaseSmErpInventoryRecordsItemEntityList = smErpInventoryRecordsItemMapper .selectList(new LambdaQueryWrapper().eq(SmErpInventoryRecordsItemEntity::getInventoryId, inventoryRecordEditDTO.getId())); - - Set unitsRemoved = dataBaseSmErpInventoryRecordsItemEntityList.stream().map(s -> s.getUnitId()).collect(Collectors.toSet()); - List smErpUnitEntitiesRemoved = smErpUnitMapper.selectList(new LambdaQueryWrapper().in(SmErpUnitEntity::getId, unitsRemoved)); - Map 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 smErpInventoryRecordsItemMapper.updateById(item)); + } + // 批量插入新增的明细 + if (!CollectionUtils.isEmpty(insertItems)) { + smErpInventoryRecordsItemMapper.insert(insertItems); + } List existingCodeIds = smErpInventoryRecordsItemMapper.selectList( new LambdaQueryWrapper() @@ -631,11 +625,17 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl smErpInventoryRecordsItemMapper.updateById(item)); + } + // 批量插入新增的明细 + if (!CollectionUtils.isEmpty(insertItems)) { + smErpInventoryRecordsItemMapper.insert(insertItems); + } List existingCodeIds = smErpInventoryRecordsItemMapper.selectList( new LambdaQueryWrapper()