|
@@ -16,9 +16,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-import java.util.stream.Stream;
|
|
|
-
|
|
|
/**
|
|
|
* @author 杜
|
|
|
*/
|
|
@@ -38,12 +35,14 @@ public class PlanSummaryService extends CrudService<PlanSummaryMapper, Agricultu
|
|
|
Map<String, BigDecimal> processTrackingMap = new HashMap<>();
|
|
|
//提报人
|
|
|
Map<String, String> reportPersonMap = getPerson();
|
|
|
-
|
|
|
+ Map<String, String> flagMap = new HashMap<>();
|
|
|
// 去重统计各个部门需求数量(配农网)
|
|
|
agriculturalDistributionNetworkList.forEach(agriculturalDistributionNetwork -> {
|
|
|
//物料编码+提报人
|
|
|
String key = agriculturalDistributionNetwork.getRequiredMaterialCode() + "-" +
|
|
|
reportPersonMap.get(agriculturalDistributionNetwork.getPlanSubmitter());
|
|
|
+ String value= agriculturalDistributionNetwork.getMaterialDescription();
|
|
|
+ flagMap.put(key,value);
|
|
|
//如果包含key
|
|
|
if (agriculturalDistributionNetworkMap.containsKey(key)) {
|
|
|
agriculturalDistributionNetworkMap.put(key,agriculturalDistributionNetworkMap.get(key).
|
|
@@ -58,72 +57,43 @@ public class PlanSummaryService extends CrudService<PlanSummaryMapper, Agricultu
|
|
|
//去重统计各个部门需求数量(流程表)
|
|
|
processTrackingList.forEach(processTracking -> {
|
|
|
String key = processTracking.getMaterialCode() + "-" + reportPersonMap.get(processTracking.getApplicant());
|
|
|
+ String value= processTracking.getMaterialDescription();
|
|
|
+ flagMap.put(key,value);
|
|
|
if (processTrackingMap.containsKey(key)) {
|
|
|
processTrackingMap.put(key,processTrackingMap.get(key).add(new BigDecimal(processTracking.getDemandQuantity())));
|
|
|
}else{
|
|
|
processTrackingMap.put(key,new BigDecimal(processTracking.getDemandQuantity()));
|
|
|
}
|
|
|
});
|
|
|
- //获取所有的key(物料编码,部门),使用stream流拼接获取两表keyset转换stream流合并去重
|
|
|
- List<String> keyList = Stream.concat(processTrackingMap.keySet().stream(), agriculturalDistributionNetworkMap.keySet().stream()).distinct().collect(Collectors.toList());
|
|
|
-
|
|
|
//配农网V / 跟踪Q
|
|
|
- keyList.forEach(list->{
|
|
|
- String[] split = list.split("-");
|
|
|
+ flagMap.forEach((k,v)->{
|
|
|
+ String[] split = k.split("-");
|
|
|
PlanSummary planSummary = new PlanSummary();
|
|
|
- //物料编码
|
|
|
+ //物料编码
|
|
|
planSummary.setMaterialCoding(split[0]);
|
|
|
- //查找部门
|
|
|
+ //查找部门
|
|
|
String dictLabels = DictUtils.getDictLabel(split[1], "report_department", "");
|
|
|
- //把部门赋值给planSummary
|
|
|
+ //把部门赋值给planSummary
|
|
|
planSummary.setProjectDepartment(dictLabels);
|
|
|
//如果两个表有相同的物料编码部门,
|
|
|
- if(processTrackingMap.containsKey(list)&&agriculturalDistributionNetworkMap.containsKey(list)){
|
|
|
- //赋值
|
|
|
- planSummary.setAmountOfDemand(processTrackingMap.get(list).toString());
|
|
|
- //上报数量(物料编码,部门)
|
|
|
- planSummary.setNumberOfReports(agriculturalDistributionNetworkMap.get(list).toString());
|
|
|
- //过滤物料编码相同,部门相同取第一个,取物料描述
|
|
|
- Optional<String> materialCoding = processTrackingList.stream().filter(processTracking -> processTracking.getMaterialCode().equals(split[0])
|
|
|
- ).findFirst().map(ProcessTracking::getMaterialDescription);
|
|
|
-
|
|
|
- //如果Optional为空或没有值
|
|
|
- if(materialCoding.isPresent()){
|
|
|
- //赋值
|
|
|
- planSummary.setDescriptionOfMaterials(materialCoding.get());
|
|
|
- }else{
|
|
|
- planSummary.setDescriptionOfMaterials(null);
|
|
|
- }
|
|
|
+ if(processTrackingMap.containsKey(k)&&agriculturalDistributionNetworkMap.containsKey(k)){
|
|
|
+ //赋值 上报数量(物料编码,部门)
|
|
|
+ planSummary.setAmountOfDemand(processTrackingMap.get(k).toString());
|
|
|
+ planSummary.setNumberOfReports(agriculturalDistributionNetworkMap.get(k).toString());
|
|
|
+ planSummary.setDescriptionOfMaterials(v);
|
|
|
//如果流程表有而配农网没有
|
|
|
- }else if(processTrackingMap.containsKey(list)&&!agriculturalDistributionNetworkMap.containsKey(list)){
|
|
|
+ }else if(processTrackingMap.containsKey(k)&&!agriculturalDistributionNetworkMap.containsKey(k)){
|
|
|
//赋值
|
|
|
- planSummary.setAmountOfDemand(processTrackingMap.get(list).toString());
|
|
|
+ planSummary.setAmountOfDemand(processTrackingMap.get(k).toString());
|
|
|
planSummary.setNumberOfReports("0");
|
|
|
- //过滤物料编码相同,部门相同取第一个,取物料描述
|
|
|
- Optional<String> materialCoding = processTrackingList.stream().filter(p -> p.getMaterialCode().equals(split[0])
|
|
|
- ).findFirst().map(ProcessTracking::getMaterialDescription);
|
|
|
-
|
|
|
- //如果Optional为空或没有值
|
|
|
- if(materialCoding.isPresent()){
|
|
|
- planSummary.setDescriptionOfMaterials(materialCoding.get());
|
|
|
- }else{
|
|
|
- planSummary.setDescriptionOfMaterials(null);
|
|
|
- }
|
|
|
+ planSummary.setDescriptionOfMaterials(v);
|
|
|
//流程表没有配农网有
|
|
|
- }else if(!processTrackingMap.containsKey(list)&&agriculturalDistributionNetworkMap.containsKey(list)){
|
|
|
+ }else if(!processTrackingMap.containsKey(k)&&agriculturalDistributionNetworkMap.containsKey(k)){
|
|
|
//赋值
|
|
|
planSummary.setAmountOfDemand("0");
|
|
|
//上报数量(物料编码,部门)
|
|
|
- planSummary.setNumberOfReports(agriculturalDistributionNetworkMap.get(list).toString());
|
|
|
- Optional<String> materialCoding = agriculturalDistributionNetworkList.stream().
|
|
|
- filter(a -> a.getRequiredMaterialCode().equals(split[0]) ).findFirst().map(AgriculturalDistributionNetwork::getMaterialDescription);
|
|
|
-
|
|
|
- //如果Optional为空或没有值
|
|
|
- if(materialCoding.isPresent()){
|
|
|
- planSummary.setDescriptionOfMaterials(materialCoding.get());
|
|
|
- }else{
|
|
|
- planSummary.setDescriptionOfMaterials(null);
|
|
|
- }
|
|
|
+ planSummary.setNumberOfReports(agriculturalDistributionNetworkMap.get(k).toString());
|
|
|
+ planSummary.setDescriptionOfMaterials(v);
|
|
|
}
|
|
|
//如果需求数量不是空并且不等于0
|
|
|
if(StringUtils.isNotBlank(planSummary.getAmountOfDemand())&&!"0".equals(planSummary.getAmountOfDemand())){
|