zhangf
2024-05-08 0414ddb0b2b3a7199ae6181a770f97ac140dbd73
incident-manage/incident-manage-service/src/main/java/com/gkhy/safePlatform/incidentManage/service/impl/AccidentReportServiceImpl.java
@@ -1,6 +1,8 @@
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;
@@ -8,26 +10,30 @@
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.AccidentReportDetailRespDTO;
import com.gkhy.safePlatform.incidentManage.model.dto.resp.AccidentReportFileRespDTO;
import com.gkhy.safePlatform.incidentManage.model.dto.resp.AccidentReportPageRespDTO;
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.ArrayList;
import java.util.Date;
import java.util.List;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Service("accidentReportService")
@@ -38,6 +44,15 @@
    @Autowired
    private AccidentReportFileInfoService accidentReportFileInfoService;
    @DubboReference(check = false)
    private AccountDepartmentService accountDepartmentService;
    @Autowired
    private AccidentExpressInfoService accidentExpressInfoService;
    @Autowired
    private AccidentExpressFileInfoService accidentExpressFileInfoService;
    @Override
@@ -55,10 +70,30 @@
        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,
                pageSize, page.getPages(),
                page.getTotal(),
                respList,
                ResultCodes.OK
@@ -69,6 +104,8 @@
    public ResultVO addAccidentReport(Long uid, AccidentReportReqDTO accidentReportReqDTO) {
        //必填项验证
        checkRequired(accidentReportReqDTO);
        // 验证枚举
        checkEnum(accidentReportReqDTO);
        Date nowDate = new Date();
        //1.新增事故报告
@@ -77,16 +114,15 @@
        accidentReportInfo.setDelFlag(false);
        accidentReportInfo.setCreateUid(uid);
        accidentReportInfo.setGmtCreate(nowDate);
        accidentReportInfo.setStatus(false);
        accidentReportInfoService.addAccidentReport(accidentReportInfo);
        //2.新增事故报告附件
        if (!CollectionUtils.isEmpty(accidentReportReqDTO.getFileList())){
            addAccidentReportFile(accidentReportInfo.getId(),uid,nowDate,accidentReportReqDTO.getFileList());
        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){
    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);
@@ -94,7 +130,7 @@
            AccidentReportFileInfo.setCreateUid(uid);
            AccidentReportFileInfo.setGmtCreate(nowDate);
        });
        for (AccidentReportFileInfo AccidentReportFileInfo :fileInfoList){
        for (AccidentReportFileInfo AccidentReportFileInfo : fileInfoList) {
            accidentReportFileInfoService.addAccidentReportFile(AccidentReportFileInfo);
        }
    }
