Sfoglia il codice sorgente

巡检急救箱导出

jiangbiao 6 mesi fa
parent
commit
7c37977524

+ 71 - 2
master/src/main/java/com/ruoyi/project/patrol/fire/controller/TFireAidkitController.java

@@ -1,5 +1,8 @@
 package com.ruoyi.project.patrol.fire.controller;
 
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.ExcelUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
@@ -10,12 +13,26 @@ import com.ruoyi.project.patrol.fire.domain.TFireAidkit;
 import com.ruoyi.project.patrol.fire.service.ITFireAidkitService;
 import com.ruoyi.project.patrol.patrol.domain.TPatrolPlan;
 import com.ruoyi.project.patrol.patrol.service.ITPatrolPlanService;
+import com.ruoyi.project.pssr.domain.TPssrAirtight;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.service.ISysUserService;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
+import java.util.UUID;
 
 /**
  * 急救箱检查记录Controller
@@ -32,6 +49,9 @@ public class TFireAidkitController extends BaseController {
     @Autowired
     private ITPatrolPlanService tPatrolPlanService;
 
+    @Autowired
+    private ISysUserService sysUserService;
+
     /**
      * 查询急救箱检查记录列表
      */
@@ -51,8 +71,57 @@ public class TFireAidkitController extends BaseController {
     @GetMapping("/export")
     public AjaxResult export(TFireAidkit tFireAidkit) {
         List<TFireAidkit> list = tFireAidkitService.selectTFireAidkitList(tFireAidkit);
-        ExcelUtil<TFireAidkit> util = new ExcelUtil<TFireAidkit>(TFireAidkit.class);
-        return util.exportExcel(list, "aidkit");
+        return AjaxResult.success(exportTmpl(list));
+    }
+
+    public String exportTmpl(List<TFireAidkit> list) {
+        OutputStream out = null;
+        String filename = null;
+        try {
+            String tempUrl = "static/word/patrol/aidkit.xlsx"; // 模板文件
+            InputStream is = null;
+            is = Thread.currentThread().getContextClassLoader().getResourceAsStream(tempUrl);
+            XSSFWorkbook wb = null;
+            wb = new XSSFWorkbook(is);
+            XSSFSheet sheet = wb.getSheetAt(0);
+
+            //填充数据
+
+            Row originalRow = sheet.getRow(3);
+            Cell originalcell = originalRow.getCell(0);
+            // 获取单元格样式
+            CellStyle originalStyle = originalcell.getCellStyle();
+
+            String confirmed = "";
+            Date confirmedDate = null;
+            for (TFireAidkit t : list) {
+                Row row = sheet.getRow(3);
+                row.getCell(2).setCellValue(t.getAidkitAppearance());
+                row.getCell(3).setCellValue(t.getRequireCheck());
+                row.getCell(4).setCellValue(t.getSealIntegrity());
+                TPatrolPlan tPatrolPlan = tPatrolPlanService.selectTPatrolPlanById(t.getPlanId());
+                if (Objects.nonNull(tPatrolPlan) && Objects.nonNull(tPatrolPlan.getConfirmed())) {
+                    SysUser sysUser = sysUserService.selectUserById(Long.valueOf(tPatrolPlan.getConfirmed()));
+                    if (sysUser != null) {
+                        confirmed = sysUser.getSignUrl();
+                        confirmedDate = tPatrolPlan.getConfirmDate();
+                    }
+                }
+            }
+            if (StringUtils.isNotEmpty(confirmed))
+                ExcelUtils.insertPicture(wb, sheet, confirmed, 4, 3, 1, 1);
+            if (confirmedDate!=null){
+                sheet.getRow(5).getCell(3).setCellValue(DateUtils.dateTime(confirmedDate));
+            }
+            filename =  "Aidkit" + UUID.randomUUID().toString() + ".xlsx";
+            out = new FileOutputStream(ExcelUtil.getAbsoluteFile(filename));
+            wb.write(out);
+            wb.close();
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return filename;
     }
 
     /**

+ 2 - 2
master/src/main/resources/application.yml

@@ -10,7 +10,7 @@ ruoyi:
   demoEnabled: false
   isPolar: true
   # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /u03/cpmsfile/uploadPath)
-  profile: D:/ruoyi/uploadPath
+  profile: /u03/cpmsfile/uploadPath
   # 邮件中链接跳转路径 示例(本地:http://localhost/cpms/index.html#,服务器:http://47.114.101.16:8080/cpms/index.html# https://cpms.basf-ypc.net.cn/cpms/index.html#)
   requestJumpPath: https://cpms.basf-ypc.net.cn/cpms/index.html#
   # 图像识别地址
@@ -192,7 +192,7 @@ jodconverter:
     enabled: true
     # 设置LibreOffice主目录
     #    office-home: /opt/libreoffice7.2  C:/Program Files/LibreOffice
-    office-home: C:/Program Files/LibreOffice
+    office-home: /opt/libreoffice7.2
     max-tasks-per-process: 100
     port-numbers: 8100
     # 开启多个LibreOffice进程,每个端口对应一个进程

BIN
master/src/main/resources/static/word/patrol/aidkit.xlsx


+ 206 - 124
ui/src/views/patrol/fire/aidkit/index.vue

@@ -10,6 +10,36 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="月份" prop="month">
+        <el-date-picker
+          v-model="month"
+          :clearable="false"
+          format="MM"
+          placeholder="选择月"
+          popper-class="picker-date"
+          type="month"
+          @change="handleQuery">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="年度" prop="year">
+        <el-date-picker
+          v-model="year"
+          :clearable="false"
+          format="yyyy"
+          placeholder="请选择年份"
+          type="year"
+          @change="handleQuery">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="计划名称" prop="planId">
+        <el-select v-model="queryParams.planId" clearable
+                   @change="handleQuery">
+          <el-option v-for="item in planList"
+                     :key="item.id"
+                     :label="item.planName"
+                     :value="item.id"/>
+        </el-select>
+      </el-form-item>
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -25,28 +55,31 @@
           :disabled="single"
           @click="handleUpdate"
           v-hasPermi="['fire:aidkit:edit']"
-        >修改</el-button>
+        >修改
+        </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-          type="danger"
-          icon="el-icon-delete"
+          v-hasPermi="['fire:aidkit:export']"
+          icon="el-icon-download"
+          plain
           size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['fire:aidkit:remove']"
-        >删除</el-button>
+          type="warning"
+          @click="handleExport"
+        >导出
+        </el-button>
       </el-col>
-	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
-    <el-table v-loading="loading" :data="aidkitList" @selection-change="handleSelectionChange" :height="clientHeight" border>
-      <el-table-column type="selection" width="55" align="center" />
+    <el-table v-loading="loading" :data="aidkitList" @selection-change="handleSelectionChange" :height="clientHeight"
+              border>
+      <el-table-column type="selection" width="55" align="center"/>
       <el-table-column label="位置" align="center" prop="position" :show-overflow-tooltip="true"/>
       <el-table-column label="急救箱外观" align="center" prop="aidkitAppearance" :show-overflow-tooltip="true"/>
       <el-table-column label="内部物品是否按要求检查" align="center" prop="requireCheck" :show-overflow-tooltip="true"/>
       <el-table-column label="封条是否完整" align="center" prop="sealIntegrity" :show-overflow-tooltip="true"/>
-      <el-table-column label="操作" align="center" fixed="right"  class-name="small-padding fixed-width">
+      <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -54,7 +87,8 @@
             icon="el-icon-edit"
             @click="handleUpdate(scope.row)"
             v-hasPermi="['fire:aidkit:edit']"
-          >修改</el-button>
+          >修改
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -88,49 +122,59 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
-      <!-- 用户导入对话框 -->
-      <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
-          <el-upload
-                  ref="upload"
-                  :limit="1"
-                  accept=".xlsx, .xls"
-                  :headers="upload.headers"
-                  :action="upload.url + '?updateSupport=' + upload.updateSupport"
-                  :disabled="upload.isUploading"
-                  :on-progress="handleFileUploadProgress"
-                  :on-success="handleFileSuccess"
-                  :auto-upload="false"
-                  drag
-          >
-              <i class="el-icon-upload"></i>
-              <div class="el-upload__text">
-                  将文件拖到此处,或
-                  <em>点击上传</em>
-              </div>
-              <div class="el-upload__tip" slot="tip">
-                  <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
-                  <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
-              </div>
-              <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
-          </el-upload>
-          <div slot="footer" class="dialog-footer">
-              <el-button type="primary" @click="submitFileForm">确 定</el-button>
-              <el-button @click="upload.open = false">取 消</el-button>
-          </div>
-      </el-dialog>
+    <!-- 用户导入对话框 -->
+    <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+      <el-upload
+        ref="upload"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="upload.headers"
+        :action="upload.url + '?updateSupport=' + upload.updateSupport"
+        :disabled="upload.isUploading"
+        :on-progress="handleFileUploadProgress"
+        :on-success="handleFileSuccess"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">
+          将文件拖到此处,或
+          <em>点击上传</em>
+        </div>
+        <div class="el-upload__tip" slot="tip">
+          <el-checkbox v-model="upload.updateSupport"/>
+          是否更新已经存在的用户数据
+          <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
+        </div>
+        <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileForm">确 定</el-button>
+        <el-button @click="upload.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listAidkit, getAidkit, delAidkit, addAidkit, updateAidkit, exportAidkit, importTemplate} from "@/api/patrol/fire/aidkit";
-import { treeselect } from "@/api/system/dept";
-import { getToken } from "@/utils/auth";
+import {
+  addAidkit,
+  delAidkit,
+  exportAidkit,
+  getAidkit,
+  importTemplate,
+  listAidkit,
+  updateAidkit
+} from "@/api/patrol/fire/aidkit";
+import {treeselect} from "@/api/system/dept";
+import {getToken} from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import {listAllPlan} from "@/api/patrol/patrol/plan";
 
 export default {
   name: "Aidkit",
-  components: { Treeselect },
+  components: {Treeselect},
   data() {
     return {
       // 遮罩层
@@ -151,24 +195,24 @@ export default {
       title: "",
       // 部门树选项
       deptOptions: undefined,
-      clientHeight:300,
+      clientHeight: 300,
       // 是否显示弹出层
       open: false,
-        // 用户导入参数
-        upload: {
-            // 是否显示弹出层(用户导入)
-            open: false,
-            // 弹出层标题(用户导入)
-            title: "",
-            // 是否禁用上传
-            isUploading: false,
-            // 是否更新已经存在的用户数据
-            updateSupport: 0,
-            // 设置上传的请求头部
-            headers: { Authorization: "Bearer " + getToken() },
-            // 上传的地址
-            url: process.env.VUE_APP_BASE_API + "/fire/aidkit/importData"
-        },
+      // 用户导入参数
+      upload: {
+        // 是否显示弹出层(用户导入)
+        open: false,
+        // 弹出层标题(用户导入)
+        title: "",
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: {Authorization: "Bearer " + getToken()},
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/fire/aidkit/importData"
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -195,46 +239,83 @@ export default {
         issuesFlag: null,
         repairFile: null
       },
+      month: new Date(),
+      year: new Date(),
+      planList: [],
       // 表单参数
       form: {},
       // 表单校验
       rules: {
         delFlag: [
-          { required: true, message: "删除标识0未删除不能为空", trigger: "blur" }
+          {required: true, message: "删除标识0未删除不能为空", trigger: "blur"}
         ],
       }
     };
   },
   watch: {
-        // 根据名称筛选部门树
-        deptName(val) {
-            this.$refs.tree.filter(val);
-        }
-   },
+    // 根据名称筛选部门树
+    deptName(val) {
+      this.$refs.tree.filter(val);
+    }
+  },
   created() {
-      //设置表格高度对应屏幕高度
-      this.$nextTick(() => {
-          this.clientHeight = document.body.clientHeight -250
-      })
-    this.getList();
+    console.log(this.$route.query)
+    if (this.$route.query.year && this.$route.query.month) {
+      this.year.setFullYear(this.$route.query.year, this.$route.query.month, 1);
+      this.month.setMonth(this.$route.query.month, 1);
+    }
+    if (this.$route.query.planId) {
+      this.queryParams.planId = parseInt(this.$route.query.planId)
+    }
+    if (this.$route.query.id) {
+      this.queryParams.id = parseInt(this.$route.query.id)
+      this.queryParams.issuesFlag = '1';
+    }
+    console.log(this.queryParams.planId)
+    //设置表格高度对应屏幕高度
+    this.$nextTick(() => {
+      this.clientHeight = document.body.clientHeight - 250
+    })
     this.getTreeselect();
+    if (!this.queryParams.id) {
+      let query = {planQuarter: this.month.getMonth() + 1, planYear: this.year.getFullYear(), patrolType: '27'}
+      listAllPlan(query).then(res => {
+        this.planList = res.data;
+        if (res.data.length > 0) {
+          this.queryParams.planId = res.data[0].id;
+        }
+        this.getList();
+      })
+    } else {
+      this.getList();
+    }
   },
   methods: {
     /** 查询急救箱检查记录列表 */
     getList() {
       this.loading = true;
+      if (!this.queryParams.id) {
+        this.queryParams.month = this.month.getMonth() + 1;
+        this.queryParams.year = this.year.getFullYear();
+      }
       listAidkit(this.queryParams).then(response => {
         this.aidkitList = response.rows;
         this.total = response.total;
         this.loading = false;
       });
     },
-     /** 查询部门下拉树结构 */
-     getTreeselect() {
-          treeselect().then(response => {
-              this.deptOptions = response.data;
-          });
-     },
+    /** 查询部门下拉树结构 */
+    getTreeselect() {
+      treeselect().then(response => {
+        this.deptOptions = response.data;
+      });
+    },
+    getPlanList() {
+      let query = {planQuarter: this.month.getMonth() + 1, planYear: this.year.getFullYear(), patrolType: '27'}
+      listAllPlan(query).then(res => {
+        this.planList = res.data;
+      })
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -273,6 +354,7 @@ export default {
     handleQuery() {
       this.queryParams.pageNum = 1;
       this.getList();
+      this.getPlanList();
     },
     /** 重置按钮操作 */
     resetQuery() {
@@ -282,7 +364,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -325,56 +407,56 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delAidkit(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delAidkit(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      })
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
       this.$confirm('是否确认导出所有急救箱检查记录数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportAidkit(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-        })
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return exportAidkit(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
     },
-      /** 导入按钮操作 */
-      handleImport() {
-          this.upload.title = "用户导入";
-          this.upload.open = true;
-      },
-      /** 下载模板操作 */
-      importTemplate() {
-          importTemplate().then(response => {
-              this.download(response.msg);
-          });
-      },
-      // 文件上传中处理
-      handleFileUploadProgress(event, file, fileList) {
-          this.upload.isUploading = true;
-      },
-      // 文件上传成功处理
-      handleFileSuccess(response, file, fileList) {
-          this.upload.open = false;
-          this.upload.isUploading = false;
-          this.$refs.upload.clearFiles();
-          this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
-          this.getList();
-      },
-      // 提交上传文件
-      submitFileForm() {
-          this.$refs.upload.submit();
-      }
+    /** 导入按钮操作 */
+    handleImport() {
+      this.upload.title = "用户导入";
+      this.upload.open = true;
+    },
+    /** 下载模板操作 */
+    importTemplate() {
+      importTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgress(event, file, fileList) {
+      this.upload.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccess(response, file, fileList) {
+      this.upload.open = false;
+      this.upload.isUploading = false;
+      this.$refs.upload.clearFiles();
+      this.$alert(response.msg, "导入结果", {dangerouslyUseHTMLString: true});
+      this.getList();
+    },
+    // 提交上传文件
+    submitFileForm() {
+      this.$refs.upload.submit();
+    }
   }
 };
 </script>