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.ListUtil; import com.hssx.cloudmodel.util.MD5Util; import com.hssx.cloudmodel.util.PageUtil; import org.springframework.beans.BeanUtils; 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) { UserVO newUser = userMapper.getUserByAccount(userVO); //验证密码是否正确 if (MD5Util.getPassword(userVO.getPassword()).equals(newUser.getPassword())) { newUser.setPassword(""); //判断该用户是否为某个项目的项目经理 if (projectMapper.selectCount(new QueryWrapper().eq("manager_id", newUser.getId())) > 0) { newUser.setIsManager(1); } msg.data = newUser; } 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(qwPro); 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 changeUserInfo(User user) { HttpRespMsg msg = new HttpRespMsg(); User newUser = new User(); newUser.setId(user.getId()); if (null != user.getPassword()) { newUser.setPassword(MD5Util.getPassword(user.getPassword())); } if(null != user.getUsername()){ newUser.setUsername(user.getUsername()); } userMapper.updateById(newUser); return msg; } @Override public HttpRespMsg addAndUpdateUser(User user, Integer flag, Integer addType, String projectIds) { //获取该账号的创建者 User parentUser = userMapper.selectById(user.getParentId()); HttpRespMsg msg = new HttpRespMsg(); if (Constant.SYS_PARENT_ID == parentUser.getParentId()) { //此时是创建admind,当前创建人是超级管理员,此时没有项目id 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); } //添加项目参与人记录 if (projectIds != null) { List ids = ListUtil.convertIntegerIdsArrayToList(projectIds); ids.stream().forEach(e ->{ ProjectUser projectUser = new ProjectUser(); projectUser.setProjectId(e); projectUser.setSubordinate(existingUser.getCompanyId()); projectUser.setUserId(existingUser.getId()); projectUser.setSubordinateType(existingUser.getSubordinateType()); projectUserMapper.insert(projectUser); }); } } } 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); } //添加项目参与人记录 if (projectIds != null) { List ids = ListUtil.convertIntegerIdsArrayToList(projectIds); ids.stream().forEach(e ->{ ProjectUser projectUser = new ProjectUser(); projectUser.setProjectId(e); projectUser.setSubordinate(user.getCompanyId()); projectUser.setUserId(user.getId()); projectUser.setSubordinateType(user.getSubordinateType()); projectUserMapper.insert(projectUser); }); } } } 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公司下的项目 //得到admin公司下的所有项目 List projects = projectMapper.selectList(new QueryWrapper().eq("owner_company", managerParent.getCompanyId())); List ids = new ArrayList<>(); ids.add(-1); for (Project project : projects) { ids.add(project.getId()); } List projectUsers = projectUserMapper.selectList(new QueryWrapper().in("project_id", ids).eq("user_id", existingUser.getId())); if (projectUsers.size() > 0) { msg.setError("该账号已参与本资产方公司下的其他项目,请前往本项目详情添加即可"); return msg; } List projectApproves = projectApproveMapper.selectList(new QueryWrapper().eq("approver_id", existingUser.getId()).in("project_id", ids)); if (projectApproves.size() > 0) { msg.setError("该账号已参与本资产方公司下的其他项目,请前往本项目详情添加即可"); return msg; } //此时用户已经有了,创建人不是该忍之前参与过的项目的公司下的项目经理创建,则建立一条合作公司的关系 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); } //添加项目参与人记录 if (projectIds != null) { ids = ListUtil.convertIntegerIdsArrayToList(projectIds); ids.stream().forEach(e ->{ ProjectUser projectUser = new ProjectUser(); projectUser.setProjectId(e); projectUser.setSubordinate(existingUser.getCompanyId()); projectUser.setUserId(existingUser.getId()); projectUser.setSubordinateType(existingUser.getSubordinateType()); projectUserMapper.insert(projectUser); }); } } 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); } //添加项目参与人记录 if (projectIds != null) { List ids = ListUtil.convertIntegerIdsArrayToList(projectIds); ids.stream().forEach(e ->{ ProjectUser projectUser = new ProjectUser(); projectUser.setProjectId(e); projectUser.setSubordinate(user.getCompanyId()); projectUser.setUserId(user.getId()); projectUser.setSubordinateType(user.getSubordinateType()); projectUserMapper.insert(projectUser); }); } } } 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; } }