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.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<List<AccidentExpressPageRespDTO>> selectAccidentExpressList(PageQuery<AccidentExpressQuery> query) {
|
Long pageIndex = query.getPageIndex();
|
Long pageSize = query.getPageSize();
|
Page<AccidentExpressInfoPageDO> page = new Page<>(pageIndex, pageSize);
|
|
AccidentExpressDBQuery accidentExpressDBQuery = new AccidentExpressDBQuery();
|
if (query.getSearchParams() != null) {
|
BeanUtils.copyProperties(query.getSearchParams(), accidentExpressDBQuery);
|
}
|
|
List<AccidentExpressInfoPageDO> accidentExpressInfoPageDOList = accidentExpressInfoService.selectAccidentExpressList(page, accidentExpressDBQuery);
|
List<AccidentExpressPageRespDTO> respList = BeanCopyUtils.copyBeanList(accidentExpressInfoPageDOList, AccidentExpressPageRespDTO.class);
|
|
Map<Long, String> depPool = new HashMap<>();
|
|
respList.forEach(AccidentExpressPageRespDTO ->{
|
// 设置部门名称
|
if (!depPool.containsKey(AccidentExpressPageRespDTO.getAccidentDepartmentId())) {
|
ResultVO<DepInfoRPCRespDTO> 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<AccidentExpressDetailRespDTO> addAccidentExpress(ContextCacheUser contextCacheUser, AccidentExpressReqDTO accidentExpressReqDTO) {
|
Long uid = contextCacheUser.getUid();
|
String uName = contextCacheUser.getRealName();
|
//必填项验证
|
checkRequired(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<AccidentExpressFileReqDTO> AccidentExpressFileReqDTOList){
|
List<AccidentExpressFileInfo> 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<AccidentExpressDetailRespDTO> 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<AccidentExpressFileInfoDO> AccidentExpressFileInfoDOList = accidentExpressFileInfoService.selectByAccidentExpressId(id);
|
if (!CollectionUtils.isEmpty(AccidentExpressFileInfoDOList)){
|
List<AccidentExpressFileRespDTO> accidentExpressFileRespDTOList = BeanCopyUtils.copyBeanList(AccidentExpressFileInfoDOList , AccidentExpressFileRespDTO.class);
|
AccidentExpressDetailRespDTO.setFileList(accidentExpressFileRespDTOList);
|
}
|
return new ResultVO<>(ResultCodes.OK ,AccidentExpressDetailRespDTO);
|
}
|
}
|
|
@Override
|
public ResultVO updateAccidentExpress(Long uid, AccidentExpressReqDTO 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<AccidentExpressFileReqDTO> AccidentExpressFileReqDTOList){
|
|
List<AccidentExpressFileInfoDO> accidentExpressFileInfoDOList = accidentExpressFileInfoService.selectByAccidentExpressId(accidentExpressId);
|
List<Long> oldIdsList = accidentExpressFileInfoDOList.stream().map(AccidentExpressFileInfoDO::getId).collect(Collectors.toList());
|
List<Long> newIdsList = new ArrayList<>();
|
|
//新增的附件集合
|
List<AccidentExpressFileInfo> addList = new ArrayList<>();
|
//删除的附件集合(id)
|
List<Long> deleteList = new ArrayList<>();
|
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<AccidentExpressCasualtyInfoDO> accidentExpressCasualtyInfoDOList = accidentExpressCasualtyInfoService.selectByAccidentExpressId(accidentExpressId);
|
List<AccidentExpressCasualtyRespDTO> 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 accidentExpressId) {
|
accidentExpressCasualtyInfoService.deleteAccidentExpressCasualtyById(accidentExpressId);
|
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 (StringUtils.isBlank(AccidentExpressReqDTO.getAccidentCause())) {
|
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);
|
}
|
}
|
|
}
|