PurchaseApplyUserInnerServiceSMOImpl.java 13 KB

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