package com.gkhy.assess.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.gkhy.assess.common.enums.DeleteFlagEnum;
import com.gkhy.assess.common.exception.ApiException;
import com.gkhy.assess.common.utils.StringUtils;
import com.gkhy.assess.system.domain.AssPlanPerson;
import com.gkhy.assess.system.domain.SysUser;
import com.gkhy.assess.system.enums.PlayRoleEnum;
import com.gkhy.assess.system.mapper.AssPlanPersonMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.assess.system.mapper.SysUserMapper;
import com.gkhy.assess.system.service.AssPlanPersonService;
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.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 评价项目组成员表 服务实现类
*
*
* @author kzy
* @since 2023-12-12 10:46:54
*/
@Service
public class AssPlanPersonServiceImpl extends ServiceImpl implements AssPlanPersonService {
@Autowired
private AssProjectService projectService;
@Autowired
private SysUserMapper sysUserMapper;
@Override
public List getByProjectId(Long projectId) {
projectService.checkUserAllowed(projectId);
return baseMapper.getPlanPersonByProjectId(projectId);
}
@Override
public int addPlanPerson(AssPlanPerson planPerson) {
projectService.checkUserAllowed(planPerson.getProjectId());
checkPersonUnique(planPerson);
planPerson.setCreateBy(ShiroUtils.getSysUser().getUsername());
return baseMapper.insert(planPerson);
}
@Override
public void checkPersonUnique(AssPlanPerson planPerson) {
if(planPerson.getPlayRole()==null){
planPerson.setPlayRole(PlayRoleEnum.PROJECT_MEMBER.getCode());
}
LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery()
.eq(AssPlanPerson::getPersonId, planPerson.getPersonId())
.eq(AssPlanPerson::getDelFlag, DeleteFlagEnum.UN_DELETE)
.eq(AssPlanPerson::getProjectId, planPerson.getProjectId())
.eq(AssPlanPerson::getPlayRole,planPerson.getPlayRole());
if(planPerson.getId()!=null){
lambdaQueryWrapper.ne(AssPlanPerson::getId,planPerson.getId());
}
AssPlanPerson pPerson= getOne(lambdaQueryWrapper);
if(pPerson!=null){
PlayRoleEnum playRoleEnum=PlayRoleEnum.getInfoByCode(pPerson.getPlayRole());
SysUser sysUser=sysUserMapper.selectById(planPerson.getPersonId());
if(sysUser==null){
throw new ApiException("选择的用户不存在");
}
String message=playRoleEnum!=null?playRoleEnum.getInfo():"";
if(StringUtils.isBlank(message)){
message=String.format("用户<%s>已担任职务",sysUser.getName());
}else{
message=String.format("用户<%s>已担任%s",sysUser.getName(),message);
}
throw new ApiException(message);
}
}
@Override
public AssPlanPerson getPlanPersonByPersonId(Long personId,Long projectId) {
return getOne(Wrappers.lambdaQuery()
.eq(AssPlanPerson::getPersonId,personId)
.eq(AssPlanPerson::getDelFlag,DeleteFlagEnum.UN_DELETE.getCode())
.eq(AssPlanPerson::getProjectId,projectId));
}
@Override
public int getMajorPlanPersonCountByProject(Long projectId) {
return baseMapper.getMajorPlanPersonCountByProject(projectId);
}
@Override
public int editPlanPerson(AssPlanPerson planPerson) {
projectService.checkUserAllowed(planPerson.getProjectId());
if(planPerson.getPersonId()!=null){
checkPersonUnique(planPerson);
}
planPerson.setUpdateBy(ShiroUtils.getSysUser().getUsername());
return baseMapper.updateById(planPerson);
}
@Override
public int deletePlanPersonById(Long planPersonId) {
AssPlanPerson planPerson=getById(planPersonId);
projectService.checkUserAllowed(planPerson.getProjectId());
planPerson=new AssPlanPerson().setId(planPersonId)
.setDelFlag(DeleteFlagEnum.DELETED.getCode());
planPerson.setUpdateBy(ShiroUtils.getSysUser().getUsername());
return baseMapper.updateById(planPerson);
}
@Override
public int deletePlanPersonByPersonId(Long personId,Long projectId,Integer playCode) {
return baseMapper.update(null,Wrappers.lambdaUpdate()
.set(AssPlanPerson::getDelFlag,DeleteFlagEnum.DELETED.getCode())
.set(AssPlanPerson::getUpdateBy,ShiroUtils.getSysUser().getUsername())
.eq(AssPlanPerson::getPersonId,personId)
.eq(AssPlanPerson::getProjectId,projectId)
.eq(AssPlanPerson::getPlayRole,playCode));
}
}