UserServiceImpl.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. package com.hssx.cloudmodel.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.github.pagehelper.PageHelper;
  4. import com.github.pagehelper.PageInfo;
  5. import com.hssx.cloudmodel.constant.Constant;
  6. import com.hssx.cloudmodel.entity.*;
  7. import com.hssx.cloudmodel.entity.vo.UserVO;
  8. import com.hssx.cloudmodel.mapper.*;
  9. import com.hssx.cloudmodel.service.UserService;
  10. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  11. import com.hssx.cloudmodel.util.HttpRespMsg;
  12. import com.hssx.cloudmodel.util.ListUtil;
  13. import com.hssx.cloudmodel.util.MD5Util;
  14. import com.hssx.cloudmodel.util.PageUtil;
  15. import org.springframework.stereotype.Service;
  16. import javax.annotation.Resource;
  17. import javax.servlet.http.HttpServletRequest;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import java.util.UUID;
  21. import java.util.stream.Collectors;
  22. /**
  23. * @author 吴涛涛
  24. * @since 2019-07-26
  25. */
  26. @Service
  27. public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
  28. @Resource
  29. UserMapper userMapper;
  30. @Resource
  31. CompanyMapper companyMapper;
  32. @Resource
  33. UserCompanyMapper userCompanyMapper;
  34. @Resource
  35. ProjectUserMapper projectUserMapper;
  36. @Resource
  37. ProjectMapper projectMapper;
  38. @Resource
  39. ProjectApproveMapper projectApproveMapper;
  40. @Override
  41. public HttpRespMsg login(UserVO userVO, HttpServletRequest request) {
  42. System.out.println("user" + userVO);
  43. HttpRespMsg msg = new HttpRespMsg();
  44. //验证用户名是否存在
  45. QueryWrapper<User> qw = new QueryWrapper<>();
  46. qw.eq("account", userVO.getAccount());
  47. Integer count = userMapper.selectCount(qw);
  48. //验证用户名是否正确
  49. if (count > 0) {
  50. UserVO newUser = userMapper.getUserByAccount(userVO);
  51. //验证密码是否正确
  52. if (MD5Util.getPassword(userVO.getPassword()).equals(newUser.getPassword())) {
  53. newUser.setPassword("");
  54. //判断该用户是否为某个项目的项目经理
  55. if (projectMapper.selectCount(new QueryWrapper<Project>().eq("manager_id", newUser.getId())) > 0) {
  56. newUser.setIsManager(1);
  57. }
  58. msg.data = newUser;
  59. } else {
  60. msg.setError("密码错误");
  61. }
  62. } else {
  63. msg.setError("账号不存在");
  64. }
  65. return msg;
  66. }
  67. @Override
  68. public HttpRespMsg pageList(PageUtil page, Integer companyId, Integer flag, String keyName, User user, Integer roleType) {
  69. HttpRespMsg msg = new HttpRespMsg();
  70. PageHelper.startPage(page.getPageNum(), page.getPageSize());
  71. List<UserVO> users = new ArrayList<>();
  72. List<Integer> uIds = new ArrayList<>();
  73. if(Constant.SYS_PARENT_ID == user.getParentId()){
  74. users = userMapper.selectListByCondition(roleType, companyId, flag, user, keyName);
  75. } else if (Constant.SYS_ID == user.getParentId()) {
  76. QueryWrapper<Project> qwr = new QueryWrapper<>();
  77. //资产方管理员,看到自己创建的项目下的所有人
  78. qwr.select("id").eq("creator_id", user.getId());
  79. uIds = projectMapper.selectList(qwr).stream().map(Project::getManagerId).collect(Collectors.toList());
  80. List<Integer> projectIds = projectMapper.selectList(qwr).stream().map(Project::getId).collect(Collectors.toList());
  81. projectIds.add(-1);
  82. List<Integer> projectUserIds = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().in("project_id", projectIds)).stream().map(ProjectUser::getUserId).collect(Collectors.toList());
  83. uIds.addAll(projectUserIds);
  84. List<Integer> projectApproveIds = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().in("project_id", projectIds)).stream().map(ProjectApprove::getApproverId).collect(Collectors.toList());
  85. uIds.addAll(projectApproveIds);
  86. uIds.add(-1);
  87. users = userMapper.selectUserListByCondition(roleType, companyId, flag,keyName,uIds);
  88. } else {
  89. List<Integer> pIds = projectMapper.selectList(new QueryWrapper<Project>().eq("manager_id", user.getId())).stream().map(Project::getId).collect(Collectors.toList());
  90. pIds.add(-1);
  91. List<Integer> projectUserIds = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().in("project_id", pIds)).stream().map(ProjectUser::getUserId).collect(Collectors.toList());
  92. uIds.addAll(projectUserIds);
  93. List<Integer> projectApproveIds = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().in("project_id", pIds)).stream().map(ProjectApprove::getApproverId).collect(Collectors.toList());
  94. uIds.addAll(projectApproveIds);
  95. uIds.add(-1);
  96. users = userMapper.selectUserListByCondition(roleType, companyId, flag,keyName,uIds);
  97. }
  98. List<Project> projects = new ArrayList<>();
  99. for (UserVO userVO : users) {
  100. List<Integer> set = new ArrayList<>();
  101. set.add(-1);
  102. if (userVO.getId() != null) {
  103. QueryWrapper<Project> qw = new QueryWrapper<>();
  104. if (Constant.SYS_PARENT_ID == userVO.getParentId()) {
  105. //系统超级管理员,可获得所有项目
  106. projects = projectMapper.selectList(qw);
  107. for (Project project : projects) {
  108. set.add(project.getId());
  109. }
  110. userVO.setProjects(projects);
  111. } else if (Constant.SYS_ID == userVO.getParentId()) {
  112. //资产方管理员,看到自己创建的项目
  113. qw.select("id").eq("creator_id", userVO.getId());
  114. projects = projectMapper.selectList(qw);
  115. for (Project project : projects) {
  116. set.add(project.getId());
  117. }
  118. userVO.setProjects(projects);
  119. } else {
  120. QueryWrapper<Project> qwPro = new QueryWrapper<>();
  121. qwPro.eq("manager_id", userVO.getId());
  122. List<Project> projectList = projectMapper.selectList(qwPro);
  123. for (Project project : projectList) {
  124. set.add(project.getId());
  125. }
  126. //项目经理或者普通用户
  127. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().eq("user_id", userVO.getId()));
  128. for (ProjectUser projectUser : projectUsers) {
  129. set.add(projectUser.getProjectId());
  130. }
  131. //作为审批人
  132. List<ProjectApprove> projectApproves = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("approver_id", userVO.getId()));
  133. for (ProjectApprove projectApprove : projectApproves) {
  134. set.add(projectApprove.getProjectId());
  135. }
  136. qw.in("id", set);
  137. projects = projectMapper.selectList(qw);
  138. userVO.setProjects(projects);
  139. }
  140. } else {
  141. msg.setError("当前用户未登录,或者用户不存在");
  142. }
  143. }
  144. PageInfo<UserVO> pageInfos = new PageInfo<>(users);
  145. msg.data = pageInfos;
  146. return msg;
  147. }
  148. @Override
  149. public HttpRespMsg deleteUser(User user) {
  150. HttpRespMsg msg = new HttpRespMsg();
  151. QueryWrapper<ProjectUser> qw = new QueryWrapper<>();
  152. qw.eq("user_id", user.getId());
  153. //普通用户应用到项目不能删除
  154. Integer count = projectUserMapper.selectCount(qw);
  155. if (count > 0) {
  156. msg.setError("该用户已被应用到项目,暂不提供删除操作");
  157. return msg;
  158. }
  159. //是项目经理不能删除
  160. Integer countProject = projectMapper.selectCount(new QueryWrapper<Project>().eq("manager_id", user.getId()));
  161. if (countProject > 0) {
  162. msg.setError("该用户已被应用到项目,暂不提供删除操作");
  163. return msg;
  164. }
  165. //删除用户
  166. userMapper.deleteById(user.getId());
  167. //删除合作的公司
  168. userCompanyMapper.delete(new QueryWrapper<UserCompany>().eq("user_id", user.getId()));
  169. return msg;
  170. }
  171. @Override
  172. public HttpRespMsg changeUserInfo(User user) {
  173. HttpRespMsg msg = new HttpRespMsg();
  174. User newUser = new User();
  175. newUser.setId(user.getId());
  176. if (null != user.getPassword()) {
  177. newUser.setPassword(MD5Util.getPassword(user.getPassword()));
  178. }
  179. if(null != user.getUsername()){
  180. newUser.setUsername(user.getUsername());
  181. }
  182. userMapper.updateById(newUser);
  183. return msg;
  184. }
  185. @Override
  186. public HttpRespMsg addAndUpdateUser(User user, Integer flag, Integer addType, String projectIds) {
  187. //获取该账号的创建者
  188. User parentUser = userMapper.selectById(user.getParentId());
  189. HttpRespMsg msg = new HttpRespMsg();
  190. if (Constant.SYS_PARENT_ID == parentUser.getParentId()) {
  191. //此时是创建admind,当前创建人是超级管理员,此时没有项目id
  192. int count = userMapper.selectCount(new QueryWrapper<User>().eq("company_id", user.getCompanyId()).eq("parent_id", parentUser.getId()));
  193. if (flag == 0) {
  194. if (count > 0) {
  195. //所选公司下的admin已存在
  196. msg.setError("该公司下的管理员已存在");
  197. return msg;
  198. }
  199. //添加用户
  200. QueryWrapper<User> qw = new QueryWrapper<>();
  201. qw.eq("account", user.getAccount());
  202. count = userMapper.selectCount(qw);
  203. if (count > 0) {
  204. User existingUser = userMapper.selectOne(qw);
  205. msg.setError("当前账号已存在");
  206. return msg;
  207. } else {
  208. //创建账号默认密码"000000"
  209. user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
  210. user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
  211. //获取角色所属的团体
  212. Company company = companyMapper.selectById(user.getCompanyId());
  213. if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  214. user.setSubordinateType(Constant.ASSETS_COMPANY);
  215. user.setTeamName("资产方");
  216. } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  217. user.setSubordinateType(Constant.PRODUCER_COMPANY);
  218. user.setTeamName("生产方");
  219. }
  220. userMapper.insert(user);
  221. if (addType != null) {
  222. if (addType == 0) {
  223. Company com = new Company();
  224. com.setId(user.getCompanyId());
  225. com.setAdministrator(user.getUsername());
  226. com.setAdministratorId(user.getId());
  227. companyMapper.updateById(com);
  228. }
  229. }
  230. }
  231. } else if (flag == 1) {
  232. //更新角色信息
  233. // Company company = companyMapper.selectById(user.getCompanyId());
  234. // if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  235. // user.setSubordinateType(Constant.ASSETS_COMPANY);
  236. // user.setTeamName("资产方");
  237. // } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  238. // user.setSubordinateType(Constant.PRODUCER_COMPANY);
  239. // user.setTeamName("生产方");
  240. // }
  241. userMapper.updateById(user);
  242. }
  243. } else if (Constant.SYS_ID == parentUser.getParentId()) {
  244. //admin创建用户
  245. if (flag == 0) {
  246. //添加用户
  247. QueryWrapper<User> qw = new QueryWrapper<>();
  248. qw.eq("account", user.getAccount());
  249. int count = userMapper.selectCount(qw);
  250. if (count > 0) {
  251. User existingUser = userMapper.selectOne(qw);
  252. if (existingUser.getParentId() == parentUser.getId()) {
  253. msg.setError("该账号已存在,请勿重新创建");
  254. return msg;
  255. } else {
  256. //此时用户已经有了,则建立一条合作公司的关系
  257. UserCompany userCompany = new UserCompany();
  258. userCompany.setUserId(existingUser.getId());
  259. userCompany.setBelongCompanyId(existingUser.getCompanyId());
  260. userCompany.setCooperationCompanyId(parentUser.getCompanyId());
  261. QueryWrapper<UserCompany> qWra = new QueryWrapper<>(userCompany);
  262. int userCompanyCount = userCompanyMapper.selectCount(qWra);
  263. if (userCompanyCount == 0) {
  264. userCompanyMapper.insert(userCompany);
  265. }
  266. //添加项目参与人记录
  267. if (projectIds != null) {
  268. List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(projectIds);
  269. ids.stream().forEach(e ->{
  270. ProjectUser projectUser = new ProjectUser();
  271. projectUser.setProjectId(e);
  272. projectUser.setSubordinate(existingUser.getCompanyId());
  273. projectUser.setUserId(existingUser.getId());
  274. projectUser.setSubordinateType(existingUser.getSubordinateType());
  275. projectUserMapper.insert(projectUser);
  276. });
  277. }
  278. }
  279. } else {
  280. //创建账号默认密码"000000"
  281. user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
  282. user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
  283. //获取角色所属的团体
  284. Company company = companyMapper.selectById(user.getCompanyId());
  285. if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  286. user.setSubordinateType(Constant.ASSETS_COMPANY);
  287. user.setTeamName("资产方");
  288. } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  289. user.setSubordinateType(Constant.PRODUCER_COMPANY);
  290. user.setTeamName("生产方");
  291. }
  292. userMapper.insert(user);
  293. UserCompany userCompany = new UserCompany();
  294. userCompany.setUserId(user.getId());
  295. userCompany.setBelongCompanyId(user.getCompanyId());
  296. userCompany.setCooperationCompanyId(parentUser.getCompanyId());
  297. QueryWrapper<UserCompany> qWra = new QueryWrapper<>(userCompany);
  298. int userCompanyCount = userCompanyMapper.selectCount(qWra);
  299. if (userCompanyCount == 0) {
  300. userCompanyMapper.insert(userCompany);
  301. }
  302. //添加项目参与人记录
  303. if (projectIds != null) {
  304. List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(projectIds);
  305. ids.stream().forEach(e ->{
  306. ProjectUser projectUser = new ProjectUser();
  307. projectUser.setProjectId(e);
  308. projectUser.setSubordinate(user.getCompanyId());
  309. projectUser.setUserId(user.getId());
  310. projectUser.setSubordinateType(user.getSubordinateType());
  311. projectUserMapper.insert(projectUser);
  312. });
  313. }
  314. }
  315. } else if (flag == 1) {
  316. //更新角色信息
  317. // Company company = companyMapper.selectById(user.getCompanyId());
  318. // if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  319. // user.setSubordinateType(Constant.ASSETS_COMPANY);
  320. // user.setTeamName("资产方");
  321. // } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  322. // user.setSubordinateType(Constant.PRODUCER_COMPANY);
  323. // user.setTeamName("生产方");
  324. // }
  325. userMapper.updateById(user);
  326. }
  327. } else {
  328. //此时是项目经理创建人员
  329. //查询创建该项目经理的人
  330. User managerParent = userMapper.selectOne(new QueryWrapper<User>().eq("id", parentUser.getParentId()));
  331. if (flag == 0) {
  332. //添加用户
  333. QueryWrapper<User> qw = new QueryWrapper<>();
  334. qw.eq("account", user.getAccount());
  335. int count = userMapper.selectCount(qw);
  336. if (count > 0) {
  337. //当前账号已被创建
  338. User existingUser = userMapper.selectOne(qw);
  339. //查询该账号是否已参与创建项目经理的admin公司下的项目
  340. //得到admin公司下的所有项目
  341. List<Project> projects = projectMapper.selectList(new QueryWrapper<Project>().eq("owner_company", managerParent.getCompanyId()));
  342. List<Integer> ids = new ArrayList<>();
  343. ids.add(-1);
  344. for (Project project : projects) {
  345. ids.add(project.getId());
  346. }
  347. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().in("project_id", ids).eq("user_id", existingUser.getId()));
  348. if (projectUsers.size() > 0) {
  349. msg.setError("该账号已参与本资产方公司下的其他项目,请前往本项目详情添加即可");
  350. return msg;
  351. }
  352. List<ProjectApprove> projectApproves = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("approver_id", existingUser.getId()).in("project_id", ids));
  353. if (projectApproves.size() > 0) {
  354. msg.setError("该账号已参与本资产方公司下的其他项目,请前往本项目详情添加即可");
  355. return msg;
  356. }
  357. //此时用户已经有了,创建人不是该忍之前参与过的项目的公司下的项目经理创建,则建立一条合作公司的关系
  358. UserCompany userCompany = new UserCompany();
  359. userCompany.setUserId(existingUser.getId());
  360. userCompany.setBelongCompanyId(existingUser.getCompanyId());
  361. userCompany.setCooperationCompanyId(managerParent.getCompanyId());
  362. QueryWrapper<UserCompany> qWra = new QueryWrapper<>(userCompany);
  363. int userCompanyCount = userCompanyMapper.selectCount(qWra);
  364. if (userCompanyCount == 0) {
  365. userCompanyMapper.insert(userCompany);
  366. }
  367. //添加项目参与人记录
  368. if (projectIds != null) {
  369. ids = ListUtil.convertIntegerIdsArrayToList(projectIds);
  370. ids.stream().forEach(e ->{
  371. ProjectUser projectUser = new ProjectUser();
  372. projectUser.setProjectId(e);
  373. projectUser.setSubordinate(existingUser.getCompanyId());
  374. projectUser.setUserId(existingUser.getId());
  375. projectUser.setSubordinateType(existingUser.getSubordinateType());
  376. projectUserMapper.insert(projectUser);
  377. });
  378. }
  379. } else {
  380. //创建账号默认密码"000000"
  381. user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
  382. user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
  383. //获取角色所属的团体
  384. Company company = companyMapper.selectById(user.getCompanyId());
  385. if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  386. user.setSubordinateType(Constant.ASSETS_COMPANY);
  387. user.setTeamName("资产方");
  388. } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  389. user.setSubordinateType(Constant.PRODUCER_COMPANY);
  390. user.setTeamName("生产方");
  391. }
  392. userMapper.insert(user);
  393. UserCompany userCompany = new UserCompany();
  394. userCompany.setUserId(user.getId());
  395. userCompany.setBelongCompanyId(user.getCompanyId());
  396. userCompany.setCooperationCompanyId(managerParent.getCompanyId());
  397. QueryWrapper<UserCompany> qWra = new QueryWrapper<>(userCompany);
  398. int userCompanyCount = userCompanyMapper.selectCount(qWra);
  399. if (userCompanyCount == 0) {
  400. userCompanyMapper.insert(userCompany);
  401. }
  402. //添加项目参与人记录
  403. if (projectIds != null) {
  404. List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(projectIds);
  405. ids.stream().forEach(e ->{
  406. ProjectUser projectUser = new ProjectUser();
  407. projectUser.setProjectId(e);
  408. projectUser.setSubordinate(user.getCompanyId());
  409. projectUser.setUserId(user.getId());
  410. projectUser.setSubordinateType(user.getSubordinateType());
  411. projectUserMapper.insert(projectUser);
  412. });
  413. }
  414. }
  415. } else if (flag == 1) {
  416. //更新角色信息
  417. // Company company = companyMapper.selectById(user.getCompanyId());
  418. // if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  419. // user.setSubordinateType(Constant.ASSETS_COMPANY);
  420. // user.setTeamName("资产方");
  421. // } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  422. // user.setSubordinateType(Constant.PRODUCER_COMPANY);
  423. // user.setTeamName("生产方");
  424. // }
  425. userMapper.updateById(user);
  426. }
  427. }
  428. return msg;
  429. }
  430. }