|
@@ -106,7 +106,6 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
return j;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
//循环初始化
|
|
|
liKuPoolList.forEach(liKuResourcePool -> {
|
|
|
//初始化剩余数量
|
|
@@ -115,7 +114,7 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
liKuResourcePool.setNumberOfNiches("0");
|
|
|
|
|
|
|
|
|
- //添加枚举标识
|
|
|
+ //添加地区枚举标识
|
|
|
if (liKuResourcePool.getInvLocation().equals(AreaCodeFlagEnum.HLA2.getCode())) {
|
|
|
liKuResourcePool.setLiKuFlag(AreaCodeFlagEnum.HLA2);
|
|
|
} else if (liKuResourcePool.getInvLocation().equals(AreaCodeFlagEnum.HLB1.getCode())) {
|
|
@@ -128,29 +127,8 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
liKuResourcePool.setLiKuFlag(AreaCodeFlagEnum.NO_PLACE);
|
|
|
}
|
|
|
|
|
|
- //添加标识 分组 段长数据 非段长数据 单位转换
|
|
|
+ //添加标识 分组 段长数据 非段长数据 单位转换 先把千米转换为米
|
|
|
if (liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.M.getUnit()) || liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
|
|
|
- /*if (StringUtils.isNotBlank(liKuResourcePool.getLengthOfCable())) {
|
|
|
- String[] split = liKuResourcePool.getLengthOfCable().split(";");
|
|
|
- for (int i = 0; i < split.length; i++) {
|
|
|
- //拆分成新的对象添加集合中 拆分段长为剩余
|
|
|
- LiKuResourcePool ResourcePool = new LiKuResourcePool();
|
|
|
- if (liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
|
|
|
- BeanUtils.copyProperties(liKuResourcePool, ResourcePool);
|
|
|
- ResourcePool.setUnitOfMeasurement(MaterialsUnitFlagEnum.M.getUnit());
|
|
|
- ResourcePool.setInventoryAmount(new BigDecimal(liKuResourcePool.getInventoryAmount()).multiply(new BigDecimal(1000)).toString());
|
|
|
- ResourcePool.setRemaining(liKuResourcePool.getInventoryAmount());
|
|
|
- ResourcePool.setRemaining(new BigDecimal(split[i]).multiply(new BigDecimal(1000)).toString());
|
|
|
- ResourcePool.setLengthOfCable(new BigDecimal(split[i]).multiply(new BigDecimal(1000)).toString());
|
|
|
- } else {
|
|
|
- liKuResourcePool.setRemaining(split[i]);
|
|
|
- liKuResourcePool.setLengthOfCable(split[i]);
|
|
|
- BeanUtils.copyProperties(liKuResourcePool, ResourcePool);
|
|
|
- }
|
|
|
-
|
|
|
- liKuIsSegmentPoolList.add(ResourcePool);
|
|
|
-
|
|
|
- } else {}*/
|
|
|
if (liKuResourcePool.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
|
|
|
liKuResourcePool.setInventoryAmount(new BigDecimal(liKuResourcePool.getInventoryAmount()).multiply(new BigDecimal(1000)).toString());
|
|
|
liKuResourcePool.setLengthOfCable(liKuResourcePool.getInventoryAmount());
|
|
@@ -167,13 +145,6 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
List<LiKuResourcePool> liKuIsSegmentPoolSortList = getSortLiKuPool(liKuIsSegmentPoolList);
|
|
|
List<LiKuResourcePool> liKuIsNotSegmentPoolSortList = getSortLiKuPool(liKuIsNotSegmentPoolList);
|
|
|
|
|
|
-
|
|
|
-
|
|
|
- /*liKuIsNotSegmentPoolSortList.forEach(l -> {
|
|
|
- System.out.println(l.getLiKuFlag().getArea() + "---" + l.getMonthStorage() + "---" + l.getDaysStorage() + "---" + l.getInventoryAmount() + "---" + l.getBatch() + "---" + l.getExtendedCoding());
|
|
|
- });*/
|
|
|
-
|
|
|
-
|
|
|
/*************************************************物资上报明细***************************************/
|
|
|
//物资上报 段长物资
|
|
|
List<MaterialReportDetails> materialIsSegmentList = new ArrayList<>();
|
|
@@ -185,6 +156,7 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
l.setNumberOfNiches(0.0);
|
|
|
//初始化申请数量
|
|
|
l.setNumberOfApplications(l.getTotal());
|
|
|
+ //添加地区标识
|
|
|
if (l.getReportingArea().equals(AreaCodeFlagEnum.HLA2.getArea())) {
|
|
|
l.setAreaCodeFlagEnum(AreaCodeFlagEnum.HLA2);
|
|
|
} else if (l.getReportingArea().equals(AreaCodeFlagEnum.HLD1.getArea())) {
|
|
@@ -212,86 +184,56 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
List<MaterialReportDetails> materialIsSegmentSortList = getSortMaterialReport(materialIsSegmentList);
|
|
|
List<MaterialReportDetails> materialIsNotSegmentSortList = getSortMaterialReport(materialIsNotSegmentList);
|
|
|
|
|
|
- /*materialIsNotSegmentSortList.forEach(m->{
|
|
|
- System.out.println(m.getAreaCodeFlagEnum().getArea() + "-----" + m.getTotal() +"-------"+ m.getExtendedCoding());
|
|
|
- });*/
|
|
|
-
|
|
|
- /********************************************物资利库比较***************************************************/
|
|
|
+ /********************************************物资匹配利库比较***************************************************/
|
|
|
|
|
|
//非段长物资比较 本地库 物资匹配利库
|
|
|
materialIsNotSegmentSortList.forEach(l -> {
|
|
|
- //优先匹配最佳
|
|
|
- /*liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
|
|
|
- && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0
|
|
|
- && l.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
- && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
|
|
|
- liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
- });*/
|
|
|
if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
|
|
|
- //相同地区进行比较
|
|
|
+ //相同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
|
|
|
&& l.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
&& l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
|
|
|
- liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
- //非段长物资比较 跨区库
|
|
|
+ //非段长物资比较 跨区库 物资匹配利库
|
|
|
materialIsNotSegmentSortList.forEach(l -> {
|
|
|
- //需求数量与利库数量不同 去其他地区找
|
|
|
- /*if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
|
|
|
- //优先匹配最佳
|
|
|
- liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
|
|
|
- && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0
|
|
|
- && l.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
- && l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
|
|
|
- liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
- });
|
|
|
- }*/
|
|
|
+ //如果总量与利库数量不同
|
|
|
if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
|
|
|
- //不同地区比较
|
|
|
+ //不同地区比较 过滤出 不地区相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
|
|
|
&& l.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
&& l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
|
|
|
- liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
//非段长物资替代 本地库
|
|
|
materialIsNotSegmentSortList.forEach(l -> {
|
|
|
- //如果本地库 区域库依旧没找到 则启用代替
|
|
|
- /*if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
|
|
|
- //过滤出 本地库物料编码相同 最优选择
|
|
|
- liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
|
|
|
- && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0
|
|
|
- && l.getMaterialCode().equals(liKu.getMaterialCode())).forEach(liKuResourcePool -> {
|
|
|
- liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
- });
|
|
|
- }*/
|
|
|
+ //如果总量与利库数量不同
|
|
|
if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
|
|
|
+ //相同地区比较 过滤出相同地区 物料编码相同数据 扩展编码不同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
liKuIsNotSegmentPoolSortList.stream().filter(liKu -> liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
|
|
|
&& l.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
&& !l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
|
|
|
- liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
//非段长物资代替 库区库
|
|
|
materialIsNotSegmentSortList.forEach(l -> {
|
|
|
- //如果本地库 区域库依旧没找到 则启用代替
|
|
|
- /*if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
|
|
|
- //过滤出 本地库物料编码相同 最优选择
|
|
|
- liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
|
|
|
- && Double.valueOf(liKu.getRemaining()).compareTo(l.getTotal()) >= 0
|
|
|
- && l.getMaterialCode().equals(liKu.getMaterialCode())).forEach(liKuResourcePool -> {
|
|
|
- liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
- });
|
|
|
- }*/
|
|
|
+ //如果总量与利库数量不同
|
|
|
if (l.getTotal().compareTo(l.getNumberOfNiches()) != 0) {
|
|
|
+ //不相同地区比较 过滤出不相同地区 物料编码相同数据 扩展编码不同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
liKuIsNotSegmentPoolSortList.stream().filter(liKu -> !liKu.getLiKuFlag().getArea().equals(l.getReportingArea())
|
|
|
&& l.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
&& !l.getExtendedCoding().equals(liKu.getExtendedCoding())).forEach(liKuResourcePool -> {
|
|
|
- liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(l, liKuResourcePool, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
});
|
|
|
}
|
|
|
});
|
|
@@ -299,270 +241,133 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
/***********************************************本地库 段长匹配**********************************************************/
|
|
|
//段长物资 本地库比较 最优 上报物资匹配利库池
|
|
|
materialIsSegmentSortList.forEach(m -> {
|
|
|
- //过滤 本地库 物料编码 扩展编码
|
|
|
+ //相同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
List<LiKuResourcePool> collect = liKuIsSegmentPoolSortList.stream().filter(liKu ->
|
|
|
liKu.getLiKuFlag().getArea().equals(m.getReportingArea())
|
|
|
&& m.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
- && m.getExtendedCoding().equals(liKu.getExtendedCoding())
|
|
|
- ).collect(Collectors.toList());
|
|
|
+ && m.getExtendedCoding().equals(liKu.getExtendedCoding()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
OptimalUtil optimalUtil = new OptimalUtil();
|
|
|
- //返回最优解
|
|
|
+ //返回最优解集合直接调用计算利库做处理
|
|
|
optimalUtil.getOptimalReverse(m.getTotal(), collect).forEach(l -> {
|
|
|
- liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
});
|
|
|
});
|
|
|
//段长物资 本地库比较 最优 利库池匹配上报物资
|
|
|
liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
- List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && material.getExtendedCoding().equals(l.getExtendedCoding())).collect(Collectors.toList());
|
|
|
+ //相同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
+ List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material ->
|
|
|
+ material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
+ && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
+ && material.getExtendedCoding().equals(l.getExtendedCoding()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
OptimalUtil optimalUtil = new OptimalUtil();
|
|
|
+ //返回最优解集合直接调用计算利库做处理
|
|
|
optimalUtil.getOptimal(Double.parseDouble(l.getLengthOfCable()), collect).forEach(m -> {
|
|
|
- liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
});
|
|
|
});
|
|
|
- //段长物资比较 本地库 利库匹配物资
|
|
|
- liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && material.getExtendedCoding().equals(l.getExtendedCoding())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- });
|
|
|
|
|
|
/***********************************************************跨区库 段长匹配***********************************************************************/
|
|
|
//段长物资 跨区库比较 最优 上报物资匹配利库池
|
|
|
materialIsSegmentSortList.forEach(m -> {
|
|
|
- //过滤 跨区库 物料编码 扩展编码
|
|
|
+ //不同地区进行比较 过滤出 地区不相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
List<LiKuResourcePool> collect = liKuIsSegmentPoolSortList.stream().filter(liKu ->
|
|
|
!liKu.getLiKuFlag().getArea().equals(m.getReportingArea())
|
|
|
&& m.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
&& m.getExtendedCoding().equals(liKu.getExtendedCoding())
|
|
|
).collect(Collectors.toList());
|
|
|
OptimalUtil optimalUtil = new OptimalUtil();
|
|
|
- //返回最优解
|
|
|
+ //返回最优解集合直接调用计算利库做处理
|
|
|
optimalUtil.getOptimalReverse(m.getTotal(), collect).forEach(l -> {
|
|
|
- liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
});
|
|
|
});
|
|
|
//段长物资 跨区库比较 最优 利库池匹配上报物资
|
|
|
liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
+ //不同地区进行比较 过滤出 地区不相同 物料编码相同,扩展编码相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material ->
|
|
|
!material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && material.getExtendedCoding().equals(l.getExtendedCoding())).collect(Collectors.toList());
|
|
|
+ && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
+ && material.getExtendedCoding().equals(l.getExtendedCoding()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
OptimalUtil optimalUtil = new OptimalUtil();
|
|
|
+ //返回最优解集合直接调用计算利库做处理
|
|
|
optimalUtil.getOptimal(Double.parseDouble(l.getLengthOfCable()), collect).forEach(m -> {
|
|
|
- liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
});
|
|
|
});
|
|
|
- //段长物资比较 跨区库 利库匹配物资
|
|
|
- liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && material.getExtendedCoding().equals(l.getExtendedCoding())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- });
|
|
|
+
|
|
|
/*************************************************************本地库-代替 段长*******************************************************************/
|
|
|
//段长物资 本地库比较 最优 上报物资匹配利库池 替代
|
|
|
materialIsSegmentSortList.forEach(m -> {
|
|
|
- //过滤 本地库 物料编码 扩展编码
|
|
|
+ //同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码不相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
List<LiKuResourcePool> collect = liKuIsSegmentPoolSortList.stream().filter(liKu ->
|
|
|
liKu.getLiKuFlag().getArea().equals(m.getReportingArea())
|
|
|
&& m.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
- && !m.getExtendedCoding().equals(liKu.getExtendedCoding())
|
|
|
- ).collect(Collectors.toList());
|
|
|
+ && !m.getExtendedCoding().equals(liKu.getExtendedCoding()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
OptimalUtil optimalUtil = new OptimalUtil();
|
|
|
- //返回最优解
|
|
|
+ //返回最优解集合直接调用计算利库做处理
|
|
|
optimalUtil.getOptimalReverse(m.getTotal(), collect).forEach(l -> {
|
|
|
- liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
});
|
|
|
});
|
|
|
- //段长物资 本地库比较 最优 利库池匹配上报物资
|
|
|
+ //段长物资 本地库比较 最优 利库池匹配上报物资 替代
|
|
|
liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
- List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && !material.getExtendedCoding().equals(l.getExtendedCoding())).collect(Collectors.toList());
|
|
|
+ //同地区进行比较 过滤出 地区相同 物料编码相同,扩展编码不相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
+ List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material ->
|
|
|
+ material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
+ && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
+ && !material.getExtendedCoding().equals(l.getExtendedCoding()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
OptimalUtil optimalUtil = new OptimalUtil();
|
|
|
optimalUtil.getOptimal(Double.parseDouble(l.getLengthOfCable()), collect).forEach(m -> {
|
|
|
- liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(m, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
});
|
|
|
});
|
|
|
- //段长物资比较 本地库 利库匹配物资
|
|
|
- liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && !material.getExtendedCoding().equals(l.getExtendedCoding())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- });
|
|
|
+
|
|
|
/*****************************************************跨区库 段长 替代 ****************************************************************/
|
|
|
|
|
|
- //段长物资 跨区库比较 最优 上报物资匹配利库池
|
|
|
+ //段长物资 跨区库比较 最优 上报物资匹配利库池 替代
|
|
|
materialIsSegmentSortList.forEach(m -> {
|
|
|
- //过滤 跨区库 物料编码 扩展编码
|
|
|
+ //不同地区进行比较 过滤出 地区不相同 物料编码相同,扩展编码不相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
List<LiKuResourcePool> collect = liKuIsSegmentPoolSortList.stream().filter(liKu ->
|
|
|
!liKu.getLiKuFlag().getArea().equals(m.getReportingArea())
|
|
|
&& m.getMaterialCode().equals(liKu.getMaterialCode())
|
|
|
- && !m.getExtendedCoding().equals(liKu.getExtendedCoding())
|
|
|
- ).collect(Collectors.toList());
|
|
|
+ && !m.getExtendedCoding().equals(liKu.getExtendedCoding()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
OptimalUtil optimalUtil = new OptimalUtil();
|
|
|
//返回最优解
|
|
|
optimalUtil.getOptimalReverse(m.getTotal(), collect).forEach(l -> {
|
|
|
- liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
});
|
|
|
});
|
|
|
//段长物资 跨区库比较 最优 利库池匹配上报物资
|
|
|
liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
+ //不同地区进行比较 过滤出 地区不相同 物料编码相同,扩展编码不相同数据 根据筛选出结果直接调用计算利库做处理
|
|
|
List<MaterialReportDetails> collect = materialIsSegmentSortList.stream().filter(material ->
|
|
|
!material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
&& material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && !material.getExtendedCoding().equals(l.getExtendedCoding())).collect(Collectors.toList());
|
|
|
+ && !material.getExtendedCoding().equals(l.getExtendedCoding()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
OptimalUtil optimalUtil = new OptimalUtil();
|
|
|
optimalUtil.getOptimal(Double.parseDouble(l.getLengthOfCable()), collect).forEach(m -> {
|
|
|
- liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
+ //上报物资对象,利库池对象,地区标识, 地区替换标识,段长非段长标识
|
|
|
+ liKuCompareMaterial(m, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_SEGMENT);
|
|
|
});
|
|
|
});
|
|
|
- //段长物资比较 跨区库 利库匹配物资
|
|
|
- liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && !material.getExtendedCoding().equals(l.getExtendedCoding())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- });
|
|
|
- //段长物资比较 跨区库
|
|
|
- /*liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
- //最优选择 过滤本地库 物料编码 扩展编码 段长大于上报物资
|
|
|
- materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && material.getExtendedCoding().equals(l.getExtendedCoding())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && material.getExtendedCoding().equals(l.getExtendedCoding())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, null, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- });
|
|
|
- //段长物资替换 本地库
|
|
|
- liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
- //最优选择 过滤本地库 物料编码 扩展编码 段长大于上报物资
|
|
|
- materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- materialIsSegmentSortList.stream().filter(material -> material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.LOCAL, AreaTypeFlagEnum.LOCAL_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- });
|
|
|
- //段长物资替换 跨区库
|
|
|
- liKuIsSegmentPoolSortList.forEach(l -> {
|
|
|
- //最优选择 过滤本地库 物料编码 扩展编码 段长大于上报物资
|
|
|
- materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) == 0
|
|
|
- && !l.getExtendedCoding().equals(material.getExtendedCoding())).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.ZERO) > 0) {
|
|
|
- materialIsSegmentSortList.stream().filter(material -> !material.getReportingArea().equals(l.getLiKuFlag().getArea())
|
|
|
- && material.getMaterialCode().equals(l.getMaterialCode())
|
|
|
- && new BigDecimal(l.getLengthOfCable()).compareTo(BigDecimal.valueOf(material.getTotal())) > 0
|
|
|
- && !l.getExtendedCoding().equals(material.getExtendedCoding())).forEach(materialReportDetails -> {
|
|
|
- if (new BigDecimal(l.getRemaining()).compareTo(BigDecimal.valueOf(materialReportDetails.getTotal())) >= 0) {
|
|
|
- liKuCompareMaterial(materialReportDetails, l, AreaTypeFlagEnum.SPAN, AreaTypeFlagEnum.SPAN_REPLACEMENT, MaterialsUnitFlagEnum.IS_NOT_SEGMENT);
|
|
|
- }
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- });*/
|
|
|
|
|
|
- //段长非段长合并 排序 处理拆分段长
|
|
|
- /*List<LiKuResourcePool> tempList = new ArrayList<>();
|
|
|
- liKuIsSegmentPoolSortList.stream().map(m -> {
|
|
|
- m.setLengthOfCable(m.getRemaining() + ";");
|
|
|
- return m;
|
|
|
- }).forEach(l -> {
|
|
|
- if (tempList.size() != 0) {
|
|
|
- boolean flag = true;
|
|
|
- for (LiKuResourcePool temp : tempList) {
|
|
|
- if (l.getExtendedCoding().equals(temp.getExtendedCoding())
|
|
|
- && l.getMaterialCode().equals(temp.getMaterialCode())
|
|
|
- && l.getInventoryAmount().equals(temp.getInventoryAmount())
|
|
|
- && l.getInvLocation().equals(temp.getInvLocation())
|
|
|
- && l.getBatch().equals(temp.getBatch())
|
|
|
- && l.getFactory().equals(temp.getFactory())
|
|
|
- && l.getPlanner().equals(temp.getPlanner())) {
|
|
|
- //段长拼接
|
|
|
- temp.setLengthOfCable(temp.getLengthOfCable() + l.getRemaining() + ";");
|
|
|
- //修改 剩余总量
|
|
|
- temp.setRemaining((new BigDecimal(temp.getRemaining()).add(new BigDecimal(l.getRemaining()))).toString());
|
|
|
- //修改 利库数量
|
|
|
- temp.setNumberOfNiches((new BigDecimal(temp.getNumberOfNiches()).add(new BigDecimal(l.getNumberOfNiches()))).toString());
|
|
|
- flag = false;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (flag) {
|
|
|
- tempList.add(l);
|
|
|
- }
|
|
|
- } else {
|
|
|
- tempList.add(l);
|
|
|
- }
|
|
|
- });*/
|
|
|
-
|
|
|
- //利库合并 并排序
|
|
|
+ //利库合并 并排序 将利库段长/非段长集合转换为流的形式进行合并,在此基础上对该流进行处理数据,把处理完的流转换为集合进行排序
|
|
|
List<LiKuResourcePool> sortLiKuPoolList = getSortLiKuPool(Stream.concat(liKuIsNotSegmentPoolSortList.stream(), liKuIsSegmentPoolSortList.stream()).map(m -> {
|
|
|
+ //如过单位为千米 说明该对象物资被转换为米进行操作,重新转换为千米
|
|
|
if (m.getUnitOfMeasurement().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
|
|
|
if (StringUtils.isNotBlank(m.getNumberOfNiches())) {
|
|
|
m.setNumberOfNiches(new BigDecimal(m.getNumberOfNiches()).divide(new BigDecimal(1000)).toString());
|
|
@@ -573,9 +378,10 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
}
|
|
|
return m;
|
|
|
}).collect(Collectors.toList()));
|
|
|
- //上报资源合并
|
|
|
- List<MaterialReportDetails> materialResultList = Stream.concat(materialIsNotSegmentList.stream(), materialIsSegmentList.stream()).map(m -> {
|
|
|
- //处理上报资源中多余,
|
|
|
+
|
|
|
+ //上报资源合并 段长/非段长集合转换为流进行合并,在此基础上对该流进行数据处理,把处理完的流转换为集合进行排序
|
|
|
+ List<MaterialReportDetails> materialResultList = getSortMaterialReport(Stream.concat(materialIsNotSegmentList.stream(), materialIsSegmentList.stream()).map(m -> {
|
|
|
+ //调用字符串处理方法,处理上报资源中多余,
|
|
|
m.setLocalWareBatch(interceptString(m.getLocalWareBatch()));
|
|
|
m.setLocalWareHouse(interceptString(m.getLocalWareHouse()));
|
|
|
m.setNumberOfLocal(interceptString(m.getNumberOfLocal()));
|
|
@@ -595,6 +401,7 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
m.setRegionalReplacementBatch(interceptString(m.getRegionalReplacementBatch()));
|
|
|
m.setRegionalReplacementHouse(interceptString(m.getRegionalReplacementHouse()));
|
|
|
m.setRegionalReplacementNumber(interceptString(m.getRegionalReplacementNumber()));
|
|
|
+ //如过单位为千米 说明该对象物资被转换为米进行操作,重新转换为千米
|
|
|
if (m.getUnit().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
|
|
|
BigDecimal convert = new BigDecimal(1000);
|
|
|
if (m.getTotal() != null) {
|
|
@@ -608,14 +415,14 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
}
|
|
|
}
|
|
|
return m;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+ }).collect(Collectors.toList()));
|
|
|
|
|
|
/***************************************存储数据库************************************************/
|
|
|
- //清除利库池
|
|
|
- materialReportDetailsMapper.delAll();
|
|
|
-
|
|
|
+ //更新利库池
|
|
|
liKuResourcePoolMapper.updateAllList(sortLiKuPoolList);
|
|
|
-
|
|
|
+ //如果有新的上报物资导入 删除原有上报物资
|
|
|
+ materialReportDetailsMapper.delAll();
|
|
|
+ //将处理结果上报物资重新添加进数据库中
|
|
|
materialResultList.forEach(DataEntity::preInsert);
|
|
|
materialReportDetailsMapper.insertList(materialResultList);
|
|
|
j.setSuccess(true);
|
|
@@ -673,11 +480,7 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
//物资 申请数量
|
|
|
materialReportDetails.setNumberOfApplications(material_ApplicationCount.subtract(temp).doubleValue());
|
|
|
//物资 利库量
|
|
|
- //if (judgingSegment == MaterialsUnitFlagEnum.IS_NOT_SEGMENT) {
|
|
|
materialReportDetails.setNumberOfNiches(material_liKuCount.add(temp).doubleValue());
|
|
|
- /*} else {
|
|
|
- materialReportDetails.setNumberOfNiches(material_liKuCount.add(temp).doubleValue());
|
|
|
- }*/
|
|
|
if (materialReportDetails.getUnit().equals(MaterialsUnitFlagEnum.KM.getUnit())) {
|
|
|
temp = temp.divide(new BigDecimal(1000));
|
|
|
}
|
|
@@ -688,27 +491,29 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
//拼接本地库批次号
|
|
|
materialReportDetails.setLocalWareBatch(materialReportDetails.getLocalWareBatch() + liKuResourcePool.getBatch() + ",");
|
|
|
materialReportDetails.setLocalWareHouse(materialReportDetails.getLocalWareHouse() + liKuResourcePool.getInvLocation() + ",");
|
|
|
- materialReportDetails.setNumberOfLocal(materialReportDetails.getNumberOfLocal() + temp.setScale(2, BigDecimal.ROUND_HALF_UP) + ",");
|
|
|
+ materialReportDetails.setNumberOfLocal(materialReportDetails.getNumberOfLocal() + temp.setScale(3, BigDecimal.ROUND_HALF_UP) + ",");
|
|
|
} else {
|
|
|
//拼接跨区批次号
|
|
|
materialReportDetails.setRegionalBatch(materialReportDetails.getRegionalBatch() + liKuResourcePool.getBatch() + ",");
|
|
|
materialReportDetails.setRegionalHouse(materialReportDetails.getRegionalHouse() + liKuResourcePool.getInvLocation() + ",");
|
|
|
- materialReportDetails.setNumberOfRegional(materialReportDetails.getNumberOfRegional() + temp.setScale(2, BigDecimal.ROUND_HALF_UP) + ",");
|
|
|
+ materialReportDetails.setNumberOfRegional(materialReportDetails.getNumberOfRegional() + temp.setScale(3, BigDecimal.ROUND_HALF_UP) + ",");
|
|
|
}
|
|
|
} else {
|
|
|
//区分本地利库与跨区利库替换
|
|
|
if (AreaTypeFlagEnum.LOCAL_REPLACEMENT == replacement) {
|
|
|
+ //拼接本地利库
|
|
|
materialReportDetails.setLocalReplacementExtendedCoding(materialReportDetails.getLocalReplacementExtendedCoding() + liKuResourcePool.getExtendedCoding() + ",");
|
|
|
materialReportDetails.setLocalReplacementExtendedDescription(materialReportDetails.getLocalReplacementExtendedDescription() + liKuResourcePool.getExtendedDescription() + ",");
|
|
|
materialReportDetails.setLocalReplacementBatch(materialReportDetails.getLocalReplacementBatch() + liKuResourcePool.getBatch() + ",");
|
|
|
materialReportDetails.setLocalReplacementHouse(materialReportDetails.getLocalReplacementHouse() + liKuResourcePool.getInvLocation() + ",");
|
|
|
- materialReportDetails.setLocalReplacementNumber(materialReportDetails.getLocalReplacementNumber() + temp.setScale(2, BigDecimal.ROUND_HALF_UP) + ",");
|
|
|
+ materialReportDetails.setLocalReplacementNumber(materialReportDetails.getLocalReplacementNumber() + temp.setScale(3, BigDecimal.ROUND_HALF_UP) + ",");
|
|
|
} else {
|
|
|
+ //拼接跨区利库
|
|
|
materialReportDetails.setRegionalReplacementExtendedCoding(materialReportDetails.getRegionalReplacementExtendedCoding() + liKuResourcePool.getExtendedCoding() + ",");
|
|
|
materialReportDetails.setRegionalReplacementExtendedDescription(materialReportDetails.getRegionalReplacementExtendedDescription() + liKuResourcePool.getExtendedDescription() + ",");
|
|
|
materialReportDetails.setRegionalReplacementBatch(materialReportDetails.getRegionalReplacementBatch() + liKuResourcePool.getBatch() + ",");
|
|
|
materialReportDetails.setRegionalReplacementHouse(materialReportDetails.getRegionalReplacementHouse() + liKuResourcePool.getInvLocation() + ",");
|
|
|
- materialReportDetails.setRegionalReplacementNumber(materialReportDetails.getRegionalReplacementNumber() + temp.setScale(2, BigDecimal.ROUND_HALF_UP) + ",");
|
|
|
+ materialReportDetails.setRegionalReplacementNumber(materialReportDetails.getRegionalReplacementNumber() + temp.setScale(3, BigDecimal.ROUND_HALF_UP) + ",");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -758,8 +563,11 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
*/
|
|
|
private List<MaterialReportDetails> getSortMaterialReport(List<MaterialReportDetails> materialReportDetailsList) {
|
|
|
return materialReportDetailsList.stream().sorted((material1, material2) -> {
|
|
|
+ //地区比较
|
|
|
if (material1.getAreaCodeFlagEnum() == material2.getAreaCodeFlagEnum()) {
|
|
|
+ //总量比较
|
|
|
if (material1.getTotal().compareTo(material2.getTotal()) == 0) {
|
|
|
+ //扩展编码比较
|
|
|
return new BigDecimal(material1.getExtendedCoding()).compareTo(new BigDecimal(material2.getExtendedCoding()));
|
|
|
} else {
|
|
|
return material2.getTotal().compareTo(material1.getTotal());
|
|
@@ -770,32 +578,4 @@ public class MaterialReportDetailsService extends CrudService<MaterialReportDeta
|
|
|
}).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 贪心算法 递归组合
|
|
|
- * @param total
|
|
|
- * @param value
|
|
|
- * @param resultMap
|
|
|
- * @return
|
|
|
- */
|
|
|
- private Map<Integer, List<Integer>> GreedyAlgorithmRecursion(int total, List<Integer> value, Map<Integer, List<Integer>> resultMap) {
|
|
|
- if (value.size() == 0 || resultMap.containsKey(total)) {
|
|
|
- return resultMap;
|
|
|
- }
|
|
|
- int result = 0;
|
|
|
- List<Integer> list = new ArrayList<>();
|
|
|
- int temp = total;
|
|
|
- for (int i = value.size() - 1; i >= 0; i--) {
|
|
|
- if (temp >= value.get(i)) {
|
|
|
- temp -= value.get(i);
|
|
|
- if (temp >= 0) {
|
|
|
- list.add(i);
|
|
|
- result += value.get(i);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- resultMap.put(result, list);
|
|
|
- return GreedyAlgorithmRecursion(total, value.stream().limit(value.size() - 1).collect(Collectors.toList()), resultMap);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
}
|