|
@@ -1,21 +1,41 @@
|
|
package com.ruoyi.project.listener.invoiceApprove;
|
|
package com.ruoyi.project.listener.invoiceApprove;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
+import com.deepoove.poi.XWPFTemplate;
|
|
|
|
+import com.deepoove.poi.data.Texts;
|
|
import com.github.stuxuhai.jpinyin.PinyinFormat;
|
|
import com.github.stuxuhai.jpinyin.PinyinFormat;
|
|
import com.github.stuxuhai.jpinyin.PinyinHelper;
|
|
import com.github.stuxuhai.jpinyin.PinyinHelper;
|
|
import com.ruoyi.common.sendEmail.IMailService;
|
|
import com.ruoyi.common.sendEmail.IMailService;
|
|
|
|
+import com.ruoyi.common.utils.DateUtils;
|
|
import com.ruoyi.common.utils.SpringContextUtils;
|
|
import com.ruoyi.common.utils.SpringContextUtils;
|
|
|
|
+import com.ruoyi.common.utils.file.FileUploadUtils;
|
|
|
|
+import com.ruoyi.framework.config.RuoYiConfig;
|
|
import com.ruoyi.project.invoice.domain.TApproveReserveInvoice;
|
|
import com.ruoyi.project.invoice.domain.TApproveReserveInvoice;
|
|
|
|
+import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticket;
|
|
|
|
+import com.ruoyi.project.invoice.domain.TInvoiceWorkcontent;
|
|
import com.ruoyi.project.invoice.service.ITApproveReserveInvoiceService;
|
|
import com.ruoyi.project.invoice.service.ITApproveReserveInvoiceService;
|
|
|
|
+import com.ruoyi.project.invoice.service.ITInvoiceBookingworkticketService;
|
|
|
|
+import com.ruoyi.project.system.domain.SysDictData;
|
|
|
|
+import com.ruoyi.project.system.domain.SysUser;
|
|
|
|
+import com.ruoyi.project.system.service.ISysDictTypeService;
|
|
import com.ruoyi.project.system.service.ISysUserService;
|
|
import com.ruoyi.project.system.service.ISysUserService;
|
|
|
|
+import io.jsonwebtoken.lang.Assert;
|
|
import org.activiti.engine.delegate.DelegateExecution;
|
|
import org.activiti.engine.delegate.DelegateExecution;
|
|
import org.activiti.engine.delegate.ExecutionListener;
|
|
import org.activiti.engine.delegate.ExecutionListener;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
+import java.io.File;
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.io.InputStream;
|
|
import java.io.Serializable;
|
|
import java.io.Serializable;
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
|
|
@Service("invoiceEndSuccessListener")
|
|
@Service("invoiceEndSuccessListener")
|
|
public class InvoiceEndSuccessListener implements Serializable, ExecutionListener {
|
|
public class InvoiceEndSuccessListener implements Serializable, ExecutionListener {
|
|
@@ -28,6 +48,7 @@ public class InvoiceEndSuccessListener implements Serializable, ExecutionListene
|
|
logger.info("delegateExecution--------------------------------" + delegateExecution);
|
|
logger.info("delegateExecution--------------------------------" + delegateExecution);
|
|
logger.info("审批id--------------------------------" + id);
|
|
logger.info("审批id--------------------------------" + id);
|
|
ITApproveReserveInvoiceService tApproveReserveInvoiceService = (ITApproveReserveInvoiceService) SpringContextUtils.getBean("tApproveReserveInvoiceService");
|
|
ITApproveReserveInvoiceService tApproveReserveInvoiceService = (ITApproveReserveInvoiceService) SpringContextUtils.getBean("tApproveReserveInvoiceService");
|
|
|
|
+ ITInvoiceBookingworkticketService tInvoiceBookingworkticketService = (ITInvoiceBookingworkticketService) SpringContextUtils.getBean("tInvoiceBookingworkticketService");
|
|
ISysUserService sysUserService = (ISysUserService) SpringContextUtils.getBean("sysUserService");
|
|
ISysUserService sysUserService = (ISysUserService) SpringContextUtils.getBean("sysUserService");
|
|
IMailService mailService = (IMailService) SpringContextUtils.getBean("mailService");
|
|
IMailService mailService = (IMailService) SpringContextUtils.getBean("mailService");
|
|
TApproveReserveInvoice approveEntity = tApproveReserveInvoiceService.selectTApproveReserveInvoiceById(Long.parseLong(id)) ;
|
|
TApproveReserveInvoice approveEntity = tApproveReserveInvoiceService.selectTApproveReserveInvoiceById(Long.parseLong(id)) ;
|
|
@@ -78,5 +99,209 @@ public class InvoiceEndSuccessListener implements Serializable, ExecutionListene
|
|
}catch (Exception e) {
|
|
}catch (Exception e) {
|
|
logger.error("邮件发送失败" + JSON.toJSONString(e));
|
|
logger.error("邮件发送失败" + JSON.toJSONString(e));
|
|
}
|
|
}
|
|
|
|
+ //生成预约票
|
|
|
|
+ String url= null;
|
|
|
|
+ try {
|
|
|
|
+ url = PreView(Long.parseLong(approveEntity.getInvoiceId()));
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ //找到主记录
|
|
|
|
+ TInvoiceBookingworkticket tInvoiceBookingworkticket=tInvoiceBookingworkticketService.selectTInvoiceBookingworkticketById(Long.parseLong(approveEntity.getInvoiceId()));
|
|
|
|
+ tInvoiceBookingworkticket.setFilename(url);
|
|
|
|
+ tInvoiceBookingworkticketService.updateTInvoiceBookingworkticket(tInvoiceBookingworkticket);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ *
|
|
|
|
+ * @param id 生成文件名
|
|
|
|
+ * @return
|
|
|
|
+ * @throws IOException
|
|
|
|
+ */
|
|
|
|
+ public String PreView(Long id) throws IOException {
|
|
|
|
+ ITInvoiceBookingworkticketService tInvoiceBookingworkticketService = (ITInvoiceBookingworkticketService) SpringContextUtils.getBean("tInvoiceBookingworkticketService");
|
|
|
|
+ //根据ID查询并生成
|
|
|
|
+ TInvoiceBookingworkticket tInvoiceBookingworkticket= tInvoiceBookingworkticketService.selectTInvoiceBookingworkticketById(id);
|
|
|
|
+ String url = this.createBookingworkticketWord(tInvoiceBookingworkticket);
|
|
|
|
+ return url;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 生成word
|
|
|
|
+ */
|
|
|
|
+ public String createBookingworkticketWord(TInvoiceBookingworkticket invoiceBookingworkticket) throws IOException {
|
|
|
|
+ //生成word
|
|
|
|
+ //渲染文本
|
|
|
|
+ Map<String, Object> params = getWordData(invoiceBookingworkticket);
|
|
|
|
+ // 模板路径
|
|
|
|
+ String templatePath = "static/word/invoice/book.docx";
|
|
|
|
+ // 生成word的路径
|
|
|
|
+ String fileDir = RuoYiConfig.getProfile() + "/"+ "ticketWord";
|
|
|
|
+ // 生成word的文件名称
|
|
|
|
+ // 承包商+联系人+当前时间
|
|
|
|
+ String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm"));
|
|
|
|
+ String fileName = invoiceBookingworkticket.getWorkUnit()+invoiceBookingworkticket.getContact() +time+".docx";
|
|
|
|
+ String wordPath = this.createWord(templatePath, fileDir, fileName, params);
|
|
|
|
+
|
|
|
|
+ return wordPath;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取word数据
|
|
|
|
+ */
|
|
|
|
+ public Map<String, Object> getWordData (TInvoiceBookingworkticket ticket){
|
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
|
+ ITApproveReserveInvoiceService tApproveReserveInvoiceService = (ITApproveReserveInvoiceService) SpringContextUtils.getBean("tApproveReserveInvoiceService");
|
|
|
|
+ ISysUserService sysUserService = (ISysUserService) SpringContextUtils.getBean("sysUserService");
|
|
|
|
+ ISysDictTypeService iSysDictTypeService = (ISysDictTypeService) SpringContextUtils.getBean("iSysDictTypeService");
|
|
|
|
+ ITInvoiceBookingworkticketService tInvoiceBookingworkticketService = (ITInvoiceBookingworkticketService) SpringContextUtils.getBean("tInvoiceBookingworkticketService");
|
|
|
|
+ List<TInvoiceWorkcontent> tInvoiceWorkcontentList= tInvoiceBookingworkticketService.selectTInvoiceWorkcontentBybookingticketId(ticket.getId());
|
|
|
|
+ //字典查询
|
|
|
|
+ List<SysDictData> book_work_type = iSysDictTypeService.selectDictDataByType("book_work_type");
|
|
|
|
+ List<SysDictData> book_user_unit = iSysDictTypeService.selectDictDataByType("book_user_unit");
|
|
|
|
+ List<SysDictData> book_risk_level = iSysDictTypeService.selectDictDataByType("book_risk_level");
|
|
|
|
+ //构造模板的value
|
|
|
|
+ StringBuilder content=new StringBuilder();
|
|
|
|
+ StringBuilder contentUserUnit=new StringBuilder();
|
|
|
|
+ StringBuilder contentUserWorkType=new StringBuilder();
|
|
|
|
+ //关联的申请流程
|
|
|
|
+ TApproveReserveInvoice tApproveReserveInvoice= tApproveReserveInvoiceService.selectTApproveReserveInvoiceByinvoiceId(ticket.getId().toString());
|
|
|
|
+ for(int i =0;i<tInvoiceWorkcontentList.size();i++){
|
|
|
|
+ TInvoiceWorkcontent tInvoiceWorkcontent=tInvoiceWorkcontentList.get(i);
|
|
|
|
+ //不为空的字段进行拼接
|
|
|
|
+ if(tInvoiceWorkcontent.getRiskLevel()!=null){
|
|
|
|
+ for (SysDictData p : book_risk_level) {
|
|
|
|
+ if (tInvoiceWorkcontent.getRiskLevel().toString().equals(p.getDictValue())) {
|
|
|
|
+ content.append("具体工作内容:"+tInvoiceWorkcontent.getWorkDescription()+" 区域:"+ticket.getWorkArea());//装置名称
|
|
|
|
+ content.append(" 风险提醒:"+p.getDictLabel());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ params.put("content"+i, Texts.of(content.toString()).fontSize(10).bold().create());
|
|
|
|
+ //用户单位
|
|
|
|
+ if(ticket.getUserUnit()!=null){
|
|
|
|
+ for (SysDictData p : book_user_unit) {
|
|
|
|
+ if (ticket.getUserUnit().toString().equals(p.getDictValue())) {
|
|
|
|
+ contentUserUnit.append(p.getDictLabel());//用户单位
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if(!params.containsKey("userUnit")){
|
|
|
|
+ params.put("userUnit", Texts.of(contentUserUnit.toString()).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //用户主管
|
|
|
|
+ if(ticket.getUserMg()!=null){
|
|
|
|
+ SysUser sysUser =sysUserService.selectUserById(ticket.getUserMg());
|
|
|
|
+ if(!params.containsKey("userMg")){
|
|
|
|
+ params.put("userMg", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ if(!params.containsKey("userMg")){
|
|
|
|
+ params.put("userNumber", Texts.of(sysUser.getPhonenumber()).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //承包商
|
|
|
|
+ if(ticket.getWorkUnit()!=null) {
|
|
|
|
+ if (!params.containsKey("workUnit")) {
|
|
|
|
+ params.put("workUnit", Texts.of(ticket.getWorkUnit()).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //申请人
|
|
|
|
+ if(ticket.getContact()!=null) {
|
|
|
|
+ if (!params.containsKey("userName")) {
|
|
|
|
+ params.put("userName", Texts.of(ticket.getContact()).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //作业类型
|
|
|
|
+ if(tInvoiceWorkcontent.getWorkType()!=null){
|
|
|
|
+ for (SysDictData p : book_work_type) {
|
|
|
|
+ if (tInvoiceWorkcontent.getWorkType().toString().equals(p.getDictValue())) {
|
|
|
|
+ contentUserWorkType.append(p.getDictLabel());//作业类型
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ params.put("workType"+i, Texts.of(contentUserWorkType.toString()).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ //作业开始时间
|
|
|
|
+ if(ticket.getWorkStartTime()!=null){
|
|
|
|
+ params.put("workStartTime",Texts.of(DateUtils.dateTime(ticket.getWorkStartTime())).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ //作业结束时间
|
|
|
|
+ if(ticket.getWorkEndTime()!=null){
|
|
|
|
+ params.put("workEndTime",Texts.of(DateUtils.dateTime(ticket.getWorkEndTime())).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ //关联票号
|
|
|
|
+ if(tInvoiceWorkcontent.getReservationNumber()!=null){
|
|
|
|
+ params.put("associated"+i, Texts.of(tInvoiceWorkcontent.getReservationNumber()).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ //申请单编号
|
|
|
|
+ if (!params.containsKey("application")) {
|
|
|
|
+ params.put("application"+i, Texts.of(DateUtils.dateTimeNow()).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ //暂定的批准日期
|
|
|
|
+ if(tApproveReserveInvoice.getEnddate()!=null) {
|
|
|
|
+ if (!params.containsKey("applyDate")) {
|
|
|
|
+ params.put("applyDate", Texts.of(DateUtils.dateTime(tApproveReserveInvoice.getEnddate())).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //装置批准人
|
|
|
|
+ if(tApproveReserveInvoice.getDevSupId()!=null) {
|
|
|
|
+ if (!params.containsKey("zzUser")&&!params.containsKey("zjNumber")) {
|
|
|
|
+ SysUser sysUser = sysUserService.selectUserById(tApproveReserveInvoice.getDevSupId());
|
|
|
|
+ params.put("zzUser", Texts.of(sysUser.getNickName()).fontSize(10).bold().create());
|
|
|
|
+ params.put("zjNumber", Texts.of(sysUser.getPhonenumber()).fontSize(10).bold().create());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //装置工程师 如果涉及
|
|
|
|
+ if(tApproveReserveInvoice.getDevEngineerId()!=null) {
|
|
|
|
+ if (!params.containsKey("zjgcs")) {
|
|
|
|
+ SysUser sysUser = sysUserService.selectUserById(tApproveReserveInvoice.getDevEngineerId());
|
|
|
|
+ params.put("zjgcs",sysUser.getSignUrl());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //装置经理(副) 如果涉及
|
|
|
|
+ if(tApproveReserveInvoice.getManagerconId()!=null) {
|
|
|
|
+ if (!params.containsKey("zzjl")) {
|
|
|
|
+ SysUser sysUser = sysUserService.selectUserById(tApproveReserveInvoice.getManagerconId());
|
|
|
|
+ params.put("zzjl",sysUser.getSignUrl());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ content.delete(0, content.length());
|
|
|
|
+ contentUserWorkType.delete(0, contentUserWorkType.length());
|
|
|
|
+ }
|
|
|
|
+ // 渲染文本
|
|
|
|
+ return params;
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @param templatePath word模板文件路径
|
|
|
|
+ * @param fileDir 生成的文件存放地址
|
|
|
|
+ * @param fileName 生成的文件名
|
|
|
|
+ * @param paramMap 参数集合
|
|
|
|
+ * @return 返回word生成的路径
|
|
|
|
+ */
|
|
|
|
+ public String createWord(String templatePath, String fileDir, String fileName, Map<String, Object> paramMap) throws IOException {
|
|
|
|
+ Assert.notNull(templatePath, "word模板文件路径不能为空");
|
|
|
|
+ Assert.notNull(fileDir, "生成的文件存放地址不能为空");
|
|
|
|
+ Assert.notNull(fileName, "生成的文件名不能为空");
|
|
|
|
+ File dir = new File(fileDir);
|
|
|
|
+ if (!dir.exists()) {
|
|
|
|
+ logger.info("目录不存在,创建文件夹{}!", fileDir);
|
|
|
|
+ dir.mkdirs();
|
|
|
|
+ }
|
|
|
|
+ String filePath = fileDir +"/"+ fileName;
|
|
|
|
+ logger.info("目录{}!", filePath);
|
|
|
|
+ // 读取模板渲染参数
|
|
|
|
+ InputStream is = getClass().getClassLoader().getResourceAsStream(templatePath);
|
|
|
|
+ XWPFTemplate template = XWPFTemplate.compile(is).render(paramMap);
|
|
|
|
+ try {
|
|
|
|
+ // 将模板参数写入路径
|
|
|
|
+ template.writeToFile(filePath);
|
|
|
|
+ template.close();
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ logger.error("生成word异常{}", e.getMessage());
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ String pathFileName = FileUploadUtils.getPathFileName(RuoYiConfig.getFilePath("/"+ "ticketWord"), fileName);
|
|
|
|
+ return pathFileName;
|
|
}
|
|
}
|
|
}
|
|
}
|