Просмотр исходного кода

张丁 生成预约作业票测试

zhangding 3 лет назад
Родитель
Сommit
908fc97b01

+ 63 - 12
master/src/main/java/com/ruoyi/project/invoice/controller/TInvoiceBookingworkticketController.java

@@ -22,8 +22,10 @@ import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.framework.config.RuoYiConfig;
 import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.framework.security.service.TokenService;
+import com.ruoyi.project.invoice.domain.TApproveReserveInvoice;
 import com.ruoyi.project.invoice.domain.TInvoiceContractor;
 import com.ruoyi.project.invoice.domain.TInvoiceWorkcontent;
+import com.ruoyi.project.invoice.service.ITApproveReserveInvoiceService;
 import com.ruoyi.project.invoice.service.ITInvoiceContractorService;
 import com.ruoyi.project.invoice.service.ITInvoiceWorkcontentService;
 import com.ruoyi.project.sems.domain.ParamData;
@@ -74,6 +76,9 @@ public class TInvoiceBookingworkticketController extends BaseController
 
     @Autowired
     private ISysUserService sysUserService;
+
+    @Autowired
+    private ITApproveReserveInvoiceService tApproveReserveInvoiceService;
     /**
      * 查询预约作业票台账列表
      */
@@ -383,17 +388,19 @@ public class TInvoiceBookingworkticketController extends BaseController
              TInvoiceWorkcontent wt= w.get(i);
             wt.setBookingticketId(didi);
             //关联的票号
-            wt.setReservationNumber("Steam Cracker"+tInvoiceBookingworkticket.getId().toString()+"-"+wt.getId().toString());
+
             tInvoiceBookingworkticketService.insertTInvoiceWorkcontent(wt);
+            wt.setReservationNumber("Steam Cracker"+tInvoiceBookingworkticket.getId().toString()+"-"+wt.getId().toString());
+            tInvoiceBookingworkticketService.updateTInvoiceWorkcontent(wt);
         }
-        try {
+       /* try {
             // 测试一下,先得到这个文件名 地址   在赋值插入 然后赋值 改文件名
             String url=  PreView(tInvoiceBookingworkticket.getId());
             tInvoiceBookingworkticket.setFilename(url);
             tInvoiceBookingworkticketService.updateTInvoiceBookingworkticket(tInvoiceBookingworkticket);
         } catch (IOException e) {
             e.printStackTrace();
-        }
+        }*/
 
         return AjaxResult.success(didi);
     }
@@ -492,21 +499,22 @@ public class TInvoiceBookingworkticketController extends BaseController
         //构造模板的value
         StringBuilder content=new StringBuilder();
         StringBuilder contentUserUnit=new StringBuilder();
-        StringBuilder contentUserMg=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());
+                       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())) {
@@ -517,20 +525,29 @@ public class TInvoiceBookingworkticketController extends BaseController
                    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) {
-               params.put("workUnit", Texts.of(ticket.getWorkUnit()).fontSize(10).bold().create());
+               if (!params.containsKey("workUnit")) {
+                   params.put("workUnit", Texts.of(ticket.getWorkUnit()).fontSize(10).bold().create());
+               }
            }
            //申请人
            if(ticket.getContact()!=null) {
-               params.put("userName", Texts.of(ticket.getContact()).fontSize(10).bold().create());
+               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())) {
@@ -539,16 +556,50 @@ public class TInvoiceBookingworkticketController extends BaseController
                }
                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());
            }
            //关联票号
-           params.put("associated"+i, Texts.of(tInvoiceWorkcontent.getReservationNumber()).fontSize(10).bold().create());
-
-           params.put("urlImg", "C:\\Users\\shi'sen'yuan\\Downloads\\SamplePNGImage_3mbmb.png");
+           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());
        }

+ 8 - 0
master/src/main/java/com/ruoyi/project/invoice/mapper/TApproveReserveInvoiceMapper.java

@@ -62,4 +62,12 @@ public interface TApproveReserveInvoiceMapper extends BaseMapper<TApproveReserve
      * @return 结果
      */
     public int deleteTApproveReserveInvoiceByIds(Long[] ids);
+
+    /**
+     * 查询预约开票申请
+     *
+     * @param invoiceId 预约开票申请ID
+     * @return 预约开票申请
+     */
+    TApproveReserveInvoice selectTApproveReserveInvoiceByinvoiceId(String invoiceId);
 }

+ 8 - 0
master/src/main/java/com/ruoyi/project/invoice/service/ITApproveReserveInvoiceService.java

