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<List<WorkInjuryDeclarationPageRespDTO>> selectWorkInjuryDeclarationList(PageQuery<WorkInjuryDeclarationQuery> query) {
|
Long pageIndex = query.getPageIndex();
|
Long pageSize = query.getPageSize();
|
Page<WorkInjuryDeclarationInfoPageDO> page = new Page<>(pageIndex, pageSize);
|
|
WorkInjuryDeclarationDBQuery WorkInjuryDeclarationDBQuery = new WorkInjuryDeclarationDBQuery();
|
if (query.getSearchParams() != null) {
|
BeanUtils.copyProperties(query.getSearchParams(), WorkInjuryDeclarationDBQuery);
|
}
|
|
|
List<WorkInjuryDeclarationInfoPageDO> WorkInjuryDeclarationInfoPageDOList = workInjuryDeclarationInfoService.selectWorkInjuryDeclarationList(page, WorkInjuryDeclarationDBQuery);
|
List<WorkInjuryDeclarationPageRespDTO> respList = BeanCopyUtils.copyBeanList(WorkInjuryDeclarationInfoPageDOList, WorkInjuryDeclarationPageRespDTO.class);
|
|
|
Map<Long, String> depPool = new HashMap<>();
|
|
respList.forEach(WorkInjuryDeclarationPageRespDTO -> {
|
// 设置部门名称
|
if (!depPool.containsKey(WorkInjuryDeclarationPageRespDTO.getDeclareDepartmentId())) {
|
ResultVO<DepInfoRPCRespDTO> 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<WorkInjuryDeclarationFileReqDTO> WorkInjuryDeclarationFileReqDTOList){
|
List<WorkInjuryDeclarationFileInfo> 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<WorkInjuryDeclarationDetailRespDTO> 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<WorkInjuryDeclarationFileInfoDO> WorkInjuryDeclarationFileInfoDOList = workInjuryDeclarationFileInfoService.selectByWorkInjuryDeclarationId(id);
|
if (!CollectionUtils.isEmpty(WorkInjuryDeclarationFileInfoDOList)){
|
List<WorkInjuryDeclarationFileRespDTO> 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<WorkInjuryDeclarationFileReqDTO> WorkInjuryDeclarationFileReqDTOList){
|
|
List<WorkInjuryDeclarationFileInfoDO> WorkInjuryDeclarationFileInfoDOList = workInjuryDeclarationFileInfoService.selectByWorkInjuryDeclarationId(WorkInjuryDeclarationId);
|
List<Long> oldIdsList = WorkInjuryDeclarationFileInfoDOList.stream().map(WorkInjuryDeclarationFileInfoDO::getId).collect(Collectors.toList());
|
List<Long> newIdsList = new ArrayList<>();
|
|
//新增的附件集合
|
List<WorkInjuryDeclarationFileInfo> addList = new ArrayList<>();
|
//删除的附件集合(id)
|
List<Long> 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);
|
}
|
}
|
|
}
|