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.WorkInjuryDeclarationFileReqDTO; import com.gkhy.safePlatform.incidentManage.model.dto.req.WorkInjuryDeclarationReqDTO; import com.gkhy.safePlatform.incidentManage.model.dto.resp.WorkInjuryDeclarationDetailRespDTO; import com.gkhy.safePlatform.incidentManage.model.dto.resp.WorkInjuryDeclarationFileRespDTO; import com.gkhy.safePlatform.incidentManage.model.dto.resp.WorkInjuryDeclarationPageRespDTO; import com.gkhy.safePlatform.incidentManage.query.WorkInjuryDeclarationQuery; import com.gkhy.safePlatform.incidentManage.query.db.WorkInjuryDeclarationDBQuery; import com.gkhy.safePlatform.incidentManage.service.WorkInjuryDeclarationService; import com.gkhy.safePlatform.incidentManage.service.baseService.AccidentExpressInfoService; import com.gkhy.safePlatform.incidentManage.service.baseService.WorkInjuryDeclarationFileInfoService; import com.gkhy.safePlatform.incidentManage.service.baseService.WorkInjuryDeclarationInfoService; 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("workInjuryDeclarationService") public class WorkInjuryDeclarationServiceImpl implements WorkInjuryDeclarationService { @Autowired private WorkInjuryDeclarationInfoService workInjuryDeclarationInfoService; @Autowired private WorkInjuryDeclarationFileInfoService workInjuryDeclarationFileInfoService; @DubboReference(check = false) private AccountDepartmentService accountDepartmentService; @Autowired private AccidentExpressInfoService accidentExpressInfoService; @Override public SearchResultVO> selectWorkInjuryDeclarationList(PageQuery query) { Long pageIndex = query.getPageIndex(); Long pageSize = query.getPageSize(); Page page = new Page<>(pageIndex, pageSize); WorkInjuryDeclarationDBQuery WorkInjuryDeclarationDBQuery = new WorkInjuryDeclarationDBQuery(); if (query.getSearchParams() != null) { BeanUtils.copyProperties(query.getSearchParams(), WorkInjuryDeclarationDBQuery); } List WorkInjuryDeclarationInfoPageDOList = workInjuryDeclarationInfoService.selectWorkInjuryDeclarationList(page, WorkInjuryDeclarationDBQuery); List respList = BeanCopyUtils.copyBeanList(WorkInjuryDeclarationInfoPageDOList, WorkInjuryDeclarationPageRespDTO.class); Map depPool = new HashMap<>(); respList.forEach(WorkInjuryDeclarationPageRespDTO -> { // 设置部门名称 if (!depPool.containsKey(WorkInjuryDeclarationPageRespDTO.getDeclareDepartmentId())) { ResultVO rpcResult = accountDepartmentService.getDepInfoByDepId(WorkInjuryDeclarationPageRespDTO.getDeclareDepartmentId()); 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(WorkInjuryDeclarationPageRespDTO.getDeclareDepartmentId()); WorkInjuryDeclarationPageRespDTO.setDeptName(depName); }); return new SearchResultVO<>( true, pageIndex, pageSize,page.getPages(), page.getTotal(), respList, ResultCodes.OK ); } @Override public ResultVO addWorkInjuryDeclaration(Long uid, WorkInjuryDeclarationReqDTO WorkInjuryDeclarationReqDTO) { //必填项验证 checkRequired(WorkInjuryDeclarationReqDTO); Date nowDate = new Date(); //1.新增工伤申报 WorkInjuryDeclarationInfo WorkInjuryDeclarationInfo = new WorkInjuryDeclarationInfo(); BeanUtils.copyProperties(WorkInjuryDeclarationReqDTO, WorkInjuryDeclarationInfo); WorkInjuryDeclarationInfo.setDelFlag(false); WorkInjuryDeclarationInfo.setCreateUid(uid); WorkInjuryDeclarationInfo.setGmtCreate(nowDate); workInjuryDeclarationInfoService.addWorkInjuryDeclaration(WorkInjuryDeclarationInfo); //2.新增工伤申报附件 if (!CollectionUtils.isEmpty(WorkInjuryDeclarationReqDTO.getFileList())){ addWorkInjuryDeclarationFile(WorkInjuryDeclarationInfo.getId(),uid,nowDate,WorkInjuryDeclarationReqDTO.getFileList()); } return new ResultVO(ResultCodes.OK); } private void addWorkInjuryDeclarationFile(Long WorkInjuryDeclarationId ,Long uid , Date nowDate , List WorkInjuryDeclarationFileReqDTOList){ List fileInfoList = BeanCopyUtils.copyBeanList(WorkInjuryDeclarationFileReqDTOList, WorkInjuryDeclarationFileInfo.class); fileInfoList.forEach(WorkInjuryDeclarationFileInfo -> { WorkInjuryDeclarationFileInfo.setWorkInjuryDeclarationId(WorkInjuryDeclarationId); WorkInjuryDeclarationFileInfo.setDelFlag(false); WorkInjuryDeclarationFileInfo.setCreateUid(uid); WorkInjuryDeclarationFileInfo.setGmtCreate(nowDate); }); for (WorkInjuryDeclarationFileInfo WorkInjuryDeclarationFileInfo :fileInfoList){ workInjuryDeclarationFileInfoService.addWorkInjuryDeclarationFile(WorkInjuryDeclarationFileInfo); } } @Override public ResultVO getWorkInjuryDeclarationById(Long id) { WorkInjuryDeclarationDetailRespDTO WorkInjuryDeclarationDetailRespDTO = new WorkInjuryDeclarationDetailRespDTO(); //查询是否存在 WorkInjuryDeclarationInfoDetailDO WorkInjuryDeclarationInfoDetailDO = workInjuryDeclarationInfoService.selectWorkInjuryDeclarationById(id); if (WorkInjuryDeclarationInfoDetailDO==null){ throw new AccidentException(AccidentResultCodes.WORK_INJURY_DECLARATION_NOT_EXIST); }else{ BeanUtils.copyProperties(WorkInjuryDeclarationInfoDetailDO,WorkInjuryDeclarationDetailRespDTO); //查找对应的附件 List WorkInjuryDeclarationFileInfoDOList = workInjuryDeclarationFileInfoService.selectByWorkInjuryDeclarationId(id); if (!CollectionUtils.isEmpty(WorkInjuryDeclarationFileInfoDOList)){ List WorkInjuryDeclarationFileRespDTOList = BeanCopyUtils.copyBeanList(WorkInjuryDeclarationFileInfoDOList , WorkInjuryDeclarationFileRespDTO.class); WorkInjuryDeclarationDetailRespDTO.setFileList(WorkInjuryDeclarationFileRespDTOList); } return new ResultVO<>(ResultCodes.OK ,WorkInjuryDeclarationDetailRespDTO); } } @Override public ResultVO updateWorkInjuryDeclaration(Long uid, WorkInjuryDeclarationReqDTO WorkInjuryDeclarationReqDTO) { Date nowDate = new Date(); //查询是否存在 WorkInjuryDeclarationInfoDetailDO WorkInjuryDeclarationInfoDetailDO = workInjuryDeclarationInfoService.selectWorkInjuryDeclarationById(WorkInjuryDeclarationReqDTO.getId()); if (WorkInjuryDeclarationInfoDetailDO==null){ throw new AccidentException(AccidentResultCodes.WORK_INJURY_DECLARATION_NOT_EXIST); }else{ WorkInjuryDeclarationInfo WorkInjuryDeclarationInfo = new WorkInjuryDeclarationInfo(); BeanUtils.copyProperties(WorkInjuryDeclarationReqDTO,WorkInjuryDeclarationInfo); WorkInjuryDeclarationInfo.setUpdateUid(uid); WorkInjuryDeclarationInfo.setGmtModitify(nowDate); workInjuryDeclarationInfoService.updateWorkInjuryDeclaration(WorkInjuryDeclarationInfo); //修改工伤申报附件 updateWorkInjuryDeclarationFile(uid,WorkInjuryDeclarationReqDTO.getId(),nowDate,WorkInjuryDeclarationReqDTO.getFileList()); return new ResultVO(ResultCodes.OK); } } private void updateWorkInjuryDeclarationFile(Long uid ,Long WorkInjuryDeclarationId ,Date nowDate,List WorkInjuryDeclarationFileReqDTOList){ List WorkInjuryDeclarationFileInfoDOList = workInjuryDeclarationFileInfoService.selectByWorkInjuryDeclarationId(WorkInjuryDeclarationId); List oldIdsList = WorkInjuryDeclarationFileInfoDOList.stream().map(WorkInjuryDeclarationFileInfoDO::getId).collect(Collectors.toList()); List newIdsList = new ArrayList<>(); //新增的附件集合 List addList = new ArrayList<>(); //删除的附件集合(id) List deleteList = new ArrayList<>(); for (WorkInjuryDeclarationFileReqDTO WorkInjuryDeclarationFileReqDTO : WorkInjuryDeclarationFileReqDTOList){ //如果不存在id则表示页面新增的附件 if (WorkInjuryDeclarationFileReqDTO.getId() == null){ WorkInjuryDeclarationFileInfo WorkInjuryDeclarationFileInfo = new WorkInjuryDeclarationFileInfo(); BeanUtils.copyProperties(WorkInjuryDeclarationFileReqDTO,WorkInjuryDeclarationFileInfo); WorkInjuryDeclarationFileInfo.setDelFlag(false); WorkInjuryDeclarationFileInfo.setGmtCreate(nowDate); WorkInjuryDeclarationFileInfo.setCreateUid(uid); WorkInjuryDeclarationFileInfo.setWorkInjuryDeclarationId(WorkInjuryDeclarationId); addList.add(WorkInjuryDeclarationFileInfo); } //如果存在id则判断页面是否删除 else{ newIdsList.add(WorkInjuryDeclarationFileReqDTO.getId()); } } for (Long oldId : oldIdsList){ if (!newIdsList.contains(oldId)){ deleteList.add(oldId); } } if (!CollectionUtils.isEmpty(addList)){ for (WorkInjuryDeclarationFileInfo WorkInjuryDeclarationFileInfo : addList){ workInjuryDeclarationFileInfoService.addWorkInjuryDeclarationFile(WorkInjuryDeclarationFileInfo); } } if (!CollectionUtils.isEmpty(deleteList)){ workInjuryDeclarationFileInfoService.deleteWorkInjuryDeclarationFileByIds(deleteList); } } @Override public ResultVO batchDeleteWorkInjuryDeclaration(Long[] ids) { if (ids == null || ids.length==0){ throw new AccidentException(AccidentResultCodes.WORK_INJURY_DECLARATION_NULL); }else{ for (Long id : ids){ deleteWorkInjuryDeclaration(id); } return new ResultVO(ResultCodes.OK); } } private void deleteWorkInjuryDeclaration(Long id) { //查询是否存在 WorkInjuryDeclarationInfoDetailDO WorkInjuryDeclarationInfoDetailDO = workInjuryDeclarationInfoService.selectWorkInjuryDeclarationById(id); if (WorkInjuryDeclarationInfoDetailDO==null){ throw new AccidentException(AccidentResultCodes.WORK_INJURY_DECLARATION_NOT_EXIST); }else{ workInjuryDeclarationInfoService.deleteWorkInjuryDeclarationById(id); //删除附件 workInjuryDeclarationFileInfoService.deleteWorkInjuryDeclarationFileByWorkInjuryDeclarationId(id); } } /** * 验证必填项 * @return */ private void checkRequired(WorkInjuryDeclarationReqDTO WorkInjuryDeclarationReqDTO) { //申报人姓名 if (StringUtils.isBlank(WorkInjuryDeclarationReqDTO.getDeclareUserName())) { throw new AccidentException(AccidentResultCodes.WORK_INJURY_DECLARATION_USERNAME_NULL); } //事故性别 if (WorkInjuryDeclarationReqDTO.getDeclareUserGender() == null ) { throw new AccidentException(AccidentResultCodes.WORK_INJURY_DECLARATION_GENDER_NULL); } //申报人部门 if (WorkInjuryDeclarationReqDTO.getDeclareDepartmentId()==null) { throw new AccidentException(AccidentResultCodes.WORK_INJURY_DECLARATION_USERNAME_NOT_EXIST); } //事故名称 if (WorkInjuryDeclarationReqDTO.getAccidentExpressId() == null ) { throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NULL); } AccidentExpressInfoDetailDO accidentExpressInfo = accidentExpressInfoService.selectAccidentExpressById(WorkInjuryDeclarationReqDTO.getAccidentExpressId()); if (accidentExpressInfo == null) { throw new AccidentException(AccidentResultCodes.ACCIDENT_EXPRESS_NOT_EXIST); } //工伤类型 if (StringUtils.isBlank(WorkInjuryDeclarationReqDTO.getWorkInjuryType())) { throw new AccidentException(AccidentResultCodes.WORK_INJURY_DECLARATION_TYPE_NULL); } //申报日期 if (WorkInjuryDeclarationReqDTO.getDeclareDate()==null) { throw new AccidentException(AccidentResultCodes.WORK_INJURY_DECLARATION_Date_NULL); } } }