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.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.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> selectAccidentReportList(PageQuery query) { Long pageIndex = query.getPageIndex(); Long pageSize = query.getPageSize(); Page page = new Page<>(pageIndex, pageSize); AccidentReportDBQuery accidentReportDBQuery = new AccidentReportDBQuery(); if (query.getSearchParams() != null) { BeanUtils.copyProperties(query.getSearchParams(), accidentReportDBQuery); } List accidentReportInfoPageDOList = accidentReportInfoService.selectAccidentReportList(page, accidentReportDBQuery); List respList = BeanCopyUtils.copyBeanList(accidentReportInfoPageDOList, AccidentReportPageRespDTO.class); Map depPool = new HashMap<>(); respList.forEach(AccidentReportPageRespDTO -> { // 设置部门名称 if (!depPool.containsKey(AccidentReportPageRespDTO.getAccidentDepartmentId())) { ResultVO 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); 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 AccidentReportFileReqDTOList) { List 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 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 AccidentReportFileInfoDOList = accidentReportFileInfoService.selectByAccidentReportId(id); if (!CollectionUtils.isEmpty(AccidentReportFileInfoDOList)) { List accidentReportFileRespDTOList = BeanCopyUtils.copyBeanList(AccidentReportFileInfoDOList, AccidentReportFileRespDTO.class); AccidentReportDetailRespDTO.setFileList(accidentReportFileRespDTOList); } // 查找事故快报对应的附件 List AccidentExpressFileInfoDOList = accidentExpressFileInfoService.selectByAccidentExpressId(AccidentReportDetailRespDTO.getAccidentExpressId()); if (!CollectionUtils.isEmpty(AccidentExpressFileInfoDOList)) { List accidentExpressFileRespDTOList = BeanCopyUtils.copyBeanList(AccidentExpressFileInfoDOList, AccidentExpressFileRespDTO.class); AccidentReportDetailRespDTO.setExpressFileList(accidentExpressFileRespDTOList); } return new ResultVO<>(ResultCodes.OK, AccidentReportDetailRespDTO); } } @Override public ResultVO updateAccidentReport(Long uid, AccidentReportReqDTO 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 AccidentReportFileReqDTOList) { List accidentReportFileInfoDOList = accidentReportFileInfoService.selectByAccidentReportId(accidentReportId); List oldIdsList = accidentReportFileInfoDOList.stream().map(AccidentReportFileInfoDO::getId).collect(Collectors.toList()); List newIdsList = new ArrayList<>(); //新增的附件集合 List addList = new ArrayList<>(); //删除的附件集合(id) List 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 (StringUtils.isBlank(AccidentReportReqDTO.getAccidentType())) { throw new AccidentException(AccidentResultCodes.REPORT_TYPE_NULL); } //事故等级 if (StringUtils.isBlank(AccidentReportReqDTO.getAccidentGrade())) { 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 (StringUtils.isBlank(AccidentReportReqDTO.getAccidentLevel())) { 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); } } }