TApplySafetychangeController.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
  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.TApplySafetychange;
  19. import com.ruoyi.project.apply.service.ITApplySafetychangeService;
  20. import com.ruoyi.project.approve.damain.DevTask;
  21. import com.ruoyi.project.listener.apply.change.ChangeEndFailListener;
  22. import com.ruoyi.project.listener.apply.change.ChangeEndSuccessListener;
  23. import com.ruoyi.project.listener.apply.change.ChangeFlowListener;
  24. import com.ruoyi.project.listener.apply.change.ChangeNextTaskListener;
  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-09
  51. */
  52. @RestController
  53. @RequestMapping("/apply/safetychange")
  54. public class TApplySafetychangeController extends BaseController {
  55. @Autowired
  56. private ITApplySafetychangeService tApplySafetychangeService;
  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:safetychange:list')")
  67. @GetMapping("/list")
  68. public TableDataInfo list(TApplySafetychange tApplySafetychange) {
  69. startPage();
  70. List<TApplySafetychange> list = tApplySafetychangeService.selectTApplySafetychangeList(tApplySafetychange);
  71. return getDataTable(list);
  72. }
  73. @GetMapping("/listChangeDescribe")
  74. public AjaxResult listChangeDescribe(TApplySafetychange tApplySafetychange) {
  75. List<TApplySafetychange> list = tApplySafetychangeService.selectChangeDescribe(tApplySafetychange);
  76. return AjaxResult.success(list);
  77. }
  78. /**
  79. * 导出组织保护措施状态变更申请列表
  80. */
  81. @PreAuthorize("@ss.hasPermi('apply:safetychange:export')")
  82. @Log(title = "组织保护措施状态变更申请", businessType = BusinessType.EXPORT)
  83. @GetMapping("/export")
  84. public AjaxResult export(TApplySafetychange tApplySafetychange) {
  85. List<TApplySafetychange> list = tApplySafetychangeService.selectTApplySafetychangeList(tApplySafetychange);
  86. ExcelUtil<TApplySafetychange> util = new ExcelUtil<TApplySafetychange>(TApplySafetychange.class);
  87. return util.exportExcel(list, "safetychange");
  88. }
  89. /**
  90. * 获取组织保护措施状态变更申请详细信息
  91. */
  92. // @PreAuthorize("@ss.hasPermi('apply:safetychange:query')")
  93. @GetMapping(value = "/{id}")
  94. public AjaxResult getInfo(@PathVariable("id") Long id) {
  95. return AjaxResult.success(tApplySafetychangeService.selectTApplySafetychangeById(id));
  96. }
  97. /**
  98. * 新增组织保护措施状态变更申请
  99. */
  100. @PreAuthorize("@ss.hasPermi('apply:safetychange:add')")
  101. @Log(title = "组织保护措施状态变更申请", businessType = BusinessType.INSERT)
  102. @RepeatSubmit
  103. @PostMapping
  104. public AjaxResult add(@RequestBody TApplySafetychange tApplySafetychange) {
  105. String userId = getUserId().toString();
  106. tApplySafetychange.setApplicant(userId);
  107. tApplySafetychange.setApplicantName(getNickName());
  108. tApplySafetychange.setApplicationTime(new Date());
  109. tApplySafetychange.setCreatedate(new Date());
  110. tApplySafetychange.setCreaterCode(getUserId().toString());
  111. String safaerIds = tApplySafetychange.getSafaer();
  112. tApplySafetychange.setSafaer(null);
  113. // tApplySafetychange.setConfirmer(tApplySafetychange.getSafaer());
  114. // tApplySafetychange.setConfirmerName(tApplySafetychange.getSafaerName());
  115. if (StringUtils.isNotEmpty(tApplySafetychange.getRemarks()) && (!tApplySafetychange.getRemarks().endsWith(";") || !tApplySafetychange.getRemarks().endsWith(";")))
  116. tApplySafetychange.setRemarks("申请人-" + getNickName() + ":" + tApplySafetychange.getRemarks() + ";");
  117. tApplySafetychangeService.insertTApplySafetychange(tApplySafetychange);
  118. // 开始申请流程
  119. tApplySafetychange.setApNo(DateUtils.dateTimeNow() + userId);
  120. long businessKey = tApplySafetychange.getId();
  121. //开始工作流、监听
  122. Authentication.setAuthenticatedUserId(userId);//设置当前申请人
  123. Map<String, Object> variables = new HashMap<>();
  124. variables.put("applyuser", userId);
  125. StringBuilder confirmer = new StringBuilder();
  126. for (String staffId : safaerIds.split(",")) {
  127. SysUser user = userService.selectUserByStaffId(staffId);
  128. confirmer.append(user.getUserId()).append(",");
  129. }
  130. if (StringUtils.isNotEmpty(confirmer.toString())) {
  131. confirmer = new StringBuilder(confirmer.substring(0, confirmer.length() - 1));
  132. }
  133. variables.put("confirmer", confirmer.toString());
  134. variables.put("executor", tApplySafetychange.getExecutor());
  135. variables.put("safaer", confirmer.toString());
  136. //查询经理
  137. TStaffmgr tStaffmgr = new TStaffmgr();
  138. tStaffmgr.setActualposts("24,26");
  139. StringBuilder approvers = new StringBuilder();
  140. for (SysUser user : userService.selectUserPost(tStaffmgr)) {
  141. approvers.append(user.getUserId().toString()).append(",");
  142. }
  143. if (StringUtils.isNotEmpty(approvers.toString())) {
  144. approvers = new StringBuilder(approvers.substring(0, approvers.length() - 1));
  145. }
  146. variables.put("approver", approvers.toString());
  147. tStaffmgr = new TStaffmgr();
  148. tStaffmgr.setActualposts("12");
  149. StringBuilder changeExecutors = new StringBuilder();
  150. for (SysUser user : userService.selectUserPost(tStaffmgr)) {
  151. changeExecutors.append(user.getUserId().toString()).append(",");
  152. }
  153. if (StringUtils.isNotEmpty(changeExecutors.toString())) {
  154. changeExecutors = new StringBuilder(changeExecutors.substring(0, changeExecutors.length() - 1));
  155. }
  156. variables.put("changeExecutor", changeExecutors.toString());
  157. variables.put("changeNextTaskListener", new ChangeNextTaskListener());
  158. variables.put("changeEndFailListener", new ChangeEndFailListener());
  159. variables.put("changeEndSuccessListener", new ChangeEndSuccessListener());
  160. variables.put("changeFlowListener", new ChangeFlowListener());
  161. //采用key来启动流程定义并设置流程变量,返回流程实例
  162. ProcessInstance pi = runtimeService.startProcessInstanceByKey("safetychange", String.valueOf(businessKey), variables);
  163. logger.info("流程定义id:" + pi.getProcessDefinitionId());
  164. logger.info("流程实例id:" + pi.getProcessInstanceId());
  165. tApplySafetychange.setProcessId(pi.getProcessInstanceId());
  166. tApplySafetychangeService.updateTApplySafetychange(tApplySafetychange);
  167. // 申请人申请直接通过
  168. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  169. TaskService taskService = processEngine.getTaskService();
  170. Task task = taskService.createTaskQuery().processInstanceId(pi.getProcessInstanceId()).active().singleResult();
  171. String taskId = task.getId();
  172. processEngine.getTaskService().claim(taskId, getUserId().toString());
  173. taskService.addComment(taskId, pi.getProcessInstanceId(), "");
  174. Map<String, Object> param = new HashMap<>();
  175. param.put("condition", "1");
  176. taskService.complete(taskId, param);
  177. return toAjax(1);
  178. }
  179. @Log(title = "组织保护措施状态变更申请审核处理", businessType = BusinessType.UPDATE)
  180. @RepeatSubmit
  181. @PutMapping("/handle")
  182. public AjaxResult handle(@RequestBody DevTask devTask) {
  183. TApplySafetychange form = devTask.getSafetychange();
  184. //使用任务服务完成任务(提交任务)
  185. String taskId = devTask.getTaskId();
  186. // 使用任务id,获取任务对象,获取流程实例id
  187. Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
  188. //利用任务对象,获取流程实例id
  189. String processInstancesId = task.getProcessInstanceId();
  190. TApplySafetychange tApplySafetychange = tApplySafetychangeService.selectTApplySafetychangeById(form.getId());
  191. String taskName = task.getName();//实例名
  192. // 添加备注
  193. String remarks = StringUtils.isEmpty(tApplySafetychange.getRemarks()) ? "" : tApplySafetychange.getRemarks();
  194. if (taskName.contains("安全评估人")) {
  195. taskName = "安全评估人";
  196. }
  197. //流程审批意见
  198. String symbol = "";
  199. String text = "";
  200. if (StringUtils.isNotEmpty(form.getRemarks())) {
  201. text = form.getRemarks();
  202. symbol = ",";
  203. form.setRemarks(remarks + taskName + "-" + getNickName() + ":" + form.getRemarks() + ";");
  204. } else
  205. form.setRemarks("");
  206. // 判断流程
  207. if ("1".equals(devTask.getCondition())) {
  208. devTask.setComment("通过" + symbol + text);
  209. } else if ("0".equals(devTask.getCondition())) {
  210. devTask.setComment("拒绝" + symbol + text);
  211. form.setStatus(1L);
  212. form.setApproveStatus("3");
  213. } else if ("2".equals(devTask.getCondition())) {
  214. devTask.setComment("驳回" + symbol + text);
  215. }
  216. // 根据实例名判断当前流程节点
  217. Map<String, Object> param = new HashMap<>();
  218. switch (task.getName()) {
  219. case "安全评估人1":
  220. form.setSafaer(getUserId().toString());
  221. form.setSafaerName(getNickName());
  222. form.setSafaTime(new Date());
  223. break;
  224. case "批准人":
  225. form.setApprover(getUserId().toString());
  226. form.setApproverName(getNickName());
  227. form.setApproveTime(new Date());
  228. if ("1".equals(devTask.getCondition()))
  229. form.setApproveStatus("2");
  230. break;
  231. case "措施执行人":
  232. form.setExecutionTime(new Date());
  233. break;
  234. case "措施确认人":
  235. form.setConfirmerName(getNickName());
  236. form.setConfirmer(getUserId().toString());
  237. form.setConfirmTime(new Date());
  238. break;
  239. case "变更执行人":
  240. form.setChangeExecutor(getUserId().toString());
  241. form.setChangeExecutorName(getNickName());
  242. form.setChangeExecutorTime(new Date());
  243. break;
  244. case "安全评估人2":
  245. TStaffmgr tStaffmgr = new TStaffmgr();
  246. tStaffmgr.setActualposts("12");
  247. StringBuilder resetConfirmer1 = new StringBuilder();
  248. for (SysUser user : userService.selectUserPost(tStaffmgr)) {
  249. resetConfirmer1.append(user.getUserId().toString()).append(",");
  250. }
  251. if (StringUtils.isNotEmpty(resetConfirmer1.toString())) {
  252. resetConfirmer1 = new StringBuilder(resetConfirmer1.substring(0, resetConfirmer1.length() - 1));
  253. }
  254. param.put("resetConfirmer1", resetConfirmer1.toString());
  255. break;
  256. case "确认人1":
  257. param.put("resetConfirmer2", tApplySafetychange.getConfirmer());
  258. form.setResetConfirmer1(getUserId().toString());
  259. form.setResetConfirmTime1(new Date());
  260. form.setResetConfirmerName1(getNickName());
  261. break;
  262. case "确认人2":
  263. form.setResetConfirmer2(getUserId().toString());
  264. form.setResetConfirmTime2(new Date());
  265. form.setResetConfirmerName2(getNickName());
  266. form.setStatus(1L);
  267. break;
  268. }
  269. param.put("condition", devTask.getCondition());
  270. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  271. TaskService taskService = processEngine.getTaskService();
  272. //认领任务
  273. processEngine.getTaskService().claim(taskId, getUserId().toString());
  274. taskService.addComment(taskId, processInstancesId, devTask.getComment());
  275. taskService.complete(taskId, param);
  276. // 更新任务
  277. tApplySafetychangeService.updateTApplySafetychange(form);
  278. return AjaxResult.success();
  279. }
  280. /**
  281. * 修改组织保护措施状态变更申请
  282. */
  283. @PreAuthorize("@ss.hasPermi('apply:safetychange:edit')")
  284. @Log(title = "组织保护措施状态变更申请", businessType = BusinessType.UPDATE)
  285. @PutMapping
  286. public AjaxResult edit(@RequestBody TApplySafetychange tApplySafetychange) {
  287. tApplySafetychange.setUpdatedate(new Date());
  288. tApplySafetychange.setUpdaterCode(getUserId());
  289. return toAjax(tApplySafetychangeService.updateTApplySafetychange(tApplySafetychange));
  290. }
  291. /**
  292. * 删除组织保护措施状态变更申请
  293. */
  294. @PreAuthorize("@ss.hasPermi('apply:safetychange:remove')")
  295. @Log(title = "组织保护措施状态变更申请", businessType = BusinessType.DELETE)
  296. @DeleteMapping("/{ids}")
  297. public AjaxResult remove(@PathVariable Long[] ids) {
  298. return toAjax(tApplySafetychangeService.deleteTApplySafetychangeByIds(ids));
  299. }
  300. /**
  301. * @param id
  302. * @return
  303. * @throws IOException
  304. */
  305. @GetMapping("/wordView/{id}")
  306. public AjaxResult wordView(@PathVariable Long id) throws IOException {
  307. //根据ID查询并生成
  308. String url = PreView(id);
  309. return AjaxResult.success(url);
  310. }
  311. /**
  312. * @param id 生成文件名
  313. * @return
  314. * @throws IOException
  315. */
  316. public String PreView(Long id) throws IOException {
  317. //根据ID查询并生成
  318. TApplySafetychange tApplySafetychange = tApplySafetychangeService.selectTApplySafetychangeById(id);
  319. String url = this.createApplySafetychangeWord(tApplySafetychange);
  320. return url;
  321. }
  322. /**
  323. * 生成word
  324. */
  325. public String createApplySafetychangeWord(TApplySafetychange tApplySafetychange) throws IOException {
  326. //生成word
  327. //渲染文本
  328. Map<String, Object> params = getWordData(tApplySafetychange);
  329. // 模板路径
  330. String templatePath = "static/word/apply/applySafetychange.docx";
  331. // 生成word的路径
  332. String fileDir = RuoYiConfig.getProfile() + "/" + "apply/applySafetychange";
  333. // 生成word的文件名称
  334. String fileName = tApplySafetychange.getId() + ".docx";
  335. String wordPath = this.createWord(templatePath, fileDir, fileName, params);
  336. return wordPath;
  337. }
  338. /**
  339. * 获取word数据
  340. */
  341. public Map<String, Object> getWordData(TApplySafetychange tApplySafetychange) {
  342. Map<String, Object> params = new HashMap<>();
  343. params.put("changeDescribe", Texts.of(tApplySafetychange.getChangeDescribe()).fontSize(10).bold().create());
  344. params.put("changeReason", Texts.of(tApplySafetychange.getChangeReason()).fontSize(10).bold().create());
  345. if (StringUtils.isNotEmpty(tApplySafetychange.getApplicant())) {//申请人
  346. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplySafetychange.getApplicant()));
  347. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  348. params.put("applicantP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  349. } else {
  350. params.put("applicant", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  351. }
  352. }
  353. if (tApplySafetychange.getApplicationTime() != null) {//申请时间
  354. params.put("applicationTime", Texts.of(DateUtils.dateTimeMin(tApplySafetychange.getApplicationTime())).fontSize(9).bold().create());
  355. }
  356. params.put("safa", Texts.of(tApplySafetychange.getSafa()).fontSize(10).bold().create());
  357. if (StringUtils.isNotEmpty(tApplySafetychange.getSafaer())) {//安全评估人
  358. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplySafetychange.getSafaer()));
  359. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  360. params.put("safaerP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  361. } else {
  362. params.put("safaer", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  363. }
  364. }
  365. if (tApplySafetychange.getSafaTime() != null) {//安全评估时间
  366. params.put("safaTime", Texts.of(DateUtils.dateTimeMin(tApplySafetychange.getSafaTime())).fontSize(9).bold().create());
  367. }
  368. if (StringUtils.isNotEmpty(tApplySafetychange.getApprover())) {//批准人
  369. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplySafetychange.getApprover()));
  370. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  371. params.put("approverP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  372. } else {
  373. params.put("approver", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  374. }
  375. }
  376. if (tApplySafetychange.getApplicationTime() != null) {//批准时间
  377. params.put("approveTime", Texts.of(DateUtils.dateTimeMin(tApplySafetychange.getApplicationTime())).fontSize(9).bold().create());
  378. }
  379. if (StringUtils.isNotEmpty(tApplySafetychange.getExecutor())) {//临时安全措施执行人
  380. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplySafetychange.getExecutor()));
  381. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  382. params.put("exeP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  383. } else {
  384. params.put("exe", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  385. }
  386. }
  387. if (tApplySafetychange.getExecutionTime() != null) {//临时安全措施执行(时间)
  388. params.put("exeT", Texts.of(DateUtils.dateTimeMin(tApplySafetychange.getExecutionTime())).fontSize(9).bold().create());
  389. }
  390. if (StringUtils.isNotEmpty(tApplySafetychange.getConfirmer())) {//临时安全措施确认人
  391. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplySafetychange.getConfirmer()));
  392. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  393. params.put("conP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  394. } else {
  395. params.put("con", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  396. }
  397. }
  398. if (tApplySafetychange.getConfirmTime() != null) {//临时安全措施确认(时间)
  399. params.put("conT", Texts.of(DateUtils.dateTimeMin(tApplySafetychange.getConfirmTime())).fontSize(9).bold().create());
  400. }
  401. params.put("changeExecution", Texts.of(tApplySafetychange.getChangeExecution()).fontSize(10).bold().create());
  402. if (StringUtils.isNotEmpty(tApplySafetychange.getChangeExecutor())) {//执行人
  403. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplySafetychange.getChangeExecutor()));
  404. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  405. params.put("cEP", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  406. } else {
  407. params.put("cE", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  408. }
  409. }
  410. if (tApplySafetychange.getChangeExecutorTime() != null) {//执行时间)
  411. params.put("cET", Texts.of(DateUtils.dateTimeMin(tApplySafetychange.getChangeExecutorTime())).fontSize(9).bold().create());
  412. }
  413. getCheck(params, tApplySafetychange.getResetConfirm(), "resetConfirm1", "resetConfirm2");
  414. if (StringUtils.isNotEmpty(tApplySafetychange.getResetConfirmer1())) {//状态恢复,确认人1
  415. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplySafetychange.getResetConfirmer1()));
  416. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  417. params.put("resetConfirmer1P", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  418. } else {
  419. params.put("resetConfirmer1", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  420. }
  421. }
  422. if (tApplySafetychange.getResetConfirmTime1() != null) {//状态恢复,确认人1时间)
  423. params.put("resetConfirmTime1", Texts.of(DateUtils.dateTimeMin(tApplySafetychange.getResetConfirmTime1())).fontSize(9).bold().create());
  424. }
  425. if (StringUtils.isNotEmpty(tApplySafetychange.getResetConfirmer2())) {//状态恢复,确认人2
  426. SysUser sysUser = userService.selectUserById(Long.parseLong(tApplySafetychange.getResetConfirmer2()));
  427. if (sysUser.getSignUrl() != null && new File(fileName(sysUser.getSignUrl())).exists()) {
  428. params.put("resetConfirmer2P", Pictures.ofLocal(fileName(sysUser.getSignUrl())).size(50, 20).create());
  429. } else {
  430. params.put("resetConfirmer2", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
  431. }
  432. }
  433. if (tApplySafetychange.getResetConfirmTime2() != null) {//状态恢复,确认人2时间)
  434. params.put("resetConfirmTime2", Texts.of(DateUtils.dateTimeMin(tApplySafetychange.getResetConfirmTime2())).fontSize(9).bold().create());
  435. }
  436. getCheck(params, tApplySafetychange.getRevokeConfirm(), "revoke1", "revoke2");
  437. getCheck(params, tApplySafetychange.getRevokeConfirm(), "revoke3");
  438. params.put("remarks", Texts.of(tApplySafetychange.getRemarks()).fontSize(10).bold().create());
  439. // 渲染文本
  440. return params;
  441. }
  442. /**
  443. * @param templatePath word模板文件路径
  444. * @param fileDir 生成的文件存放地址
  445. * @param fileName 生成的文件名
  446. * @param paramMap 参数集合
  447. * @return 返回word生成的路径
  448. */
  449. public String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap) throws IOException {
  450. Assert.notNull(templatePath, "word模板文件路径不能为空");
  451. Assert.notNull(fileDir, "生成的文件存放地址不能为空");
  452. Assert.notNull(fileName, "生成的文件名不能为空");
  453. File dir = new File(fileDir);
  454. if (!dir.exists()) {
  455. logger.info("目录不存在,创建文件夹{}!", fileDir);
  456. dir.mkdirs();
  457. }
  458. fileName = fileName.replaceAll("/", "_"); //替换文件中敏感字段
  459. logger.info("目录文件{}!", fileName);
  460. String filePath = fileDir + "/" + fileName;
  461. logger.info("目录{}!", filePath);
  462. // 读取模板渲染参数
  463. InputStream is = getClass().getClassLoader().getResourceAsStream(templatePath);
  464. XWPFTemplate template = XWPFTemplate.compile(is).render(paramMap);
  465. try {
  466. // 将模板参数写入路径
  467. template.writeToFile(filePath);
  468. template.close();
  469. } catch (Exception e) {
  470. logger.error("生成word异常{}", e.getMessage());
  471. e.printStackTrace();
  472. }
  473. String pathFileName = FileUploadUtils.getPathFileName(RuoYiConfig.getFilePath("/" + "apply/applySafetychange"), fileName);
  474. return pathFileName;
  475. }
  476. // 勾选框判断渲染
  477. public void getCheck(Map<String, Object> params, String value, String check1, String check2) {
  478. if ("是".equals(value)) {
  479. params.put(check1, new TextRenderData("\u00FE", new Style("Wingdings", 9)));
  480. params.put(check2, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  481. } else if ("否".equals(value)) {
  482. params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  483. params.put(check2, new TextRenderData("\u00FE", new Style("Wingdings", 9)));
  484. } else {
  485. params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  486. params.put(check2, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  487. }
  488. }
  489. // 勾选框判断渲染
  490. public void getCheck(Map<String, Object> params, String value, String check1) {
  491. if ("NA".equals(value)) {
  492. params.put(check1, new TextRenderData("\u00FE", new Style("Wingdings", 9)));
  493. } else {
  494. params.put(check1, new TextRenderData("\u006F", new Style("Wingdings", 9)));
  495. }
  496. }
  497. /**
  498. * @param
  499. * @return 映射签名的文件名
  500. * @throws IOException
  501. */
  502. public String fileName(String filepath) {
  503. String newFilePath = filepath.replace("/profile", "");
  504. String pathName = RuoYiConfig.getProfile() + newFilePath;
  505. return pathName;
  506. }
  507. }