UserServiceImpl.java 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  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. @Resource
  41. CustomCompanyMapper customCompanyMapper;
  42. @Override
  43. public HttpRespMsg login(UserVO userVO, HttpServletRequest request) {
  44. System.out.println("user" + userVO);
  45. HttpRespMsg msg = new HttpRespMsg();
  46. //验证用户名是否存在
  47. QueryWrapper<User> qw = new QueryWrapper<>();
  48. qw.eq("account", userVO.getAccount());
  49. Integer count = userMapper.selectCount(qw);
  50. //验证用户名是否正确
  51. if (count > 0) {
  52. UserVO newUser = userMapper.getUserByAccount(userVO);
  53. //验证密码是否正确
  54. if (MD5Util.getPassword(userVO.getPassword()).equals(newUser.getPassword())) {
  55. newUser.setPassword("");
  56. //判断该用户是否为某个项目的项目经理
  57. if (projectMapper.selectCount(new QueryWrapper<Project>().eq("manager_id", newUser.getId())) > 0) {
  58. newUser.setIsManager(1);
  59. }
  60. msg.data = newUser;
  61. } else {
  62. msg.setError("密码错误");
  63. }
  64. } else {
  65. msg.setError("账号不存在");
  66. }
  67. return msg;
  68. }
  69. @Override
  70. public HttpRespMsg pageList(PageUtil page, Integer companyId, Integer flag, String keyName, User user, Integer roleType) {
  71. HttpRespMsg msg = new HttpRespMsg();
  72. PageHelper.startPage(page.getPageNum(), page.getPageSize());
  73. List<UserVO> users = new ArrayList<>();
  74. List<Integer> uIds = new ArrayList<>();
  75. if (Constant.SYS_PARENT_ID == user.getParentId()) {
  76. users = userMapper.selectListByCondition(roleType, companyId, flag, user, keyName);
  77. } else if (Constant.SYS_ID == user.getParentId()) {
  78. if (user.getSubordinateType() == 0) {
  79. QueryWrapper<Project> qwr = new QueryWrapper<>();
  80. //资产方管理员,看到自己创建的项目下的所有人以及和自己公司建立联系的人
  81. qwr.select("id").eq("creator_id", user.getId());
  82. uIds = projectMapper.selectList(qwr).stream().map(Project::getManagerId).collect(Collectors.toList());
  83. List<Integer> projectIds = projectMapper.selectList(qwr).stream().map(Project::getId).collect(Collectors.toList());
  84. projectIds.add(-1);
  85. List<Integer> projectUserIds = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().in("project_id", projectIds)).stream().map(ProjectUser::getUserId).collect(Collectors.toList());
  86. uIds.addAll(projectUserIds);
  87. List<Integer> projectApproveIds = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().in("project_id", projectIds)).stream().map(ProjectApprove::getApproverId).collect(Collectors.toList());
  88. uIds.addAll(projectApproveIds);
  89. //与本公司合作的用户ids
  90. List<Integer> cooperationUids = userCompanyMapper.selectList(new QueryWrapper<UserCompany>().eq("cooperation_company_id", user.getCompanyId())).stream().map(UserCompany::getUserId).collect(Collectors.toList());
  91. uIds.addAll(cooperationUids);
  92. uIds.add(-1);
  93. users = userMapper.selectUserListByCondition(roleType, companyId, flag, keyName, uIds,user);
  94. } else if (user.getSubordinateType() == 1) {
  95. // List<Integer> projectIds = customCompanyMapper.selectList(new QueryWrapper<CustomCompany>().eq("company_id", user.getCompanyId())).stream().map(CustomCompany::getProjectId).collect(Collectors.toList());
  96. // projectIds.add(-1);
  97. // uIds = projectMapper.selectList(new QueryWrapper<Project>().in("id", projectIds)).stream().map(Project::getManagerId).collect(Collectors.toList());
  98. // List<Integer> projectUserIds = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().in("project_id", projectIds)).stream().map(ProjectUser::getUserId).collect(Collectors.toList());
  99. // uIds.addAll(projectUserIds);
  100. // List<Integer> projectApproveIds = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().in("project_id", projectIds)).stream().map(ProjectApprove::getApproverId).collect(Collectors.toList());
  101. // uIds.addAll(projectApproveIds);
  102. uIds = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId())).stream().map(User::getId).collect(Collectors.toList());
  103. uIds.add(-1);
  104. users = userMapper.selectUserListByCondition(roleType, companyId, flag, keyName, uIds,user);
  105. //去除项目经理自己
  106. }
  107. } else {
  108. List<Integer> pIds = projectMapper.selectList(new QueryWrapper<Project>().eq("manager_id", user.getId())).stream().map(Project::getId).collect(Collectors.toList());
  109. pIds.add(-1);
  110. List<Integer> projectUserIds = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().in("project_id", pIds)).stream().map(ProjectUser::getUserId).collect(Collectors.toList());
  111. uIds.addAll(projectUserIds);
  112. List<Integer> projectApproveIds = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().in("project_id", pIds)).stream().map(ProjectApprove::getApproverId).collect(Collectors.toList());
  113. uIds.addAll(projectApproveIds);
  114. uIds.add(-1);
  115. users = userMapper.selectUserListByCondition(roleType, companyId, flag, keyName, uIds,user);
  116. }
  117. List<Project> projects = new ArrayList<>();
  118. for (UserVO userVO : users) {
  119. List<Integer> set = new ArrayList<>();
  120. set.add(-1);
  121. if (userVO.getId() != null) {
  122. QueryWrapper<Project> qw = new QueryWrapper<>();
  123. //当前登录人是什么人
  124. if (Constant.SYS_PARENT_ID == user.getParentId()) {
  125. //超级管理员
  126. //看到该人参与的所有项目
  127. QueryWrapper<Project> qwPro = new QueryWrapper<>();
  128. qwPro.eq("manager_id", userVO.getId());
  129. List<Project> projectList = projectMapper.selectList(qwPro);
  130. for (Project project : projectList) {
  131. set.add(project.getId());
  132. }
  133. //项目经理或者普通用户
  134. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().eq("user_id", userVO.getId()));
  135. for (ProjectUser projectUser : projectUsers) {
  136. set.add(projectUser.getProjectId());
  137. }
  138. //作为审批人
  139. List<ProjectApprove> projectApproves = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("approver_id", userVO.getId()));
  140. for (ProjectApprove projectApprove : projectApproves) {
  141. set.add(projectApprove.getProjectId());
  142. }
  143. qw.in("id", set);
  144. projects = projectMapper.selectList(qw);
  145. userVO.setProjects(projects);
  146. } else if (Constant.SYS_ID == user.getParentId()) {
  147. List<Integer> proIds = projectMapper.selectList(new QueryWrapper<Project>().eq("creator_id", user.getId())).stream().map(Project::getId).collect(Collectors.toList());
  148. if (user.getSubordinateType() == 0) {
  149. //看到该人参与的所有项目
  150. QueryWrapper<Project> qwPro = new QueryWrapper<>();
  151. qwPro.eq("manager_id", userVO.getId());
  152. List<Project> projectList = projectMapper.selectList(qwPro);
  153. for (Project project : projectList) {
  154. set.add(project.getId());
  155. }
  156. //项目经理或者普通用户
  157. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().eq("user_id", userVO.getId()));
  158. for (ProjectUser projectUser : projectUsers) {
  159. set.add(projectUser.getProjectId());
  160. }
  161. //作为审批人
  162. List<ProjectApprove> projectApproves = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("approver_id", userVO.getId()));
  163. for (ProjectApprove projectApprove : projectApproves) {
  164. set.add(projectApprove.getProjectId());
  165. }
  166. set.retainAll(proIds);
  167. set.add(-1);
  168. qw.in("id", set);
  169. projects = projectMapper.selectList(qw);
  170. userVO.setProjects(projects);
  171. } else if (user.getSubordinateType() == 1) {
  172. List<Integer> projectIds = customCompanyMapper.selectList(new QueryWrapper<CustomCompany>().eq("company_id", user.getCompanyId())).stream().map(CustomCompany::getProjectId).collect(Collectors.toList());
  173. projectIds.add(-1);
  174. // if (user.getSubordinateType() == 0) {
  175. //看到该人参与的所有项目
  176. QueryWrapper<Project> qwPro = new QueryWrapper<>();
  177. qwPro.eq("manager_id", userVO.getId());
  178. List<Project> projectList = projectMapper.selectList(qwPro);
  179. for (Project project : projectList) {
  180. set.add(project.getId());
  181. }
  182. //项目经理或者普通用户
  183. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().eq("user_id", userVO.getId()));
  184. for (ProjectUser projectUser : projectUsers) {
  185. set.add(projectUser.getProjectId());
  186. }
  187. //作为审批人
  188. List<ProjectApprove> projectApproves = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("approver_id", userVO.getId()));
  189. for (ProjectApprove projectApprove : projectApproves) {
  190. set.add(projectApprove.getProjectId());
  191. }
  192. set.retainAll(projectIds);
  193. set.add(-1);
  194. qw.in("id", set);
  195. projects = projectMapper.selectList(qw);
  196. userVO.setProjects(projects);
  197. // }
  198. }
  199. }else{
  200. List<Integer> pIds = projectMapper.selectList(new QueryWrapper<Project>().eq("manager_id", user.getId())).stream().map(Project::getId).collect(Collectors.toList());
  201. pIds.add(-1);
  202. // if (user.getSubordinateType() == 0) {
  203. //看到该人参与的所有项目
  204. QueryWrapper<Project> qwPro = new QueryWrapper<>();
  205. qwPro.eq("manager_id", userVO.getId());
  206. List<Project> projectList = projectMapper.selectList(qwPro);
  207. for (Project project : projectList) {
  208. set.add(project.getId());
  209. }
  210. //项目经理或者普通用户
  211. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().eq("user_id", userVO.getId()));
  212. for (ProjectUser projectUser : projectUsers) {
  213. set.add(projectUser.getProjectId());
  214. }
  215. //作为审批人
  216. List<ProjectApprove> projectApproves = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("approver_id", userVO.getId()));
  217. for (ProjectApprove projectApprove : projectApproves) {
  218. set.add(projectApprove.getProjectId());
  219. }
  220. set.retainAll(pIds);
  221. set.add(-1);
  222. qw.in("id", set);
  223. projects = projectMapper.selectList(qw);
  224. userVO.setProjects(projects);
  225. // }
  226. }
  227. } else {
  228. msg.setError("当前用户未登录,或者用户不存在");
  229. }
  230. }
  231. PageInfo<UserVO> pageInfos = new PageInfo<>(users);
  232. msg.data = pageInfos;
  233. return msg;
  234. }
  235. @Override
  236. public HttpRespMsg deleteUser(User user) {
  237. HttpRespMsg msg = new HttpRespMsg();
  238. QueryWrapper<ProjectUser> qw = new QueryWrapper<>();
  239. qw.eq("user_id", user.getId());
  240. //普通用户应用到项目不能删除
  241. Integer count = projectUserMapper.selectCount(qw);
  242. if (count > 0) {
  243. msg.setError("该用户已被应用到项目,暂不提供删除操作");
  244. return msg;
  245. }
  246. //是项目经理不能删除
  247. Integer countProject = projectMapper.selectCount(new QueryWrapper<Project>().eq("manager_id", user.getId()));
  248. if (countProject > 0) {
  249. msg.setError("该用户已被应用到项目,暂不提供删除操作");
  250. return msg;
  251. }
  252. //删除用户
  253. userMapper.deleteById(user.getId());
  254. //删除合作的公司
  255. userCompanyMapper.delete(new QueryWrapper<UserCompany>().eq("user_id", user.getId()));
  256. return msg;
  257. }
  258. @Override
  259. public HttpRespMsg changeUserInfo(User user) {
  260. HttpRespMsg msg = new HttpRespMsg();
  261. User newUser = new User();
  262. newUser.setId(user.getId());
  263. if (null != user.getPassword()) {
  264. newUser.setPassword(MD5Util.getPassword(user.getPassword()));
  265. }
  266. if (null != user.getUsername()) {
  267. newUser.setUsername(user.getUsername());
  268. }
  269. userMapper.updateById(newUser);
  270. return msg;
  271. }
  272. @Override
  273. public HttpRespMsg addAndUpdateUser(User user, Integer flag, Integer addType, String projectIds) {
  274. //获取该账号的创建者
  275. User parentUser = userMapper.selectById(user.getParentId());
  276. HttpRespMsg msg = new HttpRespMsg();
  277. if (Constant.SYS_PARENT_ID == parentUser.getParentId()) {
  278. //此时是创建admind,当前创建人是超级管理员,此时没有项目id
  279. int count = userMapper.selectCount(new QueryWrapper<User>().eq("company_id", user.getCompanyId()).eq("parent_id", parentUser.getId()));
  280. if (flag == 0) {
  281. if (count > 0) {
  282. //所选公司下的admin已存在
  283. msg.setError("该公司下的管理员已存在");
  284. return msg;
  285. }
  286. //添加用户
  287. QueryWrapper<User> qw = new QueryWrapper<>();
  288. qw.eq("account", user.getAccount());
  289. count = userMapper.selectCount(qw);
  290. if (count > 0) {
  291. User existingUser = userMapper.selectOne(qw);
  292. msg.setError("当前账号已存在");
  293. return msg;
  294. } else {
  295. //创建账号默认密码"000000"
  296. user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
  297. user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
  298. //获取角色所属的团体
  299. Company company = companyMapper.selectById(user.getCompanyId());
  300. if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  301. user.setSubordinateType(Constant.ASSETS_COMPANY);
  302. user.setTeamName("资产方");
  303. } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  304. user.setSubordinateType(Constant.PRODUCER_COMPANY);
  305. user.setTeamName("生产方");
  306. }
  307. userMapper.insert(user);
  308. if (addType != null) {
  309. if (addType == 0) {
  310. Company com = new Company();
  311. com.setId(user.getCompanyId());
  312. com.setAdministrator(user.getUsername());
  313. com.setAdministratorId(user.getId());
  314. companyMapper.updateById(com);
  315. }
  316. }
  317. }
  318. } else if (flag == 1) {
  319. //更新角色信息
  320. // Company company = companyMapper.selectById(user.getCompanyId());
  321. // if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  322. // user.setSubordinateType(Constant.ASSETS_COMPANY);
  323. // user.setTeamName("资产方");
  324. // } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  325. // user.setSubordinateType(Constant.PRODUCER_COMPANY);
  326. // user.setTeamName("生产方");
  327. // }
  328. userMapper.updateById(user);
  329. }
  330. } else if (Constant.SYS_ID == parentUser.getParentId()) {
  331. //admin创建用户
  332. if (flag == 0) {
  333. //添加用户
  334. QueryWrapper<User> qw = new QueryWrapper<>();
  335. qw.eq("account", user.getAccount());
  336. int count = userMapper.selectCount(qw);
  337. if (count > 0) {
  338. User existingUser = userMapper.selectOne(qw);
  339. if(user.getCompanyId() != existingUser.getCompanyId() || existingUser.getParentId()==1){
  340. msg.setError("创建账号失败");
  341. return msg;
  342. }
  343. List<Integer> pIds = projectMapper.selectList(new QueryWrapper<Project>().eq("owner_company", parentUser.getCompanyId())).stream().map(Project::getId).collect(Collectors.toList());
  344. pIds.add(-1);
  345. List<Integer> managerIds = projectMapper.selectList(new QueryWrapper<Project>().eq("owner_company", parentUser.getCompanyId())).stream().map(Project::getManagerId).collect(Collectors.toList());
  346. List<Integer> usersIds = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().in("project_id", pIds)).stream().map(ProjectUser::getUserId).collect(Collectors.toList());
  347. List<Integer> projectApproveIds = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().in("project_id", pIds)).stream().map(ProjectApprove::getApproverId).collect(Collectors.toList());
  348. usersIds.add(-1);
  349. usersIds.addAll(managerIds);
  350. usersIds.addAll(projectApproveIds);
  351. // if (usersIds.contains(existingUser.getId())) {
  352. // msg.setError("该账号已参与本资产方公司下的其他项目,请前往本项目详情添加即可");
  353. // return msg;
  354. // }
  355. // List<Integer> uids = userMapper.selectList(new QueryWrapper<User>().eq("parent_id", parentUser.getId())).stream().map(User::getId).collect(Collectors.toList());
  356. // uids.add(-1);
  357. // Integer countUser = userMapper.selectCount(new QueryWrapper<User>().in("parent_id", uids));
  358. if (usersIds.contains(existingUser.getId())) {
  359. msg.setError("该账号已存在,请勿重新创建");
  360. return msg;
  361. } else {
  362. //此时用户已经有了,则建立一条合作公司的关系
  363. UserCompany userCompany = new UserCompany();
  364. userCompany.setUserId(existingUser.getId());
  365. userCompany.setBelongCompanyId(existingUser.getCompanyId());
  366. userCompany.setCooperationCompanyId(parentUser.getCompanyId());
  367. QueryWrapper<UserCompany> qWra = new QueryWrapper<>(userCompany);
  368. int userCompanyCount = userCompanyMapper.selectCount(qWra);
  369. if (userCompanyCount == 0) {
  370. userCompanyMapper.insert(userCompany);
  371. }
  372. //添加项目参与人记录
  373. if (projectIds != null) {
  374. List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(projectIds);
  375. ids.stream().forEach(e -> {
  376. ProjectUser projectUser = new ProjectUser();
  377. projectUser.setProjectId(e);
  378. projectUser.setSubordinate(existingUser.getCompanyId());
  379. projectUser.setUserId(existingUser.getId());
  380. projectUser.setSubordinateType(existingUser.getSubordinateType());
  381. projectUserMapper.insert(projectUser);
  382. });
  383. }
  384. }
  385. } else {
  386. //创建账号默认密码"000000"
  387. user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
  388. user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
  389. //获取角色所属的团体
  390. Company company = companyMapper.selectById(user.getCompanyId());
  391. if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  392. user.setSubordinateType(Constant.ASSETS_COMPANY);
  393. user.setTeamName("资产方");
  394. } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  395. user.setSubordinateType(Constant.PRODUCER_COMPANY);
  396. user.setTeamName("生产方");
  397. }
  398. userMapper.insert(user);
  399. UserCompany userCompany = new UserCompany();
  400. userCompany.setUserId(user.getId());
  401. userCompany.setBelongCompanyId(user.getCompanyId());
  402. userCompany.setCooperationCompanyId(parentUser.getCompanyId());
  403. QueryWrapper<UserCompany> qWra = new QueryWrapper<>(userCompany);
  404. int userCompanyCount = userCompanyMapper.selectCount(qWra);
  405. if (userCompanyCount == 0) {
  406. userCompanyMapper.insert(userCompany);
  407. }
  408. //添加项目参与人记录
  409. if (projectIds != null) {
  410. List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(projectIds);
  411. ids.stream().forEach(e -> {
  412. ProjectUser projectUser = new ProjectUser();
  413. projectUser.setProjectId(e);
  414. projectUser.setSubordinate(user.getCompanyId());
  415. projectUser.setUserId(user.getId());
  416. projectUser.setSubordinateType(user.getSubordinateType());
  417. projectUserMapper.insert(projectUser);
  418. });
  419. }
  420. }
  421. } else if (flag == 1) {
  422. //更新角色信息
  423. // Company company = companyMapper.selectById(user.getCompanyId());
  424. // if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  425. // user.setSubordinateType(Constant.ASSETS_COMPANY);
  426. // user.setTeamName("资产方");
  427. // } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  428. // user.setSubordinateType(Constant.PRODUCER_COMPANY);
  429. // user.setTeamName("生产方");
  430. // }
  431. userMapper.updateById(user);
  432. }
  433. } else {
  434. //此时是项目经理创建人员
  435. //查询创建该项目经理的人
  436. User managerParent = userMapper.selectOne(new QueryWrapper<User>().eq("id", parentUser.getParentId()));
  437. if (flag == 0) {
  438. //添加用户
  439. QueryWrapper<User> qw = new QueryWrapper<>();
  440. qw.eq("account", user.getAccount());
  441. int count = userMapper.selectCount(qw);
  442. if (count > 0) {
  443. //当前账号已被创建
  444. User existingUser = userMapper.selectOne(qw);
  445. if(user.getCompanyId() != existingUser.getCompanyId() || existingUser.getParentId()==1){
  446. msg.setError("创建账号失败");
  447. return msg;
  448. }
  449. //查询该账号是否已参与创建项目经理的admin公司下的项目
  450. //得到admin公司下的所有项目
  451. List<Integer> ids = projectMapper.selectList(new QueryWrapper<Project>().eq("owner_company", managerParent.getCompanyId())).stream().map(Project::getId).collect(Collectors.toList());
  452. ids.add(-1);
  453. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().in("project_id", ids).eq("user_id", existingUser.getId()));
  454. if (projectUsers.size() > 0) {
  455. msg.setError("该账号已参与本资产方公司下的其他项目,请前往本项目详情添加即可");
  456. return msg;
  457. }
  458. List<ProjectApprove> projectApproves = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("approver_id", existingUser.getId()).in("project_id", ids));
  459. if (projectApproves.size() > 0) {
  460. msg.setError("该账号已参与本资产方公司下的其他项目,请前往本项目详情添加即可");
  461. return msg;
  462. }
  463. //此时用户已经有了,创建人不是该人之前参与过的项目的公司下的项目经理创建,则建立一条合作公司的关系
  464. UserCompany userCompany = new UserCompany();
  465. userCompany.setUserId(existingUser.getId());
  466. userCompany.setBelongCompanyId(existingUser.getCompanyId());
  467. userCompany.setCooperationCompanyId(managerParent.getCompanyId());
  468. QueryWrapper<UserCompany> qWra = new QueryWrapper<>(userCompany);
  469. int userCompanyCount = userCompanyMapper.selectCount(qWra);
  470. if (userCompanyCount == 0) {
  471. userCompanyMapper.insert(userCompany);
  472. }
  473. //添加项目参与人记录
  474. if (projectIds != null) {
  475. ids = ListUtil.convertIntegerIdsArrayToList(projectIds);
  476. ids.stream().forEach(e -> {
  477. ProjectUser projectUser = new ProjectUser();
  478. projectUser.setProjectId(e);
  479. projectUser.setSubordinate(existingUser.getCompanyId());
  480. projectUser.setUserId(existingUser.getId());
  481. projectUser.setSubordinateType(existingUser.getSubordinateType());
  482. projectUserMapper.insert(projectUser);
  483. });
  484. }
  485. } else {
  486. //创建账号默认密码"000000"
  487. user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
  488. user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
  489. //获取角色所属的团体
  490. Company company = companyMapper.selectById(user.getCompanyId());
  491. if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  492. user.setSubordinateType(Constant.ASSETS_COMPANY);
  493. user.setTeamName("资产方");
  494. } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  495. user.setSubordinateType(Constant.PRODUCER_COMPANY);
  496. user.setTeamName("生产方");
  497. }
  498. userMapper.insert(user);
  499. UserCompany userCompany = new UserCompany();
  500. userCompany.setUserId(user.getId());
  501. userCompany.setBelongCompanyId(user.getCompanyId());
  502. userCompany.setCooperationCompanyId(managerParent.getCompanyId());
  503. QueryWrapper<UserCompany> qWra = new QueryWrapper<>(userCompany);
  504. int userCompanyCount = userCompanyMapper.selectCount(qWra);
  505. if (userCompanyCount == 0) {
  506. userCompanyMapper.insert(userCompany);
  507. }
  508. //添加项目参与人记录
  509. if (projectIds != null) {
  510. List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(projectIds);
  511. ids.stream().forEach(e -> {
  512. ProjectUser projectUser = new ProjectUser();
  513. projectUser.setProjectId(e);
  514. projectUser.setSubordinate(user.getCompanyId());
  515. projectUser.setUserId(user.getId());
  516. projectUser.setSubordinateType(user.getSubordinateType());
  517. projectUserMapper.insert(projectUser);
  518. });
  519. }
  520. }
  521. } else if (flag == 1) {
  522. //更新角色信息
  523. // Company company = companyMapper.selectById(user.getCompanyId());
  524. // if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
  525. // user.setSubordinateType(Constant.ASSETS_COMPANY);
  526. // user.setTeamName("资产方");
  527. // } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
  528. // user.setSubordinateType(Constant.PRODUCER_COMPANY);
  529. // user.setTeamName("生产方");
  530. // }
  531. userMapper.updateById(user);
  532. }
  533. }
  534. return msg;
  535. }
  536. }