package com.hssx.cloudmodel.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.hssx.cloudmodel.constant.Constant;
import com.hssx.cloudmodel.entity.*;
import com.hssx.cloudmodel.entity.vo.MouldVO;
import com.hssx.cloudmodel.entity.vo.UserVO;
import com.hssx.cloudmodel.mapper.*;
import com.hssx.cloudmodel.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hssx.cloudmodel.util.HttpRespMsg;
import com.hssx.cloudmodel.util.MD5Util;
import com.hssx.cloudmodel.util.PageUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
*
* 服务实现类
*
*
* @author 吴涛涛
* @since 2019-07-26
*/
@Service
public class UserServiceImpl extends ServiceImpl implements UserService {
@Resource
UserMapper userMapper;
@Resource
CompanyMapper companyMapper;
@Resource
UserCompanyMapper userCompanyMapper;
@Resource
ProjectUserMapper projectUserMapper;
@Resource
ProjectMapper projectMapper;
@Resource
ProjectApproveMapper projectApproveMapper;
@Override
public HttpRespMsg login(UserVO userVO, HttpServletRequest request) {
System.out.println("user" + userVO);
HttpRespMsg msg = new HttpRespMsg();
//验证用户名是否存在
QueryWrapper qw = new QueryWrapper<>();
qw.eq("account", userVO.getAccount());
Integer count = userMapper.selectCount(qw);
//验证用户名是否正确
if (count > 0) {
User newUser = userMapper.selectOne(qw);
//验证密码是否正确
if (MD5Util.getPassword(userVO.getPassword()).equals(newUser.getPassword())) {
newUser.setPassword("");
BeanUtils.copyProperties(newUser, userVO);
//判断该用户是否为某个项目的项目经理
if (projectMapper.selectCount(new QueryWrapper().eq("manager_id", newUser.getId())) > 0) {
userVO.setIsManager(1);
}
msg.data = userVO;
} else {
msg.setError("密码错误");
}
} else {
msg.setError("账号不存在");
}
return msg;
}
@Override
public HttpRespMsg pageList(PageUtil page, Integer companyId, Integer flag, String keyName, User user, Integer roleType) {
HttpRespMsg msg = new HttpRespMsg();
PageHelper.startPage(page.getPageNum(), page.getPageSize());
List users = userMapper.selectListByCondition(roleType, companyId, flag, user, keyName);
List projects = new ArrayList<>();
for (UserVO userVO : users) {
List set = new ArrayList<>();
set.add(-1);
List moulds = new ArrayList<>();
if (userVO.getId() != null) {
QueryWrapper qw = new QueryWrapper<>();
if (Constant.SYS_PARENT_ID == userVO.getParentId()) {
//系统超级管理员,可获得所有项目
projects = projectMapper.selectList(qw);
for (Project project : projects) {
set.add(project.getId());
}
} else if (Constant.SYS_ID == userVO.getParentId()) {
//资产方管理员,看到自己创建的项目
qw.select("id").eq("creator_id", user.getId());
projects = projectMapper.selectList(qw);
for (Project project : projects) {
set.add(project.getId());
}
} else {
QueryWrapper qwPro = new QueryWrapper<>();
qwPro.eq("manager_id", user.getId());
List projectList = projectMapper.selectList(qw);
for (Project project : projectList) {
set.add(project.getId());
}
//项目经理或者普通用户
List projectUsers = projectUserMapper.selectList(new QueryWrapper().eq("user_id", user.getId()));
for (ProjectUser projectUser : projectUsers) {
set.add(projectUser.getProjectId());
}
//作为审批人
List projectApproves = projectApproveMapper.selectList(new QueryWrapper().eq("approver_id", userVO.getId()));
for (ProjectApprove projectApprove : projectApproves) {
set.add(projectApprove.getProjectId());
}
qw.in("id", set);
projects = projectMapper.selectList(qw);
}
userVO.setProjects(projects);
} else {
msg.setError("当前用户未登录,或者用户不存在");
}
}
PageInfo pageInfos = new PageInfo<>(users);
msg.data = pageInfos;
return msg;
}
@Override
public HttpRespMsg deleteUser(User user) {
HttpRespMsg msg = new HttpRespMsg();
QueryWrapper qw = new QueryWrapper<>();
qw.eq("user_id", user.getId());
//普通用户应用到项目不能删除
Integer count = projectUserMapper.selectCount(qw);
if (count > 0) {
msg.setError("该用户已被应用到项目,暂不提供删除操作");
return msg;
}
//是项目经理不能删除
Integer countProject = projectMapper.selectCount(new QueryWrapper().eq("manager_id", user.getId()));
if (countProject > 0) {
msg.setError("该用户已被应用到项目,暂不提供删除操作");
return msg;
}
//删除用户
userMapper.deleteById(user.getId());
//删除合作的公司
userCompanyMapper.delete(new QueryWrapper().eq("user_id", user.getId()));
return msg;
}
@Override
public HttpRespMsg addAndUpdateUser(User user, Integer flag, Integer addType) {
//获取该账号的创建者
User parentUser = userMapper.selectById(user.getParentId());
HttpRespMsg msg = new HttpRespMsg();
if (Constant.SYS_PARENT_ID == parentUser.getParentId()) {
//此时是创建admind,当前创建人是超级管理员
int count = userMapper.selectCount(new QueryWrapper().eq("company_id", user.getCompanyId()).eq("parent_id", parentUser.getId()));
if (flag == 0) {
if (count > 0) {
//所选公司下的admin已存在
msg.setError("该公司下的管理员已存在");
return msg;
}
//添加用户
QueryWrapper qw = new QueryWrapper<>();
qw.eq("account", user.getAccount());
count = userMapper.selectCount(qw);
if (count > 0) {
User existingUser = userMapper.selectOne(qw);
msg.setError("当前账号已存在");
return msg;
} else {
//创建账号默认密码"000000"
user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
//获取角色所属的团体
Company company = companyMapper.selectById(user.getCompanyId());
if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.ASSETS_COMPANY);
user.setTeamName("资产方");
} else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.PRODUCER_COMPANY);
user.setTeamName("生产方");
}
userMapper.insert(user);
if(addType != null){
if (addType == 0) {
Company com = new Company();
com.setId(user.getCompanyId());
com.setAdministrator(user.getUsername());
com.setAdministratorId(user.getId());
companyMapper.updateById(com);
}
}
}
} else if (flag == 1) {
//更新角色信息
Company company = companyMapper.selectById(user.getCompanyId());
if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.ASSETS_COMPANY);
user.setTeamName("资产方");
} else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.PRODUCER_COMPANY);
user.setTeamName("生产方");
}
userMapper.updateById(user);
}
} else if (Constant.SYS_ID == parentUser.getParentId()) {
//admin创建用户
if (flag == 0) {
//添加用户
QueryWrapper qw = new QueryWrapper<>();
qw.eq("account", user.getAccount());
int count = userMapper.selectCount(qw);
if (count > 0) {
User existingUser = userMapper.selectOne(qw);
if (existingUser.getParentId() == parentUser.getId()) {
msg.setError("该账号已存在,请勿重新创建");
return msg;
} else {
//此时用户已经有了,则建立一条合作公司的关系
UserCompany userCompany = new UserCompany();
userCompany.setUserId(existingUser.getId());
userCompany.setBelongCompanyId(existingUser.getCompanyId());
userCompany.setCooperationCompanyId(parentUser.getCompanyId());
QueryWrapper qWra = new QueryWrapper<>(userCompany);
int userCompanyCount = userCompanyMapper.selectCount(qWra);
if (userCompanyCount == 0) {
userCompanyMapper.insert(userCompany);
}
}
} else {
//创建账号默认密码"000000"
user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
//获取角色所属的团体
Company company = companyMapper.selectById(user.getCompanyId());
if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.ASSETS_COMPANY);
user.setTeamName("资产方");
} else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.PRODUCER_COMPANY);
user.setTeamName("生产方");
}
userMapper.insert(user);
UserCompany userCompany = new UserCompany();
userCompany.setUserId(user.getId());
userCompany.setBelongCompanyId(user.getCompanyId());
userCompany.setCooperationCompanyId(parentUser.getCompanyId());
QueryWrapper qWra = new QueryWrapper<>(userCompany);
int userCompanyCount = userCompanyMapper.selectCount(qWra);
if (userCompanyCount == 0) {
userCompanyMapper.insert(userCompany);
}
}
} else if (flag == 1) {
//更新角色信息
Company company = companyMapper.selectById(user.getCompanyId());
if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.ASSETS_COMPANY);
user.setTeamName("资产方");
} else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.PRODUCER_COMPANY);
user.setTeamName("生产方");
}
userMapper.updateById(user);
}
} else {
//此时是项目经理创建人员
//查询创建该项目经理的人
User managerParent = userMapper.selectOne(new QueryWrapper().eq("id", parentUser.getParentId()));
if (flag == 0) {
//添加用户
QueryWrapper qw = new QueryWrapper<>();
qw.eq("account", user.getAccount());
int count = userMapper.selectCount(qw);
if (count > 0) {
//当前账号已被创建
User existingUser = userMapper.selectOne(qw);
//判断创建该账号的是admin或者是项目经理自己创建的账号,如果再次创建直接提示创建重复
if (existingUser.getParentId() == managerParent.getId() || existingUser.getParentId() == parentUser.getId()) {
msg.setError("该账号已存在,请勿重新创建");
return msg;
} else {
//此时用户已经有了,则建立一条合作公司的关系
UserCompany userCompany = new UserCompany();
userCompany.setUserId(existingUser.getId());
userCompany.setBelongCompanyId(existingUser.getCompanyId());
userCompany.setCooperationCompanyId(managerParent.getCompanyId());
QueryWrapper qWra = new QueryWrapper<>(userCompany);
int userCompanyCount = userCompanyMapper.selectCount(qWra);
if (userCompanyCount == 0) {
userCompanyMapper.insert(userCompany);
}
}
} else {
//创建账号默认密码"000000"
user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
//获取角色所属的团体
Company company = companyMapper.selectById(user.getCompanyId());
if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.ASSETS_COMPANY);
user.setTeamName("资产方");
} else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.PRODUCER_COMPANY);
user.setTeamName("生产方");
}
userMapper.insert(user);
UserCompany userCompany = new UserCompany();
userCompany.setUserId(user.getId());
userCompany.setBelongCompanyId(user.getCompanyId());
userCompany.setCooperationCompanyId(managerParent.getCompanyId());
QueryWrapper qWra = new QueryWrapper<>(userCompany);
int userCompanyCount = userCompanyMapper.selectCount(qWra);
if (userCompanyCount == 0) {
userCompanyMapper.insert(userCompany);
}
}
} else if (flag == 1) {
//更新角色信息
Company company = companyMapper.selectById(user.getCompanyId());
if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.ASSETS_COMPANY);
user.setTeamName("资产方");
} else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
user.setSubordinateType(Constant.PRODUCER_COMPANY);
user.setTeamName("生产方");
}
userMapper.updateById(user);
}
}
return msg;
}
}