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<IncidentManageRPCResp> 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());
|
|
getSingleTimeData(incidentManageCountRPCResp, query);
|
|
SearchResultVO searchResultVO = new SearchResultVO<>(
|
false,
|
null,
|
null,
|
null,
|
null,
|
incidentManageCountRPCResp,
|
ResultCodes.OK
|
);
|
searchResultVO.setCount(1);
|
return searchResultVO;
|
}
|
|
@Override
|
public SearchResultVO<List<IncidentManageRPCResp>> getCountByDeptIds(IncidentManageCountRPCReq query) {
|
if (query.getYear() == null) {
|
throw new AccidentException(AccidentResultCodes.YEAR_NULL);
|
}
|
List<IncidentManageRPCResp> list = new ArrayList<>();
|
|
// 获取该部门及其子部门的所有信息
|
List<DepInfoRPCRespDTO> deptList = getDepListInfoByDepId(query.getDeptId());
|
|
for (DepInfoRPCRespDTO depInfoRPCRespDTO : deptList) {
|
IncidentManageRPCResp incidentManageCountRPCResp = new IncidentManageRPCResp();
|
incidentManageCountRPCResp.setDeptId(depInfoRPCRespDTO.getDepId());
|
incidentManageCountRPCResp.setDeptName(depInfoRPCRespDTO.getDepName());
|
incidentManageCountRPCResp.setDeptLevel(depInfoRPCRespDTO.getDepLevel());
|
|
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<IncidentManageCountRPCResp> resList = new ArrayList<>();
|
|
List<AccidentReportCountRPC> accidentReportCountRPCList = new ArrayList<>();
|
Long deptId = incidentManageRPCResp.getDeptId();
|
String startTime;
|
String endTime;
|
if (query.getMonth() == null) {
|
// 查该年度12个月份的
|
startTime = TimeUtils.getYearFirst(query.getYear());
|
endTime = TimeUtils.getYearLast(query.getYear());
|
accidentReportCountRPCList= accidentReportInfoService.getCountForRPCByDeptIdAndMonth(startTime, endTime, deptId);
|
|
} else {
|
// 查该年度指定月份的
|
startTime = TimeUtils.getMonthFirst(query.getYear(), query.getMonth());
|
endTime = TimeUtils.getMonthLast(query.getYear(), query.getMonth());
|
accidentReportCountRPCList = accidentReportInfoService.getCountForRPCByDeptIdAndDay(startTime, endTime, deptId);
|
}
|
|
// 拼装第一层时间(去重)
|
Set<Integer> timeSET = accidentReportCountRPCList.stream().map(AccidentReportCountRPC::getTime).collect(Collectors.toSet());
|
// 拼装第一层时间(排序)
|
List<Integer> timeList = timeSET.stream().sorted().collect(Collectors.toList());
|
if (!CollectionUtils.isEmpty(timeSET)) {
|
for (Integer integer : timeSET) {
|
IncidentManageCountRPCResp incidentManageCountRPCResp = new IncidentManageCountRPCResp();
|
incidentManageCountRPCResp.setTime(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<DepInfoRPCRespDTO> 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<DepInfoRPCRespDTO> getDepListInfoByDepId(Long deptId) {
|
List<DepInfoRPCRespDTO> depList = new ArrayList<>();
|
ResultVO<List<DepInfoRPCRespDTO>> rpcResult = accountDepartmentService.listDepAndSubDepByDepId(deptId);
|
if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) {
|
if (rpcResult.getData() != null) {
|
depList = (List<DepInfoRPCRespDTO>) rpcResult.getData();
|
}
|
} else {
|
throw new BusinessException(ResultCodes.CLIENT_DEP_NOT_EXIST);
|
}
|
return depList;
|
}
|
|
@Override
|
public ResultVO<List<AccidentReportCountRespDTO>> countAccidentReport(AccidentReportCountQuery query) {
|
|
List<AccidentReportCount> 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<AccidentReportCountRespDTO> accidentReportCountRespDTOList = BeanCopyUtils.copyBeanList(list, AccidentReportCountRespDTO.class);
|
return new ResultVO<>(ResultCodes.OK, accidentReportCountRespDTOList);
|
}
|
|
}
|