TApplyOfflinevalveController.java 25 KB

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