GoodCollectionUserInnerServiceSMOImpl.java 16 KB

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