package com.gkhy.safePlatform.incidentManage.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.gkhy.safePlatform.account.rpc.apimodel.AccountAuthService; import com.gkhy.safePlatform.account.rpc.apimodel.AccountDepartmentService; import com.gkhy.safePlatform.account.rpc.apimodel.model.resp.DepInfoRPCRespDTO; import com.gkhy.safePlatform.commons.co.ContextCacheUser; 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.AccidentExpressEnum; import com.gkhy.safePlatform.incidentManage.enums.AccidentResultCodes; import com.gkhy.safePlatform.incidentManage.exception.AccidentException; import com.gkhy.safePlatform.incidentManage.model.dto.req.AccidentExpressCasualtyReqDTO; import com.gkhy.safePlatform.incidentManage.model.dto.req.AccidentExpressFileReqDTO; import com.gkhy.safePlatform.incidentManage.model.dto.req.AccidentExpressReqDTO; import com.gkhy.safePlatform.incidentManage.model.dto.resp.AccidentExpressCasualtyRespDTO; import com.gkhy.safePlatform.incidentManage.model.dto.resp.AccidentExpressDetailRespDTO; import com.gkhy.safePlatform.incidentManage.model.dto.resp.AccidentExpressFileRespDTO; import com.gkhy.safePlatform.incidentManage.model.dto.resp.AccidentExpressPageRespDTO; import com.gkhy.safePlatform.incidentManage.query.AccidentExpressQuery; import com.gkhy.safePlatform.incidentManage.query.db.AccidentExpressDBQuery; import com.gkhy.safePlatform.incidentManage.service.AccidentExpressService; import com.gkhy.safePlatform.incidentManage.service.baseService.AccidentExpressCasualtyInfoService; import com.gkhy.safePlatform.incidentManage.service.baseService.AccidentExpressFileInfoService; import com.gkhy.safePlatform.incidentManage.service.baseService.AccidentExpressInfoService; 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("accidentExpressService") public class AccidentExpressServiceImpl implements AccidentExpressService { @Autowired private AccidentExpressInfoService accidentExpressInfoService; @Autowired private AccidentExpressFileInfoService accidentExpressFileInfoService; @Autowired private AccidentExpressCasualtyInfoService accidentExpressCasualtyInfoService; @DubboReference(check = false) private AccountDepartmentService accountDepartmentService; @Override public SearchResultVO> selectAccidentExpressList(PageQuery query) { Long pageIndex = query.getPageIndex(); Long pageSize = query.getPageSize(); Page page = new Page<>(pageIndex, pageSize); AccidentExpressDBQuery accidentExpressDBQuery = new AccidentExpressDBQuery(); if (query.getSearchParams() != null) { BeanUtils.copyProperties(query.getSearchParams(), accidentExpressDBQuery); } List accidentExpressInfoPageDOList = accidentExpressInfoService.selectAccidentExpressList(page, accidentExpressDBQuery); List respList = BeanCopyUtils.copyBeanList(accidentExpressInfoPageDOList, AccidentExpressPageRespDTO.class); Map depPool = new HashMap<>(); respList.forEach(AccidentExpressPageRespDTO -> { // 设置部门名称 if (!depPool.containsKey(AccidentExpressPageRespDTO.getAccidentDepartmentId())) { ResultVO rpcResult = accountDepartmentService.getDepInfoByDepId(AccidentExpressPageRespDTO.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(AccidentExpressPageRespDTO.getAccidentDepartmentId()); AccidentExpressPageRespDTO.setDeptName(depName); }); return new SearchResultVO<>( true, pageIndex, pageSize, page.getPages(), page.getTotal(), respList, ResultCodes.OK ); } @Override public ResultVO addAccidentExpress(ContextCacheUser contextCacheUser, AccidentExpressReqDTO accidentExpressReqDTO) { Long uid = contextCacheUser.getUid(); String uName = contextCacheUser.getRealName(); //必填项验证 checkRequired(accidentExpressReqDTO); //枚举验证 checkEnum(accidentExpressReqDTO); Date nowDate = new Date(); //1.新增事故快报 AccidentExpressInfo accidentExpressInfo = new AccidentExpressInfo(); BeanUtils.copyProperties(accidentExpressReqDTO, accidentExpressInfo); accidentExpressInfo.setDelFlag(false); accidentExpressInfo.setCreateUid(uid); accidentExpressInfo.setCreateName(uName); accidentExpressInfo.setGmtCreate(nowDate); accidentExpressInfoService.addAccidentExpress(accidentExpressInfo); //2.新增事故快报附件 if (!CollectionUtils.isEmpty(accidentExpressReqDTO.getFileList())) { addAccidentExpressFile(accidentExpressInfo.getId(), uid, nowDate, accidentExpressReqDTO.getFileList()); } AccidentExpressDetailRespDTO accidentExpressDetailRespDTO = new AccidentExpressDetailRespDTO(); BeanUtils.copyProperties(accidentExpressInfo, accidentExpressDetailRespDTO); return new ResultVO<>(ResultCodes.OK, accidentExpressDetailRespDTO); } private void addAccidentExpressFile(Long accidentExpressId, Long uid, Date nowDate, List AccidentExpressFileReqDTOList) { List fileInfoList = BeanCopyUtils.copyBeanList(AccidentExpressFileReqDTOList, AccidentExpressFileInfo.class); fileInfoList.forEach(AccidentExpressFileInfo -> { AccidentExpressFileInfo.setAccidentExpressId(accidentExpressId); AccidentExpressFileInfo.setDelFlag(false); AccidentExpressFileInfo.setCreateUid(uid); AccidentExpressFileInfo.setGmtCreate(nowDate); }); for (AccidentExpressFileInfo AccidentExpressFileInfo : fileInfoList) { accidentExpressFileInfoService.addAccidentExpressFile(AccidentExpressFileInfo); } } @Override public ResultVO getAccidentExpressById(Long id) { AccidentExpressDetailRespDTO AccidentExpressDetailRespDTO = new AccidentExpressDetailRespDTO(); //查询是否存在 AccidentExpressInfoDetailDO AccidentExpressInfoDetailDO = accidentExpressInfoService.selectAccidentExpressById(id); if (AccidentExpressInfoDetailDO == null) { throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NOT_EXIST); } else { BeanUtils.copyProperties(AccidentExpressInfoDetailDO, AccidentExpressDetailRespDTO); //查找对应的附件 List AccidentExpressFileInfoDOList = accidentExpressFileInfoService.selectByAccidentExpressId(id); if (!CollectionUtils.isEmpty(AccidentExpressFileInfoDOList)) { List accidentExpressFileRespDTOList = BeanCopyUtils.copyBeanList(AccidentExpressFileInfoDOList, AccidentExpressFileRespDTO.class); AccidentExpressDetailRespDTO.setFileList(accidentExpressFileRespDTOList); } return new ResultVO<>(ResultCodes.OK, AccidentExpressDetailRespDTO); } } @Override public ResultVO updateAccidentExpress(Long uid, AccidentExpressReqDTO accidentExpressReqDTO) { //必填项验证 checkRequired(accidentExpressReqDTO); //枚举验证 checkEnum(accidentExpressReqDTO); Date nowDate = new Date(); //查询是否存在 AccidentExpressInfoDetailDO AccidentExpressInfoDetailDO = accidentExpressInfoService.selectAccidentExpressById(accidentExpressReqDTO.getId()); if (AccidentExpressInfoDetailDO == null) { throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NOT_EXIST); } else { AccidentExpressInfo accidentExpressInfo = new AccidentExpressInfo(); BeanUtils.copyProperties(accidentExpressReqDTO, accidentExpressInfo); accidentExpressInfo.setUpdateUid(uid); accidentExpressInfo.setGmtModitify(nowDate); accidentExpressInfoService.updateAccidentExpress(accidentExpressInfo); //修改事故快报附件 updateAccidentExpressFile(uid, accidentExpressReqDTO.getId(), nowDate, accidentExpressReqDTO.getFileList()); return new ResultVO(ResultCodes.OK); } } private void updateAccidentExpressFile(Long uid, Long accidentExpressId, Date nowDate, List accidentExpressFileReqDTOList) { List accidentExpressFileInfoDOList = accidentExpressFileInfoService.selectByAccidentExpressId(accidentExpressId); List oldIdsList = accidentExpressFileInfoDOList.stream().map(AccidentExpressFileInfoDO::getId).collect(Collectors.toList()); List newIdsList = new ArrayList<>(); //新增的附件集合 List addList = new ArrayList<>(); //删除的附件集合(id) List deleteList = new ArrayList<>(); if(accidentExpressFileReqDTOList != null && !accidentExpressFileInfoDOList.isEmpty()){ for (AccidentExpressFileReqDTO accidentExpressFileReqDTO : accidentExpressFileReqDTOList) { //如果不存在id则表示页面新增的附件 if (accidentExpressFileReqDTO.getId() == null) { AccidentExpressFileInfo accidentExpressFileInfo = new AccidentExpressFileInfo(); BeanUtils.copyProperties(accidentExpressFileReqDTO, accidentExpressFileInfo); accidentExpressFileInfo.setDelFlag(false); accidentExpressFileInfo.setGmtCreate(nowDate); accidentExpressFileInfo.setCreateUid(uid); accidentExpressFileInfo.setAccidentExpressId(accidentExpressId); addList.add(accidentExpressFileInfo); } //如果存在id则判断页面是否删除 else { newIdsList.add(accidentExpressFileReqDTO.getId()); } } } for (Long oldId : oldIdsList) { if (!newIdsList.contains(oldId)) { deleteList.add(oldId); } } if (!CollectionUtils.isEmpty(addList)) { for (AccidentExpressFileInfo AccidentExpressFileInfo : addList) { accidentExpressFileInfoService.addAccidentExpressFile(AccidentExpressFileInfo); } } if (!CollectionUtils.isEmpty(deleteList)) { accidentExpressFileInfoService.deleteAccidentExpressFileByIds(deleteList); } } @Override public ResultVO batchDeleteAccidentExpress(Long[] ids) { if (ids == null || ids.length == 0) { throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NULL); } else { for (Long id : ids) { deleteAccidentExpress(id); } return new ResultVO(ResultCodes.OK); } } private void deleteAccidentExpress(Long id) { //查询是否存在 AccidentExpressInfoDetailDO AccidentExpressInfoDetailDO = accidentExpressInfoService.selectAccidentExpressById(id); if (AccidentExpressInfoDetailDO == null) { throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NOT_EXIST); } else { accidentExpressInfoService.deleteAccidentExpressById(id); //删除附件 accidentExpressFileInfoService.deleteAccidentExpressFileByAccidentExpressId(id); //删除伤亡 accidentExpressCasualtyInfoService.deleteAccidentExpressCasualtyByAccidentExpressId(id); } } @Override public ResultVO selectAccidentExpressCasualtyList(Long accidentExpressId) { List accidentExpressCasualtyInfoDOList = accidentExpressCasualtyInfoService.selectByAccidentExpressId(accidentExpressId); List respList = BeanCopyUtils.copyBeanList(accidentExpressCasualtyInfoDOList, AccidentExpressCasualtyRespDTO.class); return new ResultVO<>(ResultCodes.OK, respList); } @Override public ResultVO addAccidentExpressCasualty(Long uid, AccidentExpressCasualtyReqDTO accidentExpressCasualtyReqDTO) { if (accidentExpressCasualtyReqDTO.getAccidentExpressId() == null) { throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NULL); } else { AccidentExpressCasualtyInfo accidentExpressCasualtyInfo = new AccidentExpressCasualtyInfo(); BeanUtils.copyProperties(accidentExpressCasualtyReqDTO, accidentExpressCasualtyInfo); accidentExpressCasualtyInfo.setDelFlag(false); accidentExpressCasualtyInfo.setGmtCreate(new Date()); accidentExpressCasualtyInfo.setCreateUid(uid); accidentExpressCasualtyInfoService.addAccidentExpressCasualty(accidentExpressCasualtyInfo); return new ResultVO(ResultCodes.OK); } } @Override public ResultVO delAccidentExpressCasualty(Long id) { accidentExpressCasualtyInfoService.deleteAccidentExpressCasualtyById(id); return new ResultVO(ResultCodes.OK); } /** * 验证必填项 * * @return */ private void checkRequired(AccidentExpressReqDTO accidentExpressReqDTO) { //名称 if (StringUtils.isBlank(accidentExpressReqDTO.getAccidentName())) { throw new AccidentException(AccidentResultCodes.EXPRESS_NAME_NULL); } //部门 if (accidentExpressReqDTO.getAccidentDepartmentId() == null) { throw new AccidentException(AccidentResultCodes.EXPRESS_DEPARTMENT_NULL); } //发生时间 if (accidentExpressReqDTO.getOccurrenceTime() == null) { throw new AccidentException(AccidentResultCodes.EXPRESS_TIME_NULL); } //发生地点 if (StringUtils.isBlank(accidentExpressReqDTO.getOccurrencePlace())) { throw new AccidentException(AccidentResultCodes.EXPRESS_PLACE_NULL); } //事故原因 if (accidentExpressReqDTO.getAccidentCause() == null) { throw new AccidentException(AccidentResultCodes.EXPRESS_CAUSE_NULL); } //是否有伤亡 if (accidentExpressReqDTO.getCasualties() == null) { throw new AccidentException(AccidentResultCodes.EXPRESS_CASUALTIES_NULL); } //简要经过 if (StringUtils.isBlank(accidentExpressReqDTO.getAccidentBriefProcess())) { throw new AccidentException(AccidentResultCodes.EXPRESS_BRIEF_PROCESS_NULL); } //初步分析 if (StringUtils.isBlank(accidentExpressReqDTO.getAccidentCausesPreliminaryAnalysis())) { throw new AccidentException(AccidentResultCodes.EXPRESS_CASE_PRELIMINARY_ANALYSIS_NULL); } //应急防范措施 if (StringUtils.isBlank(accidentExpressReqDTO.getEmergencyPrecautions())) { throw new AccidentException(AccidentResultCodes.EXPRESS_EMERGENCY_PRECAUTIONS_NULL); } } /** * * 枚举验证 * */ private void checkEnum(AccidentExpressReqDTO accidentExpressReqDTO){ if (AccidentExpressEnum.getByCode(accidentExpressReqDTO.getAccidentCause())==null){ throw new AccidentException(AccidentResultCodes.EXPRESS_ENUMS_CAUSE_NOT_EXIST); } } }