TPssrMocController.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. package com.ruoyi.project.pssr.controller;
  2. import com.ruoyi.common.utils.file.ExcelUtils;
  3. import com.ruoyi.common.utils.poi.ExcelUtil;
  4. import com.ruoyi.framework.aspectj.lang.annotation.Log;
  5. import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
  6. import com.ruoyi.framework.web.controller.BaseController;
  7. import com.ruoyi.framework.web.domain.AjaxResult;
  8. import com.ruoyi.framework.web.page.TableDataInfo;
  9. import com.ruoyi.project.pssr.domain.TPssrApprove;
  10. import com.ruoyi.project.pssr.domain.TPssrMoc;
  11. import com.ruoyi.project.pssr.domain.TPssrMoc;
  12. import com.ruoyi.project.pssr.domain.TPssrSubcontent;
  13. import com.ruoyi.project.pssr.service.ITPssrApproveService;
  14. import com.ruoyi.project.pssr.service.ITPssrMocService;
  15. import com.ruoyi.project.pssr.service.ITPssrSubcontentService;
  16. import com.ruoyi.project.system.domain.SysUser;
  17. import com.ruoyi.project.system.service.ISysUserService;
  18. import org.activiti.engine.ProcessEngine;
  19. import org.activiti.engine.ProcessEngines;
  20. import org.activiti.engine.TaskService;
  21. import org.activiti.engine.task.Task;
  22. import org.apache.poi.ss.usermodel.Cell;
  23. import org.apache.poi.ss.usermodel.CellStyle;
  24. import org.apache.poi.ss.usermodel.Row;
  25. import org.apache.poi.xssf.usermodel.XSSFSheet;
  26. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  27. import org.springframework.beans.factory.annotation.Autowired;
  28. import org.springframework.security.access.prepost.PreAuthorize;
  29. import org.springframework.web.bind.annotation.*;
  30. import java.io.FileOutputStream;
  31. import java.io.IOException;
  32. import java.io.InputStream;
  33. import java.io.OutputStream;
  34. import java.util.*;
  35. /**
  36. * MOC完成确认清单Controller
  37. *
  38. * @author ssy
  39. * @date 2024-10-31
  40. */
  41. @RestController
  42. @RequestMapping("/pssr/moc")
  43. public class TPssrMocController extends BaseController {
  44. @Autowired
  45. private ITPssrMocService tPssrMocService;
  46. @Autowired
  47. private ITPssrApproveService tPssrApproveService;
  48. @Autowired
  49. private ITPssrSubcontentService tPssrSubcontentService;
  50. @Autowired
  51. private ISysUserService sysUserService;
  52. /**
  53. * 查询MOC完成确认清单列表
  54. */
  55. @PreAuthorize("@ss.hasPermi('pssr:moc:list')")
  56. @GetMapping("/list")
  57. public TableDataInfo list(TPssrMoc tPssrMoc) {
  58. startPage();
  59. List<TPssrMoc> list = tPssrMocService.selectTPssrMocList(tPssrMoc);
  60. return getDataTable(list);
  61. }
  62. /**
  63. * 导出MOC完成确认清单列表
  64. */
  65. @PreAuthorize("@ss.hasPermi('pssr:moc:export')")
  66. @Log(title = "MOC完成确认清单", businessType = BusinessType.EXPORT)
  67. @GetMapping("/export")
  68. public AjaxResult export(TPssrMoc tPssrMoc) {
  69. List<TPssrMoc> list = tPssrMocService.selectTPssrMocList(tPssrMoc);
  70. return AjaxResult.success(exportTmpl(list));
  71. }
  72. public String exportTmpl(List<TPssrMoc> list) {
  73. OutputStream out = null;
  74. String filename = null;
  75. try {
  76. String tempUrl = "static/word/pssr/sjbg.xlsx"; // 模板文件
  77. InputStream is = null;
  78. is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tempUrl);
  79. XSSFWorkbook wb = null;
  80. wb = new XSSFWorkbook(is);
  81. XSSFSheet sheet = wb.getSheetAt(0);
  82. //填充数据
  83. int rowIndex = 3;
  84. int num = 1;
  85. Row originalRow = sheet.getRow(3);
  86. Cell originalcell = originalRow.getCell(0);
  87. // 获取单元格样式
  88. CellStyle originalStyle = originalcell.getCellStyle();
  89. for (TPssrMoc t : list) {
  90. Row row = sheet.createRow(rowIndex);
  91. row.setHeight((short) 800);
  92. row.createCell(0).setCellValue(num);
  93. row.createCell(1).setCellValue(t.getRegion());
  94. row.createCell(2).setCellValue(t.getMocNo());
  95. row.createCell(3).setCellValue(t.getTitle());
  96. row.createCell(4).setCellValue(t.getDocUpdate());
  97. row.createCell(5).setCellValue(t.getTraining());
  98. row.createCell(6).setCellValue(t.getPssr());
  99. row.createCell(7);
  100. row.createCell(8);
  101. try {
  102. SysUser sysUser = sysUserService.selectUserById(Long.valueOf(t.getConfirm1()));
  103. SysUser sysUser2 = sysUserService.selectUserById(Long.valueOf(t.getConfirm2()));
  104. String confirm1 = sysUser.getSignUrl();
  105. String confirm2= sysUser2.getSignUrl();
  106. ExcelUtils.insertPicture(wb, sheet, confirm1, row.getRowNum(), 7, 1, 1);
  107. ExcelUtils.insertPicture(wb, sheet, confirm2, row.getRowNum(), 8, 1, 1);
  108. } catch (NumberFormatException e) {
  109. throw new RuntimeException(e);
  110. }
  111. row.createCell(9).setCellValue(t.getConfirmationDate());
  112. row.createCell(10).setCellValue(t.getRemarks());
  113. //渲染样式
  114. for (int i = 0; i < 11; i++) {
  115. row.getCell(i).setCellStyle(originalStyle);
  116. }
  117. num++;
  118. rowIndex++;
  119. }
  120. filename = ExcelUtil.encodingFilename("Moc");
  121. out = new FileOutputStream(ExcelUtil.getAbsoluteFile(filename));
  122. wb.write(out);
  123. wb.close();
  124. } catch (IOException e) {
  125. e.printStackTrace();
  126. }
  127. return filename;
  128. }
  129. /**
  130. * 获取MOC完成确认清单详细信息
  131. */
  132. @PreAuthorize("@ss.hasPermi('pssr:moc:query')")
  133. @GetMapping(value = "/{id}")
  134. public AjaxResult getInfo(@PathVariable("id") Long id) {
  135. return AjaxResult.success(tPssrMocService.selectTPssrMocById(id));
  136. }
  137. /**
  138. * 新增MOC完成确认清单
  139. */
  140. @PreAuthorize("@ss.hasPermi('pssr:moc:add')")
  141. @Log(title = "MOC完成确认清单", businessType = BusinessType.INSERT)
  142. @PostMapping
  143. public AjaxResult add(@RequestBody TPssrMoc tPssrMoc) {
  144. return toAjax(tPssrMocService.insertTPssrMoc(tPssrMoc));
  145. }
  146. /**
  147. * 修改MOC完成确认清单
  148. */
  149. @PreAuthorize("@ss.hasPermi('pssr:moc:edit')")
  150. @Log(title = "MOC完成确认清单", businessType = BusinessType.UPDATE)
  151. @PutMapping
  152. public AjaxResult edit(@RequestBody TPssrMoc tPssrMoc) {
  153. return toAjax(tPssrMocService.updateTPssrMoc(tPssrMoc));
  154. }
  155. /**
  156. * 删除MOC完成确认清单
  157. */
  158. @PreAuthorize("@ss.hasPermi('pssr:moc:remove')")
  159. @Log(title = "MOC完成确认清单", businessType = BusinessType.DELETE)
  160. @DeleteMapping("/{ids}")
  161. public AjaxResult remove(@PathVariable Long[] ids) {
  162. return toAjax(tPssrMocService.deleteTPssrMocByIds(ids));
  163. }
  164. /**
  165. * 确认设计变更
  166. */
  167. @PreAuthorize("@ss.hasPermi('pssr:moc:edit')")
  168. @Log(title = "设计变更", businessType = BusinessType.UPDATE)
  169. @PutMapping("/confirmMoc")
  170. public AjaxResult confirmMoc(@RequestBody TPssrMoc tPssrMoc) {
  171. long queryStatus = 0;
  172. long approveStatus = 0;
  173. Date date = null;
  174. if (tPssrMoc.getTaskType() == 4) {
  175. //确认人1确认
  176. queryStatus = 1;
  177. approveStatus = 3;
  178. date = new Date();
  179. } else if (tPssrMoc.getTaskType() == 5) {
  180. //确认人2确认
  181. queryStatus = 3;
  182. approveStatus = 2;
  183. date = new Date();
  184. }
  185. // 修改状态
  186. if (tPssrMoc.getIds() != null && tPssrMoc.getIds().length > 0) {
  187. for (Long id : tPssrMoc.getIds()) {
  188. TPssrMoc item = tPssrMocService.selectTPssrMocById(id);
  189. item.setApproveStatus(approveStatus);
  190. if (item.getConfirmationDate() == null && queryStatus == 3) {
  191. item.setConfirmationDate(date);
  192. }
  193. tPssrMocService.updateTPssrMoc(item);
  194. }
  195. } else {
  196. TPssrMoc lock = new TPssrMoc();
  197. lock.setSubId(tPssrMoc.getSubId());
  198. lock.setApproveStatus(queryStatus);
  199. for (TPssrMoc item : tPssrMocService.selectTPssrMocList(lock)) {
  200. if (item.getConfirmationDate() == null && queryStatus == 3) {
  201. item.setConfirmationDate(date);
  202. }
  203. item.setApproveStatus(approveStatus);
  204. tPssrMocService.updateTPssrMoc(item);
  205. }
  206. }
  207. //查询当前待审批的确认人
  208. TPssrMoc entity = new TPssrMoc();
  209. entity.setSubId(tPssrMoc.getSubId());
  210. entity.setApproveStatus(queryStatus);
  211. for (TPssrMoc item : tPssrMocService.selectTPssrMocList(entity)) {
  212. if (tPssrMoc.getTaskType() == 4) {
  213. if (item.getConfirm1().equals(getUserId().toString())) {
  214. return AjaxResult.success();
  215. }
  216. } else if (tPssrMoc.getTaskType() == 5) {
  217. if (item.getConfirm2().equals(getUserId().toString())) {
  218. return AjaxResult.success();
  219. }
  220. }
  221. }
  222. //无待审批任务结束当前用户流程
  223. // 因为流程关系所以approve一定会有且只有一条数据
  224. TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveBySubId(tPssrMoc.getSubId());
  225. TPssrApproveController.handleConfirmApprove(tPssrApprove, getUserId().toString());
  226. return AjaxResult.success();
  227. }
  228. /**
  229. * 驳回设计变更
  230. */
  231. @PutMapping("/turnDownMoc")
  232. public AjaxResult turnDownMoc(@RequestBody TPssrMoc tPssrMoc) {
  233. if (tPssrMoc.getIds() != null) {
  234. String userId = getUserId().toString();
  235. // 修改已选择数据的状态
  236. for (Long id : tPssrMoc.getIds()) {
  237. TPssrMoc blind = new TPssrMoc();
  238. blind.setId(id);
  239. blind.setApproveStatus(1L);
  240. blind.setUpdatedate(new Date());
  241. blind.setUpdaterCode(getUserId().toString());
  242. tPssrMocService.updateTPssrMoc(blind);
  243. }
  244. // 查询当前流程
  245. TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(tPssrMoc.getSubId());
  246. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  247. TaskService taskService = processEngine.getTaskService();
  248. Task task = processEngine.getTaskService()//获取任务service
  249. .createTaskQuery()//创建查询对象
  250. .taskAssignee(userId)
  251. .processInstanceId(approve.getProcessId()).singleResult();
  252. String taskId = task.getId();
  253. // 驳回 查询所有待审批的人员
  254. TPssrMoc blind = new TPssrMoc();
  255. blind.setSubId(tPssrMoc.getSubId());
  256. blind.setApproveStatus(1L);
  257. Set<String> confirm1 = new HashSet<>();
  258. Set<String> confirm2 = new HashSet<>();
  259. for (TPssrMoc item : tPssrMocService.selectTPssrMocList(blind)) {
  260. // 确认人1
  261. confirm1.add(item.getConfirm1());
  262. // 确认人2
  263. confirm2.add(item.getConfirm2());
  264. }
  265. //处理流程节点
  266. Map<String, Object> param = new HashMap<>();
  267. param.put("condition", 1);
  268. param.put("confirmUsers1", new ArrayList<>(confirm1));
  269. param.put("confirmUsers2", new ArrayList<>(confirm2));
  270. //认领任务
  271. processEngine.getTaskService().claim(taskId, userId);
  272. taskService.addComment(taskId, approve.getProcessId(), "驳回;" + tPssrMoc.getRemarks());
  273. taskService.complete(taskId, param);
  274. // 修改审批表和sub表
  275. approve.setApproveStatus(1L);
  276. approve.setUpdatedate(new Date());
  277. approve.setUpdaterCode(getUserId().toString());
  278. tPssrApproveService.updateTPssrApprove(approve);
  279. TPssrSubcontent subcontent = new TPssrSubcontent();
  280. subcontent.setId(approve.getSubId());
  281. subcontent.setApproveStatus(1L);
  282. subcontent.setUpdatedate(new Date());
  283. subcontent.setUpdaterCode(getUserId().toString());
  284. tPssrSubcontentService.updateTPssrSubcontent(subcontent);
  285. return AjaxResult.success();
  286. }
  287. return AjaxResult.error();
  288. }
  289. }