Pārlūkot izejas kodu

Merge branch 'master' of http://116.63.33.55/git/industry-data-platform

lry 9 mēneši atpakaļ
vecāks
revīzija
dfc72fceff

+ 2 - 1
industry-admin/package.json

@@ -1,6 +1,7 @@
 {
   "name": "chuanyi-admin",
-  "version": "测试版本:V1.0.0 20240712.Beta",
+  "version":"1.0.0",
+  "showVersion": "测试版本:V1.0.0 20240712.Beta",
   "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
   "author": "Pan <panfree23@gmail.com>",
   "scripts": {

+ 100 - 0
industry-admin/src/components/Excel/downloadExcel.vue

@@ -0,0 +1,100 @@
+<template>
+  <div>
+    <!-- 操作信息 -->
+    <el-dialog v-if="visible" :title="title" width="30%" custom-class="dialog-max" top="5vh"
+               :before-close="dialogClose" :visible.sync="visible" :close-on-click-modal="false" :append-to-body="true">
+      <el-form ref="excelForm" :model="excelForm" :rules="excelRules" label-width="70px"
+               label-position="right">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="标题" prop="excelTitle">
+              <el-input v-model="excelForm.excelTitle" placeholder="请输入标题" maxlength="100"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="操作人员" prop="excelUser">
+              <el-input v-model="excelForm.excelUser" placeholder="请输入操作人员" maxlength="50"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="操作时间" prop="excelDate">
+              <el-date-picker value-format="yyyy-MM-dd HH:mm:ss" v-model="excelForm.excelDate"
+                              type="datetime" placeholder="选择时间" style="width:100%">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" style="text-align: right">
+        <el-button size="mini" type="primary" @click="saveEvent">确定</el-button>
+        <el-button size="mini" @click="dialogClose">取消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {downloadExcelFileByObj} from "@/utils/upload";
+
+export default {
+  components: {},
+  data() {
+    return {
+      visible: false,
+      title: '导出信息',
+      // excel导出传入参数
+      excel: {
+        api: null,
+        queryParams: null,
+        excelKeyData: null
+      },
+      //表单参数
+      excelForm: {
+        excelTitle: null,
+        excelUser: null,
+        excelDate: null
+      },
+      excelRules: {
+        excelTitle: [
+          {required: true, message: '标题不能为空', trigger: 'blur'}
+        ]
+      }
+    }
+  },
+  methods: {
+    /** 关闭弹出层 */
+    dialogClose() {
+      this.resetForm('excelForm')
+      this.visible = false
+    },
+    /** 重置表单 */
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+
+    /** 保存设备台账 */
+    saveEvent() {
+      this.$refs['excelForm'].validate((valid) => {
+        if (valid) {
+          this.export(this.excelForm.excelTitle, this.excelForm.excelUser, this.excelForm.excelDate)
+        }
+      })
+    },
+    export(excelTitle, excelUser, excelDate) {
+      downloadExcelFileByObj(this.excel.api, this.excel.queryParams, this.excel.excelKeyData, excelTitle, excelUser, excelDate, (bool) => {
+        this.$message({
+          type: bool ? 'success' : 'warning',
+          message: '下载文件' + (bool ? '成功!' : '失败!')
+        });
+      })
+    }
+  }
+}
+</script>
+
+<style rel="stylesheet/scss" lang="scss" scoped>
+</style>

+ 1 - 1
industry-admin/src/layout/components/Navbar.vue

@@ -210,7 +210,7 @@ export default {
       }
     }
     return {
-      appVersion: config.version,
+      appVersion: config.showVersion,
       dialogAboutVisible:false,
       dialogHelpVisible:false,
       avatarDefault: avatarDefault,

+ 74 - 0
industry-admin/src/utils/upload.js

@@ -1,4 +1,7 @@
 import axios from 'axios'
+import { getToken,getUsername } from '@/utils/auth'
+import qs from "qs";
+import {parseTime} from '@/utils/cqcy'
 
 export function downloadFile(api, fileName, callback) {
   axios({
@@ -29,3 +32,74 @@ export function downloadFile(api, fileName, callback) {
     if (callback) callback(false)
   });
 }
+
+
+
+export function downloadExcelFileByObj(api,params,excelKeyData, excelTitle, excelUser, excelDate, callback) {
+  if(!api){
+    console.error('下载文件时出错:api', api)
+    if (callback) callback(false)
+    return
+  }
+  if(!params){
+    params = {}
+  }
+  if(!excelKeyData){
+    console.error('下载文件时出错:excelKeyData', excelKeyData)
+    if (callback) callback(false)
+    return
+  }
+  if(!excelTitle){
+    console.error('下载文件时出错:excelTitle', excelTitle)
+    if (callback) callback(false)
+    return
+  }
+  if(!excelUser){
+    excelUser = getUsername()
+  }
+  const date = new Date()
+  if(!excelDate){
+    excelDate = parseTime(date, "{y}-{m}-{d} {h}:{i}:{s}")
+  }
+  params.excelKeyData = JSON.stringify(excelKeyData)
+  params.excelTitle = excelTitle
+  params.excelUser = excelUser
+  params.excelDate = excelDate
+  let query = qs.stringify(params, { arrayFormat: 'repeat' })
+  if(api.indexOf("?") < 0){
+    api += "?"
+  }
+  api += query
+  axios({
+    baseURL: process.env.VUE_APP_BASE_API,
+    headers: {
+      'Authorization': 'Bearer ' + getToken(),
+      'token': getToken(),
+      'Content-Type': 'application/json;charset=utf-8'
+    },
+    url: api,
+    method: 'GET',
+    responseType: 'blob', // 指定响应类型为 blob
+  }).then(response => {
+    // 创建 Blob 对象
+    const blob = new Blob([response.data]);
+
+    // 创建一个下载链接
+    const url = window.URL.createObjectURL(blob);
+
+    // 创建一个 <a> 元素,设置下载链接并触发点击
+    const a = document.createElement('a');
+    a.href = url;
+    a.download = excelTitle + "_" + parseTime(date, "{y}{m}{d}{h}{i}{s}") + ".xlsx"; // 设置下载的文件名
+    document.body.appendChild(a);
+    a.click();
+
+    // 清理创建的元素和对象
+    window.URL.revokeObjectURL(url);
+    document.body.removeChild(a);
+    if (callback) callback(true)
+  }).catch(error => {
+    console.error('下载文件时出错:', error);
+    if (callback) callback(false)
+  });
+}

+ 32 - 1
industry-admin/src/views/device/deviceLedger/index.vue

@@ -44,6 +44,8 @@
                         <el-col :span="1.5">
                             <el-button type="primary" icon="el-icon-plus" size="mini"
                                 @click="addDeviceLedgerEvent">新增设备</el-button>
+                          <el-button type="primary" icon="el-icon-download" size="mini"
+                                     @click="exportDeviceLedgerEvent">导出</el-button>
                         </el-col>
                         <!-- <el-col :span="1.5" style="margin-left: 15px">
                             <el-button type="primary" size="mini" plain icon="el-icon-circle-plus-outline"
@@ -100,6 +102,8 @@
         <ChooseDeviceType ref="chooseDeviceType" @receiveChooseDeviceType="receiveChooseDeviceType"></ChooseDeviceType>
         <!-- 设备台账关联的点位列表 -->
         <ItemList ref="itemList"></ItemList>
+      <!-- 导出excel文件 -->
+      <DownloadExcel ref="downloadExcel"></DownloadExcel>
     </div>
 </template>
 
@@ -110,6 +114,7 @@ import ChooseDeviceType from '@/views/device/deviceType/chooseDeviceType.vue'
 import DeviceDirectory from './deviceDirectory.vue'
 import DeviceLedger from './deviceLedger.vue'
 import ItemList from './itemList.vue'
+import DownloadExcel from '@/components/Excel/downloadExcel'
 import {
     getDeviceDirectoryTree, getDeviceLedgerPage,
     getDeviceLedgerById,
@@ -123,7 +128,8 @@ export default {
         DeviceDirectory,
         DeviceLedger,
         ChooseDeviceType,
-        ItemList
+        ItemList,
+      DownloadExcel
     },
     created() {
         this.getDeviceDirectoryTree()
@@ -545,7 +551,32 @@ export default {
             this.$refs.deviceLedger.title = '高级查询'
             this.$refs.deviceLedger.visible = true
             this.$refs.deviceLedger.queryShow = true
+        },
+      /** 导出Excel数据 */
+      exportDeviceLedgerEvent(){
+        if (!this.queryParams.directoryId) {
+          this.$message({
+            message: '请先选中设备目录!',
+            type: 'warning'
+          })
+          return
         }
+
+        //this.$refs.downloadExcel.title = '导出设备台账信息'
+        this.$refs.downloadExcel.visible = true
+        this.$refs.downloadExcel.excel.api = "/deviceLedger/downloadExcelFile"
+        this.$refs.downloadExcel.excel.queryParams = this.queryParams
+        this.$refs.downloadExcel.excel.excelKeyData = [
+          {key: "deviceType", title: "设备类别", type: "string"},
+          {key: "deviceName", title: "设备名称", type: "string"},
+          {key: "deviceNum", title: "设备编号", type: "string"},
+          {key: "deviceModel", title: "规格型号", type: "string"},
+          {key: "deviceLocation", title: "设备位置", type: "string"},
+          {key: "departmentName", title: "使用部门", type: "string"},
+          {key: "buyTime", title: "购买时间", type: "date", format: "yyyy-MM-dd"},
+          {key: "devicePersonName", title: "负责人", type: "string"}
+        ];
+      }
     }
 }
 </script>

+ 1 - 1
industry-system/industry-da/src/main/java/com/example/opc_da/annotation/WebLogAspect.java

@@ -114,7 +114,7 @@ public class WebLogAspect {
         }
         log.setOperationName(webLog.OperationEnum().getValue());
         //log.setContent("操作类型:" + webLog.OperationEnum().getValue() + "\n请求参数:" + requestArgs + "\n响应结果:" + ((Result) result).toString());
-        String content = "请求参数:" + requestArgs + "\n响应结果:" + ((Result) result).toString();
+        String content = "请求参数:" + requestArgs + "\n响应结果:" + (Blank.isNotEmpty(result) ? ((Result) result).toString() : "null");
         // 最大字数
         int maxSize = 1000;
         if (content.length() > maxSize) {

+ 17 - 4
industry-system/industry-da/src/main/java/com/example/opc_da/controller/DeviceLedgerController.java

@@ -10,12 +10,14 @@ import com.example.opc_common.util.Blank;
 import com.example.opc_common.util.Result;
 import com.example.opc_da.annotation.WebLog;
 import com.example.opc_da.service.DeviceLedgerService;
+import com.example.opc_da.util.downloadExcel.DownloadExcelUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
@@ -163,9 +165,9 @@ public class DeviceLedgerController {
      */
     @GetMapping("/getManyDirectoryAllAlarm")
     @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.DEVICEDIRECTORY, OperationEnum = OperationEnum.SELECT)
-    public Result getManyDirectoryAllAlarm(Integer directoryId,@RequestParam List<Integer> directoryIdList, @RequestParam String startTime, @RequestParam String endTime,
-                                        @RequestParam Integer page, @RequestParam Integer limit) {
-        return deviceLedgerService.getManyDirectoryAllAlarm(directoryId,directoryIdList, startTime, endTime, page, limit);
+    public Result getManyDirectoryAllAlarm(Integer directoryId, @RequestParam List<Integer> directoryIdList, @RequestParam String startTime, @RequestParam String endTime,
+                                           @RequestParam Integer page, @RequestParam Integer limit) {
+        return deviceLedgerService.getManyDirectoryAllAlarm(directoryId, directoryIdList, startTime, endTime, page, limit);
     }
 
     /**
@@ -179,7 +181,7 @@ public class DeviceLedgerController {
     @GetMapping("/getOneDirectoryAllAlarm")
     @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.DEVICEDIRECTORY, OperationEnum = OperationEnum.SELECT)
     public Result getOneDirectoryAllAlarm(Integer directoryId, String startTime, String endTime,
-                                       @RequestParam Integer page, @RequestParam Integer limit) {
+                                          @RequestParam Integer page, @RequestParam Integer limit) {
         return deviceLedgerService.getOneDirectoryAllAlarm(directoryId, startTime, endTime, page, limit);
     }
 
@@ -261,6 +263,17 @@ public class DeviceLedgerController {
         return deviceLedgerService.getDeviceLedgerPage(page, limit, directoryId, deviceTypeId, deviceName, deviceNum, isShow);
     }
 
+
+    @RequestMapping(value = "/downloadExcelFile", method = RequestMethod.GET)
+    @WebLog(ServerEnum = ServerEnum.CLIENT, ModelEnum = ModelEnum.DEVICELEDGER, OperationEnum = OperationEnum.EXPORT)
+    public void downloadExcelFile(@RequestParam String excelKeyData
+            , @RequestParam String excelTitle, @RequestParam(required = false) String excelUser, @RequestParam(required = false) String excelDate
+            , HttpServletResponse response
+            , @RequestParam Integer directoryId, Integer deviceTypeId, String deviceName, String deviceNum, Integer isShow) {
+        List<DeviceLedger> deviceLedgerList = deviceLedgerService.getDeviceLedgerForExport(directoryId, deviceTypeId, deviceName, deviceNum, isShow);
+        DownloadExcelUtil.downloadExcelFile(excelKeyData, excelTitle, excelUser, excelDate, deviceLedgerList, response);
+    }
+
     /**
      * 修改设备台账排序号
      *

+ 2 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/dao/DeviceLedgerDao.java

@@ -45,6 +45,8 @@ public interface DeviceLedgerDao {
                                            @Param("directoryId") Integer directoryId, @Param("deviceTypeId") Integer deviceTypeId,
                                            @Param("deviceName") String deviceName, @Param("deviceNum") String deviceNum, @Param("isShow") Integer isShow);
 
+    List<DeviceLedger> getDeviceLedgerForExport(@Param("directoryId") Integer directoryId, @Param("deviceTypeId") Integer deviceTypeId,
+                                                @Param("deviceName") String deviceName, @Param("deviceNum") String deviceNum, @Param("isShow") Integer isShow);
     Integer addTechnicalDataList(Integer deviceLedgerId, List<FileEntity> technicalDataList);
 
     Integer addPictureList(Integer deviceLedgerId, List<FileEntity> pictureList);

+ 1 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/service/DeviceLedgerService.java

@@ -32,6 +32,7 @@ public interface DeviceLedgerService {
 
     Result getDeviceLedgerPage(Integer page, Integer limit, Integer directoryId, Integer deviceTypeId, String deviceName, String deviceNum, Integer isShow);
 
+    List<DeviceLedger>  getDeviceLedgerForExport(Integer directoryId, Integer deviceTypeId, String deviceName, String deviceNum, Integer isShow);
     Result updateLedgerSortNum(Integer id, Integer sortNum);
 
     Result updateLedgerIsShow(Integer id, Integer isShow);

+ 2 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/service/UserService.java

@@ -43,6 +43,8 @@ public interface UserService {
 
     Result getUserById(String userId);
 
+    User getUserEntityById(String userId);
+
     Result updateUserStateById(String userId, Integer userState);
 
     Result getCodeImage(boolean hasPubKey);

+ 5 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/DeviceLedgerServiceImpl.java

@@ -369,6 +369,11 @@ public class DeviceLedgerServiceImpl implements DeviceLedgerService {
     }
 
     @Override
+    public List<DeviceLedger>  getDeviceLedgerForExport(Integer directoryId, Integer deviceTypeId, String deviceName, String deviceNum, Integer isShow){
+        return deviceLedgerDao.getDeviceLedgerForExport(directoryId,deviceTypeId,deviceName,deviceNum,isShow);
+    }
+
+    @Override
     public Result updateLedgerSortNum(Integer id, Integer sortNum) {
         if (deviceLedgerDao.updateLedgerSortNum(id, sortNum) <= 0) {
             return Result.no(ResultEnum.SUCCESS.getRespCode(), "修改失败");

+ 5 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/service/impl/UserServiceImpl.java

@@ -386,6 +386,11 @@ public class UserServiceImpl implements UserService {
     }
 
     @Override
+    public User getUserEntityById(String userId){
+        return userDao.getUserById(userId);
+    }
+
+    @Override
     public synchronized Result updateUserStateById(String userId, Integer userState) {
         if (userState != ConstantStr.NORMAL_USE && userState != ConstantStr.LOCK_USER) {
             return Result.no(ResultEnum.REQUEST_WRONGPARAMS.getRespCode(), "用户状态参数只能指定为正常和锁定");

+ 104 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/downloadExcel/DownloadExcelUtil.java

@@ -0,0 +1,104 @@
+package com.example.opc_da.util.downloadExcel;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.ExcelWriter;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DownloadExcelUtil {
+
+    public static <T> void downloadExcelFile(@RequestParam String excelKeyDataStr, String excelTitle, String excelUser, String excelDate, List<T> dataList, HttpServletResponse response) {
+
+        final List<List<String>> rows = new ArrayList<>();
+        final JSONArray excelKeyData = JSONUtil.parseArray(excelKeyDataStr);
+        int len = excelKeyData.size();
+        final Integer finalLen = len > 5 ? len : 5;
+        List<String> row0 = new ArrayList<>();
+        row0.add(excelTitle);
+        // 空格填充
+        for (int i = 1; i < finalLen; i++) {
+            row0.add("");
+        }
+        rows.add(row0);
+        List<String> row1 = new ArrayList<>();
+        row1.addAll(CollUtil.newArrayList("操作人员:", excelUser, "", "操作时间:", excelDate));
+        // 空格填充
+        for (int i = 5; i < finalLen; i++) {
+            row1.add("");
+        }
+        rows.add(row1);
+
+
+        int titleSize = excelKeyData.size();
+        List<String> header = new ArrayList<>();
+        for (int i = 0; i < titleSize; i++) {
+            header.add(JSONUtil.toBean(excelKeyData.getJSONObject(i), ExcelKeyEntity.class).getTitle());
+        }
+        // 空格填充
+        for (int i = titleSize; i < finalLen; i++) {
+            header.add("");
+        }
+        rows.add(header);
+        dataList.stream().forEach(data -> {
+                    List<String> valueList = new ArrayList<>();
+                    for (int i = 0; i < excelKeyData.size(); i++) {
+                        valueList.add(getDataValue(data, JSONUtil.toBean(excelKeyData.getJSONObject(i), ExcelKeyEntity.class)));
+                    }
+                    // 空格填充
+                    for (int i = excelKeyData.size(); i < finalLen; i++) {
+                        valueList.add("");
+                    }
+                    rows.add(valueList);
+                }
+        );
+        ServletOutputStream out = null;
+        ExcelWriter writer = null;
+        try {
+            //3.通过ExcelUtil.getBigWriter()创建Writer对象,BigExcelWriter用于大数据量的导出,不会引起溢出;
+            writer = ExcelUtil.getBigWriter();
+            //合并行,第一个参数是合并行的开始行号(行号从0开始),第二个参数是合并行的结束行号,第三个参数是合并的列号开始(列号从0开始),
+            //第四个参数是合并的列号结束,第五个参数是合并后的内容,null不设置,第六个参数指是否支持设置样式,true指的是。
+            writer.merge(0, 0, 0, titleSize - 1, null, true);
+            writer.write(rows, true);
+            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
+            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(excelTitle, "utf-8") + ".xlsx");
+            out = response.getOutputStream();
+            writer.flush(out, true);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (writer != null) {
+                writer.close();
+            }
+            IoUtil.close(out);
+        }
+    }
+
+    public static <T> String getDataValue(T data, ExcelKeyEntity entity) {
+        JSONObject jsonObject = JSONUtil.parseObj(data);
+        String dataValue = "";
+        switch (entity.getType()) {
+            case "string":
+                dataValue = Convert.toStr(jsonObject.get(entity.getKey()));
+                break;
+            case "date":
+                dataValue = DateUtil.format(Convert.toDate(jsonObject.get(entity.getKey())), entity.getFormat());
+                break;
+            default:
+        }
+        return dataValue;
+    }
+}

+ 11 - 0
industry-system/industry-da/src/main/java/com/example/opc_da/util/downloadExcel/ExcelKeyEntity.java

@@ -0,0 +1,11 @@
+package com.example.opc_da.util.downloadExcel;
+
+import lombok.Data;
+
+@Data
+public class ExcelKeyEntity {
+    private String key;
+    private String title;
+    private String type;
+    private String format;
+}

+ 47 - 0
industry-system/industry-da/src/main/resources/mapper/DeviceLedgerDao.xml

@@ -369,6 +369,53 @@
         limit #{startNum}, #{limitNum}
     </select>
 
+    <select id="getDeviceLedgerForExport" resultType="com.example.opc_common.entity.DeviceLedger">
+        select tdl.id,
+        tdl.directory_id,
+        tdl.device_type_id,
+        tdt.device_type,
+        tdl.device_name,
+        tdl.device_num,
+        tdl.device_level,
+        tdl.device_model,
+        tdl.device_location,
+        tdl.device_health,
+        tdl.device_dept_id,
+        sd.department_name,
+        tdl.device_person,
+        ss.staff_name as device_person_name,
+        tdl.buy_time,
+        tdl.use_time,
+        tdl.supplier,
+        tdl.manufacturer,
+        tdl.serial_number,
+        tdl.run_condition,
+        tdl.device_state,
+        tdl.device_unit,
+        tdl.sort_num,
+        tdl.is_show,
+        tdl.remark,
+        tdl.create_time
+        from t_device_ledger tdl
+        left join t_device_type tdt on tdl.device_type_id = tdt.id
+        left join sys_department sd on tdl.device_dept_id = sd.id
+        left join sys_staff ss on tdl.device_person=ss.id
+        where tdl.directory_id = #{directoryId}
+        <if test="deviceTypeId !=null">
+            AND tdl.device_type_id=#{deviceTypeId}
+        </if>
+        <if test="deviceName !=null and deviceName !=''">
+            AND tdl.device_name LIKE CONCAT('%',#{deviceName},'%')
+        </if>
+        <if test="deviceNum !=null and deviceNum !=''">
+            AND tdl.device_num LIKE CONCAT('%',#{deviceNum},'%')
+        </if>
+        <if test="isShow !=null and isShow !=''">
+            AND tdl.is_show = #{isShow}
+        </if>
+        order by tdl.sort_num,tdl.create_time desc
+    </select>
+
     <select id="getTechnicalByLedgerId" resultType="com.example.opc_common.entity.TechnicalData">
         select
         <include refid="technicalData"/>