ComplaintUserInnerServiceSMOImpl.java 12 KB

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