package cn.cslg.pas.service.business; import cn.cslg.pas.common.dto.AddProjectPersonDTO; import cn.cslg.pas.common.dto.QueryProjectPersonDTO; import cn.cslg.pas.common.model.cronModel.Personnel; import cn.cslg.pas.common.model.cronModel.PersonnelVO; import cn.cslg.pas.common.model.cronModel.Records; import cn.cslg.pas.common.utils.CacheUtils; import cn.cslg.pas.common.utils.LoginUtils; import cn.cslg.pas.common.vo.ProjectPersonVO; import cn.cslg.pas.domain.business.AssoProductPerson; import cn.cslg.pas.domain.business.AssoProjectPerson; import cn.cslg.pas.domain.business.Project; import cn.cslg.pas.exception.XiaoShiException; import cn.cslg.pas.mapper.AssoProductPersonMapper; import cn.cslg.pas.mapper.AssoProjectPersonMapper; import cn.cslg.pas.service.permissions.PermissionService; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 项目与可见人员关联表Service层 * * @Author lrj * @Date 2023/11/10 */ @Service public class AssoProjectPersonService extends ServiceImpl { @Autowired private PermissionService permissionService; @Autowired private CacheUtils cacheUtils; @Autowired private LoginUtils loginUtils; @Autowired @Lazy private ProjectService projectService; /** * 添加分享人 * * @param addProjectPersonDTO * @return */ public List addProjectShare(AddProjectPersonDTO addProjectPersonDTO) { PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); Integer roleType = 3; List reIds = new ArrayList<>(); List personIds = addProjectPersonDTO.getPersonIds(); Integer projectId = addProjectPersonDTO.getProjectId(); //根据ids查询是否存在 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.select(AssoProjectPerson::getPersonId); queryWrapper.in(AssoProjectPerson::getPersonId, personIds) .eq(AssoProjectPerson::getProjectId, projectId) .eq(AssoProjectPerson::getRole, roleType); List assoProjectPersonList = this.list(queryWrapper); List ids = assoProjectPersonList.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList()); if (ids != null) { personIds.removeAll(ids); } if (personIds.size() != 0) { for (String personId : personIds) { AssoProjectPerson assoProjectPerson = new AssoProjectPerson(); assoProjectPerson.setProjectId(projectId); assoProjectPerson.setPersonId(personId); assoProjectPerson.setCreateId(personnelVO.getId()); assoProjectPerson.setRole(roleType); assoProjectPerson.insert(); reIds.add(assoProjectPerson.getId()); } } return reIds; } /** * 批量删除分享记录 * * @param ids * @return */ public List removeProjectShare(List ids) { if (ids == null || ids.size() == 0) { throw new XiaoShiException("请选择分享记录"); } this.removeBatchByIds(ids); return ids; } /** * 查询分享记录 * * @param queryProjectPersonDTO * @return */ public Records queryProjectShare(QueryProjectPersonDTO queryProjectPersonDTO) { Records records = new Records(); Integer projectId = queryProjectPersonDTO.getProjectId(); String personName = queryProjectPersonDTO.getPersonName(); Long current = queryProjectPersonDTO.getCurrent(); Long size = queryProjectPersonDTO.getSize(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(AssoProjectPerson::getProjectId, projectId); List ids = new ArrayList<>(); if (personName != null && personName.trim() != "") { ids = permissionService.getPersonIdsByName(personName); } if (ids.size() != 0) { queryWrapper.in(AssoProjectPerson::getProjectId, ids); } Page page = this.page(new Page<>(current, size), queryWrapper); List assoProjectPersonList = page.getRecords(); List projectPersonVOS = this.loadData(assoProjectPersonList); records.setData(projectPersonVOS); records.setTotal(page.getTotal()); records.setCurrent(current); records.setSize(size); return records; } private List loadData(List assoProjectPersonList) { List projectPersonVOS = new ArrayList<>(); if (assoProjectPersonList == null || assoProjectPersonList.size() == 0) { return projectPersonVOS; } List personIds = new ArrayList<>(); assoProjectPersonList.forEach(item -> { if (item.getPersonId() != null) { personIds.add(item.getPersonId()); } if (item.getCreateId() != null) { personIds.add(item.getCreateId()); } }); List personnels = new ArrayList<>(); if (personIds.size() != 0) { try { String res = permissionService.getPersonnelByIdsFromPCS(personIds); JSONObject jsonObject = JSONObject.parseObject(res); personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class); } catch (Exception e) { } } for (AssoProjectPerson assoProjectPerson : assoProjectPersonList) { ProjectPersonVO projectPersonVO = new ProjectPersonVO(); Personnel personnel1 = personnels.stream().filter(item -> item.getId().equals(assoProjectPerson.getPersonId())).findFirst().orElse(null); Personnel personnel2 = personnels.stream().filter(item -> item.getId().equals(assoProjectPerson.getCreateId())).findFirst().orElse(null); BeanUtils.copyProperties(assoProjectPerson, projectPersonVO); if (personnel1 != null) { projectPersonVO.setPersonName(personnel1.getPersonnelName()); } if (personnel2 != null) { projectPersonVO.setCreateName(personnel2.getPersonnelName()); } projectPersonVOS.add(projectPersonVO); } return projectPersonVOS; } public List getRootProjectIds() { PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId()); Integer roleType = personnelVO.getRoleType(); Integer tenantId = personnelVO.getTenantId(); if (roleType != null && roleType.equals(1)) { return null; } String createId = personnelVO.getId(); List ids = new ArrayList<>(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.select(Project::getId); if (roleType != null && roleType.equals(2)) { queryWrapper.eq(Project::getTenantId, tenantId); } else { queryWrapper.eq(Project::getCreateId, createId); } queryWrapper.eq(Project::getCreateId, createId) .or().eq(Project::getHeadId, createId); List projects = projectService.list(queryWrapper); if (projects != null && projects.size() > 0) { List temIds = projects.stream().map(Project::getId).collect(Collectors.toList()); ids.addAll(temIds); } LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); queryWrapper1.select(AssoProjectPerson::getProjectId); queryWrapper1.eq(AssoProjectPerson::getPersonId, createId); List assoProjectPersonList = this.list(queryWrapper1); if (assoProjectPersonList != null && assoProjectPersonList.size() > 0) { List temIds = assoProjectPersonList.stream().map(AssoProjectPerson::getProjectId).collect(Collectors.toList()); ids.addAll(temIds); } return ids; } public List getProjectShareIds(Integer projectId) { List personIds = new ArrayList<>(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(AssoProjectPerson::getProjectId, projectId); List assoProjectPersonList = this.list(queryWrapper); if (assoProjectPersonList != null && assoProjectPersonList.size() > 0) { personIds = assoProjectPersonList.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList()); } return personIds; } public List queryIfExist(Integer roleType, List personIds, Integer projectId) { List assoProjectPersonList = new ArrayList<>(); if (personIds == null || personIds.size() == 0) { } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(AssoProjectPerson::getProjectId, projectId) .eq(AssoProjectPerson::getPersonId, personIds) .eq(AssoProjectPerson::getRole, roleType); return assoProjectPersonList; } @Transactional(rollbackFor = Exception.class) public void addProjectPeople(Integer roleType, Integer projectId, List personIds) { if (!CollectionUtils.isEmpty(personIds)) { List assoProjectPersonList = new ArrayList<>(); personIds.forEach(item -> { AssoProjectPerson assoProjectPerson = new AssoProjectPerson(); assoProjectPerson.setPersonId(item); assoProjectPerson.setRole(roleType); assoProjectPerson.setProjectId(projectId); assoProjectPerson.setCreateId(loginUtils.getId().toString()); assoProjectPersonList.add(assoProjectPerson); }); this.saveBatch(assoProjectPersonList); } } @Transactional(rollbackFor = Exception.class) public void updateProjectPeople(Integer roleType, Integer projectId, List personIds) { LambdaQueryWrapper assoProjectPersonLambdaQueryWrapper = new LambdaQueryWrapper<>(); assoProjectPersonLambdaQueryWrapper.eq(AssoProjectPerson::getProjectId, projectId) .eq(AssoProjectPerson::getRole, roleType); this.remove(assoProjectPersonLambdaQueryWrapper); /** *装载参与人 */ if (!CollectionUtils.isEmpty(personIds)) { List assoProjectPersonList = new ArrayList<>(); personIds.forEach(item -> { AssoProjectPerson assoProjectPerson = new AssoProjectPerson(); assoProjectPerson.setPersonId(item); assoProjectPerson.setRole(roleType); assoProjectPerson.setProjectId(projectId); assoProjectPerson.setCreateId(loginUtils.getId().toString()); assoProjectPersonList.add(assoProjectPerson); }); this.saveBatch(assoProjectPersonList); } } }