TApproveDangerController.java 40 KB

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