package cn.cslg.pas.service;
import cn.cslg.pas.common.model.dto.PasUserDTO;
import cn.cslg.pas.common.model.vo.PasUserVO;
import cn.cslg.pas.common.model.vo.ProjectUserVO;
import cn.cslg.pas.common.utils.DateUtils;
import cn.cslg.pas.common.utils.Response;
import cn.cslg.pas.domain.ProjectUser;
import cn.cslg.pas.mapper.ProjectUserMapper;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
*
* 分配表 服务类
*
*
* @author 王岩
* @since 2022-02-18
*/
@Service
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class ProjectUserService extends ServiceImpl {
private final OAuth2Service oAuth2Service;
public ProjectUser getProjectUserByProjectIdAndUserId(Integer projectId, Integer userId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProjectUser::getProjectId, projectId);
queryWrapper.eq(ProjectUser::getUserId, userId);
return this.getOne(queryWrapper);
}
public List getProjectUserByUserId(Integer userId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProjectUser::getUserId, userId);
return this.list(queryWrapper);
}
public List getProIdByUserId(Integer userId) {
return this.getProjectUserByUserId(userId).stream().map(ProjectUser::getProjectId).collect(Collectors.toList());
}
public List getProjectUserIdByProjectId(Integer projectId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ProjectUser::getProjectId, projectId);
return this.list(queryWrapper).stream().map(ProjectUser::getUserId).collect(Collectors.toList());
}
public List getListByProIdAndUserIds(List userIds, Integer projectId) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(ProjectUser::getUserId, userIds);
queryWrapper.eq(ProjectUser::getProjectId, projectId);
return this.list(queryWrapper);
}
public IPage getPageList(ProjectUserVO params) throws IOException {
//根据专题库id和类型获得人员id
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProjectUser::getProjectId, params.getProjectId());
if (params.getType() != null) {
wrapper.eq(ProjectUser::getType, params.getType());
}
List projectUserList = this.list(wrapper);
List userIds = projectUserList.stream().map(ProjectUser::getUserId).collect(Collectors.toList());
if (userIds.size() == 0) {
IPage tem = new Page<>();
tem.setSize(10);
tem.setTotal(0);
return tem;
}
PasUserDTO pasUserDTO = new PasUserDTO();
pasUserDTO.setUserIds(userIds);
pasUserDTO.setUsername(params.getUsername());
pasUserDTO.setName(params.getName());
pasUserDTO.setCurrent(params.getCurrent());
pasUserDTO.setSize(params.getSize());
String res = oAuth2Service.getPASAssignedUser(pasUserDTO);
JSONObject jsonObject = JSONObject.parseObject(res);
IPage pageList = new Page<>();
pageList.setTotal(Integer.parseInt(jsonObject.get("total").toString()));
pageList.setSize(Integer.parseInt(jsonObject.get("size").toString()));
List records = JSONArray.parseArray(jsonObject.get("records").toString(), PasUserVO.class);
List list = new ArrayList<>();
for (PasUserVO item : records) {
ProjectUser projectUser = projectUserList.stream().filter(tem -> tem.getUserId().equals(item.getId())).findFirst().orElse(new ProjectUser());
projectUser.setName(item.getName());
projectUser.setUsername(item.getUsername());
list.add(projectUser);
}
//根据
//根据人员姓名,id,账号,分页信息查询人员
pageList.setRecords(list);
return pageList;
}
@Transactional
public String add(ProjectUser projectUser) {
if (projectUser.getUserIds() != null && projectUser.getUserIds().size() != 0) {
List tempList = this.getListByProIdAndUserIds(projectUser.getUserIds(), projectUser.getProjectId()).stream().map(ProjectUser::getUserId).collect(Collectors.toList());
List userList = new ArrayList<>();
projectUser.getUsers().forEach(item -> {
ProjectUser user = new ProjectUser();
user.setUserId(item.getUserId());
user.setProjectId(projectUser.getProjectId());
user.setCreateTime(DateUtils.getDateTime());
user.setRemark(projectUser.getRemark());
user.setType(projectUser.getType());
user.setTenantId(item.getTenantId());
if (!tempList.contains(item.getUserId())) {
userList.add(user);
}
});
if (userList.size() != 0) {
this.saveOrUpdateBatch(userList);
}
return Response.success();
} else {
projectUser.setCreateTime(DateUtils.getDateTime());
projectUser.insert();
return Response.success(projectUser.getId());
}
}
public String edit(ProjectUser projectUser) {
projectUser.updateById();
return Response.success();
}
public String delete(Integer id) {
this.removeById(id);
return Response.success();
}
public void deleteByProjectId(Integer projectId) {
this.remove(Wrappers.lambdaQuery().eq(ProjectUser::getProjectId, projectId));
}
}