package com.gkhy.assess.system.service.impl;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.gkhy.assess.common.api.CommonPage;
|
import com.gkhy.assess.common.enums.DeleteFlagEnum;
|
import com.gkhy.assess.common.enums.UserIdentityEnum;
|
import com.gkhy.assess.common.exception.ApiException;
|
import com.gkhy.assess.common.utils.PageUtil;
|
import com.gkhy.assess.system.domain.AssPlanPerson;
|
import com.gkhy.assess.system.domain.AssProject;
|
import com.gkhy.assess.system.domain.vo.PersonRecognitionVO;
|
import com.gkhy.assess.system.domain.vo.ProjectStaticVO;
|
import com.gkhy.assess.system.enums.ProgressPhaseEnum;
|
import com.gkhy.assess.system.enums.ReportProgressEnum;
|
import com.gkhy.assess.system.mapper.AssPlanPersonMapper;
|
import com.gkhy.assess.system.mapper.AssProjectMapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.gkhy.assess.system.domain.SysUser;
|
import com.gkhy.assess.system.service.AssProjectService;
|
import com.gkhy.assess.system.utils.ShiroUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.time.LocalDateTime;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 项目表 服务实现类
|
* </p>
|
*
|
* @author kzy
|
* @since 2023-12-11 14:16:18
|
*/
|
@Service
|
public class AssProjectServiceImpl extends ServiceImpl<AssProjectMapper, AssProject> implements AssProjectService {
|
@Autowired
|
private AssPlanPersonMapper planPersonMapper;
|
|
@Override
|
public CommonPage projectList(AssProject project) {
|
SysUser user= ShiroUtils.getSysUser();
|
if(!user.getIdentity().equals(UserIdentityEnum.MONITOR.getCode())){
|
//机构用户只能查看本机构的项目
|
if(user.getAgencyId()==null){
|
throw new ApiException("用户机构id为空");
|
}
|
project.setAgencyId(user.getAgencyId());
|
}
|
PageUtil.startPage();
|
List<AssProject> projects=baseMapper.projectList(project);
|
//获取签字确认人数
|
handleProjectRecognitionCount(projects);
|
return CommonPage.restPage(projects);
|
}
|
|
public void handleProjectRecognitionCount(List<AssProject> projects){
|
List<Long>projectIds=projects.stream().map(item -> item.getId()).collect(Collectors.toList());
|
if(!projectIds.isEmpty()) {
|
List<PersonRecognitionVO> personAndRecognitions = planPersonMapper.getPersonAndRecognitionCount(projectIds);
|
Map<Long, PersonRecognitionVO> map = personAndRecognitions.stream().collect(Collectors.toMap(PersonRecognitionVO::getProjectId, a -> a));
|
for (AssProject project : projects) {
|
PersonRecognitionVO personRecognitionVO = map.get(project.getId());
|
if (personRecognitionVO != null) {
|
project.setPersonRecognition(personRecognitionVO);
|
}
|
}
|
}
|
}
|
|
@Override
|
public AssProject getProjectById(Long projectId) {
|
return baseMapper.getProjectById(projectId);
|
}
|
|
@Override
|
public int addProject(AssProject project) {
|
//todo 校验用户,只有机构账号有权限创建项目
|
SysUser user= ShiroUtils.getSysUser();
|
if(!user.getIdentity().equals(UserIdentityEnum.AGENCY.getCode())){
|
throw new ApiException("无权操作,只有机构用户可以创建项目");
|
}
|
if(user.getAgencyId()==null){
|
throw new ApiException("用户机构id为空");
|
}
|
if(!checkNameUnique(project)){
|
throw new ApiException("项目名已存在");
|
}
|
project.setAgencyId(user.getAgencyId());
|
project.setReportProgress(ReportProgressEnum.ADD.getCode());
|
project.setCreateBy(ShiroUtils.getSysUser().getUsername());
|
int row=baseMapper.insert(project);
|
return row;
|
}
|
|
@Override
|
public int deleteProjectById(Long projectId) {
|
//todo 权限校验
|
SysUser user= ShiroUtils.getSysUser();
|
checkUserAllowed(projectId);
|
AssProject project=new AssProject()
|
.setId(projectId)
|
.setDelFlag(DeleteFlagEnum.DELETED.getCode());
|
project.setUpdateBy(user.getUsername());
|
return baseMapper.updateById(project);
|
}
|
|
@Override
|
public int editProject(AssProject project) {
|
Long projectId=project.getId();
|
if(projectId==null){
|
throw new ApiException("项目id不能为空");
|
}
|
checkUserAllowed(projectId);
|
if(!checkNameUnique(project)){
|
throw new ApiException("项目名已存在");
|
}
|
project.setAgencyId(null);//机构id不能修改
|
project.setReportProgress(null);//项目状态不能修改
|
project.setUpdateBy(ShiroUtils.getSysUser().getUsername());
|
int row =baseMapper.updateById(project);
|
return row;
|
}
|
|
@Override
|
public AssProject checkProjectDataScope(Long projectId) {
|
return null;
|
}
|
|
@Override
|
public Integer getProjectReportProgress(Long projectId) {
|
checkUserAllowed(projectId);
|
return baseMapper.getReportProgress(projectId);
|
}
|
|
|
@Override
|
public boolean checkNameUnique(AssProject project) {
|
Long projectId = project.getId()==null? -1L : project.getId();
|
AssProject pro = baseMapper.getProjectByName(project.getName());
|
if (pro!=null && pro.getId().longValue() != projectId.longValue())
|
{
|
return false;
|
}
|
return true;
|
}
|
|
@Override
|
public void checkReportProgress(Long projectId, ReportProgressEnum reportProgressEnum) {
|
Integer reportProgress= getProjectReportProgress(projectId);
|
if(reportProgressEnum.getCode()!=reportProgress){
|
throw new ApiException(String.format("项目状态不是%s,不能操作", reportProgressEnum.getInfo()));
|
}
|
}
|
|
@Override
|
public int changeReportProgress(Long projectId, ReportProgressEnum reportProgressEnum) {
|
AssProject project=new AssProject().setId(projectId)
|
.setReportProgress(reportProgressEnum.getCode())
|
.setPhase(ProgressPhaseEnum.getPhaseByProcess(reportProgressEnum.getCode()));
|
project.setUpdateBy(ShiroUtils.getSysUser().getUsername());
|
if(reportProgressEnum.getCode().equals(ReportProgressEnum.CONFIRM_FINAL.getCode())){
|
project.setFilingDate(LocalDateTime.now());
|
}
|
return baseMapper.updateById(project);
|
}
|
|
@Override
|
public CommonPage memberProjects(Long personId, Integer finish) {
|
SysUser user= ShiroUtils.getSysUser();
|
if(!user.getIdentity().equals(UserIdentityEnum.EXPERT.getCode())){
|
throw new ApiException("无权限,只有专家用户才能操作");
|
}
|
|
PageUtil.startPage();
|
List<AssProject> projects=baseMapper.getMemberProjectByUserId(personId,finish,user.getAgencyId());
|
if(projects.size()>0) {
|
getProjectPlanPerson(projects);
|
}
|
return CommonPage.restPage(projects);
|
}
|
|
@Override
|
public CommonPage leaderProjects(Long personId) {
|
SysUser user= ShiroUtils.getSysUser();
|
if(!user.getIdentity().equals(UserIdentityEnum.EXPERT.getCode())){
|
throw new ApiException("无权限,只有专家用户才能操作");
|
}
|
PageUtil.startPage();
|
List<AssProject> projects=baseMapper.getLeaderProjectByUserId(personId,user.getAgencyId());
|
return CommonPage.restPage(projects);
|
}
|
|
private void getProjectPlanPerson(List<AssProject> projects){
|
List<Long> planPersonIds=projects.stream().map(AssProject::getPlanPersonId).collect(Collectors.toList());
|
List<AssPlanPerson> planPersonList=planPersonMapper.getPlanPersonsByIds(planPersonIds);
|
Map<Long,AssPlanPerson> maps=planPersonList.stream().collect(Collectors.toMap(AssPlanPerson::getId,a -> a));
|
for(AssProject project:projects){
|
project.setPlanPerson(maps.get(project.getPlanPersonId()));
|
}
|
}
|
|
@Override
|
public ProjectStaticVO projectStat(AssProject project) {
|
SysUser user=ShiroUtils.getSysUser();
|
if(!user.getIdentity().equals(UserIdentityEnum.MONITOR.getCode())){
|
if(user.getAgencyId()==null){
|
throw new ApiException("用户机构id为空");
|
}
|
project.setAgencyId(user.getAgencyId());
|
}
|
Integer projectTotal=baseMapper.getProjectCount(project);
|
project.setPhase(ProgressPhaseEnum.RISK.getCode());
|
Integer riskTotal=baseMapper.getProjectCount(project);
|
|
project.setPhase(ProgressPhaseEnum.INVESTIGATION.getCode());
|
Integer investigationTotal=baseMapper.getProjectCount(project);
|
|
project.setPhase(ProgressPhaseEnum.REVIEW.getCode());
|
Integer reviewTotal=baseMapper.getProjectCount(project);
|
|
project.setPhase(ProgressPhaseEnum.REPORT.getCode());
|
Integer reportTotal=baseMapper.getProjectCount(project);
|
|
project.setPhase(ProgressPhaseEnum.ARCHIVE.getCode());
|
Integer archiveTotal=baseMapper.getProjectCount(project);
|
|
ProjectStaticVO projectStaticVO=new ProjectStaticVO()
|
.setProjectTotal(projectTotal)
|
.setRiskTotal(riskTotal)
|
.setInvestigationTotal(investigationTotal)
|
.setReviewTotal(reviewTotal)
|
.setReportTotal(reportTotal)
|
.setArchiveTotal(archiveTotal);
|
return projectStaticVO;
|
}
|
|
@Override
|
public Long getProjectAgencyId(Long projectId) {
|
AssProject project=getOne(Wrappers.<AssProject>lambdaQuery()
|
.select(AssProject::getAgencyId)
|
.eq(AssProject::getId,projectId)
|
.eq(AssProject::getDelFlag, DeleteFlagEnum.UN_DELETE.getCode()));
|
if(project==null){
|
throw new ApiException("项目不存在");
|
}
|
return project.getAgencyId();
|
}
|
|
@Override
|
public void checkUserAllowed(Long projectId) {
|
if(projectId==null){
|
throw new ApiException("项目id不能为空");
|
}
|
SysUser currentUser=ShiroUtils.getSysUser();
|
if(!Objects.equals(currentUser.getIdentity(),UserIdentityEnum.MONITOR.getCode())){
|
if(!Objects.equals(currentUser.getAgencyId(), getProjectAgencyId(projectId))){
|
throw new ApiException("没有权限操作其他机构数据");
|
}
|
}
|
}
|
}
|