@@ -59,4 +59,12 @@ public interface ITApproveReserveInvoiceService
      * @return 结果
      */
     public int deleteTApproveReserveInvoiceById(Long id);
+
+    /**
+     * 查询预约开票申请
+     *
+     * @param invoice 预约开票申请ID
+     * @return 预约开票申请
+     */
+    TApproveReserveInvoice selectTApproveReserveInvoiceByinvoiceId(String invoiceId);
 }

+ 11 - 0
master/src/main/java/com/ruoyi/project/invoice/service/impl/TApproveReserveInvoiceServiceImpl.java

@@ -91,4 +91,15 @@ public class TApproveReserveInvoiceServiceImpl implements ITApproveReserveInvoic
     {
         return tApproveReserveInvoiceMapper.deleteTApproveReserveInvoiceById(id);
     }
+
+    /**
+     * 查询预约开票申请
+     *
+     * @param invoiceId 预约开票申请ID
+     * @return 预约开票申请
+     */
+    @Override
+    public TApproveReserveInvoice selectTApproveReserveInvoiceByinvoiceId(String invoiceId) {
+       return tApproveReserveInvoiceMapper.selectTApproveReserveInvoiceByinvoiceId(invoiceId);
+    }
 }

+ 225 - 0
master/src/main/java/com/ruoyi/project/listener/invoiceApprove/InvoiceEndSuccessListener.java

@@ -1,21 +1,41 @@
 package com.ruoyi.project.listener.invoiceApprove;
 
 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.PinyinHelper;
 import com.ruoyi.common.sendEmail.IMailService;
+import com.ruoyi.common.utils.DateUtils;
 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.TInvoiceBookingworkticket;
+import com.ruoyi.project.invoice.domain.TInvoiceWorkcontent;
 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 io.jsonwebtoken.lang.Assert;
 import org.activiti.engine.delegate.DelegateExecution;
 import org.activiti.engine.delegate.ExecutionListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
 import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 @Service("invoiceEndSuccessListener")
 public class InvoiceEndSuccessListener implements Serializable, ExecutionListener {
@@ -28,6 +48,7 @@ public class InvoiceEndSuccessListener implements Serializable, ExecutionListene
         logger.info("delegateExecution--------------------------------" + delegateExecution);
         logger.info("审批id--------------------------------" + id);
         ITApproveReserveInvoiceService tApproveReserveInvoiceService = (ITApproveReserveInvoiceService) SpringContextUtils.getBean("tApproveReserveInvoiceService");
+        ITInvoiceBookingworkticketService tInvoiceBookingworkticketService = (ITInvoiceBookingworkticketService) SpringContextUtils.getBean("tInvoiceBookingworkticketService");
         ISysUserService sysUserService = (ISysUserService) SpringContextUtils.getBean("sysUserService");
         IMailService mailService = (IMailService) SpringContextUtils.getBean("mailService");
         TApproveReserveInvoice approveEntity = tApproveReserveInvoiceService.selectTApproveReserveInvoiceById(Long.parseLong(id)) ;
@@ -78,5 +99,209 @@ public class InvoiceEndSuccessListener implements Serializable, ExecutionListene
         }catch (Exception 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;
     }
 }

+ 5 - 0
master/src/main/resources/mybatis/invoice/TApproveReserveInvoiceMapper.xml

@@ -63,6 +63,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </select>
 
+    <select id="selectTApproveReserveInvoiceByinvoiceId" parameterType="String" resultMap="TApproveReserveInvoiceResult">
+        <include refid="selectTApproveReserveInvoiceVo"/>
+        where invoice_id  = #{invoiceId}
+    </select>
+
     <insert id="insertTApproveReserveInvoice" parameterType="TApproveReserveInvoice">
         <selectKey keyProperty="id" resultType="long" order="BEFORE">
             SELECT seq_t_approve_reserve_invoice.NEXTVAL as id FROM DUAL

BIN
master/src/main/resources/static/word/invoice/book.docx


+ 2 - 0
ui/src/views/invoice/bookingworkticket/index.vue

@@ -152,12 +152,14 @@
             @click="handleDelete(scope.row)"
           >删除</el-button>
           <el-button
+             v-if="scope.row.status== 3"
               size="mini"
               type="text"
               icon="el-icon-view"
               @click="billSee(scope.row)"
             > {{ $t('票据预览') }}</el-button>
            <el-button
+              v-if="scope.row.status== 3"
             size="mini"
              type="text"
               icon="el-icon-download"