|
@@ -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();
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 查询数据库数据获取对应的部门和部门下对应的人
|