|  | @ -1,5 +1,6 @@ | 
			
		
	
		
		
			
				
					|  |  | package com.epmet.service.impl; |  |  | package com.epmet.service.impl; | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | import cn.hutool.core.collection.CollectionUtil; | 
			
		
	
		
		
			
				
					|  |  | import com.epmet.commons.tools.constant.NumConstant; |  |  | import com.epmet.commons.tools.constant.NumConstant; | 
			
		
	
		
		
			
				
					|  |  | import com.epmet.commons.tools.utils.DateUtils; |  |  | import com.epmet.commons.tools.utils.DateUtils; | 
			
		
	
		
		
			
				
					|  |  | import com.epmet.constant.ProjectConstant; |  |  | import com.epmet.constant.ProjectConstant; | 
			
		
	
	
		
		
			
				
					|  | @ -112,6 +113,8 @@ public class StatsProjectServiceImpl implements StatsProjectService { | 
			
		
	
		
		
			
				
					|  |  |         dimAgencyDTO.setCustomerId(customerId); |  |  |         dimAgencyDTO.setCustomerId(customerId); | 
			
		
	
		
		
			
				
					|  |  |         List<DimAgencyDTO> dimAgencyList = dimAgencyService.getDimAgencyList(dimAgencyDTO); |  |  |         List<DimAgencyDTO> dimAgencyList = dimAgencyService.getDimAgencyList(dimAgencyDTO); | 
			
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |        /* | 
			
		
	
		
		
			
				
					|  |  |  |  |  |        //2022.1.12 客户数据量大 调整计算逻辑,一千条已查询,封装数据,将这部分业务数据查询拿到子方法分页查询处理  sun
 | 
			
		
	
		
		
			
				
					|  |  |         //3:根据客户Id查询项目业务表已结案数据(查询传入日期及之前的数据)
 |  |  |         //3:根据客户Id查询项目业务表已结案数据(查询传入日期及之前的数据)
 | 
			
		
	
		
		
			
				
					|  |  |         ProjectEntity projectEntity = new ProjectEntity(); |  |  |         ProjectEntity projectEntity = new ProjectEntity(); | 
			
		
	
		
		
			
				
					|  |  |         projectEntity.setCustomerId(customerId); |  |  |         projectEntity.setCustomerId(customerId); | 
			
		
	
	
		
		
			
				
					|  | @ -133,13 +136,14 @@ public class StatsProjectServiceImpl implements StatsProjectService { | 
			
		
	
		
		
			
				
					|  |  |             //4-3.遍历删除项目节点表查询的无效数据
 |  |  |             //4-3.遍历删除项目节点表查询的无效数据
 | 
			
		
	
		
		
			
				
					|  |  |             processList.removeIf(next -> map.containsKey(next.getProjectId())); |  |  |             processList.removeIf(next -> map.containsKey(next.getProjectId())); | 
			
		
	
		
		
			
				
					|  |  |         } |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |         //20210721 sun  end
 |  |  |         //20210721 sun  end */
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  | 
 |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |         //5:机关层级日月统计
 |  |  |         //5:机关层级日月统计
 | 
			
		
	
		
		
			
				
					|  |  |         if (null != dimAgencyList && dimAgencyList.size() > NumConstant.ZERO) { |  |  |         if (null != dimAgencyList && dimAgencyList.size() > NumConstant.ZERO) { | 
			
		
	
		
		
			
				
					|  |  |             //5.1:执行机关日数据统计
 |  |  |             //5.1:执行机关日数据统计
 | 
			
		
	
		
		
			
				
					|  |  |             try { |  |  |             try { | 
			
		
	
		
		
			
				
					
					|  |  |                 agencyDateProjectStats(customerId, dimId, date, dimAgencyList, projectList, processList); |  |  |                 //agencyDateProjectStats(customerId, dimId, date, dimAgencyList, projectList, processList);
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |                 agencyDateProjectStats(customerId, dimId, date, dimAgencyList); | 
			
		
	
		
		
			
				
					|  |  |             } catch (Exception e) { |  |  |             } catch (Exception e) { | 
			
		
	
		
		
			
				
					|  |  |                 log.error(String.format(ProjectConstant.STATS_FAILED_PREFIX, "agencyDateProjectStats", customerId, dimId.getDateId()), e); |  |  |                 log.error(String.format(ProjectConstant.STATS_FAILED_PREFIX, "agencyDateProjectStats", customerId, dimId.getDateId()), e); | 
			
		
	
		
		
			
				
					|  |  |             } |  |  |             } | 
			
		
	
	
		
		
			
				
					|  | @ -159,7 +163,238 @@ public class StatsProjectServiceImpl implements StatsProjectService { | 
			
		
	
		
		
			
				
					|  |  |      * @Author sun |  |  |      * @Author sun | 
			
		
	
		
		
			
				
					|  |  |      * @Description 数据-项目-机关日统计 |  |  |      * @Description 数据-项目-机关日统计 | 
			
		
	
		
		
			
				
					|  |  |      **/ |  |  |      **/ | 
			
		
	
		
		
			
				
					
					|  |  |     private String agencyDateProjectStats(String customerId, DimIdGenerator.DimIdBean dimId, Date date, List<DimAgencyDTO> dimAgencyList, List<ProjectEntity> projectList, List<ProjectProcessEntity> processList) { |  |  |     private String agencyDateProjectStats(String customerId, DimIdGenerator.DimIdBean dimId, Date date, List<DimAgencyDTO> dimAgencyList) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					|  |  |  |  |  |         //机关日统计数据【agencyId->FactAgencyProjectDailyEntity】
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         Map<String, FactAgencyProjectDailyEntity> mapList = new HashMap<>(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //计算百分比使用,保留小数点后两位
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         NumberFormat numberFormat = NumberFormat.getInstance(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         numberFormat.setMaximumFractionDigits(6); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //存放已结案项目Id,用于统计已结案中已解决、未解决数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         Map<String, String> closeMap = new HashMap<>(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //存放前一日已结案项目Id,用于统计日增量中已结案项目的已解决、未解决数量
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         Map<String, String> closeDateMap = new HashMap<>(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //20210721 sun 业务逻辑调整,网格删除,组织没有删除情况,相应的组织层级数据统计应舍弃以删除网格数据  start
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //处理逻辑:查询已删除网格下项目Id,将已查询的项目、节点数据中的脏数据剔除【项目库有张表有网格Id,可以查出每个项目所属网格,但是关联该表后sql查询效率极低固舍弃此方案】
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //4-1.查询客户下已删除网格列表下存在的项目Id集合
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         List<String> list = customerGridService.getdelGridProjectIdList(customerId); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //20210721 sun  end
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //一、先分页查询节点数据,封装每个组织的项目总数、已结案总数;日增量中项目总数、已结案总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         ProjectEntity projectEntity = new ProjectEntity(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         projectEntity.setCustomerId(customerId); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         projectEntity.setCreatedTime(date); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         projectEntity.setStatus(ProjectConstant.CLOSED); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         projectEntity.setPageSize(NumConstant.ONE_THOUSAND); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         int pageNo = NumConstant.ONE; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         List<ProjectProcessEntity> processList = new ArrayList<>(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         do { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             //1.一千条一循环查询节点数据,封装每个组织对应数据
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             projectEntity.setPageNo(pageNo); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             processList = projectProcessService.getProcessList(projectEntity); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             pageNo++; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             //遍历删除项目节点表查询的无效数据
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             if (list.size() > NumConstant.ZERO) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 Map<String, String> map = list.stream().collect(Collectors.toMap(String::toString, v -> v, (c1, c2) -> c1)); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 processList.removeIf(next -> map.containsKey(next.getProjectId())); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             //2:遍历机关维度数据,统计每个机关各项指标数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             for (DimAgencyDTO agency : dimAgencyList) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //2-1:存放当前机关及所有下级机关Id
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 Map<String, String> map = new HashMap<>(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 map.put(agency.getId(), agency.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 String subPids = ((null == agency.getPids() || "".equals(agency.getPids())) ? agency.getId() : agency.getPids() + ":" + agency.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 dimAgencyList.forEach(sub -> { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if (sub.getPids().contains(subPids)) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         map.put(sub.getId(), sub.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 }); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //机关下截止当前日期的项目总数、已结案总数、已结案已解决总数、已结案未解决总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 AtomicInteger projectTotal = new AtomicInteger(0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 AtomicInteger closedTotal = new AtomicInteger(0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //日增量中项目总数、已结案总数、已结案已解决总数、已结案未解决总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 AtomicInteger projectIncr = new AtomicInteger(0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 AtomicInteger closedIncr = new AtomicInteger(0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //2-2:遍历进展数据,统计截止当日的项目总量、处理中总量、已结案总量以及日增量中的项目总量、处理中总量、已结案总量
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 processList.forEach(process -> { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     //当前机关及下级
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if (map.containsKey(process.getAgencyId())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         //进展表中是创建项目状态的数据总数即为客户该机关下项目总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         if (ProjectConstant.CREATED.equals(process.getOperation())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             projectTotal.addAndGet(1); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             if (date.equals(process.getCreatedTime())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 //日增量总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 projectIncr.addAndGet(1); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         if (ProjectConstant.CLOSE.equals(process.getOperation())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             //截止当前日期的结案总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             closedTotal.addAndGet(1); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             closeMap.put(process.getProjectId(), process.getProjectId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             if (date.equals(process.getCreatedTime())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 //日增量已结案总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 closedIncr.addAndGet(1); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 closeDateMap.put(process.getProjectId(), process.getProjectId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 }); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //2-3:封装机关日数据对象
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 FactAgencyProjectDailyEntity entity = new FactAgencyProjectDailyEntity(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 if (mapList.containsKey(agency.getId())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity = mapList.get(agency.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setProjectTotal(entity.getProjectTotal() + projectTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setPendingTotal(entity.getPendingTotal() + projectTotal.intValue() - closedTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setClosedTotal(entity.getClosedTotal() + closedTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if (projectTotal.intValue() > NumConstant.ZERO) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         entity.setPendingRatio(new BigDecimal(numberFormat.format((float) entity.getPendingTotal() / (float) projectTotal.intValue()))); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         entity.setClosedRatio(new BigDecimal(numberFormat.format((float) closedTotal.intValue() / (float) projectTotal.intValue()))); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setProjectIncr(entity.getProjectIncr() + projectIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setPendingIncr(entity.getPendingIncr() + projectIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setClosedIncr(entity.getClosedIncr() + closedIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 } else { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setCustomerId(customerId); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setAgencyId(agency.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setParentId(agency.getPid()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setDateId(dimId.getDateId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setWeekId(dimId.getWeekId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setMonthId(dimId.getMonthId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setQuarterId(dimId.getQuarterId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setYearId(dimId.getYearId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setProjectTotal(projectTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setPendingTotal(projectTotal.intValue() - closedTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setClosedTotal(closedTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if (projectTotal.intValue() > NumConstant.ZERO) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         entity.setPendingRatio(new BigDecimal(numberFormat.format((float) entity.getPendingTotal() / (float) projectTotal.intValue()))); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         entity.setClosedRatio(new BigDecimal(numberFormat.format((float) closedTotal.intValue() / (float) projectTotal.intValue()))); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setProjectIncr(projectIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setPendingIncr(projectIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setClosedIncr(closedIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 mapList.put(agency.getId(), entity); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         } while (!CollectionUtil.isEmpty(processList) && processList.size() == NumConstant.ONE_THOUSAND); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //二、再分页查询项目表数据,封装每个组织的已结案已解决总数、已结案未解决总数;日增量中已结案已解决总数、已结案未解决总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         int num = NumConstant.ONE; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         List<ProjectEntity> projectList = new ArrayList<>(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         do { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             //3.一千条一循环查询项目数据,封装每个组织对应数据
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             projectEntity.setPageNo(num); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             projectList = projectService.getProjectList(projectEntity); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             num++; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             //遍历删除项目主表查询的无效数据
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             if (list.size() > NumConstant.ZERO) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 Map<String, String> map = list.stream().collect(Collectors.toMap(String::toString, v -> v, (c1, c2) -> c1)); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 projectList.removeIf(next -> map.containsKey(next.getId())); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             //4.遍历机关维度数据,统计每个机关各项指标数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             for (DimAgencyDTO agency : dimAgencyList) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //4-1:存放当前机关及所有下级机关Id
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 Map<String, String> map = new HashMap<>(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 map.put(agency.getId(), agency.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 String subPids = ((null == agency.getPids() || "".equals(agency.getPids())) ? agency.getId() : agency.getPids() + ":" + agency.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 dimAgencyList.forEach(sub -> { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if (sub.getPids().contains(subPids)) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         map.put(sub.getId(), sub.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 }); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //机关下截止当前日期的已结案已解决总数、已结案未解决总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 AtomicInteger resolvedTotal = new AtomicInteger(0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 AtomicInteger unResolvedTotal = new AtomicInteger(0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //日增量中项目已结案已解决总数、已结案未解决总数
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 AtomicInteger resolvedIncr = new AtomicInteger(0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 AtomicInteger unResolvedIncr = new AtomicInteger(0); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //4-2:遍历项目业务数据,统计截止当日的已结案已解决总量、已结案未解决总量以及日增量中的已结案已解决总量、已结案未解决总量
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 projectList.forEach(project -> { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     //当前机关及下级
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if (map.containsKey(project.getAgencyId())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         if (closeMap.containsKey(project.getId())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             //已结案已解决
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             if (ProjectConstant.RESOLVED.equals(project.getClosedStatus())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 //截止当日的已结案已解决总量
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 resolvedTotal.addAndGet(1); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 if (closeDateMap.containsKey(project.getId())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                     //日增量中的已结案已解决总量
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                     resolvedIncr.addAndGet(1); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             //已结案未解决
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             if (ProjectConstant.UNRESOLVED.equals(project.getClosedStatus())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 //截止当日的已结案未解决总量
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 unResolvedTotal.addAndGet(1); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 if (closeDateMap.containsKey(project.getId())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                     //日增量中的已结案未解决总量
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                     unResolvedIncr.addAndGet(1); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                                 } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 }); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 //1.4:封装机关日数据对象
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 FactAgencyProjectDailyEntity entity = new FactAgencyProjectDailyEntity(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 if (mapList.containsKey(agency.getId())) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity = mapList.get(agency.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setResolvedTotal(entity.getResolvedTotal() + resolvedTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setUnresolvedTotal(entity.getUnresolvedTotal() + unResolvedTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if (entity.getClosedTotal() > NumConstant.ZERO) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         entity.setResolvedRatio(new BigDecimal(numberFormat.format((float) resolvedTotal.intValue() / (float) entity.getClosedTotal()))); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         entity.setUnresolvedRatio(new BigDecimal(numberFormat.format((float) unResolvedTotal.intValue() / (float) entity.getClosedTotal()))); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setResolvedIncr(entity.getResolvedIncr() + resolvedIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setUnresolvedIncr(entity.getUnresolvedIncr() + unResolvedIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 } else { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setCustomerId(customerId); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setAgencyId(agency.getId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setParentId(agency.getPid()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setDateId(dimId.getDateId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setWeekId(dimId.getWeekId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setMonthId(dimId.getMonthId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setQuarterId(dimId.getQuarterId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setYearId(dimId.getYearId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setResolvedTotal(resolvedTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setUnresolvedTotal(unResolvedTotal.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     if (entity.getClosedTotal() > NumConstant.ZERO) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         entity.setResolvedRatio(new BigDecimal(numberFormat.format((float) resolvedTotal.intValue() / (float) entity.getClosedTotal()))); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                         entity.setUnresolvedRatio(new BigDecimal(numberFormat.format((float) unResolvedTotal.intValue() / (float) entity.getClosedTotal()))); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setResolvedIncr(resolvedIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                     entity.setUnresolvedIncr(unResolvedIncr.intValue()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |                 mapList.put(agency.getId(), entity); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             } | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         } while (!CollectionUtil.isEmpty(projectList) && projectList.size() == NumConstant.ONE_THOUSAND); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         List<FactAgencyProjectDailyEntity> projectDateEntityList = new ArrayList<>(mapList.values()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         //2:批量保存数据,先删后增
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         if (null != projectDateEntityList && projectDateEntityList.size() > NumConstant.ZERO) { | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             //2.1:根据客户Id、日维度Id批量物理删除一下可能存在的历史数据
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             FactAgencyProjectDailyEntity delEntity = new FactAgencyProjectDailyEntity(); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             delEntity.setCustomerId(customerId); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             delEntity.setDateId(dimId.getDateId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             log.info("StatsProjectServiceImpl.agencyDateProjectStats-根据客户Id、日维度Id批量删除机关项目日统计表数据,对应客户Id:" + customerId + ",日维度Id:" + dimId.getDateId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             factAgencyProjectDailyService.delDateProject(delEntity); | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             //2.2:批量保存机关日统计数据
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             log.info("StatsProjectServiceImpl.agencyDateProjectStats-批量新增机关项目日统计表数据,对应客户Id:" + customerId + ",日维度Id:" + dimId.getDateId()); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |             factAgencyProjectDailyService.insertBatch(projectDateEntityList); | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |         return null; | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					|  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     /** | 
			
		
	
		
		
			
				
					|  |  |  |  |  |      * 不考虑大数据量问题的方法【暂留】sun | 
			
		
	
		
		
			
				
					|  |  |  |  |  |      */ | 
			
		
	
		
		
			
				
					|  |  |  |  |  |     private String agencyDateProjectStats_old(String customerId, DimIdGenerator.DimIdBean dimId, Date date, List<DimAgencyDTO> dimAgencyList, List<ProjectEntity> projectList, List<ProjectProcessEntity> processList) { | 
			
		
	
		
		
			
				
					|  |  |         //批量机关日统计新增对象
 |  |  |         //批量机关日统计新增对象
 | 
			
		
	
		
		
			
				
					|  |  |         List<FactAgencyProjectDailyEntity> projectDateEntityList = new ArrayList<>(); |  |  |         List<FactAgencyProjectDailyEntity> projectDateEntityList = new ArrayList<>(); | 
			
		
	
		
		
			
				
					|  |  |         //计算百分比使用,保留小数点后两位
 |  |  |         //计算百分比使用,保留小数点后两位
 | 
			
		
	
	
		
		
			
				
					|  | 
 |