package com.gkhy.safePlatform.incidentManage.service.impl; 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.utils.BeanCopyUtils; import com.gkhy.safePlatform.commons.vo.ResultVO; import com.gkhy.safePlatform.commons.vo.SearchResultVO; import com.gkhy.safePlatform.incidentManage.entity.*; import com.gkhy.safePlatform.incidentManage.enums.AccidentResultCodes; import com.gkhy.safePlatform.incidentManage.exception.AccidentException; import com.gkhy.safePlatform.incidentManage.model.dto.resp.*; import com.gkhy.safePlatform.incidentManage.query.AccidentReportCountQuery; import com.gkhy.safePlatform.incidentManage.query.db.AccidentReportCountDBQuery; import com.gkhy.safePlatform.incidentManage.rpc.api.model.dto.req.IncidentManageCountRPCReq; import com.gkhy.safePlatform.incidentManage.rpc.api.model.dto.resp.IncidentManageCountDetailRPCResp; import com.gkhy.safePlatform.incidentManage.rpc.api.model.dto.resp.IncidentManageCountRPCResp; import com.gkhy.safePlatform.incidentManage.rpc.api.model.dto.resp.IncidentManageRPCResp; import com.gkhy.safePlatform.incidentManage.service.AccidentCountService; import com.gkhy.safePlatform.incidentManage.service.baseService.AccidentReportInfoService; import com.gkhy.safePlatform.incidentManage.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 javax.print.DocFlavor; import java.util.*; import java.util.stream.Collectors; @Service("accidentCountService") public class AccidentCountServiceImpl implements AccidentCountService { @Autowired private AccidentReportInfoService accidentReportInfoService; @DubboReference(check = false) private AccountDepartmentService accountDepartmentService; @Override public SearchResultVO getCountByDeptId(IncidentManageCountRPCReq query) { if (query.getYear() == null) { throw new AccidentException(AccidentResultCodes.YEAR_NULL); } IncidentManageRPCResp incidentManageCountRPCResp = new IncidentManageRPCResp(); // 获取id对应的部门 DepInfoRPCRespDTO depInfoRPCRespDTO = getDepInfoByDepId(query.getDeptId()); incidentManageCountRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); incidentManageCountRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); incidentManageCountRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); incidentManageCountRPCResp.setParentDepId(depInfoRPCRespDTO.getParentDepId()); getSingleTimeData(incidentManageCountRPCResp, query); SearchResultVO searchResultVO = new SearchResultVO<>( false, null, null, null, null, incidentManageCountRPCResp, ResultCodes.OK ); searchResultVO.setCount(1); return searchResultVO; } @Override public SearchResultVO> getCountByDeptIds(IncidentManageCountRPCReq query) { if (query.getYear() == null) { throw new AccidentException(AccidentResultCodes.YEAR_NULL); } List list = new ArrayList<>(); // 获取该部门及其子部门的所有信息 List deptList = getDepListInfoByDepId(query.getDeptId()); for (DepInfoRPCRespDTO depInfoRPCRespDTO : deptList) { IncidentManageRPCResp incidentManageCountRPCResp = new IncidentManageRPCResp(); incidentManageCountRPCResp.setDeptId(depInfoRPCRespDTO.getDepId()); incidentManageCountRPCResp.setDeptName(depInfoRPCRespDTO.getDepName()); incidentManageCountRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel()); incidentManageCountRPCResp.setParentDepId(depInfoRPCRespDTO.getParentDepId()); getSingleTimeData(incidentManageCountRPCResp, query); list.add(incidentManageCountRPCResp); } SearchResultVO searchResultVO = new SearchResultVO<>( false, null, null, null, null, list, ResultCodes.OK ); if (!list.isEmpty()){ searchResultVO.setCount(list.size()); } return searchResultVO; } private void getSingleTimeData(IncidentManageRPCResp incidentManageRPCResp, IncidentManageCountRPCReq query) { List resList = new ArrayList<>(); List accidentReportCountRPCList = new ArrayList<>(); Long deptId = incidentManageRPCResp.getDeptId(); String startTime; String endTime; Integer distType; if (query.getMonth() == null) { distType=1; // 查该年度12个月份的 startTime = TimeUtils.getYearFirst(query.getYear()); endTime = TimeUtils.getYearLast(query.getYear()); accidentReportCountRPCList= accidentReportInfoService.getCountForRPCByDeptIdAndMonth(startTime, endTime, deptId); } else { distType=2; // 查该年度指定月份的 startTime = TimeUtils.getMonthFirst(query.getYear(), query.getMonth()); endTime = TimeUtils.getMonthLast(query.getYear(), query.getMonth()); accidentReportCountRPCList = accidentReportInfoService.getCountForRPCByDeptIdAndDay(startTime, endTime, deptId); } // 拼装第一层时间(去重) Set timeSET = accidentReportCountRPCList.stream().map(AccidentReportCountRPC::getTime).collect(Collectors.toSet()); // 拼装第一层时间(排序) List timeList = timeSET.stream().sorted().collect(Collectors.toList()); if (!CollectionUtils.isEmpty(timeSET)) { for (Integer integer : timeSET) { IncidentManageCountRPCResp incidentManageCountRPCResp = new IncidentManageCountRPCResp(); incidentManageCountRPCResp.setTime(integer); incidentManageCountRPCResp.setYear(query.getYear()); incidentManageCountRPCResp.setDistType(distType); if (distType==1){ incidentManageCountRPCResp.setMonth(integer); } if (distType==2){ incidentManageCountRPCResp.setMonth(query.getMonth()); incidentManageCountRPCResp.setDay(integer); } incidentManageCountRPCResp.setDetail(new ArrayList<>()); resList.add(incidentManageCountRPCResp); } } // 拼装第二层事故详情 if (!CollectionUtils.isEmpty(timeList)) { for (AccidentReportCountRPC accidentReportCountRPC : accidentReportCountRPCList) { for (IncidentManageCountRPCResp incidentManageCountRPCResp : resList) { if (accidentReportCountRPC.getTime().equals(incidentManageCountRPCResp.getTime())) { IncidentManageCountDetailRPCResp incidentManageCountDetailRPCResp = new IncidentManageCountDetailRPCResp(); incidentManageCountDetailRPCResp.setLevel(accidentReportCountRPC.getLevel()); incidentManageCountDetailRPCResp.setNum(accidentReportCountRPC.getNum()); incidentManageCountDetailRPCResp.setMinorInjuryNum(accidentReportCountRPC.getMinorInjuryNum()); incidentManageCountDetailRPCResp.setSeriousInjuryNum(accidentReportCountRPC.getSeriousInjuryNum()); incidentManageCountDetailRPCResp.setDeathNum(accidentReportCountRPC.getDeathNum()); incidentManageCountDetailRPCResp.setEconomicLoss(accidentReportCountRPC.getEconomicLoss()); incidentManageCountRPCResp.getDetail().add(incidentManageCountDetailRPCResp); } } } } incidentManageRPCResp.setData(resList); } 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> countAccidentReport(AccidentReportCountQuery query) { List list = new ArrayList<>(); AccidentReportCountDBQuery dbQuery = new AccidentReportCountDBQuery(); if (query.getType() == 1) { // 月 int year = query.getYear(); int month; if (query.getMonth() == 0) { Calendar date = Calendar.getInstance(); month = date.get(Calendar.MONTH) + 1; } else { month = query.getMonth(); } dbQuery.setStartTime(TimeUtils.getMonthFirst(year, month)); dbQuery.setEndTime(TimeUtils.getMonthLast(year, month)); list = accidentReportInfoService.selectByTimeAndType(dbQuery); } if (query.getType() == 2) { // 年 int year = query.getYear(); dbQuery.setStartTime(TimeUtils.getYearFirst(year)); dbQuery.setEndTime(TimeUtils.getYearLast(year)); list = accidentReportInfoService.selectByTimeAndType(dbQuery); } List accidentReportCountRespDTOList = BeanCopyUtils.copyBeanList(list, AccidentReportCountRespDTO.class); return new ResultVO<>(ResultCodes.OK, accidentReportCountRespDTOList); } }