ProjectServiceImpl.java 20 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.MouldVO;
  8. import com.hssx.cloudmodel.entity.vo.ProjectVO;
  9. import com.hssx.cloudmodel.entity.vo.UserVO;
  10. import com.hssx.cloudmodel.mapper.*;
  11. import com.hssx.cloudmodel.service.ProjectService;
  12. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  13. import com.hssx.cloudmodel.util.HttpRespMsg;
  14. import com.hssx.cloudmodel.util.ListUtil;
  15. import com.hssx.cloudmodel.util.PageUtil;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import javax.annotation.Resource;
  19. import javax.jws.soap.SOAPBinding;
  20. import java.text.SimpleDateFormat;
  21. import java.util.*;
  22. /**
  23. * <p>
  24. * 服务实现类
  25. * </p>
  26. *
  27. * @author 吴涛涛
  28. * @since 2019-07-27
  29. */
  30. @Service
  31. public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> implements ProjectService {
  32. @Resource
  33. ProjectMapper projectMapper;
  34. @Resource
  35. ProjectUserMapper projectUserMapper;
  36. @Resource
  37. UserMapper userMapper;
  38. @Resource
  39. CompanyMapper companyMapper;
  40. @Resource
  41. CustomCompanyMapper customCompanyMapper;
  42. @Resource
  43. MouldMapper mouldMapper;
  44. @Resource
  45. ProjectApproveMapper projectApproveMapper;
  46. @Resource
  47. PowerMapper powerMapper;
  48. @Override
  49. public HttpRespMsg addAndUpdateProject(Project project, Integer flag, User user, String userIds,
  50. String customerCompanyIds, String customerCompanyNames, String modelIds,
  51. Integer customerApproverId, Integer ownerApproverId) {
  52. HttpRespMsg msg = new HttpRespMsg();
  53. if (user != null) {
  54. QueryWrapper<Project> qw = new QueryWrapper<>();
  55. qw.orderByDesc("id").last("limit 1");
  56. Project lastProject = projectMapper.selectOne(qw);
  57. if (flag == 0) {
  58. synchronized (this) {
  59. int count = 1;
  60. if (lastProject != null) {
  61. //YMXM201903220001
  62. String numStr = lastProject.getProjectNo().substring(13);
  63. int num = Integer.valueOf(numStr).intValue();
  64. count += num;
  65. }
  66. long time = System.currentTimeMillis();
  67. Company company = companyMapper.selectById(user.getCompanyId());
  68. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
  69. String seq = sdf.format(time) + String.format("%04d", count);
  70. project.setCreatorId(user.getId());
  71. project.setCreator(user.getUsername());
  72. project.setOwnerCompany(user.getCompanyId());
  73. project.setOwnerCompanyName(company.getCompanyName());
  74. project.setProjectNo(Constant.PROJECT_PREFIX + seq);
  75. projectMapper.insert(project);
  76. //添加生产方关联公司
  77. if (customerCompanyIds != null && !"".equals(customerCompanyIds) && customerCompanyNames != null && !"".equals(customerCompanyNames)) {
  78. List<Integer> ides = ListUtil.convertIntegerIdsArrayToList(customerCompanyIds);
  79. String[] split = customerCompanyNames.split(",");
  80. int index = 0;
  81. for (String cusCompany : split) {
  82. CustomCompany customCompany = new CustomCompany();
  83. customCompany.setCompanyId(ides.get(index));
  84. customCompany.setCompanyName(cusCompany);
  85. customCompany.setProjectId(project.getId());
  86. customCompanyMapper.insert(customCompany);
  87. index++;
  88. }
  89. }
  90. }
  91. } else if (flag == 1) {
  92. projectMapper.updateById(project);
  93. //删除之前添加的生产方公司
  94. customCompanyMapper.delete(new QueryWrapper<CustomCompany>().eq("project_id", project.getId()));
  95. //重新添加生产方公司
  96. if (customerCompanyIds != null && !"".equals(customerCompanyIds) && customerCompanyNames != null && !"".equals(customerCompanyNames)) {
  97. List<Integer> ides = ListUtil.convertIntegerIdsArrayToList(customerCompanyIds);
  98. String[] split = customerCompanyNames.split(",");
  99. int index = 0;
  100. for (String cusCompany : split) {
  101. CustomCompany customCompany = new CustomCompany();
  102. customCompany.setCompanyId(ides.get(index));
  103. customCompany.setCompanyName(cusCompany);
  104. customCompany.setProjectId(project.getId());
  105. customCompanyMapper.insert(customCompany);
  106. index++;
  107. }
  108. }
  109. //删除之前的项目审批人
  110. projectApproveMapper.delete(new QueryWrapper<ProjectApprove>().eq("project_id", project.getId()));
  111. //删除权限表里的审批权限数据
  112. powerMapper.delete(new QueryWrapper<Power>().eq("project_id", project.getId()).eq("power_type", Constant.APPROVAL_AUTHORITY));
  113. //重新添加审批人
  114. //1.添加资产方审批人
  115. if (null != customerApproverId) {
  116. User customerExaminer = userMapper.selectById(customerApproverId);
  117. Company company = companyMapper.selectById(customerExaminer.getCompanyId());
  118. ProjectApprove projectApprove = new ProjectApprove();
  119. projectApprove.setApproverId(customerExaminer.getId());
  120. projectApprove.setApproverName(customerExaminer.getUsername());
  121. projectApprove.setCompanyId(customerExaminer.getCompanyId());
  122. projectApprove.setCompanyName(company.getCompanyName());
  123. projectApprove.setProjectId(project.getId());
  124. projectApprove.setSubordinateType(customerExaminer.getSubordinateType());
  125. projectApproveMapper.insert(projectApprove);
  126. Power power = new Power();
  127. power.setUserId(customerExaminer.getId());
  128. power.setProjectId(project.getId());
  129. power.setPowerType(Constant.APPROVAL_AUTHORITY);
  130. powerMapper.insert(power);
  131. }
  132. if (null != ownerApproverId) {
  133. //2.添加生产方审批人
  134. User ownerExaminer = userMapper.selectById(ownerApproverId);
  135. Company company = companyMapper.selectById(ownerExaminer.getCompanyId());
  136. ProjectApprove ownerProjectApprove = new ProjectApprove();
  137. ownerProjectApprove.setApproverId(ownerExaminer.getId());
  138. ownerProjectApprove.setApproverName(ownerExaminer.getUsername());
  139. ownerProjectApprove.setCompanyId(ownerExaminer.getCompanyId());
  140. ownerProjectApprove.setCompanyName(company.getCompanyName());
  141. ownerProjectApprove.setProjectId(project.getId());
  142. ownerProjectApprove.setSubordinateType(ownerExaminer.getSubordinateType());
  143. projectApproveMapper.insert(ownerProjectApprove);
  144. Power power = new Power();
  145. power.setUserId(ownerExaminer.getId());
  146. power.setProjectId(project.getId());
  147. power.setPowerType(Constant.APPROVAL_AUTHORITY);
  148. powerMapper.insert(power);
  149. }
  150. //删除之前分配的人员
  151. QueryWrapper<ProjectUser> qwPro = new QueryWrapper<>();
  152. qwPro.eq("project_id", project.getId());
  153. projectUserMapper.delete(qwPro);
  154. //再次重新分配
  155. this.handOutProject(project, userIds);
  156. //删除之前分配与项目关联的模具,即将之前的关联项目id修改成未关联
  157. mouldMapper.updateMouldByProjectId(project);
  158. //再次模具的分配
  159. if (modelIds != null && !"".equals(modelIds)) {
  160. List<Integer> modelList = ListUtil.convertIntegerIdsArrayToList(modelIds);
  161. int index = 1;
  162. if (modelList.size() > 0) {
  163. for (Integer id : modelList) {
  164. Mould mould = new Mould();
  165. mould.setId(id);
  166. mould.setProjectId(project.getId());
  167. mould.setBelongProjectGrade(index / modelList.size() + "");
  168. mouldMapper.updateById(mould);
  169. }
  170. }
  171. }
  172. }
  173. } else {
  174. msg.setError("当前角色涉及权限问题,请重新登录");
  175. }
  176. return msg;
  177. }
  178. @Override
  179. public HttpRespMsg handOutProject(Project project, String userIds) {
  180. HttpRespMsg msg = new HttpRespMsg();
  181. Project pro = projectMapper.selectById(project.getId());
  182. List<Integer> ids = new ArrayList<>();
  183. if (userIds != null && userIds != "") {
  184. List<String> list = ListUtil.convertLongIdsArrayToList(userIds);
  185. if (list().size() > 0) {
  186. for (String id : list) {
  187. User user = userMapper.selectById(id);
  188. ProjectUser projectUser = new ProjectUser();
  189. projectUser.setUserId(Integer.parseInt(id));
  190. projectUser.setProjectId(project.getId());
  191. projectUser.setSubordinate(user.getSubordinateType());
  192. projectUserMapper.insert(projectUser);
  193. }
  194. }
  195. } else {
  196. msg.setError("用户id不能为null和空");
  197. }
  198. return msg;
  199. }
  200. @Override
  201. public HttpRespMsg getList(String keyName, PageUtil page, User currentUser) {
  202. HttpRespMsg msg = new HttpRespMsg();
  203. if (currentUser != null) {
  204. PageHelper.startPage(page.getPageNum(), page.getPageSize());
  205. List<ProjectVO> projects = projectMapper.getProjectListByUid(keyName, currentUser);
  206. PageInfo<ProjectVO> pageInfos = new PageInfo<>(projects);
  207. msg.data = pageInfos;
  208. } else {
  209. msg.setError("当前用户不存,或涉及到权限问题,请重新登录");
  210. }
  211. QueryWrapper<Project> qw = new QueryWrapper<>();
  212. qw.select("project_name", "creator", "charger", "indate");
  213. if (keyName != null) {
  214. qw.like("project_name", keyName);
  215. }
  216. return msg;
  217. }
  218. @Override
  219. public HttpRespMsg getUserByCompanyIdOrSubordinateType(User user) {
  220. HttpRespMsg msg = new HttpRespMsg();
  221. List<User> users = new ArrayList<>();
  222. QueryWrapper<User> qw = new QueryWrapper<>();
  223. if (user.getCompanyId() != null) {
  224. qw.eq("company_id", user.getCompanyId());
  225. } else if (user.getSubordinateType() != null) {
  226. qw.eq("subordinate_type", user.getSubordinateType());
  227. }
  228. users = userMapper.selectList(qw);
  229. msg.data = users;
  230. return msg;
  231. }
  232. @Override
  233. public HttpRespMsg getProjectDetail(Project project, String token) {
  234. Map<String, Object> map = new HashMap<>();
  235. HttpRespMsg msg = new HttpRespMsg();
  236. ProjectVO vo = projectMapper.getProjectById(project.getId());
  237. User currentUser = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", token));
  238. if (Constant.SYS_PARENT_ID == currentUser.getParentId()) {
  239. //当前人超级管理员 ,对项目只可以浏览
  240. map.put("update", 0);
  241. map.put("download", 0);
  242. map.put("view", 1);
  243. map.put("approve", 0);
  244. } else if (Constant.SYS_ID == currentUser.getParentId()) {
  245. //当前为系统管理员
  246. map.put("update", 1);
  247. map.put("download", 1);
  248. map.put("view", 1);
  249. } else if (vo.getManagerId() == currentUser.getId()) {
  250. //当前人是该项目的项目经理
  251. Integer approve = 0;
  252. if (projectApproveMapper.selectCount(new QueryWrapper<ProjectApprove>().eq("approver_id", currentUser.getId())) > 0) {
  253. //查看当前项目经理是否为审批人
  254. approve = 1;
  255. }
  256. map.put("update", 1);
  257. map.put("download", 1);
  258. map.put("view", 1);
  259. map.put("approve", approve);
  260. } else {
  261. //该项目的参与人
  262. Integer update = 0;
  263. Integer download = 0;
  264. Integer view = 0;
  265. Integer approve = 0;
  266. List<Power> powers = powerMapper.selectList(new QueryWrapper<Power>().eq("project_id", project.getId()).eq("user_id", currentUser.getId()));
  267. if (powers.size() > 0) {
  268. for (Power power : powers) {
  269. if (power.getPowerType() == 0) {
  270. update = 1;
  271. } else if (power.getPowerType() == 1) {
  272. download = 1;
  273. } else if (power.getPowerType() == 2) {
  274. view = 1;
  275. } else {
  276. approve = 1;
  277. }
  278. }
  279. }
  280. map.put("update", update);
  281. map.put("download", download);
  282. map.put("view", view);
  283. map.put("approve", approve);
  284. }
  285. List<User> users = projectMapper.getProjectUserById(project.getId());
  286. //处理users按照客户呼和供应商分组
  287. System.out.println("users===>" + users);
  288. for (User user : users) {
  289. if (user.getSubordinateType() == 0) {
  290. //资产方
  291. vo.getOwnerUsers().add(user);
  292. } else if (user.getSubordinateType() == 1) {
  293. //生产方
  294. vo.getCustomUsers().add(user);
  295. }
  296. }
  297. map.put("vo", vo);
  298. msg.data = map;
  299. return msg;
  300. }
  301. @Override
  302. public HttpRespMsg getUserListByCompanyIds(String companyIds, Integer adminId, Integer projectId) {
  303. HttpRespMsg msg = new HttpRespMsg();
  304. QueryWrapper<User> qw =new QueryWrapper<User>();
  305. if (!"".equals(companyIds) && companyIds != null) {
  306. List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(companyIds);
  307. //该项目的项目经理不能充当参与人
  308. Integer managerId = -1;
  309. if (projectId != null) {
  310. Project project = projectMapper.selectById(projectId);
  311. if (adminId == project.getManagerId()) {
  312. //是本项目的项目项目经理需要返回本人
  313. qw.eq("id", adminId);
  314. }
  315. }
  316. //所选公司下的人
  317. qw.in("company_id", ids);
  318. //不包含资产方的系统管理员
  319. qw.ne("parent_id", Constant.SYS_ID);
  320. msg.data = userMapper.selectList(qw);
  321. }
  322. return msg;
  323. }
  324. @Override
  325. public HttpRespMsg getModelListByCompanyId(User user) {
  326. HttpRespMsg msg = new HttpRespMsg();
  327. QueryWrapper<Mould> qw = new QueryWrapper<>();
  328. if (Constant.SYS_ID == user.getParentId()) {
  329. //此时是admin
  330. User admin = userMapper.selectOne(new QueryWrapper<User>().eq("id", user.getId()));
  331. qw.eq("company_id", admin.getCompanyId());
  332. } else if (Constant.SYS_PARENT_ID == user.getParentId()) {
  333. //系统管理员
  334. // qw.eq("company_type",Constant.ASSETS_COMPANY);
  335. } else {
  336. //此时是项目经理
  337. User admin = userMapper.selectOne(new QueryWrapper<User>().eq("id", user.getParentId()));
  338. qw.eq("company_id", admin.getCompanyId());
  339. }
  340. msg.data = mouldMapper.selectList(qw);
  341. return msg;
  342. }
  343. @Override
  344. public HttpRespMsg getModelListByUser(UserVO userVO, PageUtil page) {
  345. HttpRespMsg msg = new HttpRespMsg();
  346. List<Integer> set = new ArrayList<>();
  347. set.add(-1);
  348. List<MouldVO> moulds = new ArrayList<>();
  349. if (userVO.getId() != null) {
  350. //资产方管理员,获取他公司下的所有模具
  351. PageHelper.startPage(page.getPageNum(), page.getPageSize());
  352. if (Constant.SYS_PARENT_ID == userVO.getParentId()) {
  353. moulds = mouldMapper.selectListByCondition(userVO);
  354. } else if (Constant.SYS_ID == userVO.getParentId()) {
  355. moulds = mouldMapper.selectListByCondition(userVO);
  356. } else {
  357. //普通用户或者项目经理
  358. //充当项目经理参与的项目
  359. if (userVO.getProjectId() != -1) {
  360. set.add(userVO.getProjectId());
  361. moulds = mouldMapper.selectListByConditionByProject(userVO, set);
  362. } else {
  363. QueryWrapper<Project> qw = new QueryWrapper<>();
  364. qw.eq("manager_id", userVO.getId());
  365. List<Project> projects = projectMapper.selectList(qw);
  366. if (projects.size() > 0) {
  367. for (Project project : projects) {
  368. set.add(project.getId());
  369. }
  370. }
  371. // //充当普通人员参与的项目
  372. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().eq("user_id", userVO.getId()));
  373. if (projectUsers.size() > 0) {
  374. for (ProjectUser projectUser : projectUsers) {
  375. set.add(projectUser.getProjectId());
  376. }
  377. }
  378. moulds = mouldMapper.selectListByConditionByProject(userVO, set);
  379. }
  380. }
  381. PageInfo<MouldVO> pageInfo = new PageInfo<>(moulds);
  382. msg.data = pageInfo;
  383. } else {
  384. msg.setError("用户不存在,或者未登录!");
  385. }
  386. return msg;
  387. }
  388. @Override
  389. public HttpRespMsg getListByUser(String token) {
  390. HttpRespMsg msg = new HttpRespMsg();
  391. List<Integer> ides = new ArrayList<>();
  392. ides.add(-1);
  393. User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", token));
  394. List<Project> projects = new ArrayList<>();
  395. if (user != null) {
  396. QueryWrapper<Project> qw = new QueryWrapper<>();
  397. qw.select("id", "project_name");
  398. if (Constant.SYS_PARENT_ID == user.getParentId()) {
  399. //系统超级管理员,可获得所有项目
  400. projects = projectMapper.selectList(qw);
  401. } else if (Constant.SYS_ID == user.getParentId()) {
  402. //资产方管理员
  403. qw.eq("owner_company", user.getCompanyId());
  404. projects = projectMapper.selectList(qw);
  405. } else {
  406. QueryWrapper<Project> qwPro = new QueryWrapper<>();
  407. qwPro.eq("manager_id", user.getId());
  408. List<Project> projectList = projectMapper.selectList(qw);
  409. for (Project project : projectList) {
  410. ides.add(project.getId());
  411. }
  412. //项目经理或者普通用户
  413. List<ProjectUser> projectUsers = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().eq("user_id", user.getId()));
  414. for (ProjectUser projectUser : projectUsers) {
  415. ides.add(projectUser.getProjectId());
  416. }
  417. qw.in("id", ides);
  418. projects = projectMapper.selectList(qw);
  419. }
  420. msg.data = projects;
  421. } else {
  422. msg.setError("当前用户未登录,或者用户不存在");
  423. }
  424. return msg;
  425. }
  426. }