ComplaintUserInnerServiceSMOImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345
  1. package com.java110.common.smo.impl;
  2. import com.java110.core.base.smo.BaseServiceSMO;
  3. import com.java110.core.smo.complaint.IComplaintInnerServiceSMO;
  4. import com.java110.core.smo.complaintUser.IComplaintUserInnerServiceSMO;
  5. import com.java110.core.smo.user.IUserInnerServiceSMO;
  6. import com.java110.dto.PageDto;
  7. import com.java110.dto.auditMessage.AuditMessageDto;
  8. import com.java110.dto.auditUser.AuditUserDto;
  9. import com.java110.dto.complaint.ComplaintDto;
  10. import com.java110.dto.user.UserDto;
  11. import com.java110.entity.audit.AuditUser;
  12. import com.java110.utils.util.Assert;
  13. import com.java110.utils.util.StringUtil;
  14. import org.activiti.engine.HistoryService;
  15. import org.activiti.engine.ProcessEngine;
  16. import org.activiti.engine.RuntimeService;
  17. import org.activiti.engine.TaskService;
  18. import org.activiti.engine.history.HistoricProcessInstance;
  19. import org.activiti.engine.history.HistoricTaskInstance;
  20. import org.activiti.engine.history.HistoricTaskInstanceQuery;
  21. import org.activiti.engine.impl.identity.Authentication;
  22. import org.activiti.engine.query.Query;
  23. import org.activiti.engine.runtime.Execution;
  24. import org.activiti.engine.runtime.ExecutionQuery;
  25. import org.activiti.engine.runtime.ProcessInstance;
  26. import org.activiti.engine.task.Comment;
  27. import org.activiti.engine.task.Task;
  28. import org.activiti.engine.task.TaskQuery;
  29. import org.springframework.beans.factory.annotation.Autowired;
  30. import org.springframework.web.bind.annotation.RequestBody;
  31. import org.springframework.web.bind.annotation.RestController;
  32. import java.util.ArrayList;
  33. import java.util.HashMap;
  34. import java.util.List;
  35. import java.util.Map;
  36. //@Service("resourceEntryStoreSMOImpl")
  37. @RestController
  38. public class ComplaintUserInnerServiceSMOImpl extends BaseServiceSMO implements IComplaintUserInnerServiceSMO {
  39. @Autowired
  40. private ProcessEngine processEngine;
  41. @Autowired
  42. private RuntimeService runtimeService;
  43. @Autowired
  44. private TaskService taskService;
  45. @Autowired
  46. private IComplaintInnerServiceSMO complaintInnerServiceSMOImpl;
  47. @Autowired
  48. private IUserInnerServiceSMO userInnerServiceSMOImpl;
  49. /**
  50. * 启动流程
  51. *
  52. * @return
  53. */
  54. public ComplaintDto startProcess(@RequestBody ComplaintDto complaintDto) {
  55. //将信息加入map,以便传入流程中
  56. Map<String, Object> variables = new HashMap<String, Object>();
  57. variables.put("complaintDto", complaintDto);
  58. variables.put("userId", complaintDto.getCurrentUserId());
  59. //开启流程
  60. ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("complaint", complaintDto.getComplaintId(), variables);
  61. //将得到的实例流程id值赋给之前设置的变量
  62. String processInstanceId = processInstance.getId();
  63. // System.out.println("流程开启成功.......实例流程id:" + processInstanceId);
  64. complaintDto.setProcessInstanceId(processInstanceId);
  65. //第一个节点自动提交
  66. autoFinishFirstTask(complaintDto);
  67. return complaintDto;
  68. }
  69. /**
  70. * 自动提交第一步
  71. */
  72. private void autoFinishFirstTask(ComplaintDto complaintDto) {
  73. Task task = null;
  74. TaskQuery query = taskService.createTaskQuery().taskCandidateOrAssigned(complaintDto.getCurrentUserId()).active();
  75. List<Task> todoList = query.list();//获取申请人的待办任务列表
  76. for (Task tmp : todoList) {
  77. if (tmp.getProcessInstanceId().equals(complaintDto.getProcessInstanceId())) {
  78. task = tmp;//获取当前流程实例,当前申请人的待办任务
  79. break;
  80. }
  81. }
  82. Assert.notNull(task, "未找到当前用户任务userId = " + complaintDto.getCurrentUserId());
  83. complaintDto.setTaskId(task.getId());
  84. complaintDto.setAuditCode("10000");
  85. complaintDto.setAuditMessage("提交");
  86. completeTask(complaintDto);
  87. }
  88. /**
  89. * 查询用户任务数
  90. *
  91. * @param user
  92. * @return
  93. */
  94. public long getUserTaskCount(@RequestBody AuditUser user) {
  95. TaskService taskService = processEngine.getTaskService();
  96. TaskQuery query = taskService.createTaskQuery().processDefinitionKey("complaint");
  97. query.taskAssignee(user.getUserId());
  98. return query.count();
  99. }
  100. /**
  101. * 获取用户任务
  102. *
  103. * @param user 用户信息
  104. */
  105. public List<ComplaintDto> getUserTasks(@RequestBody AuditUser user) {
  106. TaskService taskService = processEngine.getTaskService();
  107. TaskQuery query = taskService.createTaskQuery().processDefinitionKey("complaint");
  108. ;
  109. query.taskAssignee(user.getUserId());
  110. query.orderByTaskCreateTime().desc();
  111. List<Task> list = null;
  112. if (user.getPage() != PageDto.DEFAULT_PAGE) {
  113. list = query.listPage((user.getPage() - 1) * user.getRow(), user.getRow());
  114. } else {
  115. list = query.list();
  116. }
  117. List<String> complaintIds = new ArrayList<>();
  118. Map<String, String> taskBusinessKeyMap = new HashMap<>();
  119. for (Task task : list) {
  120. String processInstanceId = task.getProcessInstanceId();
  121. //3.使用流程实例,查询
  122. ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
  123. //4.使用流程实例对象获取BusinessKey
  124. String business_key = pi.getBusinessKey();
  125. complaintIds.add(business_key);
  126. taskBusinessKeyMap.put(business_key, task.getId());
  127. }
  128. if (complaintIds == null || complaintIds.size() == 0) {
  129. return new ArrayList<>();
  130. }
  131. //查询 投诉信息
  132. ComplaintDto complaintDto = new ComplaintDto();
  133. complaintDto.setStoreId(user.getStoreId());
  134. complaintDto.setCommunityId(user.getCommunityId());
  135. complaintDto.setComplaintIds(complaintIds.toArray(new String[complaintIds.size()]));
  136. List<ComplaintDto> tmpComplaintDtos = complaintInnerServiceSMOImpl.queryComplaints(complaintDto);
  137. for (ComplaintDto tmpComplaintDto : tmpComplaintDtos) {
  138. tmpComplaintDto.setTaskId(taskBusinessKeyMap.get(tmpComplaintDto.getComplaintId()));
  139. }
  140. return tmpComplaintDtos;
  141. }
  142. /**
  143. * 查询用户任务数
  144. *
  145. * @param user
  146. * @return
  147. */
  148. public long getUserHistoryTaskCount(@RequestBody AuditUser user) {
  149. HistoryService historyService = processEngine.getHistoryService();
  150. // Query query = historyService.createHistoricTaskInstanceQuery()
  151. // .processDefinitionKey("complaint")
  152. // .taskAssignee(user.getUserId());
  153. HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
  154. .processDefinitionKey("complaint")
  155. .taskAssignee(user.getUserId());
  156. if (!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())) {
  157. historicTaskInstanceQuery.taskName("complaint");
  158. } else if (!StringUtil.isEmpty(user.getAuditLink()) && "AUDIT".equals(user.getAuditLink())) {
  159. historicTaskInstanceQuery.taskName("complaitDealUser");
  160. }
  161. Query query = historicTaskInstanceQuery;
  162. return query.count();
  163. }
  164. /**
  165. * 获取用户审批的任务
  166. *
  167. * @param user 用户信息
  168. */
  169. public List<ComplaintDto> getUserHistoryTasks(@RequestBody AuditUser user) {
  170. HistoryService historyService = processEngine.getHistoryService();
  171. HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
  172. .processDefinitionKey("complaint")
  173. .taskAssignee(user.getUserId());
  174. if (!StringUtil.isEmpty(user.getAuditLink()) && "START".equals(user.getAuditLink())) {
  175. historicTaskInstanceQuery.taskName("complaint");
  176. } else if (!StringUtil.isEmpty(user.getAuditLink()) && "AUDIT".equals(user.getAuditLink())) {
  177. historicTaskInstanceQuery.taskName("complaitDealUser");
  178. }
  179. Query query = historicTaskInstanceQuery.orderByHistoricTaskInstanceStartTime().desc();
  180. List<HistoricTaskInstance> list = null;
  181. if (user.getPage() != PageDto.DEFAULT_PAGE) {
  182. list = query.listPage((user.getPage() - 1) * user.getRow(), user.getRow());
  183. } else {
  184. list = query.list();
  185. }
  186. List<String> complaintIds = new ArrayList<>();
  187. for (HistoricTaskInstance task : list) {
  188. String processInstanceId = task.getProcessInstanceId();
  189. //3.使用流程实例,查询
  190. HistoricProcessInstance pi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
  191. //4.使用流程实例对象获取BusinessKey
  192. String business_key = pi.getBusinessKey();
  193. complaintIds.add(business_key);
  194. }
  195. //查询 投诉信息
  196. ComplaintDto complaintDto = new ComplaintDto();
  197. complaintDto.setStoreId(user.getStoreId());
  198. complaintDto.setCommunityId(user.getCommunityId());
  199. complaintDto.setComplaintIds(complaintIds.toArray(new String[complaintIds.size()]));
  200. List<ComplaintDto> tmpComplaintDtos = complaintInnerServiceSMOImpl.queryComplaints(complaintDto);
  201. return tmpComplaintDtos;
  202. }
  203. public boolean completeTask(@RequestBody ComplaintDto complaintDto) {
  204. TaskService taskService = processEngine.getTaskService();
  205. Task task = taskService.createTaskQuery().taskId(complaintDto.getTaskId()).singleResult();
  206. String processInstanceId = task.getProcessInstanceId();
  207. Authentication.setAuthenticatedUserId(complaintDto.getCurrentUserId());
  208. taskService.addComment(complaintDto.getTaskId(), processInstanceId, complaintDto.getAuditMessage());
  209. Map<String, Object> variables = new HashMap<String, Object>();
  210. variables.put("auditCode", complaintDto.getAuditCode());
  211. variables.put("currentUserId", complaintDto.getCurrentUserId());
  212. //taskService.setAssignee(complaintDto.getTaskId(),complaintDto.getCurrentUserId());
  213. //taskService.addCandidateUser(complaintDto.getTaskId(), complaintDto.getCurrentUserId());
  214. //taskService.claim(complaintDto.getTaskId(), complaintDto.getCurrentUserId());
  215. taskService.complete(complaintDto.getTaskId(), variables);
  216. ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
  217. if (pi == null) {
  218. return true;
  219. }
  220. return false;
  221. }
  222. public List<AuditMessageDto> getAuditMessage(@RequestBody ComplaintDto complaintDto) {
  223. TaskService taskService = processEngine.getTaskService();
  224. Task task = taskService.createTaskQuery().taskId(complaintDto.getTaskId()).singleResult();
  225. String processInstanceId = task.getProcessInstanceId();
  226. List<Comment> comments = taskService.getProcessInstanceComments(processInstanceId);
  227. List<AuditMessageDto> auditMessageDtos = new ArrayList<>();
  228. if (comments == null || comments.size() < 1) {
  229. return auditMessageDtos;
  230. }
  231. AuditMessageDto messageDto = null;
  232. for (Comment comment : comments) {
  233. messageDto = new AuditMessageDto();
  234. messageDto.setCreateTime(comment.getTime());
  235. messageDto.setUserId(comment.getUserId());
  236. messageDto.setMessage(comment.getFullMessage());
  237. }
  238. return auditMessageDtos;
  239. }
  240. /**
  241. * 获取任务当前处理人
  242. *
  243. * @param complaintDto
  244. * @return
  245. */
  246. public ComplaintDto getTaskCurrentUser(@RequestBody ComplaintDto complaintDto) {
  247. TaskService taskService = processEngine.getTaskService();
  248. Task task = taskService.createTaskQuery().processInstanceBusinessKey(complaintDto.getComplaintId()).singleResult();
  249. if (task == null) {
  250. complaintDto.setCurrentUserId("");
  251. complaintDto.setCurrentUserName("");
  252. complaintDto.setCurrentUserTel("");
  253. return complaintDto;
  254. }
  255. String userId = task.getAssignee();
  256. List<UserDto> users = userInnerServiceSMOImpl.getUserInfo(new String[]{userId});
  257. if (users == null || users.size() == 0) {
  258. complaintDto.setCurrentUserId("");
  259. complaintDto.setCurrentUserName("");
  260. complaintDto.setCurrentUserTel("");
  261. return complaintDto;
  262. }
  263. complaintDto.setCurrentUserId(userId);
  264. complaintDto.setCurrentUserName(users.get(0).getName());
  265. complaintDto.setCurrentUserTel(users.get(0).getTel());
  266. return complaintDto;
  267. }
  268. public ProcessEngine getProcessEngine() {
  269. return processEngine;
  270. }
  271. public void setProcessEngine(ProcessEngine processEngine) {
  272. this.processEngine = processEngine;
  273. }
  274. public RuntimeService getRuntimeService() {
  275. return runtimeService;
  276. }
  277. public void setRuntimeService(RuntimeService runtimeService) {
  278. this.runtimeService = runtimeService;
  279. }
  280. public TaskService getTaskService() {
  281. return taskService;
  282. }
  283. public void setTaskService(TaskService taskService) {
  284. this.taskService = taskService;
  285. }
  286. public IComplaintInnerServiceSMO getComplaintInnerServiceSMOImpl() {
  287. return complaintInnerServiceSMOImpl;
  288. }
  289. public void setComplaintInnerServiceSMOImpl(IComplaintInnerServiceSMO complaintInnerServiceSMOImpl) {
  290. this.complaintInnerServiceSMOImpl = complaintInnerServiceSMOImpl;
  291. }
  292. }