TPssrHygieneController.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. package com.ruoyi.project.pssr.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.ruoyi.common.utils.DateUtils;
  4. import com.ruoyi.common.utils.file.ExcelUtils;
  5. import com.ruoyi.common.utils.poi.ExcelUtil;
  6. import com.ruoyi.framework.aspectj.lang.annotation.Log;
  7. import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
  8. import com.ruoyi.framework.web.controller.BaseController;
  9. import com.ruoyi.framework.web.domain.AjaxResult;
  10. import com.ruoyi.framework.web.page.TableDataInfo;
  11. import com.ruoyi.project.pssr.domain.TPssrApprove;
  12. import com.ruoyi.project.pssr.domain.TPssrHygiene;
  13. import com.ruoyi.project.pssr.domain.TPssrSubcontent;
  14. import com.ruoyi.project.pssr.domain.TPssrTurndown;
  15. import com.ruoyi.project.pssr.service.*;
  16. import com.ruoyi.project.system.domain.SysDept;
  17. import com.ruoyi.project.system.domain.SysUser;
  18. import com.ruoyi.project.system.service.ISysDeptService;
  19. import com.ruoyi.project.system.service.ISysUserService;
  20. import org.activiti.engine.ProcessEngine;
  21. import org.activiti.engine.ProcessEngines;
  22. import org.activiti.engine.TaskService;
  23. import org.activiti.engine.task.Task;
  24. import org.apache.commons.collections4.CollectionUtils;
  25. import org.apache.poi.ss.usermodel.*;
  26. import org.apache.poi.xssf.usermodel.XSSFSheet;
  27. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.security.access.prepost.PreAuthorize;
  30. import org.springframework.web.bind.annotation.*;
  31. import org.springframework.web.multipart.MultipartFile;
  32. import java.io.FileOutputStream;
  33. import java.io.IOException;
  34. import java.io.InputStream;
  35. import java.io.OutputStream;
  36. import java.text.SimpleDateFormat;
  37. import java.util.*;
  38. /**
  39. * 现场卫生Controller
  40. *
  41. * @author ssy
  42. * @date 2024-09-18
  43. */
  44. @RestController
  45. @RequestMapping("/pssr/hygiene")
  46. public class TPssrHygieneController extends BaseController {
  47. @Autowired
  48. private ITPssrFileService tPssrFileService;
  49. @Autowired
  50. private ITPssrTurndownService tPssrTurndownService;
  51. @Autowired
  52. private ITPssrHygieneService tPssrHygieneService;
  53. @Autowired
  54. private ITPssrApproveService tPssrApproveService;
  55. @Autowired
  56. private ITPssrSubcontentService tPssrSubcontentService;
  57. @Autowired
  58. private ISysUserService sysUserService;
  59. private String forShort = "xcws";
  60. @Autowired
  61. private ISysDeptService iSysDeptService;
  62. @Autowired
  63. private ISysUserService userService;
  64. /**
  65. * 批量导入
  66. */
  67. @PreAuthorize("@ss.hasPermi('pssr:hygiene:add')")
  68. @PostMapping("/importData")
  69. public AjaxResult importInterlockData(MultipartFile file, Long subId) throws IOException
  70. {
  71. //获取操作人员ID
  72. Long userId = getUserId();
  73. //报错行数统计
  74. List<Integer> failRow =new ArrayList<Integer>();
  75. Workbook workbook = ExcelUtils.getWorkBook(file);
  76. Sheet sheet = workbook.getSheetAt(0);
  77. List<TPssrHygiene> list = new ArrayList<TPssrHygiene>();
  78. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  79. //部门查询
  80. List<SysDept> dept = iSysDeptService.selectDeptList(new SysDept());
  81. int rowNum = sheet.getPhysicalNumberOfRows();
  82. int failNumber = 0;
  83. for (int i = 2; i <= rowNum; i++) {
  84. try {
  85. logger.info("读取行数:" + i);
  86. Row row = sheet.getRow(i);
  87. int cellNum = row.getPhysicalNumberOfCells();
  88. TPssrHygiene entity = new TPssrHygiene();
  89. entity.setDeptId(userService.selectUserById(getUserId()).getDeptId());
  90. entity.setSubId(subId);
  91. entity.setApproveStatus(0L);
  92. for (int j = 0; j < cellNum; j++) {
  93. Cell cell = row.getCell(j);
  94. String cellValue = ExcelUtils.getCellValue(cell);
  95. logger.info("cellValue:" + cellValue);
  96. if (j == 0) {
  97. entity.setCheckContent(cellValue);
  98. } else if (j == 1) {
  99. entity.setCheckResult(cellValue);
  100. } else if (j == 2) {
  101. if (cellValue.length() > 3) {
  102. entity.setConfirmationDate(new SimpleDateFormat(DateUtils.getDateFormat(cellValue)).parse(cellValue));
  103. }
  104. } else if (j == 3) {
  105. entity.setRemarks(cellValue);
  106. }
  107. }
  108. entity.setCreaterCode(userId.toString());
  109. logger.info("entity:" + entity);
  110. list.add(entity);
  111. }catch (Exception e){
  112. failNumber++;
  113. failRow.add(i+1);
  114. }
  115. }
  116. int successNumber = 0;
  117. int failNum = 0;
  118. for (TPssrHygiene t : list
  119. ) {
  120. failNum++;
  121. try {
  122. tPssrHygieneService.insertTPssrHygiene(t);
  123. successNumber++;
  124. }catch (Exception e){
  125. failNumber++;
  126. logger.info("e:" + e);
  127. failRow.add(failNum+1);
  128. }
  129. }
  130. logger.info("list:" + JSON.toJSONString(list));
  131. logger.info("successNumber:" +String.valueOf(successNumber));
  132. logger.info("failNumber:" +String.valueOf(failNumber));
  133. logger.info("failRow:" +String.valueOf(failRow));
  134. return AjaxResult.success("导入成功行数:" + String.valueOf(successNumber));
  135. }
  136. /**
  137. * 查询现场卫生列表
  138. */
  139. @PreAuthorize("@ss.hasPermi('pssr:hygiene:list')")
  140. @GetMapping("/list")
  141. public TableDataInfo list(TPssrHygiene tPssrHygiene) {
  142. startPage();
  143. List<TPssrHygiene> list = tPssrHygieneService.selectTPssrHygieneList(tPssrHygiene);
  144. return getDataTable(list);
  145. }
  146. /**
  147. * 导出现场卫生列表
  148. */
  149. @PreAuthorize("@ss.hasPermi('pssr:hygiene:export')")
  150. @Log(title = "现场卫生", businessType = BusinessType.EXPORT)
  151. @GetMapping("/export")
  152. public AjaxResult export(TPssrHygiene tPssrHygiene) {
  153. List<TPssrHygiene> list = tPssrHygieneService.selectTPssrHygieneList(tPssrHygiene);
  154. return AjaxResult.success(exportTmpl(list));
  155. }
  156. public String exportTmpl(List<TPssrHygiene> list) {
  157. OutputStream out = null;
  158. String filename = null;
  159. try {
  160. String tempUrl = "static/word/pssr/xcws.xlsx"; // 模板文件
  161. InputStream is = null;
  162. is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tempUrl);
  163. XSSFWorkbook wb = null;
  164. wb = new XSSFWorkbook(is);
  165. XSSFSheet sheet = wb.getSheetAt(0);
  166. //填充数据
  167. int rowIndex = 3;
  168. int num = 1;
  169. Row originalRow = sheet.getRow(3);
  170. Cell originalcell = originalRow.getCell(0);
  171. // 获取单元格样式
  172. CellStyle originalStyle = originalcell.getCellStyle();
  173. for (TPssrHygiene t : list) {
  174. Row row = sheet.createRow(rowIndex);
  175. row.setHeight((short) 800);
  176. row.createCell(0).setCellValue(num);
  177. row.createCell(1).setCellValue(t.getCheckContent());
  178. row.createCell(2).setCellValue(t.getCheckResult());
  179. row.createCell(3);
  180. row.createCell(4);
  181. try {
  182. SysUser sysUser = sysUserService.selectUserById(Long.valueOf(t.getConfirm1()));
  183. SysUser sysUser2 = sysUserService.selectUserById(Long.valueOf(t.getConfirm2()));
  184. String confirm1 = sysUser.getSignUrl();
  185. String confirm2 = sysUser2.getSignUrl();
  186. ExcelUtils.insertPicture(wb, sheet, confirm1, row.getRowNum(), 3, 1, 1);
  187. ExcelUtils.insertPicture(wb, sheet, confirm2, row.getRowNum(), 4, 1, 1);
  188. } catch (NumberFormatException e) {
  189. throw new RuntimeException(e);
  190. }
  191. row.createCell(5).setCellValue(DateUtils.dateTime(t.getConfirmationDate()));
  192. row.createCell(6).setCellValue(t.getRemarks());
  193. //渲染样式
  194. for (int i = 0; i < 7; i++) {
  195. row.getCell(i).setCellStyle(originalStyle);
  196. }
  197. num++;
  198. rowIndex++;
  199. }
  200. filename = ExcelUtil.encodingFilename("Hygiene");
  201. out = new FileOutputStream(ExcelUtil.getAbsoluteFile(filename));
  202. wb.write(out);
  203. wb.close();
  204. } catch (IOException e) {
  205. e.printStackTrace();
  206. }
  207. return filename;
  208. }
  209. /**
  210. * 获取现场卫生详细信息
  211. */
  212. @PreAuthorize("@ss.hasPermi('pssr:hygiene:query')")
  213. @GetMapping(value = "/{id}")
  214. public AjaxResult getInfo(@PathVariable("id") Long id)
  215. {
  216. return AjaxResult.success(tPssrHygieneService.selectTPssrHygieneById(id));
  217. }
  218. /**
  219. * 新增现场卫生
  220. */
  221. @PreAuthorize("@ss.hasPermi('pssr:hygiene:add')")
  222. @Log(title = "现场卫生", businessType = BusinessType.INSERT)
  223. @PostMapping
  224. public AjaxResult add(@RequestBody TPssrHygiene tPssrHygiene) {
  225. tPssrHygiene.setApproveStatus(0L);
  226. return toAjax(tPssrHygieneService.insertTPssrHygiene(tPssrHygiene));
  227. }
  228. /**
  229. * 修改现场卫生
  230. */
  231. @PreAuthorize("@ss.hasPermi('pssr:hygiene:edit')")
  232. @Log(title = "现场卫生", businessType = BusinessType.UPDATE)
  233. @PutMapping
  234. public AjaxResult edit(@RequestBody TPssrHygiene tPssrHygiene)
  235. {
  236. return toAjax(tPssrHygieneService.updateTPssrHygiene(tPssrHygiene));
  237. }
  238. /**
  239. * 删除现场卫生
  240. */
  241. @PreAuthorize("@ss.hasPermi('pssr:hygiene:remove')")
  242. @Log(title = "现场卫生", businessType = BusinessType.DELETE)
  243. @DeleteMapping("/{ids}")
  244. public AjaxResult remove(@PathVariable Long[] ids) {
  245. return toAjax(tPssrHygieneService.deleteTPssrHygieneByIds(ids));
  246. }
  247. /**
  248. * 确认现场卫生
  249. */
  250. @PreAuthorize("@ss.hasPermi('pssr:hygiene:edit')")
  251. @Log(title = "现场卫生", businessType = BusinessType.UPDATE)
  252. @PutMapping("/confirmHygiene")
  253. public AjaxResult confirmHygiene(@RequestBody TPssrHygiene tPssrHygiene) {
  254. long queryStatus = 0;
  255. long approveStatus = 0;
  256. Date date = null;
  257. if (tPssrHygiene.getTaskType() == 4) {
  258. //拆锁确认
  259. queryStatus = 1;
  260. approveStatus = 3;
  261. date = new Date();
  262. } else if (tPssrHygiene.getTaskType() == 5) {
  263. //上锁确认
  264. queryStatus = 3;
  265. approveStatus = 2;
  266. date = new Date();
  267. }
  268. // 修改状态
  269. if (tPssrHygiene.getIds() != null && tPssrHygiene.getIds().length > 0) {
  270. for (Long id : tPssrHygiene.getIds()) {
  271. TPssrHygiene item = tPssrHygieneService.selectTPssrHygieneById(id);
  272. item.setApproveStatus(approveStatus);
  273. if (item.getConfirmationDate() == null && queryStatus == 3) {
  274. item.setConfirmationDate(date);
  275. }
  276. tPssrHygieneService.updateTPssrHygiene(item);
  277. }
  278. } else {
  279. TPssrHygiene lock = new TPssrHygiene();
  280. lock.setSubId(tPssrHygiene.getSubId());
  281. lock.setApproveStatus(queryStatus);
  282. for (TPssrHygiene item : tPssrHygieneService.selectTPssrHygieneList(lock)) {
  283. if (item.getConfirmationDate() == null && queryStatus == 3) {
  284. item.setConfirmationDate(date);
  285. }
  286. item.setApproveStatus(approveStatus);
  287. tPssrHygieneService.updateTPssrHygiene(item);
  288. }
  289. }
  290. //查询当前待审批的确认人
  291. TPssrHygiene entity = new TPssrHygiene();
  292. entity.setSubId(tPssrHygiene.getSubId());
  293. entity.setApproveStatus(queryStatus);
  294. for (TPssrHygiene item : tPssrHygieneService.selectTPssrHygieneList(entity)) {
  295. if (tPssrHygiene.getTaskType() == 4) {
  296. if (item.getConfirm1().equals(getUserId().toString())) {
  297. return AjaxResult.success();
  298. }
  299. } else if (tPssrHygiene.getTaskType() == 5) {
  300. if (item.getConfirm2().equals(getUserId().toString())) {
  301. return AjaxResult.success();
  302. }
  303. }
  304. }
  305. //无待审批任务结束当前用户流程
  306. // 因为流程关系所以approve一定会有且只有一条数据
  307. TPssrApprove tPssrApprove = tPssrApproveService.selectTPssrApproveBySubId(tPssrHygiene.getSubId());
  308. TPssrApproveController.handleConfirmApprove(tPssrApprove, getUserId().toString());
  309. return AjaxResult.success();
  310. }
  311. /**
  312. * 驳回现场卫生
  313. */
  314. @PutMapping("/turnDownHygiene")
  315. public AjaxResult turnDownHygiene(@RequestBody List<TPssrHygiene> tPssrHygiene) {
  316. if (CollectionUtils.isNotEmpty(tPssrHygiene)) {
  317. String userId = getUserId().toString();
  318. Long subId = tPssrHygiene.get(0).getSubId();
  319. // 修改已选择数据的状态
  320. for (TPssrHygiene item : tPssrHygiene) {
  321. TPssrHygiene blind = new TPssrHygiene();
  322. blind.setId(item.getId());
  323. blind.setApproveStatus(1L);
  324. blind.setUpdatedate(new Date());
  325. blind.setUpdaterCode(getUserId().toString());
  326. tPssrHygieneService.updateTPssrHygiene(blind);
  327. // 新增驳回原因数据
  328. TPssrTurndown turndown = new TPssrTurndown();
  329. turndown.setForShort(forShort);
  330. turndown.setSubId(item.getSubId());
  331. turndown.setItemId(item.getId());
  332. turndown.setReason(item.getReason());
  333. turndown.setCreatedate(new Date());
  334. turndown.setCreaterCode(getUserId().toString());
  335. tPssrTurndownService.insertTPssrTurndown(turndown);
  336. }
  337. // 查询当前流程
  338. TPssrApprove approve = tPssrApproveService.selectTPssrApproveBySubId(subId);
  339. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  340. TaskService taskService = processEngine.getTaskService();
  341. Task task = processEngine.getTaskService()//获取任务service
  342. .createTaskQuery()//创建查询对象
  343. .taskAssignee(userId)
  344. .processInstanceId(approve.getProcessId()).singleResult();
  345. String taskId = task.getId();
  346. // 驳回 查询所有待审批的人员
  347. TPssrHygiene blind = new TPssrHygiene();
  348. blind.setSubId(subId);
  349. blind.setApproveStatus(1L);
  350. Set<String> installer = new HashSet<>();
  351. Set<String> remover = new HashSet<>();
  352. for (TPssrHygiene item : tPssrHygieneService.selectTPssrHygieneList(blind)) {
  353. // 安装人员
  354. installer.add(item.getConfirm1());
  355. //拆除人员
  356. remover.add(item.getConfirm2());
  357. }
  358. //处理流程节点
  359. Map<String, Object> param = new HashMap<>();
  360. param.put("condition", 1);
  361. param.put("confirmUsers1", new ArrayList<>(installer));
  362. param.put("confirmUsers2", new ArrayList<>(remover));
  363. //认领任务
  364. processEngine.getTaskService().claim(taskId, userId);
  365. taskService.addComment(taskId, approve.getProcessId(), "驳回");
  366. taskService.complete(taskId, param);
  367. // 修改审批表和sub表
  368. approve.setApproveStatus(1L);
  369. approve.setUpdatedate(new Date());
  370. approve.setUpdaterCode(getUserId().toString());
  371. tPssrApproveService.updateTPssrApprove(approve);
  372. TPssrSubcontent subcontent = new TPssrSubcontent();
  373. subcontent.setId(approve.getSubId());
  374. subcontent.setApproveStatus(1L);
  375. subcontent.setUpdatedate(new Date());
  376. subcontent.setUpdaterCode(getUserId().toString());
  377. tPssrSubcontentService.updateTPssrSubcontent(subcontent);
  378. return AjaxResult.success();
  379. }
  380. return AjaxResult.error();
  381. }
  382. }