ComplaintUserInnerServiceSMOImpl.java 15 KB

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