package com.gkhy.safePlatform.targetDuty.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.vo.ResultVO;
|
import com.gkhy.safePlatform.commons.vo.SearchResultVO;
|
import com.gkhy.safePlatform.targetDuty.entity.*;
|
import com.gkhy.safePlatform.targetDuty.model.dto.req.TargetCheckAndSubmitQueryCriteria;
|
import com.gkhy.safePlatform.targetDuty.model.dto.req.TargetDivideDetailQueryCriteria;
|
import com.gkhy.safePlatform.targetDuty.model.dto.req.TargetMngQueryCriteria;
|
import com.gkhy.safePlatform.targetDuty.model.dto.resp.TargetCheckAndSubmitDto;
|
import com.gkhy.safePlatform.targetDuty.model.dto.resp.TargetDivideDetailDto;
|
import com.gkhy.safePlatform.targetDuty.model.dto.resp.TargetMngDto;
|
import com.gkhy.safePlatform.targetDuty.repository.*;
|
import com.gkhy.safePlatform.targetDuty.service.CommonService;
|
import com.gkhy.safePlatform.targetDuty.service.TargetDivideDetailService;
|
import com.gkhy.safePlatform.targetDuty.service.TargetMngService;
|
import com.gkhy.safePlatform.targetDuty.utils.BeanToMapUtil;
|
import com.gkhy.safePlatform.targetDuty.utils.QueryHelpPlus;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import javax.annotation.Resource;
|
import java.beans.IntrospectionException;
|
import java.io.Serializable;
|
import java.lang.reflect.InvocationTargetException;
|
import java.util.*;
|
import java.util.function.Function;
|
import java.util.stream.Collectors;
|
|
/**
|
* 目标指标(TargetMng)表服务实现类
|
*
|
* @author xurui
|
* @since 2022-07-20 11:49:22
|
*/
|
@Service("targetMngService")
|
public class TargetMngServiceImpl extends ServiceImpl<TargetMngRepository, TargetMng> implements TargetMngService {
|
|
@Autowired
|
private TargetMngRepository targetMngRepository;
|
|
@Resource
|
private TargetDivideDetailService targetDivideDetailService;
|
|
@Autowired
|
private TargetDivideDetailRepository targetDivideDetailRepository;
|
|
@Resource
|
private TargetDutyWorkApproveRepository targetDutyWorkApproveRepository;
|
|
@Resource
|
private CommonService commonService;
|
|
@Autowired
|
private TargetTypeRepository targetTypeRepository;
|
|
@Autowired
|
private TargetExamineRepository targetExamineRepository;
|
|
@Override
|
public ResultVO queryAll(PageQuery<TargetMngQueryCriteria> pageQuery) {
|
Long pageIndex = pageQuery.getPageIndex();
|
Long pageSize = pageQuery.getPageSize();
|
IPage<TargetMng> page = new Page<>(pageIndex, pageSize);
|
|
page = baseMapper.selectPage(page,
|
QueryHelpPlus.getPredicate(TargetMng.class, pageQuery.getSearchParams()));
|
List<TargetMngDto> respList = BeanCopyUtils.copyBeanList(page.getRecords(), TargetMngDto.class);
|
respList.forEach(dto->{
|
//查询关联分解信息
|
TargetDivideDetailQueryCriteria criteria = new TargetDivideDetailQueryCriteria();
|
criteria.setTargetId(dto.getId());
|
List<TargetDivideDetailDto> respList1 = BeanCopyUtils.copyBeanList(targetDivideDetailService.queryAll(criteria), TargetDivideDetailDto.class);
|
|
// --------------------------- 获取部门信息-----------------------
|
//收集所用到的部门ID
|
Set<Long> collectDepIdSet = new HashSet();
|
respList1.forEach(f->{
|
collectDepIdSet.add(f.getDutyDepartmentId());
|
collectDepIdSet.add(f.getMakerDepartmentId());
|
});
|
//获取部门名集合
|
Map<Long,String> depNameMap = commonService.getDepName(collectDepIdSet);
|
|
respList1.forEach(f->{
|
f.setDutyDepartmentName(depNameMap.get(f.getDutyDepartmentId()));
|
f.setMakerDepartmentName(depNameMap.get(f.getMakerDepartmentId()));
|
});
|
|
|
// --------------------------- 获取目标分类名称-----------------------
|
//收集所用到的目标分类ID
|
Set<Long> collectTypeSet = new HashSet();
|
respList1.forEach(f->{
|
collectTypeSet.add(f.getTargetTypeId());
|
});
|
//获取目标分类名集合
|
if(!collectTypeSet.isEmpty()){
|
List<TargetType> typeList = targetTypeRepository.selectBatchIds(collectTypeSet); // TODO
|
Map<Long,String> typeNameMap = typeList.stream()
|
.collect(Collectors.toMap(TargetType::getId, TargetType::getTypeName,(k1, k2)->k1));
|
|
respList1.forEach(f->{
|
f.setTargetTypeName(typeNameMap.get(f.getDutyDepartmentId()));
|
});
|
}
|
|
dto.setTargetDivideDetailList(respList1);
|
});
|
|
return new SearchResultVO<>(
|
true,
|
pageIndex,
|
pageSize,page.getPages(),
|
page.getTotal(),
|
respList,
|
ResultCodes.OK
|
);
|
}
|
|
|
@Override
|
public List<TargetMng> queryAll(TargetMngQueryCriteria criteria) {
|
return baseMapper.selectList(QueryHelpPlus.getPredicate(TargetMng.class, criteria));
|
}
|
|
@Override
|
public Object selectOne(Serializable id) {
|
TargetMng targetMng = baseMapper.selectById(id);
|
if(targetMng == null){
|
return null;
|
}
|
TargetMngDto targetMngDto = BeanCopyUtils.copyBean(targetMng, TargetMngDto.class);
|
|
//查询关联分解信息
|
TargetDivideDetailQueryCriteria criteria = new TargetDivideDetailQueryCriteria();
|
criteria.setTargetId(targetMng.getId());
|
List<TargetDivideDetailDto> respList = BeanCopyUtils.copyBeanList(targetDivideDetailService.queryAll(criteria), TargetDivideDetailDto.class);
|
|
// --------------------------- 获取部门信息-----------------------
|
//收集所用到的部门ID
|
Set<Long> collectDepIdSet = new HashSet();
|
respList.forEach(f->{
|
collectDepIdSet.add(f.getDutyDepartmentId());
|
collectDepIdSet.add(f.getMakerDepartmentId());
|
});
|
//获取部门名集合
|
Map<Long,String> depNameMap = commonService.getDepName(collectDepIdSet);
|
|
respList.forEach(f->{
|
f.setDutyDepartmentName(depNameMap.get(f.getDutyDepartmentId()));
|
f.setMakerDepartmentName(depNameMap.get(f.getMakerDepartmentId()));
|
});
|
|
|
|
|
// --------------------------- 获取考核结果-----------------------
|
//收集所用到的分解详情ID
|
Set<Long> collectExamResultSet = new HashSet();
|
respList.forEach(f->{
|
collectExamResultSet.add(f.getId());
|
});
|
//获取核结果集合
|
if(!collectExamResultSet.isEmpty()){
|
List<TargetExamine> typeList = targetExamineRepository.selectList(new QueryWrapper<TargetExamine>().in("target_divide_detail_id",collectExamResultSet));
|
Map<Long,TargetExamine> examResultMap = typeList.stream()
|
.collect(Collectors.toMap(TargetExamine::getTargetDivideDetailId, Function.identity(),(k1, k2)->k1));
|
|
respList.forEach(f->{
|
TargetExamine targetExamine = examResultMap.get(f.getId());
|
if(targetExamine != null){
|
f.setExamineResult(targetExamine.getExamineResult());
|
f.setExamineDate(targetExamine.getExamineDate());
|
f.setExaminePersonId(targetExamine.getExaminePersonId());
|
f.setExaminePersonName(targetExamine.getExaminePersonName());
|
}
|
|
});
|
}
|
|
targetMngDto.setTargetDivideDetailList(respList);
|
return targetMngDto;
|
}
|
|
@Override
|
public ResultVO queryAll(Long uid, PageQuery<TargetCheckAndSubmitQueryCriteria> pageQuery) {
|
Long pageIndex = pageQuery.getPageIndex();
|
Long pageSize = pageQuery.getPageSize();
|
Page<TargetMng> page = new Page<>(pageIndex, pageSize);
|
|
page = baseMapper.selectPage(page,
|
QueryHelpPlus.getPredicate(TargetMng.class, pageQuery.getSearchParams()));
|
List<TargetCheckAndSubmitDto> respList = BeanCopyUtils.copyBeanList(page.getRecords(), TargetCheckAndSubmitDto.class);
|
|
// 判断审批人
|
respList.forEach(dto->{
|
List<TargetDutyWorkApprove> list = targetDutyWorkApproveRepository.selectList(
|
new QueryWrapper<TargetDutyWorkApprove>().eq("del_flag",0)
|
.eq("relate_type",pageQuery.getSearchParams().getRelateType())
|
.eq("relate_id",dto.getId())
|
.orderByDesc("sort"));
|
|
if (!CollectionUtils.isEmpty(list)) {
|
dto.setApproveId(list.get(0).getId());
|
dto.setApproveStatus(list.get(0).getApproveStatus());
|
dto.setApprovePersonId(list.get(0).getApprovePersonId());
|
// 审批中 判断审批人是否人与当前登录人
|
if (dto.getApproveStatus()!=null && dto.getApproveStatus()==2){
|
dto.setCheckApprove(dto.getApprovePersonId().equals(uid));
|
}
|
}
|
});
|
|
return new SearchResultVO<>(
|
true,
|
pageIndex,
|
pageSize,page.getPages(),
|
page.getTotal(),
|
respList,
|
ResultCodes.OK
|
);
|
}
|
|
@Override
|
public Object statistics(TargetMngQueryCriteria criteria) {
|
Map<String,String> map = new HashMap<>();
|
// 查询总数
|
Integer total = 0;
|
// 未完成数量
|
Integer complete=0;
|
|
// 查询目标已分解且事件类型对一个的目标
|
List<TargetMng> targetMngList = targetMngRepository.selectList(
|
new QueryWrapper<TargetMng>()
|
.eq("target_type",criteria.getTargetType())
|
.eq("divide_status",1)
|
);
|
if (!targetMngList.isEmpty()){
|
total = targetMngList.size();
|
// 查询目标下的所有分解项
|
for (TargetMng targetMng : targetMngList){
|
Boolean completeFlag = true;
|
List<TargetDivideDetail> targetDivideDetailList = targetDivideDetailRepository.selectList(
|
new QueryWrapper<TargetDivideDetail>()
|
.eq("target_id",targetMng.getId())
|
);
|
if (!targetDivideDetailList.isEmpty()){
|
// 查询分解项 是否已经审核通过
|
for (TargetDivideDetail targetDivideDetail :targetDivideDetailList){
|
List<TargetExamine> targetExamineList = targetExamineRepository.selectList(
|
new QueryWrapper<TargetExamine>()
|
.eq("target_divide_detail_id",targetDivideDetail.getId())
|
.eq("examine_result",1)
|
);
|
if (targetExamineList.isEmpty()){
|
completeFlag=false;
|
}
|
}
|
}
|
// 该目标中有未评价的或者不合格的
|
if (completeFlag){
|
complete++;
|
}
|
}
|
}
|
//已完成数
|
int noComplete = total-complete;
|
map.put("total",total+"");
|
map.put("noComplete",noComplete+"");
|
map.put("complete",complete+"");
|
return map;
|
}
|
|
|
|
}
|