TApplyOfflinevalveController.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. package com.ruoyi.project.apply.controller;
  2. import com.deepoove.poi.XWPFTemplate;
  3. import com.deepoove.poi.data.Pictures;
  4. import com.deepoove.poi.data.TextRenderData;
  5. import com.deepoove.poi.data.Texts;
  6. import com.deepoove.poi.data.style.Style;
  7. import com.ruoyi.common.utils.DateUtils;
  8. import com.ruoyi.common.utils.StringUtils;
  9. import com.ruoyi.common.utils.file.FileUploadUtils;
  10. import com.ruoyi.common.utils.poi.ExcelUtil;
  11. import com.ruoyi.framework.aspectj.lang.annotation.Log;
  12. import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
  13. import com.ruoyi.framework.config.RuoYiConfig;
  14. import com.ruoyi.framework.interceptor.annotation.RepeatSubmit;
  15. import com.ruoyi.framework.web.controller.BaseController;
  16. import com.ruoyi.framework.web.domain.AjaxResult;
  17. import com.ruoyi.framework.web.page.TableDataInfo;
  18. import com.ruoyi.project.apply.domain.TApplyLock;
  19. import com.ruoyi.project.apply.domain.TApplyOfflinevalve;
  20. import com.ruoyi.project.apply.service.ITApplyLockService;
  21. import com.ruoyi.project.apply.service.ITApplyOfflinevalveService;
  22. import com.ruoyi.project.approve.damain.DevTask;
  23. import com.ruoyi.project.listener.apply.valve.EndFailListener;
  24. import com.ruoyi.project.listener.apply.valve.EndSuccessListener;
  25. import com.ruoyi.project.listener.apply.valve.FlowListener;
  26. import com.ruoyi.project.listener.apply.valve.NextTaskListener;
  27. import com.ruoyi.project.plant.domain.TStaffmgr;
  28. import com.ruoyi.project.system.domain.SysUser;
  29. import com.ruoyi.project.system.service.ISysUserService;
  30. import io.jsonwebtoken.lang.Assert;
  31. import org.activiti.engine.ProcessEngine;
  32. import org.activiti.engine.ProcessEngines;
  33. import org.activiti.engine.RuntimeService;
  34. import org.activiti.engine.TaskService;
  35. import org.activiti.engine.impl.identity.Authentication;
  36. import org.activiti.engine.runtime.ProcessInstance;
  37. import org.activiti.engine.task.Task;
  38. import org.springframework.beans.factory.annotation.Autowired;
  39. import org.springframework.security.access.prepost.PreAuthorize;
  40. import org.springframework.web.bind.annotation.*;
  41. import java.io.File;
  42. import java.io.IOException;
  43. import java.io.InputStream;
  44. import java.util.Date;
  45. import java.util.HashMap;
  46. import java.util.List;
  47. import java.util.Map;
  48. /**
  49. * 安全阀离线切出申请Controller
  50. *
  51. * @author ruoyi
  52. * @date 2023-02-08
  53. */
  54. @RestController
  55. @RequestMapping("/apply/offlinevalve")
  56. public class TApplyOfflinevalveController extends BaseController {
  57. @Autowired
  58. private ITApplyOfflinevalveService tApplyOfflinevalveService;
  59. @Autowired
  60. private RuntimeService runtimeService;
  61. @Autowired
  62. private ISysUserService userService;
  63. @Autowired
  64. private TaskService taskService;
  65. @Autowired
  66. private ITApplyLockService tApplyLockService;
  67. /**
  68. * 查询安全阀离线切出申请列表
  69. */
  70. @PreAuthorize("@ss.hasPermi('apply:offlinevalve:list')")
  71. @GetMapping("/list")
  72. public TableDataInfo list(TApplyOfflinevalve tApplyOfflinevalve) {
  73. startPage();
  74. List<TApplyOfflinevalve> list = tApplyOfflinevalveService.selectTApplyOfflinevalveList(tApplyOfflinevalve);
  75. return getDataTable(list);
  76. }
  77. /**
  78. * 导出安全阀离线切出申请列表
  79. */
  80. @PreAuthorize("@ss.hasPermi('apply:offlinevalve:export')")
  81. @Log(title = "安全阀离线切出申请", businessType = BusinessType.EXPORT)
  82. @GetMapping("/export")
  83. public AjaxResult export(TApplyOfflinevalve tApplyOfflinevalve) {
  84. List<TApplyOfflinevalve> list = tApplyOfflinevalveService.selectTApplyOfflinevalveList(tApplyOfflinevalve);
  85. ExcelUtil<TApplyOfflinevalve> util = new ExcelUtil<TApplyOfflinevalve>(TApplyOfflinevalve.class);
  86. return util.exportExcel(list, "offlinevalve");
  87. }
  88. /**
  89. * 获取安全阀离线切出申请详细信息
  90. */
  91. // @PreAuthorize("@ss.hasPermi('apply:offlinevalve:query')")
  92. @GetMapping(value = "/{id}")
  93. public AjaxResult getInfo(@PathVariable("id") Long id) {
  94. return AjaxResult.success(tApplyOfflinevalveService.selectTApplyOfflinevalveById(id));
  95. }
  96. /**
  97. * 新增安全阀离线切出申请
  98. */
  99. @PreAuthorize("@ss.hasPermi('apply:offlinevalve:add')")
  100. @Log(title = "安全阀离线切出申请", businessType = BusinessType.INSERT)
  101. @RepeatSubmit
  102. @PostMapping
  103. public AjaxResult add(@RequestBody TApplyOfflinevalve tApplyOfflinevalve) {
  104. Long userId = getUserId();
  105. TApplyLock tApplyLock = tApplyLockService.selectTApplyLockByLockCode(tApplyOfflinevalve.getLockNo());
  106. if (tApplyLock.getStatus()==1||tApplyLock.getStatus()==2){
  107. return AjaxResult.error("该锁不可用。");
  108. }
  109. // 新增申请数据
  110. tApplyOfflinevalve.setApplicant(userId.toString());
  111. tApplyOfflinevalve.setApplicantName(getNickName());
  112. tApplyOfflinevalve.setApplicationTime(new Date());
  113. tApplyOfflinevalve.setCreatedate(new Date());
  114. tApplyOfflinevalve.setCreaterCode(userId.toString());
  115. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getRemarks()) && (!tApplyOfflinevalve.getRemarks().endsWith(";") || !tApplyOfflinevalve.getRemarks().endsWith(";")))
  116. tApplyOfflinevalve.setRemarks("申请人-" + getNickName() + ":" + tApplyOfflinevalve.getRemarks() + ";");
  117. tApplyOfflinevalveService.insertTApplyOfflinevalve(tApplyOfflinevalve);
  118. // 开始申请流程
  119. tApplyOfflinevalve.setApNo(DateUtils.dateTimeNow() + userId);
  120. long businessKey = tApplyOfflinevalve.getId();
  121. String applyUser = userId.toString();
  122. //开始工作流、监听
  123. Authentication.setAuthenticatedUserId(applyUser);//设置当前申请人
  124. Map<String, Object> variables = new HashMap<>();
  125. variables.put("applyuser", applyUser);
  126. String confirmer = tApplyOfflinevalve.getConfirmer();
  127. // StringBuilder confirmer = new StringBuilder();
  128. // for (String staffId : confirmers.split(",")) {
  129. // SysUser user = userService.selectUserByStaffId(staffId);
  130. // confirmer.append(user.getUserId()).append(",");
  131. // }
  132. // if (StringUtils.isNotEmpty(confirmer.toString())) {
  133. // confirmer = new StringBuilder(confirmer.substring(0, confirmer.length() - 1));
  134. // }
  135. variables.put("confirmer", confirmer);
  136. variables.put("infoconfirmer", confirmer);
  137. TStaffmgr tStaffmgr = new TStaffmgr();
  138. tStaffmgr.setActualposts("12");
  139. StringBuilder executor = new StringBuilder();
  140. for (SysUser user : userService.selectUserPost(tStaffmgr)) {
  141. executor.append(user.getUserId().toString()).append(",");
  142. }
  143. if (StringUtils.isNotEmpty(executor.toString())) {
  144. executor = new StringBuilder(executor.substring(0, executor.length() - 1));
  145. }
  146. variables.put("executor", executor.toString());
  147. variables.put("nextTaskListener", new NextTaskListener());
  148. variables.put("flowListener", new FlowListener());
  149. variables.put("endSuccessListener", new EndSuccessListener());
  150. variables.put("endFailListener", new EndFailListener());
  151. //采用key来启动流程定义并设置流程变量,返回流程实例
  152. ProcessInstance pi = runtimeService.startProcessInstanceByKey("offlinevalve", String.valueOf(businessKey), variables);
  153. logger.info("流程定义id:" + pi.getProcessDefinitionId());
  154. logger.info("流程实例id:" + pi.getProcessInstanceId());
  155. tApplyOfflinevalve.setProcessId(pi.getProcessInstanceId());
  156. tApplyOfflinevalveService.updateTApplyOfflinevalve(tApplyOfflinevalve);
  157. // 申请人申请直接通过
  158. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  159. TaskService taskService = processEngine.getTaskService();
  160. Task task = taskService.createTaskQuery().processInstanceId(pi.getProcessInstanceId()).active().singleResult();
  161. String taskId = task.getId();
  162. processEngine.getTaskService().claim(taskId, getUserId().toString());
  163. taskService.addComment(taskId, pi.getProcessInstanceId(), "");
  164. Map<String, Object> param = new HashMap<>();
  165. param.put("condition", "1");
  166. taskService.complete(taskId, param);
  167. return AjaxResult.success();
  168. }
  169. @Log(title = "安全阀离线切出申请审核处理", businessType = BusinessType.UPDATE)
  170. @RepeatSubmit
  171. @PutMapping("/handle")
  172. public AjaxResult handle(@RequestBody DevTask devTask) {
  173. //更新数据
  174. TApplyOfflinevalve form = devTask.getOfflinevalve();
  175. //使用任务服务完成任务(提交任务)
  176. String taskId = devTask.getTaskId();
  177. // 使用任务id,获取任务对象,获取流程实例id
  178. Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
  179. //利用任务对象,获取流程实例id
  180. String processInstancesId = task.getProcessInstanceId();
  181. // 旧数据
  182. TApplyOfflinevalve tApplyOfflinevalve = tApplyOfflinevalveService.selectTApplyOfflinevalveById(form.getId());
  183. TApplyLock tApplyLock = tApplyLockService.selectTApplyLockByLockCode(tApplyOfflinevalve.getLockNo());
  184. String taskName = task.getName();//实例名
  185. // 添加备注
  186. String remarks = StringUtils.isEmpty(tApplyOfflinevalve.getRemarks()) ? "" : tApplyOfflinevalve.getRemarks();
  187. if (taskName.contains("信息确认人")) {
  188. taskName = "信息确认人";
  189. }
  190. //流程审批意见
  191. String symbol = "";
  192. String text = "";
  193. if (StringUtils.isNotEmpty(form.getRemarks())) {
  194. text = form.getRemarks();
  195. symbol = ",";
  196. form.setRemarks(remarks + taskName + "-" + getNickName() + ":" + form.getRemarks() + ";");
  197. } else
  198. form.setRemarks("");
  199. // 判断流程
  200. if ("1".equals(devTask.getCondition())) {
  201. devTask.setComment("通过" + symbol + text);
  202. } else if ("0".equals(devTask.getCondition())) {
  203. devTask.setComment("拒绝" + symbol + text);
  204. form.setStatus(1L);
  205. form.setApproveStatus("3");
  206. } else if ("2".equals(devTask.getCondition())) {
  207. devTask.setComment("驳回" + symbol + text);
  208. }
  209. // 根据实例名判断当前流程节点
  210. Map<String, Object> param = new HashMap<>();
  211. switch (task.getName()) {
  212. case "临时措施制定人":
  213. form.setConfirmer(getUserId().toString());
  214. form.setConfirmerName(getNickName());
  215. break;
  216. case "临时措施确认人":
  217. form.setConfirmer(getUserId().toString());
  218. form.setConfirmerName(getNickName());
  219. form.setTemporaryTime(new Date());
  220. //查询经理
  221. TStaffmgr tStaffmgr = new TStaffmgr();
  222. tStaffmgr.setActualposts("24,26");
  223. StringBuilder approvers = new StringBuilder();
  224. for (SysUser user : userService.selectUserPost(tStaffmgr)) {
  225. approvers.append(user.getUserId().toString()).append(",");
  226. }
  227. if (StringUtils.isNotEmpty(approvers.toString())) {
  228. approvers = new StringBuilder(approvers.substring(0, approvers.length() - 1));
  229. }
  230. param.put("approver", approvers.toString());
  231. break;
  232. case "临时措施执行人":
  233. form.setExecutor(getUserId().toString());
  234. form.setExecutorName(getNickName());
  235. form.setExecutionTime(new Date());
  236. break;
  237. case "批准人":
  238. form.setApprover(getUserId().toString());
  239. form.setApproverName(getNickName());
  240. form.setApproveTime(new Date());
  241. if ("1".equals(devTask.getCondition())) {//只有通过时审批状态才会变为已通过
  242. form.setApproveStatus("2");
  243. //修改锁状态
  244. if (tApplyLock != null) {
  245. tApplyLock.setStatus(1L);//将锁状态改为已拆锁
  246. tApplyLockService.updateTApplyLock(tApplyLock);
  247. }
  248. }
  249. break;
  250. case "信息确认人":
  251. tStaffmgr = new TStaffmgr();
  252. tStaffmgr.setActualposts("12");
  253. StringBuilder lockConfirmer = new StringBuilder();
  254. for (SysUser user : userService.selectUserPost(tStaffmgr)) {
  255. lockConfirmer.append(user.getUserId().toString()).append(",");
  256. }
  257. if (StringUtils.isNotEmpty(lockConfirmer.toString())) {
  258. lockConfirmer = new StringBuilder(lockConfirmer.substring(0, lockConfirmer.length() - 1));
  259. }
  260. param.put("lockConfirmer", lockConfirmer.toString());//设置上锁确认人
  261. form.setLockConfirmer1(null);
  262. break;
  263. case "确认人":
  264. // 如果上锁确认人1不为空上锁确认人2即信息确认人2
  265. form.setInfoConfirmer(getUserId().toString());
  266. form.setInfoConfirmerName(getNickName());
  267. form.setStatus(1L);//信息确认人2确认后申请单状态为已完成
  268. form.setConfirmTime(new Date());
  269. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getLockConfirmer1())) {
  270. form.setLockConfirmer2(getUserId().toString());
  271. form.setLockConfirmer2Name(getNickName());
  272. } else {
  273. form.setLockConfirm("NA");//否则确认是否已上锁为NA
  274. }
  275. //修改锁状态
  276. if (tApplyLock != null) {
  277. tApplyLock.setStatus(0L);//将锁状态改为挂锁
  278. tApplyLockService.updateTApplyLock(tApplyLock);
  279. }
  280. break;
  281. case "上锁人":
  282. form.setLockConfirmer1(getUserId().toString());
  283. form.setLockConfirmer1Name(getNickName());
  284. break;
  285. }
  286. //网关判断
  287. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getDisassembly()) && "是".equals(tApplyOfflinevalve.getDisassembly())) {
  288. param.put("is_unlock", "1");
  289. } else if (StringUtils.isNotEmpty(tApplyOfflinevalve.getDisassembly()) && !"是".equals(tApplyOfflinevalve.getDisassembly())) {
  290. param.put("is_unlock", "0");
  291. }
  292. param.put("condition", devTask.getCondition());
  293. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  294. TaskService taskService = processEngine.getTaskService();
  295. //认领任务
  296. processEngine.getTaskService()
  297. .claim(taskId, getUserId().toString());
  298. taskService.addComment(taskId, processInstancesId, devTask.getComment());
  299. taskService.complete(taskId, param);
  300. //任务完成更新数据
  301. tApplyOfflinevalveService.updateTApplyOfflinevalve(form);
  302. return AjaxResult.success();
  303. }
  304. /**
  305. * 修改安全阀离线切出申请
  306. */
  307. @PreAuthorize("@ss.hasPermi('apply:offlinevalve:edit')")
  308. @Log(title = "安全阀离线切出申请", businessType = BusinessType.UPDATE)
  309. @PutMapping
  310. public AjaxResult edit(@RequestBody TApplyOfflinevalve tApplyOfflinevalve) {
  311. tApplyOfflinevalve.setUpdatedate(new Date());
  312. tApplyOfflinevalve.setUpdaterCode(getUserId());
  313. return toAjax(tApplyOfflinevalveService.updateTApplyOfflinevalve(tApplyOfflinevalve));
  314. }
  315. /**
  316. * 删除安全阀离线切出申请
  317. */
  318. @PreAuthorize("@ss.hasPermi('apply:offlinevalve:remove')")
  319. @Log(title = "安全阀离线切出申请", businessType = BusinessType.DELETE)
  320. @DeleteMapping("/{ids}")
  321. public AjaxResult remove(@PathVariable Long[] ids) {
  322. return toAjax(tApplyOfflinevalveService.deleteTApplyOfflinevalveByIds(ids));
  323. }
  324. /**
  325. * @param id
  326. * @return
  327. * @throws IOException
  328. */
  329. @GetMapping("/wordView/{id}")
  330. public AjaxResult wordView(@PathVariable Long id) throws IOException {
  331. //根据ID查询并生成
  332. String url = PreView(id);
  333. return AjaxResult.success(url);
  334. }
  335. /**
  336. * @param id 生成文件名
  337. * @return
  338. * @throws IOException
  339. */
  340. public String PreView(Long id) throws IOException {
  341. //根据ID查询并生成
  342. TApplyOfflinevalve tApplyOfflinevalve = tApplyOfflinevalveService.selectTApplyOfflinevalveById(id);
  343. String url = this.createApplyOfflinevalveWord(tApplyOfflinevalve);
  344. return url;
  345. }
  346. /**
  347. * 生成word
  348. */
  349. public String createApplyOfflinevalveWord(TApplyOfflinevalve tApplyOfflinevalve) throws IOException {
  350. //生成word
  351. //渲染文本
  352. Map<String, Object> params = getWordData(tApplyOfflinevalve);
  353. // 模板路径
  354. String templatePath = "static/word/apply/applyOfflinevalve.docx";
  355. // 生成word的路径
  356. String fileDir = RuoYiConfig.getProfile() + "/" + "apply/applyOfflinevalve";
  357. // 生成word的文件名称
  358. String fileName = tApplyOfflinevalve.getId() + ".docx";
  359. String wordPath = this.createWord(templatePath, fileDir, fileName, params);
  360. return wordPath;
  361. }
  362. /**
  363. * 获取word数据
  364. */
  365. public Map<String, Object> getWordData(TApplyOfflinevalve tApplyOfflinevalve) {
  366. Map<String, Object> params = new HashMap<>();
  367. params.put("devNo", Texts.of(tApplyOfflinevalve.getDevNo()).fontSize(10).bold().create());
  368. params.put("unit", Texts.of(tApplyOfflinevalve.getUnit()).fontSize(10).bold().create());
  369. params.put("offlineReason", Texts.of(tApplyOfflinevalve.getOfflineReason()).fontSize(10).bold().create());
  370. params.put("safa", Texts.of(tApplyOfflinevalve.getSafa()).fontSize(10).bold().create());
  371. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getExecutor())) {
  372. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplyOfflinevalve.getExecutor()));
  373. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  374. params.put("execP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  375. } else {
  376. params.put("executor", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  377. }
  378. }
  379. if (tApplyOfflinevalve.getExecutionTime() != null) {//临时措施执行时间
  380. params.put("execT", Texts.of(DateUtils.dateTimeMin(tApplyOfflinevalve.getExecutionTime())).fontSize(9).bold().create());
  381. }
  382. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getConfirmer())) {
  383. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplyOfflinevalve.getConfirmer()));
  384. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  385. params.put("tpP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  386. } else {
  387. params.put("confirmer", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  388. }
  389. }
  390. if (tApplyOfflinevalve.getTemporaryTime() != null) {//临时措施确认时间
  391. params.put("tpT", Texts.of(DateUtils.dateTimeMin(tApplyOfflinevalve.getTemporaryTime())).fontSize(9).bold().create());
  392. }
  393. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getApplicant())) {
  394. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplyOfflinevalve.getApplicant()));
  395. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  396. params.put("applicantP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  397. } else {
  398. params.put("applicant", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  399. }
  400. }
  401. if (tApplyOfflinevalve.getApplicationTime() != null) {//申请时间
  402. params.put("applicationTime", Texts.of(DateUtils.dateTimeMin(tApplyOfflinevalve.getApplicationTime())).fontSize(9).bold().create());
  403. }
  404. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getApprover())) {
  405. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplyOfflinevalve.getApprover()));
  406. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  407. params.put("approverP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  408. } else {
  409. params.put("approver", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  410. }
  411. }
  412. if (tApplyOfflinevalve.getApproveTime() != null) {//批准时间
  413. params.put("approveTime", Texts.of(DateUtils.dateTimeMin(tApplyOfflinevalve.getApproveTime())).fontSize(9).bold().create());
  414. }
  415. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getLockConfirmer1())) {
  416. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplyOfflinevalve.getLockConfirmer1()));
  417. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  418. params.put("lockConfirmer1P", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  419. } else {
  420. params.put("lockConfirmer1", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  421. }
  422. }
  423. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getLockConfirmer2())) {
  424. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplyOfflinevalve.getLockConfirmer2()));
  425. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  426. params.put("lockConfirmer2P", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  427. } else {
  428. params.put("lockConfirmer2", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  429. }
  430. }
  431. if (StringUtils.isNotEmpty(tApplyOfflinevalve.getInfoConfirmer())) {
  432. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplyOfflinevalve.getInfoConfirmer()));
  433. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  434. params.put("infoConfirmerP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  435. } else {
  436. params.put("infoConfirmer", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  437. }
  438. }
  439. if (tApplyOfflinevalve.getConfirmTime() != null) {//确认时间
  440. params.put("confirmTime", Texts.of(DateUtils.dateTimeMin(tApplyOfflinevalve.getConfirmTime())).fontSize(9).bold().create());
  441. }
  442. params.put("remarks", Texts.of(tApplyOfflinevalve.getRemarks()).fontSize(10).bold().create());
  443. getCheck(params, tApplyOfflinevalve.getDisassembly(), "d1", "d2");
  444. getCheck(params, tApplyOfflinevalve.getDisassembly(), "d3");
  445. getCheck(params, tApplyOfflinevalve.getResetConfirm(), "reset1", "reset2");
  446. getCheck(params, tApplyOfflinevalve.getLeakConfirm(), "leak1", "leak2");
  447. getCheck(params, tApplyOfflinevalve.getRevokeConfirm(), "revoke1", "revoke2");
  448. getCheck(params, tApplyOfflinevalve.getLockConfirm(), "lock1", "lock2");
  449. getCheck(params, tApplyOfflinevalve.getLockConfirm(), "lock3");
  450. // 渲染文本
  451. return params;
  452. }
  453. /**
  454. * @param templatePath word模板文件路径
  455. * @param fileDir 生成的文件存放地址
  456. * @param fileName 生成的文件名
  457. * @param paramMap 参数集合
  458. * @return 返回word生成的路径
  459. */
  460. public String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap) throws IOException {
  461. Assert.notNull(templatePath, "word模板文件路径不能为空");
  462. Assert.notNull(fileDir, "生成的文件存放地址不能为空");
  463. Assert.notNull(fileName, "生成的文件名不能为空");
  464. File dir = new File(fileDir);
  465. if (!dir.exists()) {
  466. logger.info("目录不存在,创建文件夹{}!", fileDir);
  467. dir.mkdirs();
  468. }
  469. fileName = fileName.replaceAll("/", "_"); //替换文件中敏感字段
  470. logger.info("目录文件{}!", fileName);
  471. String filePath = fileDir + "/" + fileName;
  472. logger.info("目录{}!", filePath);
  473. // 读取模板渲染参数
  474. InputStream is = getClass().getClassLoader().getResourceAsStream(templatePath);
  475. XWPFTemplate template = XWPFTemplate.compile(is).render(paramMap);
  476. try {
  477. // 将模板参数写入路径
  478. template.writeToFile(filePath);
  479. template.close();
  480. } catch (Exception e) {
  481. logger.error("生成word异常{}", e.getMessage());
  482. e.printStackTrace();
  483. }
  484. String pathFileName = FileUploadUtils.getPathFileName(RuoYiConfig.getFilePath("/" + "apply/applyOfflinevalve"), fileName);
  485. return pathFileName;
  486. }
  487. // 勾选框判断渲染
  488. public void getCheck(Map<String, Object> params, String value, String check1, String check2) {
  489. if ("是".equals(value)) {
  490. params.put(check1, new TextRenderData("\u00FE", new Style("Wingdings", 9)));
  491. params.put(check2, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  492. } else if ("否".equals(value)) {
  493. params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  494. params.put(check2, new TextRenderData("\u00FE", new Style("Wingdings", 9)));
  495. } else {
  496. params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  497. params.put(check2, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  498. }
  499. }
  500. // 勾选框判断渲染
  501. public void getCheck(Map<String, Object> params, String value, String check1) {
  502. if ("NA".equals(value)) {
  503. params.put(check1, new TextRenderData("\u00FE", new Style("Wingdings", 9)));
  504. } else {
  505. params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  506. }
  507. }
  508. /**
  509. * @param
  510. * @return 映射签名的文件名
  511. * @throws IOException
  512. */
  513. public String fileName(String filepath) {
  514. String newFilePath = filepath.replace("/profile", "");
  515. String pathName = RuoYiConfig.getProfile() + newFilePath;
  516. return pathName;
  517. }
  518. }