2 Комити 9374fba262 ... 6220427d0a

Аутор SHA1 Порука Датум
  赵芳群 6220427d0a Merge remote-tracking branch 'origin/master' пре 2 година
  赵芳群 a0bfe1d364 执行计划汇总 пре 2 година

+ 74 - 41
src/main/java/com/jeeplus/modules/sg/balancedlibrary/planSummary/service/PlanSummaryService.java

@@ -1,6 +1,7 @@
 
 
 package com.jeeplus.modules.sg.balancedlibrary.planSummary.service;
+import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.core.service.CrudService;
 import com.jeeplus.modules.sg.balancedlibrary.planSummary.entity.AgriculturalDistributionNetwork;
 import com.jeeplus.modules.sg.balancedlibrary.planSummary.entity.ProcessTracking;
@@ -13,11 +14,10 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author 杜
@@ -27,8 +27,6 @@ import java.util.concurrent.atomic.AtomicReference;
 public class PlanSummaryService extends CrudService<PlanSummaryMapper, AgriculturalDistributionNetwork> {
     @Autowired
     private ReportPersonMapper reportPersonMapper;
-
-
     public List<PlanSummary>  importFile(List<AgriculturalDistributionNetwork> agriculturalDistributionNetworkList, List<ProcessTracking> processTrackingList) {
         //返回结果
         List<PlanSummary> planSummaryList = new ArrayList<>();
@@ -38,7 +36,6 @@ public class PlanSummaryService extends CrudService<PlanSummaryMapper, Agricultu
 
         //跟踪表
         Map<String, BigDecimal> processTrackingMap = new HashMap<>();
-
         //提报人
         Map<String, String> reportPersonMap = getPerson();
 
@@ -67,31 +64,78 @@ public class PlanSummaryService extends CrudService<PlanSummaryMapper, Agricultu
                 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("-");
+            PlanSummary planSummary = new PlanSummary();
+            //物料编码
+            planSummary.setMaterialCoding(split[0]);
+            //查找部门
+            String dictLabels = DictUtils.getDictLabel(split[1], "report_department", "");
+            //把部门赋值给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);
+                }
+                //如果流程表有而配农网没有
+            }else if(processTrackingMap.containsKey(list)&&!agriculturalDistributionNetworkMap.containsKey(list)){
+                //赋值
+                planSummary.setAmountOfDemand(processTrackingMap.get(list).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);
+                }
+                //流程表没有配农网有
+            }else if(!processTrackingMap.containsKey(list)&&agriculturalDistributionNetworkMap.containsKey(list)){
+                //赋值
+                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);
+                }
+            }
+            //如果需求数量不是空并且不等于0
+            if(StringUtils.isNotBlank(planSummary.getAmountOfDemand())&&!"0".equals(planSummary.getAmountOfDemand())){
+                //计算 转BigDecimal  V / Q
+                planSummary.setProgressOfImplementation((new BigDecimal(planSummary.getNumberOfReports()).
+                        divide(new BigDecimal(planSummary.getAmountOfDemand()),1,BigDecimal.ROUND_HALF_DOWN)) + "%");
 
-
-        //两个表 相比
-        processTrackingMap.forEach((k,v)->{
-            String[] split = k.split("-");
-            String person = getPerson(reportPersonMap, split[1], agriculturalDistributionNetworkList, split[0]);
-            String dictLabels = DictUtils.getDictLabel(reportPersonMap.get(person), "report_department", "");
-            String materialDescription = getMaterialDescription(split[0], person, agriculturalDistributionNetworkList);
-            planSummaryList.add(new PlanSummary(person,dictLabels,split[0],materialDescription,v.toString(),
-                    //配农网是否有这个key
-                    agriculturalDistributionNetworkMap.containsKey(k)?
-                            agriculturalDistributionNetworkMap.get(k).toString():null,
-                    //需求数量是否为0  如果不为0 计算执行进度 如果为0则显示未上报
-                    //如果有这个key并且不是null时,配农网的key / 流程跟踪表的v
-                    agriculturalDistributionNetworkMap.containsKey(k)
-                            &&
-                            agriculturalDistributionNetworkMap.get(k)!=null?
-                            agriculturalDistributionNetworkMap.get(k).compareTo(new BigDecimal(0))==0?
-                                    "未上报需求":(agriculturalDistributionNetworkMap.get(k).
-                                    divide(v,1,BigDecimal.ROUND_HALF_DOWN))+ "%":
-                            "未上报需求"
-            ));
-
+            }else{
+                planSummary.setProgressOfImplementation("未上报需求");
+            }
+            planSummaryList.add(planSummary);
         });
-
         return planSummaryList;
 
     }
@@ -111,17 +155,6 @@ public class PlanSummaryService extends CrudService<PlanSummaryMapper, Agricultu
         });
         return name.get();
     }
-        //物料描述
-    private String getMaterialDescription(String requiredMaterialCode,String name,List<AgriculturalDistributionNetwork> agriculturalDistributionNetworkList){
-        AtomicReference<String> materialDescription = new AtomicReference<>("");
-        agriculturalDistributionNetworkList.forEach(l->{
-            if(requiredMaterialCode.equals(l.getRequiredMaterialCode())&&name.equals(l.getPlanSubmitter())){
-                materialDescription.set(l.getMaterialDescription());
-            }
-        });
-        return materialDescription
-                .get();
-    }
 
     /**
      * 查询数据库数据获取对应的部门和部门下对应的人