diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java index e3f37d153..22cbdf2df 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java @@ -2,9 +2,15 @@ package com.ruoyi.web.controller.xkt.vo.storeProd; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.web.controller.xkt.vo.storeColor.StoreColorVO; +import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdColorSizeDTO; import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -54,6 +60,8 @@ public class StoreProdResVO { private List colorList; @ApiModelProperty(value = "档口颜色价格列表") private List priceList; + @ApiModelProperty(value = "档口商品尺码列表") + private List sizeList; @ApiModelProperty(value = "档口服务承诺") private StoreProdSvcVO svc; @ApiModelProperty(value = "详情内容") @@ -61,6 +69,23 @@ public class StoreProdResVO { @ApiModelProperty(value = "档口商品生产工艺") private StoreProdProcessVO process; + @Data + @AllArgsConstructor + @NoArgsConstructor + @Valid + public static class StoreProdColorSizeVO { + @ApiModelProperty(value = "档口颜色ID") + private Long storeColorId; + @NotBlank(message = "颜色名称不能为空!") + @ApiModelProperty(value = "颜色名称") + private String colorName; + @ApiModelProperty(value = "商品尺码", required = true) + @NotNull(message = "档口商品定价不能为空!") + private Integer size; + @NotNull(message = "是否是标准尺码不能为空!") + @ApiModelProperty(value = "是否是标准尺码", required = true) + private Integer standard; + } @Data public static class StoreProdFileVO { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStorage/StoreProdStorageVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStorage/StoreProdStorageVO.java index 73ea54b16..996c6debd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStorage/StoreProdStorageVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStorage/StoreProdStorageVO.java @@ -24,7 +24,7 @@ public class StoreProdStorageVO { @ApiModelProperty(value = "档口ID", required = true) @NotNull(message = "档口ID不能为空!") private Long storeId; - @NotBlank(message = "入库类型不能为空!") + @NotNull(message = "入库类型不能为空!") @ApiModelProperty(value = "入库类型", required = true) private Integer storageType; @Valid @@ -41,6 +41,9 @@ public class StoreProdStorageVO { @NotNull(message = "档口商品颜色ID不能为空!") @ApiModelProperty(value = "档口商品颜色ID", required = true) private Long storeProdColorId; + @NotNull(message = "档口颜色ID不能为空!") + @ApiModelProperty(value = "档口颜色ID", required = true) + private Long storeColorId; @NotBlank(message = "颜色名称不能为空!") @ApiModelProperty(value = "颜色名称", required = true) private String colorName; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemand/StoreProdDemandVerifyVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemand/StoreProdDemandVerifyVO.java index 7094c7518..b24b7eabf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemand/StoreProdDemandVerifyVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemand/StoreProdDemandVerifyVO.java @@ -3,6 +3,7 @@ package com.ruoyi.web.controller.xkt.vo.storeProductDemand; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.List; @@ -18,6 +19,7 @@ public class StoreProdDemandVerifyVO { @NotNull(message = "档口ID不能为空") @ApiModelProperty(value = "档口ID", required = true) private Long storeId; + @Valid @NotNull(message = "需求列表不能为空") @ApiModelProperty(value = "需求列表", required = true) private List detailList; diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java index 2b8c2b38f..89d7d3108 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java @@ -10,6 +10,7 @@ import com.ruoyi.common.core.page.Page; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.xkt.domain.*; import com.ruoyi.xkt.dto.storeProductDemand.*; import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO; @@ -248,9 +249,9 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService List errorsMsgList = new ArrayList<>(); if (CollectionUtils.isEmpty(demandDetailList)) { demandVerifyDTO.getDetailList().forEach(x -> { - List errors = this.addErrorMsg(x); - if (CollectionUtils.isNotEmpty(errors)) { - errorsMsgList.addAll(errors); + String errors = this.addErrorMsg(x); + if (StringUtils.isNotEmpty(errors)) { + errorsMsgList.add(errors); } }); } else { @@ -309,56 +310,59 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService // 按照入库的数量依次进行对比,若需求单中不存在匹配信息,则直接返回错误信息 demandVerifyDTO.getDetailList().forEach(x -> { Map sizeQuantityMap = colorSizeQuantityMap.get(x.getStoreProdColorId()); - final String prefix = x.getProdArtNum() + x.getColorName(); - final String suffix = "码"; + final String prefix = x.getProdArtNum() + x.getColorName() + ": "; // 如果没有对应的需求单则直接返回错误信息 if (MapUtils.isEmpty(sizeQuantityMap)) { - List errors = this.addErrorMsg(x); - if (CollectionUtils.isNotEmpty(errors)) { - errorsMsgList.addAll(errors); + String errors = this.addErrorMsg(x); + if (StringUtils.isNotEmpty(errors)) { + errorsMsgList.add(errors); } } else { + List tempErrors = new ArrayList<>(); if (ObjectUtils.isNotEmpty(x.getSize30()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_30))) { - errorsMsgList.add(prefix + SIZE_30 + suffix); + tempErrors.add(SIZE_30.toString()); } if (ObjectUtils.isNotEmpty(x.getSize31()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_31))) { - errorsMsgList.add(prefix + SIZE_31 + suffix); + tempErrors.add(SIZE_31.toString()); } if (ObjectUtils.isNotEmpty(x.getSize32()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_32))) { - errorsMsgList.add(prefix + SIZE_32 + suffix); + tempErrors.add(SIZE_32.toString()); } if (ObjectUtils.isNotEmpty(x.getSize33()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_33))) { - errorsMsgList.add(prefix + SIZE_33 + suffix); + tempErrors.add(SIZE_33.toString()); } if (ObjectUtils.isNotEmpty(x.getSize34()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_34))) { - errorsMsgList.add(prefix + SIZE_34 + suffix); + tempErrors.add(SIZE_34.toString()); } if (ObjectUtils.isNotEmpty(x.getSize35()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_35))) { - errorsMsgList.add(prefix + SIZE_35 + suffix); + tempErrors.add(SIZE_35.toString()); } if (ObjectUtils.isNotEmpty(x.getSize36()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_36))) { - errorsMsgList.add(prefix + SIZE_36 + suffix); + tempErrors.add(SIZE_36.toString()); } if (ObjectUtils.isNotEmpty(x.getSize37()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_37))) { - errorsMsgList.add(prefix + SIZE_37 + suffix); + tempErrors.add(SIZE_37.toString()); } if (ObjectUtils.isNotEmpty(x.getSize38()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_38))) { - errorsMsgList.add(prefix + SIZE_38 + suffix); + tempErrors.add(SIZE_38.toString()); } if (ObjectUtils.isNotEmpty(x.getSize39()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_39))) { - errorsMsgList.add(prefix + SIZE_39 + suffix); + tempErrors.add(SIZE_39.toString()); } if (ObjectUtils.isNotEmpty(x.getSize40()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_40))) { - errorsMsgList.add(prefix + SIZE_40 + suffix); + tempErrors.add(SIZE_40.toString()); } if (ObjectUtils.isNotEmpty(x.getSize41()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_41))) { - errorsMsgList.add(prefix + SIZE_41 + suffix); + tempErrors.add(SIZE_41.toString()); } if (ObjectUtils.isNotEmpty(x.getSize42()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_42))) { - errorsMsgList.add(prefix + SIZE_42 + suffix); + tempErrors.add(SIZE_42.toString()); } if (ObjectUtils.isNotEmpty(x.getSize43()) && ObjectUtils.isEmpty(sizeQuantityMap.get(SIZE_43))) { - errorsMsgList.add(prefix + SIZE_43 + suffix); + tempErrors.add(SIZE_43.toString()); + } + if (CollectionUtils.isNotEmpty(tempErrors)) { + errorsMsgList.add(prefix + String.join(",", tempErrors)); } } }); @@ -576,53 +580,52 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService * @param detailDTO 商品详情对象,包含商品的各个尺寸信息 * @return 返回一个字符串列表,包含所有错误消息 */ - private List addErrorMsg(StoreProdDemandVerifyDTO.DetailDTO detailDTO) { + private String addErrorMsg(StoreProdDemandVerifyDTO.DetailDTO detailDTO) { List errorMsgList = new ArrayList<>(); - final String prefix = detailDTO.getProdArtNum() + detailDTO.getColorName(); - final String suffix = "码"; + final String prefix = detailDTO.getProdArtNum() + detailDTO.getColorName() + ": "; if (ObjectUtils.isNotEmpty(detailDTO.getSize30())) { - errorMsgList.add(prefix + SIZE_30 + suffix); + errorMsgList.add(SIZE_30.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize31())) { - errorMsgList.add(prefix + SIZE_31 + suffix); + errorMsgList.add(SIZE_31.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize32())) { - errorMsgList.add(prefix + SIZE_32 + suffix); + errorMsgList.add(SIZE_32.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize33())) { - errorMsgList.add(prefix + SIZE_33 + suffix); + errorMsgList.add(SIZE_33.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize34())) { - errorMsgList.add(prefix + SIZE_34 + suffix); + errorMsgList.add(SIZE_34.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize35())) { - errorMsgList.add(prefix + SIZE_35 + suffix); + errorMsgList.add(SIZE_35.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize36())) { - errorMsgList.add(prefix + SIZE_36 + suffix); + errorMsgList.add(SIZE_36.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize37())) { - errorMsgList.add(prefix + SIZE_37 + suffix); + errorMsgList.add(SIZE_37.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize38())) { - errorMsgList.add(prefix + SIZE_38 + suffix); + errorMsgList.add(SIZE_38.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize39())) { - errorMsgList.add(prefix + SIZE_39 + suffix); + errorMsgList.add(SIZE_39.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize40())) { - errorMsgList.add(prefix + SIZE_40 + suffix); + errorMsgList.add(SIZE_40.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize41())) { - errorMsgList.add(prefix + SIZE_41 + suffix); + errorMsgList.add(SIZE_41.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize42())) { - errorMsgList.add(prefix + SIZE_42 + suffix); + errorMsgList.add(SIZE_42.toString()); } if (ObjectUtils.isNotEmpty(detailDTO.getSize43())) { - errorMsgList.add(prefix + SIZE_43 + suffix); + errorMsgList.add(SIZE_43.toString()); } - return errorMsgList; + return prefix + String.join(",", errorMsgList); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageServiceImpl.java index c0f560c77..822641617 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageServiceImpl.java @@ -83,6 +83,7 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi @Override @Transactional public int create(StoreProdStorageDTO storeProdStorageDTO) { + long start = System.currentTimeMillis(); // 用户是否为档口管理者或子账户 if (!SecurityUtils.isAdmin() && !SecurityUtils.isStoreManagerOrSub(storeProdStorageDTO.getStoreId())) { throw new ServiceException("当前用户非档口管理者或子账号,无权限操作!", HttpStatus.ERROR); @@ -106,10 +107,16 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi this.storageDetailMapper.insert(detailList); // 构造增加库存的入参DTO List increaseStockList = BeanUtil.copyToList(detailList, StoreProdStockDTO.class); + long second = System.currentTimeMillis(); + System.err.println("入库耗时:" + (second - start)); // 增加档口商品的库存 this.stockService.increaseStock(storeProdStorageDTO.getStoreId(), increaseStockList); + long third = System.currentTimeMillis(); + System.err.println("库存耗时:" + (third - second)); // 处理档口商品需求单的抵扣 this.handleStorageDemandDeduct(storeProdStorageDTO.getStoreId(), storeProdStorage.getCode(), detailList); + long last = System.currentTimeMillis(); + System.err.println("处理需求耗时:" + (last - third)); return count; } @@ -122,6 +129,7 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi * @param detailList 入库明细列表 */ private void handleStorageDemandDeduct(Long storeId, String storageCode, List detailList) { + long fourth = System.currentTimeMillis(); // 根据明细列表找到所有提交的需求 List demandDetailList = this.demandDetailMapper.selectList(new LambdaQueryWrapper() .eq(StoreProductDemandDetail::getStoreId, storeId).eq(StoreProductDemandDetail::getDelFlag, Constants.UNDELETED) @@ -134,24 +142,32 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi // 所有的需求单ID列表 final List demandIdList = demandDetailList.stream().map(StoreProductDemandDetail::getStoreProdDemandId).distinct().collect(Collectors.toList()); // 所有颜色尺码需要抵扣的需求数量 - Map>> unDeductMap = this.getUnDeductMap(demandDetailList, detailList); + Map>> unDeductMap = this.getUnDeductMap(demandDetailList, detailList.stream() + .map(StoreProductStorageDetail::getStoreProdColorId).collect(Collectors.toList())); + long fifth = System.currentTimeMillis(); + System.err.println("查询需求耗时:" + (fifth - fourth)); if (MapUtils.isEmpty(unDeductMap)) { return; } // 按照入库明细列表依次进行需求数量扣减 Map>> storageQuantityMap = this.getStorageQuantityMap(detailList); - if (MapUtils.isEmpty(storageQuantityMap)) { - return; - } + long sixth = System.currentTimeMillis(); + System.err.println("库存转map耗时: " + (sixth - fifth)); // 按照入库的数量明细依次判断哪些需求订单明细还未抵扣完毕 Map>>> totalMatchMap = this.getTotalMatchMap(storageQuantityMap, unDeductMap); + long seventh = System.currentTimeMillis(); + System.err.println("处理需求抵扣明细耗时:" + (seventh - sixth)); if (MapUtils.isEmpty(totalMatchMap)) { return; } // 新增入库与需求的抵扣关系 List updateDetailIdList = this.createDemandDeduct(storageCode, demandDetailList, totalMatchMap); + long eighth = System.currentTimeMillis(); + System.err.println("新增入库需求抵扣明细耗时:" + (eighth - seventh)); // 根据最新的数据更新需求单的抵扣状态 this.updateLatestDemandStatus(updateDetailIdList, demandIdList, totalMatchMap); + long ninth = System.currentTimeMillis(); + System.err.println("更新需求单状态耗时:" + (ninth - eighth)); } /** @@ -372,8 +388,8 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi if (MapUtils.isEmpty(sizeRequireMap) || MapUtils.isEmpty(detailSizeStorageMap)) { return; } - Map>> storageDetailIdSizeMatchMap = new LinkedHashMap<>(); // 匹配的尺码集合 + Map>> storageDetailIdSizeMatchMap = new LinkedHashMap<>(); detailSizeStorageMap.forEach((storageDetailId, sizeStorageMap) -> { if (MapUtils.isEmpty(sizeStorageMap)) { return; @@ -392,6 +408,8 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi // 尺码的入库数量 + 当前尺码的需求明细数量 final int tempCompareQuantity = storageQuantity + entry.getValue(); if (tempCompareQuantity == 0) { + // 数量刚好抵扣完毕 + itemMatchMap.put(entry.getKey(), Math.abs(entry.getValue())); continue; } if (tempCompareQuantity > 0) { @@ -476,10 +494,11 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi return storageQuantityMap; } - private Map>> getUnDeductMap(List demandDetailList, List detailList) { + private Map>> getUnDeductMap(List demandDetailList, List storeProdColorIdList) { List deductedList = this.deductMapper.selectList(new LambdaQueryWrapper() - .in(StoreProductStorageDemandDeduct::getStoreProdColorId, detailList.stream().map(StoreProductStorageDetail::getStoreProdColorId).collect(Collectors.toList())) - .eq(StoreProductStorageDemandDeduct::getDelFlag, Constants.UNDELETED)); + .in(StoreProductStorageDemandDeduct::getStoreProdColorId, storeProdColorIdList).eq(StoreProductStorageDemandDeduct::getDelFlag, Constants.UNDELETED) + // 根据需求明细ID去找,否则 会把 所有的需求明细 对应的数据都找出来 + .in(StoreProductStorageDemandDeduct::getStoreProdDemandDetailId, demandDetailList.stream().map(StoreProductDemandDetail::getId).collect(Collectors.toList()))); // 已存在的需求抵扣明细列表 Map> deductedExistsMap = deductedList.stream().collect(Collectors.groupingBy(StoreProductStorageDemandDeduct::getStoreProdColorId, Collectors.groupingBy(StoreProductStorageDemandDeduct::getSize, Collectors.summingInt(x -> ObjectUtils.defaultIfNull(x.getQuantity(), 0))))); @@ -495,20 +514,20 @@ public class StoreProductStorageServiceImpl implements IStoreProductStorageServi // 已存在抵扣的数量 Map sizeDeductedMap = ObjectUtils.defaultIfNull(deductedExistsMap.get(storeProdColorId), new LinkedHashMap<>()); // 尺码为30的已抵扣需求数量 - Integer size30Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(30), 0); - Integer size31Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(31), 0); - Integer size32Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(32), 0); - Integer size33Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(33), 0); - Integer size34Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(34), 0); - Integer size35Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(35), 0); - Integer size36Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(36), 0); - Integer size37Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(37), 0); - Integer size38Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(38), 0); - Integer size39Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(39), 0); - Integer size40Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(40), 0); - Integer size41Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(41), 0); - Integer size42Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(42), 0); - Integer size43Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(43), 0); + Integer size30Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_30), 0); + Integer size31Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_31), 0); + Integer size32Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_32), 0); + Integer size33Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_33), 0); + Integer size34Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_34), 0); + Integer size35Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_35), 0); + Integer size36Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_36), 0); + Integer size37Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_37), 0); + Integer size38Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_38), 0); + Integer size39Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_39), 0); + Integer size40Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_40), 0); + Integer size41Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_41), 0); + Integer size42Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_42), 0); + Integer size43Deduct = ObjectUtils.defaultIfNull(sizeDeductedMap.get(SIZE_43), 0); Map size30DemandMap = new LinkedHashMap<>(); Map size31DemandMap = new LinkedHashMap<>(); Map size32DemandMap = new LinkedHashMap<>();