package com.gkhy.safePlatform.emergency.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gkhy.safePlatform.account.rpc.apimodel.AccountDepartmentService; import com.gkhy.safePlatform.account.rpc.apimodel.model.resp.DepInfoRPCRespDTO; import com.gkhy.safePlatform.commons.enums.ResultCodes; import com.gkhy.safePlatform.commons.exception.BusinessException; import com.gkhy.safePlatform.commons.query.PageQuery; import com.gkhy.safePlatform.commons.utils.BeanCopyUtils; import com.gkhy.safePlatform.commons.utils.StringUtils; import com.gkhy.safePlatform.commons.vo.ResultVO; import com.gkhy.safePlatform.commons.vo.SearchResultVO; import com.gkhy.safePlatform.emergency.entity.*; import com.gkhy.safePlatform.emergency.enums.DepartmentLevelEnum; import com.gkhy.safePlatform.emergency.enums.EmergencyResultCodes; import com.gkhy.safePlatform.emergency.excepiton.EmergencyException; import com.gkhy.safePlatform.emergency.model.dto.resp.*; import com.gkhy.safePlatform.emergency.query.EmergencyDrillCountQuery; import com.gkhy.safePlatform.emergency.query.EmergencyDrillExecuteCountQuery; import com.gkhy.safePlatform.emergency.query.EmergencyDrillTimeQuery; import com.gkhy.safePlatform.emergency.query.EmergencySuppliesCountQuery; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteNumRPCReq; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.req.EmergencyExecuteTimeRPCReq; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.EmergencyExecuteNumDetailRPCResp; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.EmergencyExecuteNumRPCResp; import com.gkhy.safePlatform.emergency.rpc.api.model.dto.resp.EmergencyExecuteTimeRPCResp; import com.gkhy.safePlatform.emergency.service.EmergencyCountService; import com.gkhy.safePlatform.emergency.service.baseService.EmergencyDrillExecuteInfoService; import com.gkhy.safePlatform.emergency.service.baseService.EmergencySuppliesInfoService; import com.gkhy.safePlatform.emergency.utils.TimeUtils; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Service("emergencyCountService") public class EmergencyCountServiceImpl implements EmergencyCountService { @Autowired private EmergencyDrillExecuteInfoService emergencyDrillExecuteInfoService; @DubboReference(check = false) private AccountDepartmentService accountDepartmentService; @Autowired private EmergencySuppliesInfoService emergencySuppliesInfoService; @Override public SearchResultVO getTimeByDeptId(EmergencyExecuteTimeRPCReq query) { EmergencyExecuteTimeRPCResp emergencyExecuteTimeRPCResp = new EmergencyExecuteTimeRPCResp(); // 获取id对应的部门 DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId()); emergencyExecuteTimeRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); emergencyExecuteTimeRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); emergencyExecuteTimeRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); emergencyExecuteTimeRPCResp.setParentDepId(depInfoRPCRespDTO.getParentDepId()); getSingleTimeData(emergencyExecuteTimeRPCResp); SearchResultVO searchResultVO = new SearchResultVO<>( false, null, null, null, null, emergencyExecuteTimeRPCResp, ResultCodes.OK ); searchResultVO.setCount(1); return searchResultVO; } @Override public SearchResultVO> getTimeByDeptIds(EmergencyExecuteTimeRPCReq query) { List list = new ArrayList<>(); // 获取该部门及其子部门的所有信息 List depList = getDepListInfoByDepId(query.getDeptId()); for (DepInfoRPCRespDTO depInfoRPCRespDTO : depList){ EmergencyExecuteTimeRPCResp emergencyExecuteTimeRPCResp = new EmergencyExecuteTimeRPCResp(); emergencyExecuteTimeRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); emergencyExecuteTimeRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); emergencyExecuteTimeRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); emergencyExecuteTimeRPCResp.setParentDepId(depInfoRPCRespDTO.getParentDepId()); getSingleTimeData(emergencyExecuteTimeRPCResp); list.add(emergencyExecuteTimeRPCResp); } SearchResultVO searchResultVO = new SearchResultVO<>( false, null, null, null, null, list, ResultCodes.OK ); if (!list.isEmpty()){ searchResultVO.setCount(list.size()); } return searchResultVO; } private void getSingleTimeData(EmergencyExecuteTimeRPCResp emergencyExecuteTimeRPCResp){ // 查询该部门最后一次演练时间 String lastTime = emergencyDrillExecuteInfoService.selectEmergencyDrillExecuteIntervalTimeByDeptId(emergencyExecuteTimeRPCResp.getDeptId()); if (StringUtils.isNotBlank(lastTime)){ emergencyExecuteTimeRPCResp.setLastTime(lastTime); // emergencyExecuteTimeRPCResp.setDays(TimeUtils.differentDays(lastTime, TimeUtils.formatDate(new Date()))); } } @Override public SearchResultVO getNumByDeptId(EmergencyExecuteNumRPCReq query) { if (query.getYear()==null){ throw new EmergencyException(EmergencyResultCodes.YEAR_NULL); } EmergencyExecuteNumRPCResp emergencyExecuteNumRPCResp = new EmergencyExecuteNumRPCResp(); // 获取id对应的部门 DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId()); emergencyExecuteNumRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); emergencyExecuteNumRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); emergencyExecuteNumRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); emergencyExecuteNumRPCResp.setParentDepId(depInfoRPCRespDTO.getParentDepId()); getSingleNumData(emergencyExecuteNumRPCResp,query); SearchResultVO searchResultVO = new SearchResultVO<>( false, null, null, null, null, emergencyExecuteNumRPCResp, ResultCodes.OK ); searchResultVO.setCount(1); return searchResultVO; } @Override public SearchResultVO> getNumByDeptIds(EmergencyExecuteNumRPCReq query) { List list = new ArrayList<>(); // 获取该部门及其子部门的所有信息 List deptList = getDepListInfoByDepId(query.getDeptId()); for (DepInfoRPCRespDTO depInfoRPCRespDTO : deptList){ EmergencyExecuteNumRPCResp emergencyExecuteNumRPCResp = new EmergencyExecuteNumRPCResp(); emergencyExecuteNumRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); emergencyExecuteNumRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); emergencyExecuteNumRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); emergencyExecuteNumRPCResp.setParentDepId(depInfoRPCRespDTO.getParentDepId()); getSingleNumData(emergencyExecuteNumRPCResp,query); list.add(emergencyExecuteNumRPCResp); } SearchResultVO searchResultVO = new SearchResultVO<>( false, null, null, null, null, list, ResultCodes.OK ); if (!list.isEmpty()){ searchResultVO.setCount(list.size()); } return searchResultVO; } private void getSingleNumData(EmergencyExecuteNumRPCResp emergencyExecuteNumRPCResp,EmergencyExecuteNumRPCReq query){ List deptIds = new ArrayList<>(); deptIds.add(emergencyExecuteNumRPCResp.getDeptId()); List> mapList = new ArrayList<>(); List emergencyDrillExecuteCountDataList = new ArrayList<>(); String startTime ; String endTime ; Integer distType; if (query.getMonth()==null){ distType=1; // 查该年度12个月份的 startTime = TimeUtils.getYearFirst(query.getYear()); endTime = TimeUtils.getYearLast(query.getYear()); emergencyDrillExecuteCountDataList= emergencyDrillExecuteInfoService.selectByMonthAndDeptForIntegerMonth(startTime, endTime, deptIds); }else{ // 查该年度指定月份的 distType=2; startTime = TimeUtils.getMonthFirst(query.getYear(),query.getMonth()); endTime = TimeUtils.getMonthLast(query.getYear(),query.getMonth()); emergencyDrillExecuteCountDataList= emergencyDrillExecuteInfoService.selectByDayAndDept(startTime, endTime, deptIds); } if (!emergencyDrillExecuteCountDataList.isEmpty()){ List detailList =new ArrayList<>(); for (EmergencyDrillExecuteCountRPC emergencyDrillExecuteCountRPC : emergencyDrillExecuteCountDataList){ EmergencyExecuteNumDetailRPCResp emergencyExecuteNumDetailRPCResp = new EmergencyExecuteNumDetailRPCResp(); emergencyExecuteNumDetailRPCResp.setTime(emergencyDrillExecuteCountRPC.getName()); emergencyExecuteNumDetailRPCResp.setDistType(distType); emergencyExecuteNumDetailRPCResp.setYear(query.getYear()); if (distType==1){ emergencyExecuteNumDetailRPCResp.setMonth(emergencyDrillExecuteCountRPC.getName()); } if (distType==2){ emergencyExecuteNumDetailRPCResp.setMonth(query.getMonth()); emergencyExecuteNumDetailRPCResp.setDay(emergencyDrillExecuteCountRPC.getName()); } emergencyExecuteNumDetailRPCResp.setNum(emergencyDrillExecuteCountRPC.getNum()); detailList.add(emergencyExecuteNumDetailRPCResp); } emergencyExecuteNumRPCResp.setDetail(detailList); } } private DepInfoRPCRespDTO getDepInfoByDepId(Long deptId) { DepInfoRPCRespDTO dep = new DepInfoRPCRespDTO(); ResultVO rpcResult = accountDepartmentService.getDepInfoByDepId(deptId); if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) { if (rpcResult.getData() != null) { dep = (DepInfoRPCRespDTO) rpcResult.getData(); } } else { throw new BusinessException(ResultCodes.CLIENT_DEP_NOT_EXIST); } return dep; } private List getDepListInfoByDepId(Long deptId){ List depList = new ArrayList<>(); ResultVO> rpcResult = accountDepartmentService.listDepAndSubDepByDepId(deptId); if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) { if (rpcResult.getData() != null) { depList = (List)rpcResult.getData(); } } else { throw new BusinessException(ResultCodes.CLIENT_DEP_NOT_EXIST); } return depList; } @Override public ResultVO countEmergencyDrillExecute(EmergencyDrillExecuteCountQuery query) { EmergencyDrillExecuteCountRespDTO emergencyDrillExecuteCountRespDTO = new EmergencyDrillExecuteCountRespDTO(); // 根据最新的应急演练实施的创建时间与当前时间 获取间隔天数 Integer days = emergencyDrillExecuteInfoService.selectEmergencyDrillExecuteIntervalTime(); emergencyDrillExecuteCountRespDTO.setDays(days); // 根据时间类型(年/月),部门id 获取统计结果 List list = new ArrayList<>(); // 获取部门id集合 List deptIds = new ArrayList<>(); deptIds.add(query.getDeptId()); /* ResultVO> rpcResult = accountDepartmentService.listDepAndSubDepIds(query.getDeptId()); if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) { if (rpcResult.getData() != null) { deptIds = (List) rpcResult.getData(); } } else { throw new BusinessException(ResultCodes.CLIENT_DEP_NOT_EXIST); }*/ // 获取时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); Date date = new Date(); int year = Integer.parseInt(sdf.format(date)); if (query.getType() == 1) { // 月 String startTime = TimeUtils.getYearFirst(year); String endTime = TimeUtils.getYearLast(year); list = emergencyDrillExecuteInfoService.selectByMonthAndDept(startTime, endTime, deptIds); } if (query.getType() == 2) { // 年 String startTime = TimeUtils.getYearFirst(year - 10); String endTime = TimeUtils.getYearLast(year); list = emergencyDrillExecuteInfoService.selectByYearAndDept(startTime, endTime, deptIds); } if (!CollectionUtils.isEmpty(list)) { List dataList = BeanCopyUtils.copyBeanList(list, EmergencyDrillExecuteCountDataRespDTO.class); emergencyDrillExecuteCountRespDTO.setDataList(dataList); } else { emergencyDrillExecuteCountRespDTO.setDataList(new ArrayList<>()); } return new ResultVO<>(ResultCodes.OK, emergencyDrillExecuteCountRespDTO); } @Override public ResultVO> countEmergencySupplies(PageQuery pageQuery) { List respList = new ArrayList<>(); Long pageIndex = pageQuery.getPageIndex(); Long pageSize = pageQuery.getPageSize(); Page page = new Page<>(pageIndex, pageSize); List emergencySuppliesInfoDetailDOList = emergencySuppliesInfoService.countEmergencySupplies(page, pageQuery.getSearchParams()); if (!CollectionUtils.isEmpty(emergencySuppliesInfoDetailDOList)) { for (EmergencySuppliesInfoDetailDO emergencySuppliesInfoDetailDO : emergencySuppliesInfoDetailDOList) { EmergencySuppliesCountRespDTO emergencySuppliesCountRespDTO = new EmergencySuppliesCountRespDTO(); // 名称+数量 emergencySuppliesCountRespDTO.setName(emergencySuppliesInfoDetailDO.getName()); emergencySuppliesCountRespDTO.setTotalNum(emergencySuppliesInfoDetailDO.getCount()); // // 保质期内数量 // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化一下 // Date produceDate = emergencySuppliesInfoDetailDO.getProductionDate(); // Integer usePeriod = emergencySuppliesInfoDetailDO.getUsePeriod(); // // String[] arr = sdf.format(produceDate).split("-"); // // Calendar calendar = Calendar.getInstance();//获取对日期操作的类对象 // calendar.clear(); // calendar.set(Calendar.YEAR, Integer.parseInt(arr[0])); // calendar.set(Calendar.MONTH, Integer.parseInt(arr[1])); // calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(arr[2])); // // calendar.set(Calendar.DAY_OF_YEAR,calendar.get(Calendar.DAY_OF_YEAR) +usePeriod); // // Date qualityD = calendar.getTime(); // String time= sdf.format(calendar.getTime()); // System.out.println(time); respList.add(emergencySuppliesCountRespDTO); } } return new SearchResultVO<>( true, pageIndex, pageSize, page.getPages(), page.getTotal(), respList, ResultCodes.OK ); } /**********************************重构****************************************************/ /** * 查询部门最后一次演练时间 * @param deptId * @return */ @Override public EmergencyExecuteTimeRespDTO getLastTimeByDeptId(Long deptId) { if(null == deptId){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL); } //通过RPC获取部门相关数据 DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(deptId); // 查询该部门最后一次演练时间 String lastTime = emergencyDrillExecuteInfoService.getLastTimeByDeptId(deptId); //填充数据 EmergencyExecuteTimeRespDTO respDTO = new EmergencyExecuteTimeRespDTO(); respDTO.setDepId(depInfoRPCRespDTO.getDepId()); respDTO.setDepLevel(depInfoRPCRespDTO.getDepLevel()); respDTO.setLastPricticeTime(StringUtils.isBlank(lastTime) == true ? "" : lastTime); return respDTO; } /** * 查询部门及其子级部门最后一次演练时间 * 后面按部门等级划分 */ public List getLastTimeByDeptIds(Long deptId){ if(null == deptId){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL); } //通过RPC获取部门相关数据 List depInfoList = getDepListInfoByDepId(deptId); //过滤获取部门id List deptIdList = depInfoList .stream() .map(dep -> dep.getDepId()) .collect(Collectors.toList()); // 查询该部门ids最后一次演练时间 List executeLastTimeDOS = emergencyDrillExecuteInfoService.getLastTimeByDeptIds(deptIdList); List depLevelRespDTOList = new ArrayList<>(); //循环部门等级 for(DepartmentLevelEnum departmentLevelEnum : DepartmentLevelEnum.values()){ //数据填充 EmergencyExecuteDepLevelLasTimeRespDTO depLevelRespDTO = new EmergencyExecuteDepLevelLasTimeRespDTO(); depLevelRespDTO.setDepLevel(departmentLevelEnum.getCode()); //该等级下的部门数据 List selectDepList = depInfoList .stream() .filter(dep -> dep.getDepLevel().equals(departmentLevelEnum.getCode())) .collect(Collectors.toList()); //获取该部门等级下部门演练数据 List selectExeList = executeLastTimeDOS .stream() .filter(exe -> selectDepList.stream().map(dep -> dep.getDepId()).collect(Collectors.toList()).contains(exe.getDeptId())) .collect(Collectors.toList()); //获取该等级最后一次演练时间 String lastTime = getLastPracticeTime(selectExeList); depLevelRespDTO.setLastPricateTime(lastTime); depLevelRespDTOList.add(depLevelRespDTO); } return depLevelRespDTOList; } //获取最大日期 private String getLastPracticeTime(List selectExeList){ String lastTime = ""; if(selectExeList.size()>0){ SimpleDateFormat sdft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Collections.sort(selectExeList, new Comparator(){ @Override public int compare(EmergencyDrillExecuteLastTimeDO timeDO01, EmergencyDrillExecuteLastTimeDO timeDO02) { int flag = -1; try { Date date1 = sdft.parse(timeDO01.getLastTime()); Date date2 = sdft.parse(timeDO02.getLastTime()); if(date1.before(date2)){ flag=1; } } catch (ParseException e) { e.printStackTrace(); } return flag; } //compare }); EmergencyDrillExecuteLastTimeDO lastTimeDO = selectExeList.get(0); lastTime = lastTimeDO.getLastTime(); } return lastTime; } @Override public EmergencyExecuteLastTimeRespDTO getLastPracticeTimeByDeptIdAndTime(EmergencyDrillTimeQuery query) { if(null == query.getDeptId()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"部门id不可为空"); } if(null == query.getYear()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"年份不可为空"); } //通过RPC获取部门相关数据 DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId()); //开始时间结束时间 String startTime; String endTime; if(null == query.getMonth()){//年 startTime = TimeUtils.getYearFirst(query.getYear()); endTime = TimeUtils.getYearLast(query.getYear()); }else{//月 startTime = TimeUtils.getMonthFirst(query.getYear(),query.getMonth()); endTime = TimeUtils.getMonthLast(query.getYear(),query.getMonth()); } // 查询该部门最后一次演练时间 String lastTime = emergencyDrillExecuteInfoService.getLastTimeByDeptIdAndTime(query.getDeptId(), startTime,endTime); //填充数据 EmergencyExecuteLastTimeRespDTO respDTO = new EmergencyExecuteLastTimeRespDTO(); respDTO.setDepId(depInfoRPCRespDTO.getDepId()); respDTO.setDepLevel(depInfoRPCRespDTO.getDepLevel()); respDTO.setYear(query.getYear()); respDTO.setMonth(query.getMonth()); respDTO.setLastPricticeTime(StringUtils.isBlank(lastTime) == true ? "" : lastTime); return respDTO; } @Override public List getLastPracticeTimeByDeptIdsAndTime(EmergencyDrillTimeQuery query) { if(null == query.getDeptId()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"部门id不可为空"); } if(null == query.getYear()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"年份不可为空"); } //通过RPC获取部门相关数据 List depInfoList = getDepListInfoByDepId(query.getDeptId()); //过滤获取部门id List deptIdList = depInfoList .stream() .map(dep -> dep.getDepId()) .collect(Collectors.toList()); //开始时间结束时间 String startTime; String endTime; if(null == query.getMonth()){//年 startTime = TimeUtils.getYearFirst(query.getYear()); endTime = TimeUtils.getYearLast(query.getYear()); }else{//月 startTime = TimeUtils.getMonthFirst(query.getYear(),query.getMonth()); endTime = TimeUtils.getMonthLast(query.getYear(),query.getMonth()); } // 查询该部门ids最后一次演练时间 List executeLastTimeDOS = emergencyDrillExecuteInfoService.getLastTimeByDeptIdsAndTime(deptIdList,startTime,endTime); List depLevelRespDTOList = new ArrayList<>(); //循环部门等级 for(DepartmentLevelEnum departmentLevelEnum : DepartmentLevelEnum.values()){ //数据填充 EmergencyExecuteDepLevelLasTimeRespDTO depLevelRespDTO = new EmergencyExecuteDepLevelLasTimeRespDTO(); depLevelRespDTO.setDepLevel(departmentLevelEnum.getCode()); depLevelRespDTO.setYear(query.getYear()); depLevelRespDTO.setMonth(query.getMonth()); //该等级下的部门数据 List selectDepList = depInfoList .stream() .filter(dep -> dep.getDepLevel().equals(departmentLevelEnum.getCode())) .collect(Collectors.toList()); //获取该部门等级下部门演练数据 List selectExeList = executeLastTimeDOS .stream() .filter(exe -> selectDepList.stream().map(dep -> dep.getDepId()).collect(Collectors.toList()).contains(exe.getDeptId())) .collect(Collectors.toList()); //获取该等级最后一次演练时间 String lastTime = getLastPracticeTime(selectExeList); depLevelRespDTO.setLastPricateTime(lastTime); depLevelRespDTOList.add(depLevelRespDTO); } return depLevelRespDTOList; } /** * 根据部门id和指定年份 统计演练数据 * */ public StatisticsDepLevelYearExecuteRespDTO getCountByDeptIdAndYear(EmergencyDrillCountQuery query){ if(null == query.getDeptId()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"部门id不可为空"); } if(null == query.getYear()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"年份不可为空"); } //通过RPC获取部门相关数据 DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId()); //填充数据 StatisticsDepLevelYearExecuteRespDTO respDTO = new StatisticsDepLevelYearExecuteRespDTO(); respDTO.setDepLevel(depInfoRPCRespDTO.getDepLevel()); respDTO.setYear(query.getYear()); //获取指定部门指定时间下的应急数据 List executeCountDOList = emergencyDrillExecuteInfoService.getCountByDeptIdAndYear(query.getYear(),query.getDeptId()); //声明月份 int allMonth = 12; //判断是否是当前年分 // if(query.getYear().equals(TimeUtils.getCurrentYear())){ // allMonth = TimeUtils.getCurrentMonth(); // } //总数量 int totalCount = 0; List executeCountRespDTOList = new ArrayList<>(); //循环月份 for(int i = 1;i <= allMonth; i++){ StatisticsMonthExecuteCountRespDTO executeCountRespDTO = new StatisticsMonthExecuteCountRespDTO(); executeCountRespDTO.setYear(query.getYear()); executeCountRespDTO.setMonth(i); //获取当月数据 int month = i; List selectMonthList = executeCountDOList .stream() .filter(ac -> ac.getMonth().equals(month)) .collect(Collectors.toList()); if(selectMonthList.size()>0){ executeCountRespDTO.setCount(selectMonthList.get(0).getCount()); totalCount += selectMonthList.get(0).getCount(); }else{ executeCountRespDTO.setCount(0); } executeCountRespDTOList.add(executeCountRespDTO); } respDTO.setYearTotalCount(totalCount); respDTO.setMonthExecuteCountList(executeCountRespDTOList); return respDTO; } /** * 根据指定部门、月份 统计演练数据 * @param query * @return */ @Override public StatisticsDepLevelMonthEexcuteRespDTO getCountByDeptIdAndMonth(EmergencyDrillCountQuery query) { if(null == query.getDeptId()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"部门id不可为空"); } if(null == query.getYear()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"年份不可为空"); } if(null == query.getMonth()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"月份不可为空"); } //通过RPC获取部门相关数据 DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId()); //获取指定月份的演练数据 EmergencyExecuteCountDO executeCountDO = emergencyDrillExecuteInfoService.getCountByDeptIdAndMonth(query.getYear(),query.getMonth(), query.getDeptId()); //填充数据 StatisticsDepLevelMonthEexcuteRespDTO respDTO = new StatisticsDepLevelMonthEexcuteRespDTO(); respDTO.setDepLevel(depInfoRPCRespDTO.getDepLevel()); respDTO.setMonth(query.getMonth()); respDTO.setExecuteCount(executeCountDO.getCount()); return respDTO; } /** * 根据部门id及其子级部门和指定年份 统计演练数据 * */ public List getCountByDeptIdsAndYear(EmergencyDrillCountQuery query){ if(null == query.getDeptId()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"部门id不可为空"); } if(null == query.getYear()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"年份不可为空"); } //通过RPC获取部门相关数据 List depInfoList = getDepListInfoByDepId(query.getDeptId()); //过滤获取部门id List deptIds = depInfoList .stream() .map(dep -> dep.getDepId()) .collect(Collectors.toList()); //开始时间结束时间 String startTime = TimeUtils.getYearFirst(query.getYear()); String endTime = TimeUtils.getYearLast(query.getYear()); //获取指定部门指定时间下的应急数据 List executeCountDOList = emergencyDrillExecuteInfoService.getCountByDeptIdsAndTime(startTime,endTime,deptIds); List respDTOList = new ArrayList<>(); //循环部门等级 for(DepartmentLevelEnum departmentLevelEnum : DepartmentLevelEnum.values()){ //填充部门级别数据 StatisticsDepLevelYearExecuteRespDTO respDTO = new StatisticsDepLevelYearExecuteRespDTO(); respDTO.setDepLevel(departmentLevelEnum.getCode()); respDTO.setYear(query.getYear()); //获取该部门级别下面的相关部门 List selectDepList = depInfoList .stream() .filter(dep -> dep.getDepLevel().equals(departmentLevelEnum.getCode())) .collect(Collectors.toList()); //获取该部门级别下相关部门演练数据 List selectExeList = executeCountDOList .stream() .filter(exe -> selectDepList.stream().map(dep -> dep.getDepId()).collect(Collectors.toList()).contains(exe.getDeptId())) .collect(Collectors.toList()); List monthExecuteCountList = new ArrayList<>(); //声明月份 int allMonth = 12; //声明一年总数量 int yearTotalCount =0; //判断是否是当前年分 // if(query.getYear().equals(TimeUtils.getCurrentYear())){ // allMonth = TimeUtils.getCurrentMonth(); // } //12个月份 for(int i = 1;i <= allMonth;i++){ //数量 int count = 0; //循环 for(EmergencyExecuteCountDO executeCountDO : selectExeList){ if(executeCountDO.getMonth() == i){ count += executeCountDO.getCount(); yearTotalCount += executeCountDO.getCount(); } } StatisticsMonthExecuteCountRespDTO executeCountRespDTO = new StatisticsMonthExecuteCountRespDTO(); executeCountRespDTO.setYear(query.getYear()); executeCountRespDTO.setMonth(i); executeCountRespDTO.setCount(count); monthExecuteCountList.add(executeCountRespDTO); } respDTO.setMonthExecuteCountList(monthExecuteCountList); respDTO.setYearTotalCount(yearTotalCount); respDTOList.add(respDTO); } return respDTOList; } /** * 根据部门id及其子级部门和指定者月份 统计演练数据 * */ @Override public List getCountByDeptIdsAndMonth(EmergencyDrillCountQuery query) { if(null == query.getDeptId()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"部门id不可为空"); } if(null == query.getYear()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"年份不可为空"); } if(null == query.getMonth()){ throw new EmergencyException(EmergencyResultCodes.SUPPLIES_PARAM_NULL,"月份不可为空"); } //通过RPC获取部门相关数据 List depInfoList = getDepListInfoByDepId(query.getDeptId()); //过滤获取部门id List deptIds = depInfoList .stream() .map(dep -> dep.getDepId()) .collect(Collectors.toList()); //开始时间结束时间 String startTime = TimeUtils.getMonthFirst(query.getYear(),query.getMonth()); String endTime = TimeUtils.getMonthLast(query.getYear(),query.getMonth()); //获取演练数据 List executeCountDOList = emergencyDrillExecuteInfoService.getCountByDeptIdsAndTime(startTime,endTime,deptIds); List respDTOList = new ArrayList<>(); //循环部门等级 for(DepartmentLevelEnum departmentLevelEnum : DepartmentLevelEnum.values()) { //填充部门级别数据 StatisticsDepLevelMonthEexcuteRespDTO respDTO = new StatisticsDepLevelMonthEexcuteRespDTO(); respDTO.setDepLevel(departmentLevelEnum.getCode()); respDTO.setMonth(query.getMonth()); //获取该部门级别下面的相关部门 List selectDepList = depInfoList .stream() .filter(dep -> dep.getDepLevel().equals(departmentLevelEnum.getCode())) .collect(Collectors.toList()); //获取该部门级别下相关部门演练数据 List selectExeList = executeCountDOList .stream() .filter(exe -> selectDepList.stream().map(dep -> dep.getDepId()).collect(Collectors.toList()).contains(exe.getDeptId())) .collect(Collectors.toList()); //数量 int count = 0; //循环 for(EmergencyExecuteCountDO executeCountDO : selectExeList){ count += executeCountDO.getCount(); } respDTO.setExecuteCount(count); respDTOList.add(respDTO); } return respDTOList; } }