TApproveDangerController.java 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. package com.ruoyi.project.ehs.controller;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.OutputStream;
  5. import java.net.URLDecoder;
  6. import java.text.SimpleDateFormat;
  7. import java.util.*;
  8. import com.alibaba.fastjson.JSON;
  9. import com.ruoyi.common.utils.file.FileUploadUtils;
  10. import com.ruoyi.common.utils.http.HttpContextUtils;
  11. import com.ruoyi.framework.config.RuoYiConfig;
  12. import com.ruoyi.project.approve.damain.DevProcess;
  13. import com.ruoyi.project.approve.damain.DevTask;
  14. import com.ruoyi.project.common.domain.TCommonfile;
  15. import com.ruoyi.project.common.service.ITCommonfileService;
  16. import com.ruoyi.project.ehs.domain.TApproveAccident;
  17. import com.ruoyi.project.ehs.service.ITApproveAccidentService;
  18. import com.ruoyi.project.intact.domain.TApproveMaintenance;
  19. import com.ruoyi.project.intact.domain.TIntactApprove;
  20. import com.ruoyi.project.intact.service.ITApproveMaintenanceService;
  21. import com.ruoyi.project.intact.service.ITIntactApproveService;
  22. import com.ruoyi.project.listener.*;
  23. import com.ruoyi.project.sems.domain.TApprove;
  24. import com.ruoyi.project.sems.his.domain.TApproveSpecModify;
  25. import com.ruoyi.project.sems.his.service.ITApproveSpecModifyService;
  26. import com.ruoyi.project.sems.service.ITApproveService;
  27. import com.ruoyi.project.system.domain.SysDept;
  28. import com.ruoyi.project.system.domain.SysUser;
  29. import com.ruoyi.project.system.domain.SysUserRole;
  30. import com.ruoyi.project.system.service.ISysUserService;
  31. import com.ruoyi.project.training.spec.domain.TStApprove;
  32. import com.ruoyi.project.training.spec.service.ITStApproveService;
  33. import org.activiti.bpmn.model.BpmnModel;
  34. import org.activiti.bpmn.model.FlowNode;
  35. import org.activiti.bpmn.model.Process;
  36. import org.activiti.bpmn.model.SequenceFlow;
  37. import org.activiti.engine.*;
  38. import org.activiti.engine.history.HistoricActivityInstance;
  39. import org.activiti.engine.history.HistoricProcessInstance;
  40. import org.activiti.engine.history.HistoricTaskInstance;
  41. import org.activiti.engine.history.HistoricTaskInstanceQuery;
  42. import org.activiti.engine.impl.identity.Authentication;
  43. import org.activiti.engine.repository.ProcessDefinition;
  44. import org.activiti.engine.runtime.ProcessInstance;
  45. import org.activiti.engine.task.Comment;
  46. import org.activiti.engine.task.Task;
  47. import org.activiti.image.impl.DefaultProcessDiagramGenerator;
  48. import org.apache.commons.collections.CollectionUtils;
  49. import org.springframework.security.access.prepost.PreAuthorize;
  50. import org.springframework.beans.factory.annotation.Autowired;
  51. import org.springframework.web.bind.annotation.*;
  52. import com.ruoyi.framework.aspectj.lang.annotation.Log;
  53. import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
  54. import com.ruoyi.project.ehs.domain.TApproveDanger;
  55. import com.ruoyi.project.ehs.service.ITApproveDangerService;
  56. import com.ruoyi.framework.web.controller.BaseController;
  57. import com.ruoyi.framework.web.domain.AjaxResult;
  58. import com.ruoyi.common.utils.poi.ExcelUtil;
  59. import com.ruoyi.framework.web.page.TableDataInfo;
  60. import org.springframework.web.multipart.MultipartFile;
  61. import javax.servlet.http.HttpServletResponse;
  62. /**
  63. * 隐患申请Controller
  64. *
  65. * @author ruoyi
  66. * @date 2021-02-20
  67. */
  68. @RestController
  69. @RequestMapping("/ehs/approvedanger")
  70. public class TApproveDangerController extends BaseController
  71. {
  72. @Autowired
  73. private ITApproveDangerService tApproveDangerService;
  74. @Autowired
  75. private ITApproveAccidentService tApproveAccidentService;
  76. @Autowired
  77. private RuntimeService runtimeService;
  78. @Autowired
  79. private HistoryService historyService;
  80. @Autowired
  81. private TaskService taskService;
  82. @Autowired
  83. private ISysUserService sysUserService;
  84. @Autowired
  85. private ITCommonfileService tCommonfileService;
  86. @Autowired
  87. private ITApproveService tApproveService;
  88. @Autowired
  89. private ITApproveSpecModifyService tApproveSpecModifyService;
  90. @Autowired
  91. private ITStApproveService tStApproveService;
  92. @Autowired
  93. private RepositoryService repositoryService;
  94. @Autowired
  95. private ITApproveMaintenanceService tApproveMaintenanceService;
  96. @Autowired
  97. private ITIntactApproveService tIntactApproveService;
  98. /**
  99. * 任务申请
  100. */
  101. @PostMapping("/save")
  102. public AjaxResult save(@RequestBody TApproveDanger tApprove) {
  103. try {
  104. logger.info("任务申请" + JSON.toJSONString(tApprove));
  105. Long userid = getUserId();
  106. //审批编号
  107. Date dt = new Date();
  108. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
  109. String data = sdf.format(dt) + userid;
  110. tApprove.setApproveNo(data);
  111. tApprove.setRecorderId(userid);
  112. logger.info("tApprove:" + tApprove);
  113. tApproveDangerService.insertTApproveDanger(tApprove);
  114. Map<String, Object> variables = new HashMap<>();
  115. //执行人、验证人确认
  116. Long verificationId = null;
  117. Long deptId = sysUserService.selectUserById(userid).getDeptId();
  118. List<SysUser> deptPerson = sysUserService.selectUserByDept(deptId);
  119. for (SysUser s : deptPerson) {
  120. SysUserRole userRole = sysUserService.selectRoleByUserId(s.getUserId());
  121. if (userRole.getRoleId() == 100) {
  122. verificationId = userRole.getUserId();
  123. }
  124. }
  125. tApprove.setVerificationId(verificationId);
  126. //开始工作流、监听
  127. variables.put("endSucessListener", new EndSucessListener());
  128. variables.put("recorderTaskCreateListener", new RecorderTaskCreateListener());
  129. variables.put("executorTaskCreateListener", new ExecutorTaskCreateListener());
  130. variables.put("verificationTaskCreateListener", new VerificationTaskCreateListener());
  131. //审批人员设置
  132. variables.put("recorder", userid);
  133. variables.put("executor", tApprove.getExecutorId());
  134. variables.put("verification", verificationId);
  135. logger.info("executor:" + tApprove.getExecutorId());
  136. logger.info("verification:" + verificationId);
  137. long bussniseeKey = tApprove.getId();
  138. logger.info("bussniseeKey:" + bussniseeKey);
  139. Authentication.setAuthenticatedUserId(userid.toString());
  140. //采用key来启动流程定义并设置流程变量,返回流程实例
  141. ProcessInstance pi = null;
  142. if (tApprove.getHiddendangerLevel() == 2) {
  143. pi = runtimeService.startProcessInstanceByKey("commonProcess", String.valueOf(bussniseeKey), variables);
  144. }else if (tApprove.getHiddendangerLevel() == 3) {
  145. //初始化会签人员
  146. List<Long> confirmlist = new ArrayList<>();
  147. confirmlist.add(tApprove.getConfirmoneId());
  148. confirmlist.add(tApprove.getConfirmtwoId());
  149. //条件表达式方法 一定要序列号
  150. variables.put("confirmlist", confirmlist);
  151. pi = runtimeService.startProcessInstanceByKey("majorProcess", String.valueOf(bussniseeKey), variables);
  152. }
  153. logger.info("流程部署id:" + pi.getDeploymentId());
  154. logger.info("流程定义id:" + pi.getProcessDefinitionId());
  155. logger.info("流程实例id:" + pi.getProcessInstanceId());
  156. logger.info("流程定义对象:" + pi.getProcessVariables());
  157. tApprove.setProcessId(Long.parseLong(pi.getProcessInstanceId()));
  158. logger.info("tApprove:" + tApprove);
  159. tApproveDangerService.updateTApproveDanger(tApprove);
  160. }catch (Exception e) {
  161. logger.info("e:" + e);
  162. }
  163. return AjaxResult.success("申请成功", tApprove);
  164. }
  165. /**
  166. * 一般隐患任务申请
  167. */
  168. @PostMapping("/savegeneral")
  169. public AjaxResult saveGeneral(@RequestBody TApproveDanger tApprove) {
  170. try {
  171. Long userid = getUserId();
  172. tApprove.setRecorderId(userid);
  173. logger.info("tApprove:" + tApprove);
  174. //tApproveDangerService.insertTApproveDanger(tApprove);
  175. }catch (Exception e) {
  176. logger.info("e:" + e);
  177. return AjaxResult.error(e.toString());
  178. }
  179. return AjaxResult.success("申请成功");
  180. }
  181. /**
  182. * 我的申请列表
  183. */
  184. @GetMapping("/myApprovelist")
  185. public TableDataInfo myApprovelist(@RequestParam Map<String, Object> params) {
  186. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  187. //查询发起流程
  188. List<HistoricProcessInstance> historicProcessInstanceList =
  189. historyService.createHistoricProcessInstanceQuery()
  190. .startedBy(getUserId().toString()).orderByProcessInstanceStartTime().desc()//参与者,组任务查询
  191. .listPage(Integer.parseInt((String) params.get("pageNum")) - 1, Integer.parseInt((String) params.get("pageSize")));
  192. Long count = historyService.createHistoricProcessInstanceQuery()
  193. .startedBy(getUserId().toString()).count();
  194. logger.info(JSON.toJSONString(historicProcessInstanceList));
  195. //整合我的申请数据
  196. List<DevProcess> list = new ArrayList<>();
  197. if (historicProcessInstanceList.size() > 0)
  198. for (HistoricProcessInstance h : historicProcessInstanceList
  199. ) {
  200. HistoricProcessInstance pi = processEngine.getHistoryService()
  201. .createHistoricProcessInstanceQuery().processInstanceId(h.getId()).singleResult();
  202. logger.info(JSON.toJSONString(pi));
  203. if (pi == null) {
  204. continue;
  205. }
  206. DevProcess devProcess = new DevProcess();
  207. logger.info("审批类型" +pi.getProcessDefinitionName());
  208. if (pi.getProcessDefinitionName().equals("特种设备审核")){
  209. TApprove approve = tApproveService.selectTApproveById(Long.parseLong(h.getBusinessKey()));
  210. devProcess.setSpecApprove(approve);
  211. devProcess.setApNo(approve.getApNo());
  212. }else if (pi.getProcessDefinitionName().equals("年度检查报告申请")){
  213. TApprove approve = tApproveService.selectTApproveById(Long.parseLong(h.getBusinessKey()));
  214. devProcess.setSpecApprove(approve);
  215. devProcess.setApNo(approve.getApNo());
  216. }else if (pi.getProcessDefinitionName().equals("月度检查")){
  217. TApprove approve = tApproveService.selectTApproveById(Long.parseLong(h.getBusinessKey()));
  218. devProcess.setSpecApprove(approve);
  219. devProcess.setApNo(approve.getApNo());
  220. }else if (pi.getProcessDefinitionName().equals("设备修改/删除审核")){
  221. TApproveSpecModify approve = tApproveSpecModifyService.selectTApproveSpecModifyById(Long.parseLong(pi.getBusinessKey()));
  222. devProcess.setApproveSpecModify(approve);
  223. devProcess.setApNo(approve.getApNo());
  224. }else if(pi.getProcessDefinitionName().equals("事件审批流程")){
  225. TApproveDanger approveDanger = tApproveDangerService.selectTApproveDangerById(Long.parseLong(h.getBusinessKey()));
  226. devProcess.settApprove(approveDanger);
  227. devProcess.setApNo(approveDanger.getApproveNo());
  228. }else if(pi.getProcessDefinitionName().equals("重大隐患审批流程") || pi.getProcessDefinitionName().equals("普通隐患审批流程")){
  229. TApproveDanger approveDanger = tApproveDangerService.selectTApproveDangerById(Long.parseLong(h.getBusinessKey()));
  230. devProcess.settApprove(approveDanger);
  231. devProcess.setApNo(approveDanger.getApproveNo());
  232. }else if(pi.getProcessDefinitionName().equals("专项培训计划审核")){
  233. TStApprove approve = tStApproveService.selectTStApproveById(Long.parseLong(pi.getBusinessKey()));
  234. devProcess.setApproveObject(approve);
  235. devProcess.setApNo(approve.getApNo());
  236. }else if(pi.getProcessDefinitionName().equals("设备维修审批流程")){
  237. TApproveMaintenance approve = tApproveMaintenanceService.selectTApproveMaintenanceById(Long.parseLong(pi.getBusinessKey()));
  238. devProcess.setApproveObject(approve);
  239. devProcess.setApNo(approve.getApNo());
  240. }else if(pi.getProcessDefinitionName().equals("设备变更申请")){
  241. TIntactApprove approve = tIntactApproveService.selectTIntactApproveById(Long.parseLong(pi.getBusinessKey()));
  242. devProcess.setApproveObject(approve);
  243. devProcess.setApNo(approve.getApNo());
  244. }
  245. devProcess.setBusinessKey(pi.getBusinessKey());
  246. devProcess.setProcessCreateTime(pi.getStartTime());
  247. devProcess.setProcessId(pi.getId());
  248. devProcess.setProcessName(pi.getProcessDefinitionName());
  249. if (pi.getEndActivityId() != null) {
  250. devProcess.setEnd(true);
  251. } else {
  252. devProcess.setEnd(false);
  253. };
  254. logger.info("devProcess:" + devProcess);
  255. list.add(devProcess);
  256. }
  257. return getDataTable(list);
  258. }
  259. /**
  260. * 我的待办列表
  261. */
  262. @GetMapping("/backlogList")
  263. public TableDataInfo backlogList(@RequestParam Map<String, Object> params) {
  264. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  265. List<Task> taskList = processEngine.getTaskService()//获取任务service
  266. .createTaskQuery()//创建查询对象
  267. .taskAssignee(getUserId().toString()).orderByTaskCreateTime().desc()//参与者,组任务查询
  268. .listPage(Integer.parseInt((String) params.get("pageNum")) - 1, Integer.parseInt((String) params.get("pageSize")));
  269. //分页数据
  270. Long count = processEngine.getTaskService().createTaskQuery().taskCandidateUser(getUserId().toString()).count();
  271. List<DevTask> list = new ArrayList<>();
  272. if (taskList.size() > 0) {
  273. for (Task task : taskList) {
  274. ProcessInstance pi = processEngine.getRuntimeService()/**表示正在执行的流程实例和执行对象*/
  275. .createProcessInstanceQuery()/**创建流程实例查询*/
  276. .processInstanceId(task.getProcessInstanceId())/**使用流程实例ID查询*/
  277. .singleResult();
  278. logger.info("待办任务ID:" + task.getId());
  279. logger.info("待办任务name:" + task.getName());
  280. logger.info("待办任务创建时间:" + task.getCreateTime());
  281. logger.info("待办任务办理人:" + task.getAssignee());
  282. logger.info("流程实例ID:" + task.getProcessInstanceId());
  283. logger.info("执行对象ID:" + task.getExecutionId());
  284. logger.info(task.getTenantId());
  285. logger.info(task.getCategory());
  286. logger.info(task.getFormKey());
  287. logger.info("流程实例Name:" + pi.getProcessDefinitionName());
  288. DevTask devTask = new DevTask();
  289. devTask.setTaskId(task.getId());
  290. devTask.setTaskName(task.getName());
  291. devTask.setTaskCreateTime(task.getCreateTime());
  292. devTask.setProcessId(task.getProcessInstanceId());
  293. devTask.setProcessName(pi.getProcessDefinitionName());
  294. devTask.setProcessCreateTime(pi.getStartTime());
  295. devTask.setBusinessKey(pi.getBusinessKey());
  296. if (pi.getProcessDefinitionName().equals("重大隐患审批流程") || pi.getProcessDefinitionName().equals("普通隐患审批流程")) {
  297. TApproveDanger approveDanger = tApproveDangerService.selectTApproveDangerById(Long.parseLong(pi.getBusinessKey()));
  298. devTask.settApprove(approveDanger);
  299. devTask.setApNo(approveDanger.getApproveNo());
  300. }else if (pi.getProcessDefinitionName().equals("事件审批流程")) {
  301. TApproveAccident approveAccident = tApproveAccidentService.selectTApproveAccidentById(Long.parseLong(pi.getBusinessKey()));
  302. devTask.settApproveAccident(approveAccident);
  303. devTask.setApNo(approveAccident.getApproveNo());
  304. }else if (pi.getProcessDefinitionName().equals("特种设备审核")) {
  305. TApprove approve = tApproveService.selectTApproveById(Long.parseLong(pi.getBusinessKey()));
  306. devTask.setSpecApprove(approve);
  307. devTask.setApNo(approve.getApNo());
  308. }else if (pi.getProcessDefinitionName().equals("年度检查报告申请")) {
  309. TApprove approve = tApproveService.selectTApproveById(Long.parseLong(pi.getBusinessKey()));
  310. devTask.setSpecApprove(approve);
  311. devTask.setApNo(approve.getApNo());
  312. }else if (pi.getProcessDefinitionName().equals("月度检查")) {
  313. TApprove approve = tApproveService.selectTApproveById(Long.parseLong(pi.getBusinessKey()));
  314. devTask.setSpecApprove(approve);
  315. devTask.setApNo(approve.getApNo());
  316. }else if (pi.getProcessDefinitionName().equals("设备修改/删除审核")) {
  317. TApproveSpecModify approve = tApproveSpecModifyService.selectTApproveSpecModifyById(Long.parseLong(pi.getBusinessKey()));
  318. logger.info("设备修改/删除审核" +JSON.toJSONString(approve));
  319. devTask.setApproveSpecModify(approve);
  320. }else if (pi.getProcessDefinitionName().equals("专项培训计划审核")) {
  321. TStApprove approve = tStApproveService.selectTStApproveById(Long.parseLong(pi.getBusinessKey()));
  322. logger.info("专项培训计划审核" +JSON.toJSONString(approve));
  323. devTask.setApproveObj(approve);
  324. devTask.setApNo(approve.getApNo());
  325. }else if (pi.getProcessDefinitionName().equals("设备维修审批流程")) {
  326. TApproveMaintenance approve = tApproveMaintenanceService.selectTApproveMaintenanceById(Long.parseLong(pi.getBusinessKey()));
  327. logger.info("设备维修审批流程" +JSON.toJSONString(approve));
  328. devTask.setApproveObj(approve);
  329. devTask.setApNo(approve.getApNo());
  330. }else if (pi.getProcessDefinitionName().equals("设备变更申请")) {
  331. TIntactApprove approve = tIntactApproveService.selectTIntactApproveById(Long.parseLong(pi.getBusinessKey()));
  332. logger.info("设备变更申请" +JSON.toJSONString(approve));
  333. devTask.setApproveObj(approve);
  334. devTask.setApNo(approve.getApNo());
  335. }
  336. list.add(devTask);
  337. }
  338. }
  339. return getDataTable(list);
  340. }
  341. /**
  342. * 已办任务列表
  343. */
  344. @GetMapping("/doneTaskList")
  345. public TableDataInfo doneTaskList(@RequestParam Map<String, Object> params) {
  346. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  347. List<HistoricTaskInstance> taskList = historyService.createHistoricTaskInstanceQuery()
  348. .taskAssignee(getUserId().toString())
  349. .finished().orderByHistoricTaskInstanceEndTime().desc()
  350. .listPage(Integer.parseInt((String) params.get("pageNum")) - 1, Integer.parseInt((String) params.get("pageSize")));
  351. //分页数据
  352. Long count = historyService.createHistoricTaskInstanceQuery()
  353. .taskAssignee(getUserId().toString())
  354. .finished().count();
  355. logger.info(JSON.toJSONString(taskList));
  356. List<DevProcess> list = new ArrayList<>();
  357. if (taskList.size() > 0) {
  358. for (HistoricTaskInstance h : taskList) {
  359. //logger.info("HistoricTaskInstance:" + JSON.toJSONString(h));
  360. HistoricProcessInstance pi = processEngine.getHistoryService()
  361. .createHistoricProcessInstanceQuery().processInstanceId(h.getProcessInstanceId()).singleResult();
  362. logger.info(JSON.toJSONString(pi));
  363. if (pi == null) {
  364. continue;
  365. }
  366. DevProcess devProcess = new DevProcess();
  367. if (pi.getProcessDefinitionName().equals("特种设备审核")){
  368. TApprove approve = tApproveService.selectTApproveById(Long.parseLong(pi.getBusinessKey()));
  369. SysUser user = sysUserService.selectUserById(approve.getUserId());
  370. devProcess.setApNo(approve.getApNo());
  371. devProcess.setApName(user.getNickName());
  372. devProcess.setSpecApprove(approve);
  373. }else if (pi.getProcessDefinitionName().equals("年度检查报告申请")){
  374. TApprove approve = tApproveService.selectTApproveById(Long.parseLong(pi.getBusinessKey()));
  375. SysUser user = sysUserService.selectUserById(approve.getUserId());
  376. devProcess.setApNo(approve.getApNo());
  377. devProcess.setApName(user.getNickName());
  378. devProcess.setSpecApprove(approve);
  379. }else if (pi.getProcessDefinitionName().equals("月度检查")){
  380. TApprove approve = tApproveService.selectTApproveById(Long.parseLong(pi.getBusinessKey()));
  381. SysUser user = sysUserService.selectUserById(approve.getUserId());
  382. devProcess.setApNo(approve.getApNo());
  383. devProcess.setApName(user.getNickName());
  384. devProcess.setSpecApprove(approve);
  385. }else if (pi.getProcessDefinitionName().equals("设备修改/删除审核")){
  386. TApproveSpecModify approve = tApproveSpecModifyService.selectTApproveSpecModifyById(Long.parseLong(pi.getBusinessKey()));
  387. SysUser user = sysUserService.selectUserById(approve.getUserId());
  388. devProcess.setApNo(approve.getApNo());
  389. devProcess.setApName(user.getNickName());
  390. devProcess.setApproveSpecModify(approve);
  391. }else if (pi.getProcessDefinitionName().equals("专项培训计划审核")){
  392. TStApprove approve = tStApproveService.selectTStApproveById(Long.parseLong(pi.getBusinessKey()));
  393. SysUser user = sysUserService.selectUserById(approve.getUserId());
  394. devProcess.setApNo(approve.getApNo());
  395. devProcess.setApName(user.getNickName());
  396. devProcess.setApproveObject(approve);
  397. }else if (pi.getProcessDefinitionName().equals("设备维修审批流程")) {
  398. TApproveMaintenance approve = tApproveMaintenanceService.selectTApproveMaintenanceById(Long.parseLong(pi.getBusinessKey()));
  399. SysUser user = sysUserService.selectUserById(approve.getUserId());
  400. devProcess.setApNo(approve.getApNo());
  401. devProcess.setApName(user.getNickName());
  402. devProcess.setApproveObject(approve);
  403. }else if (pi.getProcessDefinitionName().equals("设备变更申请")) {
  404. TIntactApprove approve = tIntactApproveService.selectTIntactApproveById(Long.parseLong(pi.getBusinessKey()));
  405. SysUser user = sysUserService.selectUserById(approve.getUserId());
  406. devProcess.setApNo(approve.getApNo());
  407. devProcess.setApName(user.getNickName());
  408. devProcess.setApproveObject(approve);
  409. }else {
  410. TApproveDanger approveDanger = tApproveDangerService.selectTApproveDangerById(Long.parseLong(pi.getBusinessKey()));
  411. SysUser user = sysUserService.selectUserById(approveDanger.getRecorderId());
  412. approveDanger.setRecorderName(user.getNickName());
  413. devProcess.settApprove(approveDanger);
  414. devProcess.setApNo(approveDanger.getApproveNo());
  415. devProcess.setApName(user.getNickName());
  416. }
  417. devProcess.setBusinessKey(pi.getBusinessKey());
  418. devProcess.setProcessCreateTime(pi.getStartTime());
  419. devProcess.setProcessId(pi.getId());
  420. devProcess.setProcessName(pi.getProcessDefinitionName());
  421. logger.info("devProcess:" + devProcess);
  422. if (pi.getEndActivityId() != null) {
  423. devProcess.setEnd(true);
  424. } else {
  425. devProcess.setEnd(false);
  426. }
  427. list.add(devProcess);
  428. }
  429. }
  430. return getDataTable(list);
  431. }
  432. /**
  433. * 审核处理
  434. */
  435. @Log(title = "隐患审核处理", businessType = BusinessType.UPDATE)
  436. @PutMapping("/handle")
  437. public AjaxResult handle(@RequestBody DevTask devTask) {
  438. logger.info("devTask:" + devTask);
  439. Map<String, Object> param = new HashMap<>();
  440. param.put("submitType", devTask.getSubmitType());
  441. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  442. TaskService taskService = processEngine.getTaskService();
  443. //使用任务服务完成任务(提交任务)
  444. String taskId = devTask.getTaskId();
  445. // 使用任务id,获取任务对象,获取流程实例id
  446. Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
  447. logger.info("Assignee:" + task.getAssignee());
  448. //利用任务对象,获取流程实例id
  449. String processInstancesId = task.getProcessInstanceId();
  450. System.out.println(processInstancesId);
  451. //认领任务
  452. processEngine.getTaskService()//
  453. .claim(taskId, getUserId().toString());
  454. // Authentication.setAuthenticatedUserId("cmc"); // 添加批注时候的审核人
  455. if (devTask.getComment() == null) {
  456. devTask.setComment("");
  457. }
  458. taskService.addComment(taskId, processInstancesId, devTask.getComment());
  459. //业务监听处理
  460. // tApproveService.handleApprove(task ,devTask);
  461. taskService.complete(taskId, param);
  462. //执行人上传措施前后照片
  463. if (devTask.getTaskName().equals("执行人") && devTask.getSubmitType().equals("1")) {
  464. TApproveDanger updatepicture = devTask.gettApprove();
  465. updatepicture.setBeforeUrl(devTask.getBeforeUrl());
  466. updatepicture.setBeforeFilename(devTask.getBeforeFilename());
  467. updatepicture.setAfterUrl(devTask.getAfterUrl());
  468. updatepicture.setAfterFilename(devTask.getAfterFilename());
  469. tApproveDangerService.updateTApproveDanger(updatepicture);
  470. }
  471. //流程结束,approveDanger实体类实际完成时间字段更新
  472. if (devTask.getTaskName().equals("验证人") && devTask.getSubmitType().equals("1")) {
  473. TApproveDanger updateEndTime = devTask.gettApprove();
  474. updateEndTime.setEndtime(new Date());
  475. tApproveDangerService.updateTApproveDanger(updateEndTime);
  476. }
  477. return AjaxResult.success();
  478. }
  479. /**
  480. * 流转列表
  481. */
  482. @GetMapping("/hiTaskList")
  483. public TableDataInfo hiTaskList(@RequestParam Map<String, Object> params) {
  484. String pid = (String) params.get("processId");
  485. logger.info("processId:" + JSON.toJSONString(pid));
  486. HistoricTaskInstanceQuery htiq = historyService.createHistoricTaskInstanceQuery();
  487. List<HistoricTaskInstance> htiLists = htiq.processInstanceId(pid).finished().orderByHistoricTaskInstanceEndTime().asc().list();
  488. logger.info("历史任务:" + JSON.toJSONString(htiLists));
  489. List<DevTask> devTaskList = new ArrayList<>();
  490. if (htiLists.size() > 0) {
  491. for (HistoricTaskInstance hi : htiLists
  492. ) {
  493. List<Comment> commentList = taskService.getTaskComments(hi.getId());
  494. logger.info("评论列表:" + JSON.toJSONString(commentList));
  495. DevTask devTask = new DevTask();
  496. devTask.setTaskName(hi.getName());
  497. devTask.setTaskCreateTime(hi.getCreateTime());
  498. devTask.setTaskEndTime(hi.getEndTime());
  499. if (commentList.size() > 0) {
  500. devTask.setComment(commentList.get(0).getFullMessage());
  501. }
  502. SysUser user = sysUserService.selectUserById(Long.parseLong(hi.getAssignee()));
  503. devTask.setUserName(user.getNickName());
  504. devTaskList.add(devTask);
  505. }
  506. }
  507. return getDataTable(devTaskList);
  508. }
  509. /**
  510. * 查询隐患申请列表
  511. */
  512. @PreAuthorize("@ss.hasPermi('ehs:approvedanger:list')")
  513. @GetMapping("/list")
  514. public TableDataInfo list(TApproveDanger tApproveDanger)
  515. {
  516. startPage();
  517. List<TApproveDanger> list = tApproveDangerService.selectTApproveDangerList(tApproveDanger);
  518. return getDataTable(list);
  519. }
  520. /**
  521. * 导出隐患申请列表
  522. */
  523. @PreAuthorize("@ss.hasPermi('ehs:approvedanger:export')")
  524. @Log(title = "隐患申请", businessType = BusinessType.EXPORT)
  525. @GetMapping("/export")
  526. public AjaxResult export(TApproveDanger tApproveDanger)
  527. {
  528. List<TApproveDanger> list = tApproveDangerService.selectTApproveDangerList(tApproveDanger);
  529. ExcelUtil<TApproveDanger> util = new ExcelUtil<TApproveDanger>(TApproveDanger.class);
  530. return util.exportExcel(list, "approvedanger");
  531. }
  532. /**
  533. * 获取隐患申请详细信息
  534. */
  535. @PreAuthorize("@ss.hasPermi('ehs:approvedanger:query')")
  536. @GetMapping(value = "/{id}")
  537. public AjaxResult getInfo(@PathVariable("id") Long id)
  538. {
  539. return AjaxResult.success(tApproveDangerService.selectTApproveDangerById(id));
  540. }
  541. /**
  542. * 新增隐患申请
  543. */
  544. @PreAuthorize("@ss.hasPermi('ehs:approvedanger:add')")
  545. @Log(title = "隐患申请", businessType = BusinessType.INSERT)
  546. @PostMapping
  547. public AjaxResult add(@RequestBody TApproveDanger tApproveDanger)
  548. {
  549. return toAjax(tApproveDangerService.insertTApproveDanger(tApproveDanger));
  550. }
  551. /**
  552. * 修改隐患申请
  553. */
  554. @PreAuthorize("@ss.hasPermi('ehs:approvedanger:edit')")
  555. @Log(title = "隐患申请", businessType = BusinessType.UPDATE)
  556. @PutMapping
  557. public AjaxResult edit(@RequestBody TApproveDanger tApproveDanger)
  558. {
  559. return toAjax(tApproveDangerService.updateTApproveDanger(tApproveDanger));
  560. }
  561. /**
  562. * 删除隐患申请
  563. */
  564. @PreAuthorize("@ss.hasPermi('ehs:approvedanger:remove')")
  565. @Log(title = "隐患申请", businessType = BusinessType.DELETE)
  566. @DeleteMapping("/{ids}")
  567. public AjaxResult remove(@PathVariable Long[] ids)
  568. {
  569. return toAjax(tApproveDangerService.deleteTApproveDangerByIds(ids));
  570. }
  571. @GetMapping("processImg/{processId}")
  572. public void currentProcessInstanceImage(@PathVariable("processId") String processId, HttpServletResponse response) throws IOException {
  573. InputStream inputStream = currentProcessInstanceImage(processId);
  574. OutputStream outputStream = response.getOutputStream();
  575. HttpContextUtils.copyImageStream(inputStream, outputStream);
  576. }
  577. /**
  578. * 获取当前任务流程图
  579. *
  580. * @param processId
  581. * @return
  582. */
  583. public InputStream currentProcessInstanceImage(String processId) {
  584. // Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
  585. // ProcessDefinition processDefinition = repositoryService.getProcessDefinition(processId);
  586. HistoricProcessInstance hi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processId).singleResult();
  587. ProcessDefinition processDefinition = repositoryService.getProcessDefinition(hi.getProcessDefinitionId());
  588. BpmnModel bpmnModel = repositoryService.getBpmnModel(hi.getProcessDefinitionId());
  589. // ID 为 流程定义Key
  590. Process process = bpmnModel.getProcessById(processDefinition.getKey());
  591. // 流程节点ID
  592. // 获取历史流程实例
  593. HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processId).singleResult();
  594. // 获取流程中已经执行的节点,按照执行先后顺序排序
  595. List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery().processInstanceId(processId)
  596. .orderByHistoricActivityInstanceId().asc().list();
  597. // 高亮已经执行流程节点ID集合
  598. List<String> highLightedActivitiIds = new ArrayList<>();
  599. for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
  600. highLightedActivitiIds.add(historicActivityInstance.getActivityId());
  601. }
  602. //高亮线路id集合
  603. List<String> highLightedFlowIds = getHighLightedFlows(bpmnModel, historicActivityInstances);
  604. DefaultProcessDiagramGenerator generator = new DefaultProcessDiagramGenerator();
  605. // 生成流程图
  606. // InputStream inputStream = generator.generateJpgDiagram(bpmnModel);
  607. // InputStream inputStream = generator.generatePngDiagram(bpmnModel);
  608. // InputStream inputStream = generator.generateDiagram(bpmnModel, "jpg", highLightedActivities);
  609. // 生成图片
  610. InputStream inputStream = generator.generateDiagram(bpmnModel, "jpg", highLightedActivitiIds, highLightedFlowIds, "宋体", "宋体", "宋体", null, 2.0);
  611. return inputStream;
  612. }
  613. /**
  614. * 获取流程定义图片
  615. *
  616. * @param processDefinitionId
  617. * @return
  618. */
  619. public InputStream getDefinitionImage(String processDefinitionId) {
  620. ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
  621. InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getDiagramResourceName());
  622. return inputStream;
  623. }
  624. /**
  625. * 获取已经流转的线
  626. *
  627. * @param bpmnModel
  628. * @param historicActivityInstances
  629. * @return
  630. */
  631. private static List<String> getHighLightedFlows(BpmnModel bpmnModel, List<HistoricActivityInstance> historicActivityInstances) {
  632. // 高亮流程已发生流转的线id集合
  633. List<String> highLightedFlowIds = new ArrayList<>();
  634. // 全部活动节点
  635. List<FlowNode> historicActivityNodes = new ArrayList<>();
  636. // 已完成的历史活动节点
  637. List<HistoricActivityInstance> finishedActivityInstances = new ArrayList<>();
  638. for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
  639. FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(historicActivityInstance.getActivityId(), true);
  640. historicActivityNodes.add(flowNode);
  641. if (historicActivityInstance.getEndTime() != null) {
  642. finishedActivityInstances.add(historicActivityInstance);
  643. }
  644. }
  645. FlowNode currentFlowNode = null;
  646. FlowNode targetFlowNode = null;
  647. // 遍历已完成的活动实例,从每个实例的outgoingFlows中找到已执行的
  648. for (HistoricActivityInstance currentActivityInstance : finishedActivityInstances) {
  649. // 获得当前活动对应的节点信息及outgoingFlows信息
  650. currentFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currentActivityInstance.getActivityId(), true);
  651. List<SequenceFlow> sequenceFlows = currentFlowNode.getOutgoingFlows();
  652. /**
  653. * 遍历outgoingFlows并找到已已流转的 满足如下条件认为已已流转: 1.当前节点是并行网关或兼容网关,则通过outgoingFlows能够在历史活动中找到的全部节点均为已流转 2.当前节点是以上两种类型之外的,通过outgoingFlows查找到的时间最早的流转节点视为有效流转
  654. */
  655. if ("parallelGateway".equals(currentActivityInstance.getActivityType()) || "inclusiveGateway".equals(currentActivityInstance.getActivityType())) {
  656. // 遍历历史活动节点,找到匹配流程目标节点的
  657. for (SequenceFlow sequenceFlow : sequenceFlows) {
  658. targetFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sequenceFlow.getTargetRef(), true);
  659. if (historicActivityNodes.contains(targetFlowNode)) {
  660. highLightedFlowIds.add(targetFlowNode.getId());
  661. }
  662. }
  663. } else {
  664. List<Map<String, Object>> tempMapList = new ArrayList<>();
  665. for (SequenceFlow sequenceFlow : sequenceFlows) {
  666. for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
  667. if (historicActivityInstance.getActivityId().equals(sequenceFlow.getTargetRef())) {
  668. Map<String, Object> map = new HashMap<>();
  669. map.put("highLightedFlowId", sequenceFlow.getId());
  670. map.put("highLightedFlowStartTime", historicActivityInstance.getStartTime().getTime());
  671. tempMapList.add(map);
  672. }
  673. }
  674. }
  675. if (!CollectionUtils.isEmpty(tempMapList)) {
  676. // 遍历匹配的集合,取得开始时间最早的一个
  677. long earliestStamp = 0L;
  678. String highLightedFlowId = null;
  679. for (Map<String, Object> map : tempMapList) {
  680. long highLightedFlowStartTime = Long.valueOf(map.get("highLightedFlowStartTime").toString());
  681. if (earliestStamp == 0 || earliestStamp >= highLightedFlowStartTime) {
  682. highLightedFlowId = map.get("highLightedFlowId").toString();
  683. earliestStamp = highLightedFlowStartTime;
  684. }
  685. }
  686. highLightedFlowIds.add(highLightedFlowId);
  687. }
  688. }
  689. }
  690. return highLightedFlowIds;
  691. }
  692. }