AsyncServiceImpl.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. package com.wtkj.service.impl;
  2. import com.wtkj.entity.*;
  3. import com.wtkj.service.*;
  4. import lombok.AllArgsConstructor;
  5. import org.springblade.core.secure.BladeUser;
  6. import org.springblade.core.tool.api.R;
  7. import org.springblade.core.tool.utils.DateUtil;
  8. import org.springblade.core.tool.utils.Func;
  9. import org.springblade.system.entity.Dept;
  10. import org.springblade.system.feign.ISysClient;
  11. import org.springblade.system.user.entity.User;
  12. import org.springblade.system.user.feign.IUserClient;
  13. import org.springframework.scheduling.annotation.Async;
  14. import org.springframework.stereotype.Service;
  15. import org.springframework.util.CollectionUtils;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import static com.wtkj.config.MagicValue.ZERO;
  19. /**
  20. * @author Blizzard
  21. * @create at 2023-09-13 16:32
  22. * @describe
  23. */
  24. @Service
  25. @AllArgsConstructor
  26. public class AsyncServiceImpl implements IAsyncService {
  27. private final ITypeAndStageService typeAndStageService;
  28. private final IProjectStageService stageService;
  29. private final IProjectAuthService projectAuthService;
  30. private final ISysClient sysClient;
  31. private final IUserClient userClient;
  32. private final ITaskLogService taskLogService;
  33. private final IIndexMessageService indexMessageService;
  34. @Override
  35. @Async("asyncPoolTaskExecutor")
  36. public void createProject(Project project, BladeUser user) {
  37. //1.项目类型 --> 使用类型对应的模版阶段创建项目阶段
  38. Long projectType = project.getProjectType();
  39. List<TemplateTypeAndStage> templateStage = typeAndStageService.getStages(projectType);
  40. //2.创建项目阶段
  41. if (!CollectionUtils.isEmpty(templateStage)) {
  42. List<ProjectStage> stagesList = new ArrayList<>();
  43. templateStage.forEach(template -> {
  44. //项目的阶段记录表
  45. ProjectStage stage = new ProjectStage();
  46. stage.setProjectId(project.getId());
  47. stage.setName(template.getName());
  48. stage.setSort(template.getSort());
  49. stage.setCreateUser(project.getCreateUser());
  50. stage.setCreateDept(project.getCreateDept());
  51. stage.setCreateTime(DateUtil.now());
  52. stage.setUpdateTime(DateUtil.now());
  53. stage.setUpdateUser(project.getUpdateUser());
  54. stagesList.add(stage);
  55. });
  56. if (!CollectionUtils.isEmpty(stagesList)) {
  57. stageService.saveBatch(stagesList);
  58. }
  59. }
  60. //3.如果主管单位和当前登录用户不是同一机构
  61. String deptIdStr = user.getDeptId();
  62. if (deptIdStr != null) {
  63. Long deptId = Func.firstLong(deptIdStr);
  64. if (!deptId.equals(project.getCompetentUnit())) {
  65. ProjectAuth auth = new ProjectAuth();
  66. auth.setUserId(user.getUserId());
  67. R<Dept> rpc = sysClient.getDept(deptId);
  68. if (rpc.isSuccess()) {
  69. String ancestors = rpc.getData().getAncestors();
  70. if (ancestors != null && ancestors.contains(String.valueOf(ZERO))) {
  71. List<Long> longList = Func.toLongList(ancestors);
  72. if (!CollectionUtils.isEmpty(longList)) {
  73. if (longList.size() > 2) {
  74. auth.setTopDept(longList.get(1));
  75. } else {
  76. auth.setTopDept(Long.valueOf(deptIdStr));
  77. }
  78. }
  79. }
  80. }
  81. auth.setUserDept(deptId);
  82. auth.setProjectId(project.getId());
  83. projectAuthService.save(auth);
  84. }
  85. }
  86. }
  87. @Async("asyncPoolTaskExecutor")
  88. @Override
  89. public void removeProject(List<Long> longList) {
  90. }
  91. @Override
  92. @Async("asyncPoolTaskExecutor")
  93. public void createTaskLog(Task task) {
  94. //1.任务日志
  95. Long createUser = task.getCreateUser();
  96. if (createUser != null) {
  97. R<User> userR = userClient.userInfoById(createUser);
  98. if (userR.isSuccess()) {
  99. List<TaskLog> logs = new ArrayList<>();
  100. TaskLog log = new TaskLog();
  101. log.setTaskId(task.getId());
  102. log.setContent(userR.getData().getName() + " 创建了任务");
  103. log.setCreateDept(task.getCreateDept());
  104. log.setCreateUser(task.getCreateUser());
  105. log.setUpdateUser(task.getUpdateUser());
  106. log.setCreateTime(DateUtil.now());
  107. log.setUpdateTime(DateUtil.now());
  108. logs.add(log);
  109. if (task.getOrgDeptId() != null) {
  110. Long orgDeptId = task.getOrgDeptId();
  111. R<Dept> dept = sysClient.getDept(orgDeptId);
  112. if (dept.isSuccess()) {
  113. TaskLog taskLog = new TaskLog();
  114. taskLog.setTaskId(task.getId());
  115. taskLog.setContent(userR.getData().getName() + " 指定了执行单位为" + dept.getData().getDeptName());
  116. taskLog.setCreateDept(task.getCreateDept());
  117. taskLog.setCreateUser(task.getCreateUser());
  118. taskLog.setUpdateUser(task.getUpdateUser());
  119. taskLog.setCreateTime(DateUtil.now());
  120. taskLog.setUpdateTime(DateUtil.now());
  121. logs.add(taskLog);
  122. }
  123. }
  124. if (task.getExecuteDept() != null) {
  125. Long executeDept = task.getExecuteDept();
  126. R<Dept> dept = sysClient.getDept(executeDept);
  127. if (dept.isSuccess()) {
  128. TaskLog taskLog = new TaskLog();
  129. taskLog.setTaskId(task.getId());
  130. taskLog.setContent(userR.getData().getName() + " 指定了任务执行部门为" + dept.getData().getDeptName());
  131. taskLog.setCreateDept(task.getCreateDept());
  132. taskLog.setCreateUser(task.getCreateUser());
  133. taskLog.setUpdateUser(task.getUpdateUser());
  134. taskLog.setCreateTime(DateUtil.now());
  135. taskLog.setUpdateTime(DateUtil.now());
  136. logs.add(taskLog);
  137. }
  138. }
  139. if (task.getProjectManager() != null) {
  140. Long projectManager = task.getProjectManager();
  141. R<User> userR1 = userClient.userInfoById(projectManager);
  142. if (userR1.isSuccess()) {
  143. TaskLog taskLog = new TaskLog();
  144. taskLog.setTaskId(task.getId());
  145. taskLog.setContent(userR.getData().getName() + " 指定了项目经理为 " + userR1.getData().getName());
  146. taskLog.setCreateDept(task.getCreateDept());
  147. taskLog.setCreateUser(task.getCreateUser());
  148. taskLog.setUpdateUser(task.getUpdateUser());
  149. taskLog.setCreateTime(DateUtil.now());
  150. taskLog.setUpdateTime(DateUtil.now());
  151. logs.add(taskLog);
  152. }
  153. }
  154. if (task.getExecuteUser() != null) {
  155. List<Long> userIds = Func.toLongList(task.getExecuteUser());
  156. List<String> str = new ArrayList<>();
  157. userIds.forEach(userId -> {
  158. R<User> rpc = userClient.userInfoById(userId);
  159. if (rpc.isSuccess()) {
  160. str.add(rpc.getData().getName());
  161. }
  162. });
  163. if (!CollectionUtils.isEmpty(str)) {
  164. TaskLog taskLog = new TaskLog();
  165. taskLog.setTaskId(task.getId());
  166. taskLog.setContent(userR.getData().getName() + " 指定了任务执行者 " + Func.join(str));
  167. taskLog.setCreateDept(task.getCreateDept());
  168. taskLog.setCreateUser(task.getCreateUser());
  169. taskLog.setUpdateUser(task.getUpdateUser());
  170. taskLog.setCreateTime(DateUtil.now());
  171. taskLog.setUpdateTime(DateUtil.now());
  172. logs.add(taskLog);
  173. }
  174. }
  175. taskLogService.saveBatch(logs);
  176. }
  177. }
  178. // todo 2.任务下发通知
  179. }
  180. @Override
  181. @Async("asyncPoolTaskExecutor")
  182. public void updateTask(Integer type, Long userId, Task task) {
  183. R<User> userR = userClient.userInfoById(userId);
  184. if (userR.isSuccess()) {
  185. List<TaskLog> logs = new ArrayList<>();
  186. switch (type) {
  187. case 1:
  188. Long orgDeptId = task.getOrgDeptId();
  189. R<Dept> dept = sysClient.getDept(orgDeptId);
  190. if (dept.isSuccess()) {
  191. TaskLog log = new TaskLog();
  192. log.setTaskId(task.getId());
  193. log.setContent(userR.getData().getName() + " 指定了执行单位为" + dept.getData().getDeptName());
  194. log.setCreateDept(task.getCreateDept());
  195. log.setCreateUser(task.getCreateUser());
  196. log.setUpdateUser(task.getUpdateUser());
  197. log.setCreateTime(DateUtil.now());
  198. log.setUpdateTime(DateUtil.now());
  199. logs.add(log);
  200. }
  201. break;
  202. case 2:
  203. Long executeDept = task.getExecuteDept();
  204. R<Dept> dept1 = sysClient.getDept(executeDept);
  205. if (dept1.isSuccess()) {
  206. TaskLog log1 = new TaskLog();
  207. log1.setTaskId(task.getId());
  208. log1.setContent(userR.getData().getName() + " 指定了任务执行部门为" + dept1.getData().getDeptName());
  209. log1.setCreateDept(task.getCreateDept());
  210. log1.setCreateUser(task.getCreateUser());
  211. log1.setUpdateUser(task.getUpdateUser());
  212. log1.setCreateTime(DateUtil.now());
  213. log1.setUpdateTime(DateUtil.now());
  214. logs.add(log1);
  215. }
  216. break;
  217. case 3:
  218. Long projectManager = task.getProjectManager();
  219. R<User> userR1 = userClient.userInfoById(projectManager);
  220. if (userR1.isSuccess()) {
  221. TaskLog log2 = new TaskLog();
  222. log2.setTaskId(task.getId());
  223. log2.setContent(userR.getData().getName() + " 指定了项目经理为 " + userR1.getData().getName());
  224. log2.setCreateDept(task.getCreateDept());
  225. log2.setCreateUser(task.getCreateUser());
  226. log2.setUpdateUser(task.getUpdateUser());
  227. log2.setCreateTime(DateUtil.now());
  228. log2.setUpdateTime(DateUtil.now());
  229. logs.add(log2);
  230. }
  231. break;
  232. case 4:
  233. List<Long> userIds = Func.toLongList(task.getExecuteUser());
  234. List<String> str = new ArrayList<>();
  235. userIds.forEach(id -> {
  236. R<User> rpc = userClient.userInfoById(id);
  237. if (rpc.isSuccess()) {
  238. str.add(rpc.getData().getName());
  239. }
  240. });
  241. if (!CollectionUtils.isEmpty(str)) {
  242. TaskLog log3 = new TaskLog();
  243. log3.setTaskId(task.getId());
  244. log3.setContent(userR.getData().getName() + " 指定了任务执行者 " + Func.join(str));
  245. log3.setCreateDept(task.getCreateDept());
  246. log3.setCreateUser(task.getCreateUser());
  247. log3.setUpdateUser(task.getUpdateUser());
  248. log3.setCreateTime(DateUtil.now());
  249. log3.setUpdateTime(DateUtil.now());
  250. logs.add(log3);
  251. }
  252. break;
  253. }
  254. taskLogService.saveBatch(logs);
  255. }
  256. }
  257. @Override
  258. @Async("asyncPoolTaskExecutor")
  259. public void submitTaskMessage(Long userId, Task task) {
  260. Long createUser = task.getCreateUser();
  261. Long projectId = task.getProjectId();
  262. String title = task.getTitle();
  263. R<User> userR = userClient.userInfoById(userId);
  264. if (userR.isSuccess()) {
  265. IndexMessage message = new IndexMessage();
  266. message.setCategory(1);
  267. //发送给审查人和项目经理
  268. message.setToUser(createUser);
  269. message.setContent(userR.getData().getName() + "上传了" + title + "任务的文件,请查阅");
  270. message.setOpenUrl("/task");
  271. message.setCreateDept(task.getCreateDept());
  272. message.setCreateUser(userId);
  273. message.setUpdateUser(userId);
  274. message.setCreateTime(DateUtil.now());
  275. message.setUpdateTime(DateUtil.now());
  276. indexMessageService.save(message);
  277. }
  278. }
  279. }