package com.gkhy.safePlatform.incidentManage.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.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.incidentManage.entity.*;
|
import com.gkhy.safePlatform.incidentManage.enums.AccidentReportGradeEnum;
|
import com.gkhy.safePlatform.incidentManage.enums.AccidentReportLevelEnum;
|
import com.gkhy.safePlatform.incidentManage.enums.AccidentReportTypeEnum;
|
import com.gkhy.safePlatform.incidentManage.enums.AccidentResultCodes;
|
import com.gkhy.safePlatform.incidentManage.exception.AccidentException;
|
import com.gkhy.safePlatform.incidentManage.model.dto.req.AccidentReportFileReqDTO;
|
import com.gkhy.safePlatform.incidentManage.model.dto.req.AccidentReportReqDTO;
|
import com.gkhy.safePlatform.incidentManage.model.dto.resp.*;
|
import com.gkhy.safePlatform.incidentManage.query.AccidentReportQuery;
|
import com.gkhy.safePlatform.incidentManage.query.db.AccidentReportDBQuery;
|
import com.gkhy.safePlatform.incidentManage.service.AccidentReportService;
|
import com.gkhy.safePlatform.incidentManage.service.baseService.AccidentExpressFileInfoService;
|
import com.gkhy.safePlatform.incidentManage.service.baseService.AccidentExpressInfoService;
|
import com.gkhy.safePlatform.incidentManage.service.baseService.AccidentReportFileInfoService;
|
import com.gkhy.safePlatform.incidentManage.service.baseService.AccidentReportInfoService;
|
import org.apache.dubbo.config.annotation.DubboReference;
|
import org.springframework.beans.BeanUtils;
|
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("accidentReportService")
|
public class AccidentReportServiceImpl implements AccidentReportService {
|
|
@Autowired
|
private AccidentReportInfoService accidentReportInfoService;
|
|
@Autowired
|
private AccidentReportFileInfoService accidentReportFileInfoService;
|
|
@DubboReference(check = false)
|
private AccountDepartmentService accountDepartmentService;
|
|
@Autowired
|
private AccidentExpressInfoService accidentExpressInfoService;
|
|
@Autowired
|
private AccidentExpressFileInfoService accidentExpressFileInfoService;
|
|
|
@Override
|
public SearchResultVO<List<AccidentReportPageRespDTO>> selectAccidentReportList(PageQuery<AccidentReportQuery> query) {
|
Long pageIndex = query.getPageIndex();
|
Long pageSize = query.getPageSize();
|
Page<AccidentReportInfoPageDO> page = new Page<>(pageIndex, pageSize);
|
|
AccidentReportDBQuery accidentReportDBQuery = new AccidentReportDBQuery();
|
if (query.getSearchParams() != null) {
|
BeanUtils.copyProperties(query.getSearchParams(), accidentReportDBQuery);
|
}
|
|
|
List<AccidentReportInfoPageDO> accidentReportInfoPageDOList = accidentReportInfoService.selectAccidentReportList(page, accidentReportDBQuery);
|
List<AccidentReportPageRespDTO> respList = BeanCopyUtils.copyBeanList(accidentReportInfoPageDOList, AccidentReportPageRespDTO.class);
|
|
Map<Long, String> depPool = new HashMap<>();
|
|
respList.forEach(AccidentReportPageRespDTO -> {
|
// 设置部门名称
|
if (!depPool.containsKey(AccidentReportPageRespDTO.getAccidentDepartmentId())) {
|
ResultVO<DepInfoRPCRespDTO> rpcResult = accountDepartmentService.getDepInfoByDepId(AccidentReportPageRespDTO.getAccidentDepartmentId());
|
if (rpcResult != null && rpcResult.getCode().equals(ResultCodes.OK.getCode())) {
|
if (rpcResult.getData() != null) {
|
DepInfoRPCRespDTO dep = (DepInfoRPCRespDTO) rpcResult.getData();
|
|
depPool.put(dep.getDepId(), dep.getDepName());
|
}
|
}
|
}
|
|
String depName = depPool.get(AccidentReportPageRespDTO.getAccidentDepartmentId());
|
AccidentReportPageRespDTO.setDeptName(depName);
|
});
|
|
|
return new SearchResultVO<>(
|
true,
|
pageIndex,
|
pageSize, page.getPages(),
|
page.getTotal(),
|
respList,
|
ResultCodes.OK
|
);
|
}
|
|
@Override
|
public ResultVO addAccidentReport(Long uid, AccidentReportReqDTO accidentReportReqDTO) {
|
//必填项验证
|
checkRequired(accidentReportReqDTO);
|
// 验证枚举
|
checkEnum(accidentReportReqDTO);
|
|
Date nowDate = new Date();
|
//1.新增事故报告
|
AccidentReportInfo accidentReportInfo = new AccidentReportInfo();
|
BeanUtils.copyProperties(accidentReportReqDTO, accidentReportInfo);
|
accidentReportInfo.setDelFlag(false);
|
accidentReportInfo.setCreateUid(uid);
|
accidentReportInfo.setGmtCreate(nowDate);
|
accidentReportInfoService.addAccidentReport(accidentReportInfo);
|
//2.新增事故报告附件
|
if (!CollectionUtils.isEmpty(accidentReportReqDTO.getFileList())) {
|
addAccidentReportFile(accidentReportInfo.getId(), uid, nowDate, accidentReportReqDTO.getFileList());
|
}
|
return new ResultVO(ResultCodes.OK);
|
}
|
|
private void addAccidentReportFile(Long accidentReportId, Long uid, Date nowDate, List<AccidentReportFileReqDTO> AccidentReportFileReqDTOList) {
|
List<AccidentReportFileInfo> fileInfoList = BeanCopyUtils.copyBeanList(AccidentReportFileReqDTOList, AccidentReportFileInfo.class);
|
fileInfoList.forEach(AccidentReportFileInfo -> {
|
AccidentReportFileInfo.setAccidentReportId(accidentReportId);
|
AccidentReportFileInfo.setDelFlag(false);
|
AccidentReportFileInfo.setCreateUid(uid);
|
AccidentReportFileInfo.setGmtCreate(nowDate);
|
});
|
for (AccidentReportFileInfo AccidentReportFileInfo : fileInfoList) {
|
accidentReportFileInfoService.addAccidentReportFile(AccidentReportFileInfo);
|
}
|
}
|
|
@Override
|
public ResultVO<AccidentReportDetailRespDTO> getAccidentReportById(Long id) {
|
AccidentReportDetailRespDTO AccidentReportDetailRespDTO = new AccidentReportDetailRespDTO();
|
//查询是否存在
|
AccidentReportInfoDetailDO AccidentReportInfoDetailDO = accidentReportInfoService.selectAccidentReportById(id);
|
if (AccidentReportInfoDetailDO == null) {
|
throw new AccidentException(AccidentResultCodes.ACCIDENT_REPORT_NOT_EXIST);
|
} else {
|
BeanUtils.copyProperties(AccidentReportInfoDetailDO, AccidentReportDetailRespDTO);
|
//查找事故报告对应的附件
|
List<AccidentReportFileInfoDO> AccidentReportFileInfoDOList = accidentReportFileInfoService.selectByAccidentReportId(id);
|
if (!CollectionUtils.isEmpty(AccidentReportFileInfoDOList)) {
|
List<AccidentReportFileRespDTO> accidentReportFileRespDTOList = BeanCopyUtils.copyBeanList(AccidentReportFileInfoDOList, AccidentReportFileRespDTO.class);
|
AccidentReportDetailRespDTO.setFileList(accidentReportFileRespDTOList);
|
}
|
// 查找事故快报对应的附件
|
List<AccidentExpressFileInfoDO> AccidentExpressFileInfoDOList = accidentExpressFileInfoService.selectByAccidentExpressId(AccidentReportDetailRespDTO.getAccidentExpressId());
|
if (!CollectionUtils.isEmpty(AccidentExpressFileInfoDOList)) {
|
List<AccidentExpressFileRespDTO> accidentExpressFileRespDTOList = BeanCopyUtils.copyBeanList(AccidentExpressFileInfoDOList, AccidentExpressFileRespDTO.class);
|
AccidentReportDetailRespDTO.setExpressFileList(accidentExpressFileRespDTOList);
|
}
|
|
|
return new ResultVO<>(ResultCodes.OK, AccidentReportDetailRespDTO);
|
}
|
}
|
|
@Override
|
public ResultVO updateAccidentReport(Long uid, AccidentReportReqDTO accidentReportReqDTO) {
|
// 验证枚举
|
checkEnum(accidentReportReqDTO);
|
|
Date nowDate = new Date();
|
//查询是否存在
|
AccidentReportInfoDetailDO AccidentReportInfoDetailDO = accidentReportInfoService.selectAccidentReportById(accidentReportReqDTO.getId());
|
if (AccidentReportInfoDetailDO == null) {
|
throw new AccidentException(AccidentResultCodes.ACCIDENT_REPORT_NOT_EXIST);
|
} else {
|
AccidentReportInfo accidentReportInfo = new AccidentReportInfo();
|
BeanUtils.copyProperties(accidentReportReqDTO, accidentReportInfo);
|
accidentReportInfo.setUpdateUid(uid);
|
accidentReportInfo.setGmtModitify(nowDate);
|
accidentReportInfoService.updateAccidentReport(accidentReportInfo);
|
//修改事故报告附件
|
updateAccidentReportFile(uid, accidentReportReqDTO.getId(), nowDate, accidentReportReqDTO.getFileList());
|
return new ResultVO(ResultCodes.OK);
|
}
|
}
|
|
private void updateAccidentReportFile(Long uid, Long accidentReportId, Date nowDate, List<AccidentReportFileReqDTO> AccidentReportFileReqDTOList) {
|
|
List<AccidentReportFileInfoDO> accidentReportFileInfoDOList = accidentReportFileInfoService.selectByAccidentReportId(accidentReportId);
|
List<Long> oldIdsList = accidentReportFileInfoDOList.stream().map(AccidentReportFileInfoDO::getId).collect(Collectors.toList());
|
List<Long> newIdsList = new ArrayList<>();
|
|
//新增的附件集合
|
List<AccidentReportFileInfo> addList = new ArrayList<>();
|
//删除的附件集合(id)
|
List<Long> deleteList = new ArrayList<>();
|
for (AccidentReportFileReqDTO AccidentReportFileReqDTO : AccidentReportFileReqDTOList) {
|
//如果不存在id则表示页面新增的附件
|
if (AccidentReportFileReqDTO.getId() == null) {
|
AccidentReportFileInfo AccidentReportFileInfo = new AccidentReportFileInfo();
|
BeanUtils.copyProperties(AccidentReportFileReqDTO, AccidentReportFileInfo);
|
AccidentReportFileInfo.setDelFlag(false);
|
AccidentReportFileInfo.setGmtCreate(nowDate);
|
AccidentReportFileInfo.setCreateUid(uid);
|
AccidentReportFileInfo.setAccidentReportId(accidentReportId);
|
addList.add(AccidentReportFileInfo);
|
}
|
//如果存在id则判断页面是否删除
|
else {
|
newIdsList.add(AccidentReportFileReqDTO.getId());
|
}
|
}
|
for (Long oldId : oldIdsList) {
|
if (!newIdsList.contains(oldId)) {
|
deleteList.add(oldId);
|
}
|
}
|
if (!CollectionUtils.isEmpty(addList)) {
|
for (AccidentReportFileInfo AccidentReportFileInfo : addList) {
|
accidentReportFileInfoService.addAccidentReportFile(AccidentReportFileInfo);
|
}
|
}
|
if (!CollectionUtils.isEmpty(deleteList)) {
|
accidentReportFileInfoService.deleteAccidentReportFileByIds(deleteList);
|
}
|
}
|
|
|
@Override
|
public ResultVO batchDeleteAccidentReport(Long[] ids) {
|
if (ids == null || ids.length == 0) {
|
throw new AccidentException(AccidentResultCodes.ACCIDENT_REPORT_NULL);
|
} else {
|
|
for (Long id : ids) {
|
deleteAccidentReport(id);
|
}
|
return new ResultVO(ResultCodes.OK);
|
}
|
}
|
|
|
private void deleteAccidentReport(Long id) {
|
//查询是否存在
|
AccidentReportInfoDetailDO AccidentReportInfoDetailDO = accidentReportInfoService.selectAccidentReportById(id);
|
if (AccidentReportInfoDetailDO == null) {
|
throw new AccidentException(AccidentResultCodes.ACCIDENT_REPORT_NOT_EXIST);
|
} else {
|
accidentReportInfoService.deleteAccidentReportById(id);
|
//删除附件
|
accidentReportFileInfoService.deleteAccidentReportFileByAccidentReportId(id);
|
}
|
}
|
|
|
/**
|
* 验证必填项
|
*
|
* @return
|
*/
|
private void checkRequired(AccidentReportReqDTO accidentReportReqDTO) {
|
//事故快报
|
if (accidentReportReqDTO.getAccidentExpressId() == null) {
|
throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NULL);
|
}
|
AccidentExpressInfoDetailDO accidentExpressInfo = accidentExpressInfoService.selectAccidentExpressById(accidentReportReqDTO.getAccidentExpressId());
|
if (accidentExpressInfo == null) {
|
throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NOT_EXIST);
|
}
|
|
//事故类型
|
if (accidentReportReqDTO.getAccidentType() == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_TYPE_NULL);
|
}
|
//事故等级
|
if (accidentReportReqDTO.getAccidentGrade() == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_GRADE_NULL);
|
}
|
//经济损失
|
if (accidentReportReqDTO.getEconomicLoss() == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_ECONOMIC_LOSS_NULL);
|
}
|
//要求报告完成期限
|
if (accidentReportReqDTO.getReportDeadline() == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_REPORT_DEADLINE_NULL);
|
}
|
//事故级别
|
if (accidentReportReqDTO.getAccidentLevel() == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_LEVEL_NULL);
|
}
|
//原因综合分析(直接)
|
if (StringUtils.isBlank(accidentReportReqDTO.getComprehensiveAnalysisDirect())) {
|
throw new AccidentException(AccidentResultCodes.REPORT_COMPREHENSIVE_ANALYSIS_DIRECT_NULL);
|
}
|
//原因综合分析(直接)
|
if (StringUtils.isBlank(accidentReportReqDTO.getComprehensiveAnalysisDirect())) {
|
throw new AccidentException(AccidentResultCodes.REPORT_COMPREHENSIVE_ANALYSIS_DIRECT_NULL);
|
}
|
//原因综合分析(间接)
|
if (StringUtils.isBlank(accidentReportReqDTO.getComprehensiveAnalysisIndirect())) {
|
throw new AccidentException(AccidentResultCodes.REPORT_COMPREHENSIVE_ANALYSIS_INDIRECT_NULL);
|
}
|
//整改措施
|
if (StringUtils.isBlank(accidentReportReqDTO.getRectificationMeasures())) {
|
throw new AccidentException(AccidentResultCodes.REPORT_RECTIFICATION_MEASURES_NULL);
|
}
|
//事故处理
|
if (StringUtils.isBlank(accidentReportReqDTO.getAccidentHandling())) {
|
throw new AccidentException(AccidentResultCodes.REPORT_ACCIDENT_HANDLING_NULL);
|
}
|
//填写人
|
if (accidentReportReqDTO.getFillInUserUid() == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_FILL_IN_USER_UID_NULL);
|
}
|
//填写日期
|
if (accidentReportReqDTO.getFillInTime() == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_FILL_IN_TIME_NULL);
|
}
|
}
|
|
/**
|
* 枚举验证
|
*/
|
private void checkEnum(AccidentReportReqDTO accidentExpressReqDTO) {
|
if (AccidentReportTypeEnum.getByCode(accidentExpressReqDTO.getAccidentType()) == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_ENUMS_TYPE_NOT_EXIST);
|
}
|
if (AccidentReportGradeEnum.getByCode(accidentExpressReqDTO.getAccidentGrade()) == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_ENUMS_GRADE_NOT_EXIST);
|
}
|
if (AccidentReportLevelEnum.getByCode(accidentExpressReqDTO.getAccidentLevel()) == null) {
|
throw new AccidentException(AccidentResultCodes.REPORT_ENUMS_LEVEL_NOT_EXIST);
|
}
|
}
|
|
|
|
}
|