|  |  | @ -230,50 +230,18 @@ public class FactOriginProjectLogDailyServiceImpl extends BaseServiceImpl<FactOr | 
			
		
	
		
			
				
					|  |  |  |      * @date 2020.09.21 02:16 | 
			
		
	
		
			
				
					|  |  |  |      **/ | 
			
		
	
		
			
				
					|  |  |  |     @Override | 
			
		
	
		
			
				
					|  |  |  |     public Map<String, BigDecimal> getAgencyWorkPieceRatio(String customerId, String dimId) { | 
			
		
	
		
			
				
					|  |  |  |     public Map<String, BigDecimal> getAgencyWorkPieceRatio(String customerId, String level, String dimId) { | 
			
		
	
		
			
				
					|  |  |  |         //计算方法 : 评价周期内办结项目的平均处理时长的倒数
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         //1.评价周期内结案了的项目
 | 
			
		
	
		
			
				
					|  |  |  |         List<ProjectParticipatedAgencyResultDTO> projectsHandledByAgency = baseDao.selectProjectIdHandledByAgency(customerId, dimId); | 
			
		
	
		
			
				
					|  |  |  |         //评价周期内每个机关结案了的项目耗时和项目数
 | 
			
		
	
		
			
				
					|  |  |  |         List<OrgStatisticsResultDTO> projectsHandledByAgency = baseDao.selectProjectIdHandledByAgency(customerId, level, dimId); | 
			
		
	
		
			
				
					|  |  |  |         Map<String, BigDecimal> efficiencyMap = new HashMap<>(); | 
			
		
	
		
			
				
					|  |  |  |         List<String> projects = new LinkedList<>(); | 
			
		
	
		
			
				
					|  |  |  |         if (!CollectionUtils.isEmpty(projectsHandledByAgency)) { | 
			
		
	
		
			
				
					|  |  |  |             Map<String, List<String>> agencyProjectsMap = new HashMap<>(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             projectsHandledByAgency.forEach(o -> { | 
			
		
	
		
			
				
					|  |  |  |                 String agencyId = o.getAgencyId(); | 
			
		
	
		
			
				
					|  |  |  |                 String projectId = o.getProjectId(); | 
			
		
	
		
			
				
					|  |  |  |                 if(CollectionUtils.isEmpty(agencyProjectsMap.get(agencyId))){ | 
			
		
	
		
			
				
					|  |  |  |                     List<String> projectUnit = new LinkedList<>(); | 
			
		
	
		
			
				
					|  |  |  |                     projectUnit.add(projectId); | 
			
		
	
		
			
				
					|  |  |  |                     agencyProjectsMap.put(agencyId,projectUnit); | 
			
		
	
		
			
				
					|  |  |  |                 }else{ | 
			
		
	
		
			
				
					|  |  |  |                     agencyProjectsMap.get(agencyId).add(projectId); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |                 projects.add(projectId); | 
			
		
	
		
			
				
					|  |  |  |             }); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             //2.结案项目的总耗时
 | 
			
		
	
		
			
				
					|  |  |  |             List<ProjectParticipatedAgencyResultDTO> costTimes = baseDao.selectProjectCostTime(projects); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             Map<String,Integer> projectCostTime = costTimes.stream().collect(Collectors.toMap(ProjectParticipatedAgencyResultDTO::getProjectId,ProjectParticipatedAgencyResultDTO::getCount)); | 
			
		
	
		
			
				
					|  |  |  |             agencyProjectsMap.forEach((k,v) -> { | 
			
		
	
		
			
				
					|  |  |  |                 //k -> agencyId    v  ->   projects
 | 
			
		
	
		
			
				
					|  |  |  |                 int total = NumConstant.ZERO; | 
			
		
	
		
			
				
					|  |  |  |                 if(!CollectionUtils.isEmpty(v)){ | 
			
		
	
		
			
				
					|  |  |  |                     for(String p : v){ | 
			
		
	
		
			
				
					|  |  |  |                         Integer cost = projectCostTime.get(p); | 
			
		
	
		
			
				
					|  |  |  |                         total = total + (null == cost ? NumConstant.ZERO : cost); | 
			
		
	
		
			
				
					|  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |                 //每个机关的项目平均耗时
 | 
			
		
	
		
			
				
					|  |  |  |                     BigDecimal avgCost = new BigDecimal(total).divide(new BigDecimal(v.size()),4, BigDecimal.ROUND_HALF_UP); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |                     //efficiencyMap.put(k,BigDecimal.ONE.divide(avgCost,4, BigDecimal.ROUND_HALF_UP));
 | 
			
		
	
		
			
				
					|  |  |  |                     efficiencyMap.put(k, null == avgCost ? BigDecimal.ZERO : avgCost.setScale(6, BigDecimal.ROUND_HALF_UP)); | 
			
		
	
		
			
				
					|  |  |  |                 }else{ | 
			
		
	
		
			
				
					|  |  |  |                     efficiencyMap.put(k,BigDecimal.ZERO); | 
			
		
	
		
			
				
					|  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |                 BigDecimal avgCost = new BigDecimal(o.getSum()).divide(new BigDecimal(o.getCount()),6, RoundingMode.HALF_UP); | 
			
		
	
		
			
				
					|  |  |  |                 efficiencyMap.put(agencyId, avgCost); | 
			
		
	
		
			
				
					|  |  |  |             }); | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | 
 |