@@ -104,40 +140,51 @@
        AccidentReportDetailRespDTO AccidentReportDetailRespDTO = new AccidentReportDetailRespDTO();
        //查询是否存在
        AccidentReportInfoDetailDO AccidentReportInfoDetailDO = accidentReportInfoService.selectAccidentReportById(id);
        if (AccidentReportInfoDetailDO==null){
        if (AccidentReportInfoDetailDO == null) {
            throw new AccidentException(AccidentResultCodes.ACCIDENT_REPORT_NOT_EXIST);
        }else{
            BeanUtils.copyProperties(AccidentReportInfoDetailDO,AccidentReportDetailRespDTO);
            //查找对应的附件
        } else {
            BeanUtils.copyProperties(AccidentReportInfoDetailDO, AccidentReportDetailRespDTO);
            //查找事故报告对应的附件
            List<AccidentReportFileInfoDO> AccidentReportFileInfoDOList = accidentReportFileInfoService.selectByAccidentReportId(id);
            if (!CollectionUtils.isEmpty(AccidentReportFileInfoDOList)){
                List<AccidentReportFileRespDTO> accidentReportFileRespDTOList = BeanCopyUtils.copyBeanList(AccidentReportFileInfoDOList , AccidentReportFileRespDTO.class);
            if (!CollectionUtils.isEmpty(AccidentReportFileInfoDOList)) {
                List<AccidentReportFileRespDTO> accidentReportFileRespDTOList = BeanCopyUtils.copyBeanList(AccidentReportFileInfoDOList, AccidentReportFileRespDTO.class);
                AccidentReportDetailRespDTO.setFileList(accidentReportFileRespDTOList);
            }
            return new ResultVO<>(ResultCodes.OK ,AccidentReportDetailRespDTO);
            //  查找事故快报对应的附件
            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){
        if (AccidentReportInfoDetailDO == null) {
            throw new AccidentException(AccidentResultCodes.ACCIDENT_REPORT_NOT_EXIST);
        }else{
        } else {
            AccidentReportInfo accidentReportInfo = new AccidentReportInfo();
            BeanUtils.copyProperties(accidentReportReqDTO,accidentReportInfo);
            BeanUtils.copyProperties(accidentReportReqDTO, accidentReportInfo);
            accidentReportInfo.setUpdateUid(uid);
            accidentReportInfo.setGmtModitify(nowDate);
            accidentReportInfoService.updateAccidentReport(accidentReportInfo);
            //修改事故报告附件
            updateAccidentReportFile(uid,accidentReportReqDTO.getId(),nowDate,accidentReportReqDTO.getFileList());
            updateAccidentReportFile(uid, accidentReportReqDTO.getId(), nowDate, accidentReportReqDTO.getFileList());
            return new ResultVO(ResultCodes.OK);
        }
    }
    private void updateAccidentReportFile(Long uid ,Long accidentReportId ,Date nowDate,List<AccidentReportFileReqDTO> AccidentReportFileReqDTOList){
    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());
@@ -147,11 +194,11 @@
        List<AccidentReportFileInfo> addList = new ArrayList<>();
        //删除的附件集合(id)
        List<Long> deleteList = new ArrayList<>();
        for (AccidentReportFileReqDTO AccidentReportFileReqDTO : AccidentReportFileReqDTOList){
        for (AccidentReportFileReqDTO AccidentReportFileReqDTO : AccidentReportFileReqDTOList) {
            //如果不存在id则表示页面新增的附件
            if (AccidentReportFileReqDTO.getId() == null){
            if (AccidentReportFileReqDTO.getId() == null) {
                AccidentReportFileInfo AccidentReportFileInfo = new AccidentReportFileInfo();
                BeanUtils.copyProperties(AccidentReportFileReqDTO,AccidentReportFileInfo);
                BeanUtils.copyProperties(AccidentReportFileReqDTO, AccidentReportFileInfo);
                AccidentReportFileInfo.setDelFlag(false);
                AccidentReportFileInfo.setGmtCreate(nowDate);
                AccidentReportFileInfo.setCreateUid(uid);
@@ -159,45 +206,46 @@
                addList.add(AccidentReportFileInfo);
            }
            //如果存在id则判断页面是否删除
            else{
            else {
                newIdsList.add(AccidentReportFileReqDTO.getId());
            }
        }
        for (Long oldId : oldIdsList){
            if (!newIdsList.contains(oldId)){
        for (Long oldId : oldIdsList) {
            if (!newIdsList.contains(oldId)) {
                deleteList.add(oldId);
            }
        }
        if (!CollectionUtils.isEmpty(addList)){
            for (AccidentReportFileInfo AccidentReportFileInfo : addList){
        if (!CollectionUtils.isEmpty(addList)) {
            for (AccidentReportFileInfo AccidentReportFileInfo : addList) {
                accidentReportFileInfoService.addAccidentReportFile(AccidentReportFileInfo);
            }
        }
        if (!CollectionUtils.isEmpty(deleteList)){
        if (!CollectionUtils.isEmpty(deleteList)) {
            accidentReportFileInfoService.deleteAccidentReportFileByIds(deleteList);
        }
    }
    @Override
    public ResultVO batchDeleteAccidentReport(String ids) {
        if (StringUtils.isBlank(ids)){
    public ResultVO batchDeleteAccidentReport(Long[] ids) {
        if (ids == null || ids.length == 0) {
            throw new AccidentException(AccidentResultCodes.ACCIDENT_REPORT_NULL);
        }else{
            String[] idArr = ids.split(",");
            for (String id : idArr) {
                deleteAccidentReport(Long.valueOf(id));
        } 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){
        if (AccidentReportInfoDetailDO == null) {
            throw new AccidentException(AccidentResultCodes.ACCIDENT_REPORT_NOT_EXIST);
        }else{
        } else {
            accidentReportInfoService.deleteAccidentReportById(id);
            //删除附件
            accidentReportFileInfoService.deleteAccidentReportFileByAccidentReportId(id);
@@ -205,49 +253,86 @@
    }
    /**
     * 验证必填项
     *
     * @return
     */
    private void checkRequired(AccidentReportReqDTO AccidentReportReqDTO) {
       /* //名称
        if (StringUtils.isBlank(AccidentReportReqDTO.getAccidentName())) {
            throw new AccidentException(AccidentResultCodes.Report_NAME_NULL);
    private void checkRequired(AccidentReportReqDTO accidentReportReqDTO) {
        //事故快报
        if (accidentReportReqDTO.getAccidentExpressId() == null) {
            throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NULL);
        }
        //部门
        if (AccidentReportReqDTO.getAccidentDepartmentId()==null) {
            throw new AccidentException(AccidentResultCodes.Report_DEPARTMENT_NULL);
        AccidentExpressInfoDetailDO accidentExpressInfo = accidentExpressInfoService.selectAccidentExpressById(accidentReportReqDTO.getAccidentExpressId());
        if (accidentExpressInfo == null) {
            throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NOT_EXIST);
        }
        //发生时间
        if (AccidentReportReqDTO.getOccurrenceTime() == null ) {
            throw new AccidentException(AccidentResultCodes.Report_TIME_NULL);
        //事故类型
        if (accidentReportReqDTO.getAccidentType() == null) {
            throw new AccidentException(AccidentResultCodes.REPORT_TYPE_NULL);
        }
        //发生地点
        if (StringUtils.isBlank(AccidentReportReqDTO.getOccurrencePlace())) {
            throw new AccidentException(AccidentResultCodes.Report_PLACE_NULL);
        //事故等级
        if (accidentReportReqDTO.getAccidentGrade() == null) {
            throw new AccidentException(AccidentResultCodes.REPORT_GRADE_NULL);
        }
        //事故原因
        if (StringUtils.isBlank(AccidentReportReqDTO.getAccidentCause())) {
            throw new AccidentException(AccidentResultCodes.Report_CAUSE_NULL);
        //经济损失
        if (accidentReportReqDTO.getEconomicLoss() == null) {
            throw new AccidentException(AccidentResultCodes.REPORT_ECONOMIC_LOSS_NULL);
        }
        //是否有伤亡
        if (AccidentReportReqDTO.getCasualties()==null) {
            throw new AccidentException(AccidentResultCodes.Report_CASUALTIES_NULL);
        //要求报告完成期限
        if (accidentReportReqDTO.getReportDeadline() == null) {
            throw new AccidentException(AccidentResultCodes.REPORT_REPORT_DEADLINE_NULL);
        }
        //简要经过
        if (StringUtils.isBlank(AccidentReportReqDTO.getAccidentBriefProcess())) {
            throw new AccidentException(AccidentResultCodes.Report_BRIEF_PROCESS_NULL);
        //事故级别
        if (accidentReportReqDTO.getAccidentLevel() == null) {
            throw new AccidentException(AccidentResultCodes.REPORT_LEVEL_NULL);
        }
        //初步分析
        if (StringUtils.isBlank(AccidentReportReqDTO.getAccidentCausesPreliminaryAnalysis())) {
            throw new AccidentException(AccidentResultCodes.Report_CASE_PRELIMINARY_ANALYSIS_NULL);
        //原因综合分析(直接)
        if (StringUtils.isBlank(accidentReportReqDTO.getComprehensiveAnalysisDirect())) {
            throw new AccidentException(AccidentResultCodes.REPORT_COMPREHENSIVE_ANALYSIS_DIRECT_NULL);
        }
        //应急防范措施
        if (StringUtils.isBlank(AccidentReportReqDTO.getEmergencyPrecautions())) {
            throw new AccidentException(AccidentResultCodes.Report_EMERGENCY_PRECAUTIONS_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);
        }
    }
}