From 31678643b941483116cb4669fe6fefae4fcc0d26 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 11 四月 2025 16:06:18 +0800
Subject: [PATCH] 代码初始化

---
 server/src/main/java/com/doumee/api/system/SystemTraceLogController.java           |    3 
 admin/src/views/business/workorderShe.vue                                          |   17 
 server/src/main/java/com/doumee/dao/business/vo/WorkorderAllDto.java               |   97 ++
 server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java          |   65 +
 server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java               |   77 ++
 server/src/main/java/com/doumee/core/annotation/excel/ExcelDataHandlerAdapter.java |   10 
 server/src/main/java/com/doumee/api/business/CompanyMemberController.java          |    5 
 server/src/main/java/com/doumee/api/business/NoticesController.java                |    5 
 server/src/main/java/com/doumee/api/business/MemberController.java                 |    4 
 admin/src/components/business/OperaWorkorderDetailDcaWindow.vue                    |    2 
 admin/src/views/business/workorderDcaChild.vue                                     |  174 ++++
 server/src/main/java/com/doumee/dao/business/model/Notices.java                    |   28 
 server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java               |   57 +
 server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java               |   56 +
 server/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java           |  266 +++++-
 server/src/main/java/com/doumee/api/business/CompanyController.java                |    5 
 server/src/main/java/com/doumee/core/annotation/excel/ExcelImporter.java           |  504 +++++++++----
 server/src/main/java/com/doumee/api/system/SystemLoginLogController.java           |    2 
 server/src/main/java/com/doumee/dao/system/model/SystemLoginLog.java               |   14 
 server/src/main/java/com/doumee/api/business/WorkorderController.java              |   86 ++
 server/src/main/java/com/doumee/api/business/CategoryController.java               |    4 
 server/src/main/java/com/doumee/dao/business/model/Company.java                    |   21 
 server/src/main/java/com/doumee/api/business/WorkorderLogController.java           |    5 
 admin/src/components/business/OperaWorkorderDetailSheWindow.vue                    |    4 
 admin/src/views/business/workorderDca.vue                                          |   21 
 server/src/main/java/com/doumee/dao/business/model/Managers.java                   |   15 
 admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue                |    2 
 /dev/null                                                                          |   29 
 server/src/main/java/com/doumee/dao/business/model/CompanyMember.java              |   15 
 server/src/main/java/com/doumee/dao/business/model/Member.java                     |   24 
 server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java               |   21 
 server/src/main/java/com/doumee/dao/business/model/Category.java                   |   18 
 server/src/main/java/com/doumee/core/annotation/excel/Reflections.java             |  294 +++++++
 server/src/main/java/com/doumee/dao/system/model/SystemTraceLog.java               |   21 
 admin/src/views/business/workorderDbh.vue                                          |   16 
 server/src/main/java/com/doumee/api/business/MultifileController.java              |   10 
 server/src/main/java/com/doumee/dao/business/model/Workorder.java                  |   45 -
 server/src/main/java/com/doumee/core/annotation/excel/ExcelColumn.java             |  115 +++
 server/src/main/java/com/doumee/dao/business/model/Multifile.java                  |   19 
 server/src/main/java/com/doumee/api/business/ManagersController.java               |    5 
 40 files changed, 1,628 insertions(+), 553 deletions(-)

diff --git a/admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue b/admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue
index 1a27190..86e0ed2 100644
--- a/admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue
+++ b/admin/src/components/business/OperaWorkorderDetailDcaInfoWindow.vue
@@ -35,7 +35,7 @@
               <div class="value">{{ info.companyName }} </div>
             </div>
             <div class="item">
-              <div class="label">鍙戠敓鍦扮偣</div>
+              <div class="label">浣嶇疆</div>
               <div class="value">{{ info.locationName }}</div>
             </div>
             <div class="item">
diff --git a/admin/src/components/business/OperaWorkorderDetailDcaWindow.vue b/admin/src/components/business/OperaWorkorderDetailDcaWindow.vue
index 374517c..13a9326 100644
--- a/admin/src/components/business/OperaWorkorderDetailDcaWindow.vue
+++ b/admin/src/components/business/OperaWorkorderDetailDcaWindow.vue
@@ -41,7 +41,7 @@
               <div class="value">{{ info.happenTime}}</div>
             </div>
             <div class="item">
-              <div class="label">鍙戠敓鍦扮偣</div>
+              <div class="label">浣嶇疆</div>
               <div class="value">{{ info.locationName }}</div>
             </div>
             <div class="item">
diff --git a/admin/src/components/business/OperaWorkorderDetailSheWindow.vue b/admin/src/components/business/OperaWorkorderDetailSheWindow.vue
index 6838092..20d48c9 100644
--- a/admin/src/components/business/OperaWorkorderDetailSheWindow.vue
+++ b/admin/src/components/business/OperaWorkorderDetailSheWindow.vue
@@ -45,6 +45,10 @@
               <div class="value">{{ info.locationName }}</div>
             </div>
             <div class="item">
+              <div class="label">鍏蜂綋浣嶇疆</div>
+              <div class="value">{{ info.remark }}</div>
+            </div>
+            <div class="item">
               <div class="label">澶栭儴灏卞尰</div>
               <div class="value">{{ info.outJiuyi == "0" ? "鍚�" : "鏄�" }}</div>
             </div>
diff --git a/admin/src/views/business/workorderDbh.vue b/admin/src/views/business/workorderDbh.vue
index f59f7fb..00d192b 100644
--- a/admin/src/views/business/workorderDbh.vue
+++ b/admin/src/views/business/workorderDbh.vue
@@ -40,14 +40,7 @@
             <span style="color: #2E68EC;cursor: pointer" @click="$refs.operaWorkorderWindow.open('SHE浜嬩欢宸ュ崟璇︽儏', row)" >{{ row.code || '-'}}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="typeName" label="浼ゅ绫诲瀷" min-width="100px"></el-table-column>
-        <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="100px">
-          <template slot-scope="{row}">
-            <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
-            <span v-else >{{row.memberName}} </span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="companyName" label="鎵�鍦ㄩ儴闂�" min-width="100px"></el-table-column>
+        <el-table-column prop="typeName" label="椋庨櫓绫诲瀷" min-width="100px"></el-table-column>
         <el-table-column prop="status" label="鐘舵��" min-width="100px">
           <template slot-scope="{row}">
             <span :class="'statusInfo'+row.status" v-if="row.status ==0">寰呭鐞�</span>
@@ -58,6 +51,13 @@
         <el-table-column prop="submitDate" label="涓婃姤鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column prop="happenTime" label="鍙戠幇鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column prop="riskInfo" label="椋庨櫓鎻忚堪" min-width="100px"></el-table-column>
+        <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
+            <span v-else >{{row.memberName}} </span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="companyName" label="鎵�灞為儴闂�" min-width="100px"></el-table-column>
         <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column
           v-if="containPermissions(['business:workorder:update', 'business:workorder:delete'])"
diff --git a/admin/src/views/business/workorderDca.vue b/admin/src/views/business/workorderDca.vue
index 248222f..9a99868 100644
--- a/admin/src/views/business/workorderDca.vue
+++ b/admin/src/views/business/workorderDca.vue
@@ -3,7 +3,7 @@
     <!-- 鎼滅储琛ㄥ崟 -->
     <div slot="search-form">
       <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
-        <el-form-item label="椋庨櫓绫诲瀷" prop="typeId">
+        <el-form-item label="瑙傚療涓婚" prop="typeId">
           <el-select v-model="searchForm.typeId" @change="search">
           <el-option  clearable filterable
               v-for="item in categorys"
@@ -41,24 +41,25 @@
       >
         <el-table-column prop="code"  label="宸ュ崟鍙�" min-width="150px" fixed>
           <template slot-scope="{row}">
-            <span style="color: #2E68EC;cursor: pointer" @click="$refs.operaWorkorderWindow.open('SHE浜嬩欢宸ュ崟璇︽儏', row)" >{{ row.code || '-'}}</span>
+            <span style="color: #2E68EC;cursor: pointer" @click="$refs.operaWorkorderWindow.open('DCA浜嬩欢宸ュ崟璁板綍璇︽儏', row)" >{{ row.code || '-'}}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="100px">
-          <template slot-scope="{row}">
-            <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
-            <span v-else >{{row.memberName}} </span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="companyName" label="鎵�鍦ㄩ儴闂�" min-width="100px"></el-table-column>
         <el-table-column prop="typeName" label="瑙傚療涓婚" min-width="150px"></el-table-column>
         <el-table-column prop="dcaYesNum" label="瑙傚療椤圭粺璁�" min-width="150px">
           <template slot-scope="{row}">
             <span  style="color: #1562e2" >绗﹀悎锛歿{row.dcaYesNum}} 锛屼笉绗﹀悎锛�<span style="color:red;">{{row.dcaNoNum}}</span> </span>
           </template>
         </el-table-column>
+        <el-table-column prop="locationName" label="浣嶇疆" min-width="150px"></el-table-column>
         <el-table-column prop="submitDate" label="涓婃姤鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column prop="happenTime" label="鍙戠幇鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
+            <span v-else >{{row.memberName}} </span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="companyName" label="鎵�灞為儴闂�" min-width="100px"></el-table-column>
         <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column
           v-if="containPermissions(['business:workorder:update', 'business:workorder:delete'])"
@@ -67,7 +68,7 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaWorkorderWindow.open('DCA浜嬩欢宸ュ崟璇︽儏', row)" icon="el-icon-zoom-out" >鏌ョ湅璇︽儏</el-button>
+            <el-button type="text" @click="$refs.operaWorkorderWindow.open('DCA浜嬩欢宸ュ崟璁板綍璇︽儏', row)" icon="el-icon-zoom-out" >鏌ョ湅璇︽儏</el-button>
           <!--<el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:workorder:delete']">鍒犻櫎</el-button>-->
           </template>
         </el-table-column>
diff --git a/admin/src/views/business/workorderDcaChild.vue b/admin/src/views/business/workorderDcaChild.vue
new file mode 100644
index 0000000..5ee9752
--- /dev/null
+++ b/admin/src/views/business/workorderDcaChild.vue
@@ -0,0 +1,174 @@
+<template>
+  <TableLayout :permissions="['business:workorder:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <div slot="search-form">
+      <el-form ref="searchForm" :model="searchForm" label-width="100px" inline>
+        <el-form-item label="瑙傚療涓婚" prop="typeId">
+          <el-select v-model="searchForm.typeId" @change="changeType" style="width: 120px">
+          <el-option  clearable filterable
+              v-for="item in categorys"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+          </el-option>
+          </el-select>-
+          <el-select v-model="searchForm.categoryId" @change="search" style="width: 120px">
+          <el-option  clearable filterable
+              v-for="item in categorys1"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id">
+          </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="涓婃姤浜哄憳" prop="memberName">
+          <el-input v-model="searchForm.memberName" clearable placeholder="浜哄憳濮撳悕鎴栨墜鏈哄彿" @keypress.enter.native="search"></el-input>
+        </el-form-item>
+        <el-form-item label="宸ュ崟鍙�" prop="code">
+          <el-input v-model="searchForm.code" clearable placeholder="璇疯緭鍏ュ伐鍗曞彿" @keypress.enter.native="search"></el-input>
+        </el-form-item>
+        <section>
+          <el-button type="primary" @click="search">鎼滅储</el-button>
+          <el-button @click="reset">閲嶇疆</el-button>
+        </section>
+      </el-form>
+    </div>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:workorder:exportExcel']">
+        <li> <el-button type="primary" :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button></li>
+      </ul>
+      <el-table
+        :height="tableHeightNew"
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column prop="code"  label="宸ュ崟鍙�" min-width="150px" fixed>
+          <template slot-scope="{row}">
+            <span style="color: #2E68EC;cursor: pointer" @click="$refs.operaWorkorderWindow.open('DCA浜嬩欢宸ュ崟璇︽儏', row)" >{{ row.code || '-'}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="typeName" label="瑙傚療涓婚" min-width="150px"></el-table-column>
+        <el-table-column prop="categoryName" label="浜岀骇瑙傚療涓婚" min-width="150px"></el-table-column>
+        <el-table-column prop="problemTitle" label="涓嶇鍚堥」" min-width="150px"></el-table-column>
+        <el-table-column prop="status" label="鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <span :class="'statusInfo'+row.status" v-if="row.status ==0">寰呭鐞�</span>
+            <span :class="'statusInfo'+row.status" v-else-if="row.status ==3 ||row.status ==4||row.status ==5">宸插鐞�</span>
+            <span :class="'statusInfo'+row.status" v-else>澶勭悊涓�</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="locationName" label="浣嶇疆" min-width="150px"></el-table-column>
+        <el-table-column prop="submitDate" label="涓婃姤鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="happenTime" label="鍙戠幇鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
+            <span v-else >{{row.memberName}} </span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="companyName" label="鎵�灞為儴闂�" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:workorder:update', 'business:workorder:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaWorkorderWindow.open('DCA浜嬩欢宸ュ崟璇︽儏', row)" icon="el-icon-zoom-out" >鏌ョ湅璇︽儏</el-button>
+          <!--<el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:workorder:delete']">鍒犻櫎</el-button>-->
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaWorkorderDetailDcaInfoWindow ref="operaWorkorderWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaWorkorderDetailDcaInfoWindow from '@/components/business/OperaWorkorderDetailDcaInfoWindow'
+import { allList } from '@/api/business/category'
+export default {
+  name: 'Workorder',
+  extends: BaseTable,
+  components: {TableLayout, Pagination, OperaWorkorderDetailDcaInfoWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        type: '2',
+        memberName: '',
+        memberCompanyId: '',
+        localtionId: '',
+        categoryId: '',
+        typeId: '',
+        code: '',
+        categoryList: []
+      },
+      categoryprops: {
+        label: 'name',
+        value: 'id',
+        checkStrictly: true,
+        lazyLoad: this.lazyLoad
+      },
+      categorys: [],
+      categorys1: []
+    }
+  },
+  created () {
+    this.config({
+      module: '宸ュ崟淇℃伅琛�',
+      api: '/business/workorder',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.loadCategorys()
+    this.search()
+  },
+  methods: {
+    changeType(){
+      this.search()
+      this.categorys1 = []
+      this.searchForm.categoryId = null
+      this.loadCategorys1()
+    },
+    handleChangeCategory (value) {
+      if (this.searchForm.categoryList && this.searchForm.categoryList.length >= 1) {
+        this.searchForm.typeId = this.searchForm.categoryList[this.searchForm.categoryList.length - 1]
+      }
+    },
+    loadCategorys () {
+      allList({ type: 4, isRoot:1})
+        .then(res => {
+          if (res && res.length > 0) {
+            this.categorys = res
+          }
+        })
+    },
+    loadCategorys1 ( ) {
+      if (!this.searchForm.typeId) {
+        return
+      }
+      allList({ type: 4, parentId: this.searchForm.typeId })
+        .then(res => {
+          if (res && res.length > 0) {
+            this.categorys1 = res
+          }
+        })
+    },
+  }
+}
+</script>
diff --git a/admin/src/views/business/workorderShe.vue b/admin/src/views/business/workorderShe.vue
index 5a19c9e..dc3fe97 100644
--- a/admin/src/views/business/workorderShe.vue
+++ b/admin/src/views/business/workorderShe.vue
@@ -49,13 +49,6 @@
             <span :class="'statusInfo'+row.status" v-else>澶勭悊涓�</span>
           </template>
         </el-table-column>
-        <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="100px">
-          <template slot-scope="{row}">
-            <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
-            <span v-else >{{row.memberName}} </span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="companyName" label="鎵�鍦ㄩ儴闂�" min-width="100px"></el-table-column>
         <el-table-column prop="memberType" label="娑夊強浜哄憳" min-width="100px">
           <template slot-scope="{row}">
             <span v-if="row.memberType == 2">渚涘簲鍟�-{{row.memberNames}}</span>
@@ -64,6 +57,7 @@
           </template>
         </el-table-column>
         <el-table-column prop="locationName" label="鍙戠敓鍦扮偣" min-width="100px"></el-table-column>
+        <el-table-column prop="remark" label="鍏蜂綋浣嶇疆" min-width="100px"></el-table-column>
           <el-table-column prop="outJiuyi" label="灏卞尰鎯呭喌" min-width="100px">
             <template slot-scope="{row}">
               <span v-if="row.outJiuyi == 0">闈炲閮ㄥ氨鍖�-
@@ -83,7 +77,14 @@
             </template>
           </el-table-column>
         <el-table-column prop="eventInfo" label="浜嬩欢璇存槑" min-width="100px"></el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="memberName" label="涓婃姤浜哄憳" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span>
+            <span v-else >{{row.memberName}} </span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="companyName" label="鎵�灞為儴闂�" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鎻愪氦鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column
           v-if="containPermissions(['business:workorder:update', 'business:workorder:delete'])"
           label="鎿嶄綔"
diff --git a/server/src/main/java/com/doumee/api/business/CategoryController.java b/server/src/main/java/com/doumee/api/business/CategoryController.java
index 1296aa0..b69a568 100644
--- a/server/src/main/java/com/doumee/api/business/CategoryController.java
+++ b/server/src/main/java/com/doumee/api/business/CategoryController.java
@@ -7,7 +7,6 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.dao.business.model.Category;
-import com.doumee.dao.business.model.Company;
 import com.doumee.service.business.CategoryService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -16,7 +15,6 @@
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -80,7 +78,7 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:category:exportExcel")
     public void exportExcel (@RequestBody PageWrap<Category> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(Category.class).exportData(categoryService.findPage(pageWrap).getRecords(), "鍒嗙被淇℃伅琛�", response);
+        ExcelExporter.build(Category.class).export(categoryService.findPage(pageWrap).getRecords(), "鍒嗙被淇℃伅琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/src/main/java/com/doumee/api/business/CompanyController.java b/server/src/main/java/com/doumee/api/business/CompanyController.java
index 06d07ad..3d9eb96 100644
--- a/server/src/main/java/com/doumee/api/business/CompanyController.java
+++ b/server/src/main/java/com/doumee/api/business/CompanyController.java
@@ -9,15 +9,12 @@
 import com.doumee.dao.business.model.Company;
 import com.doumee.service.business.CompanyService;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;    
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -90,7 +87,7 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:company:exportExcel")
     public void exportExcel (@RequestBody PageWrap<Company> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(Company.class).exportData(companyService.findPage(pageWrap).getRecords(), "缁勭粐淇℃伅琛�", response);
+        ExcelExporter.build(Company.class).export(companyService.findPage(pageWrap).getRecords(), "缁勭粐淇℃伅琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/src/main/java/com/doumee/api/business/CompanyMemberController.java b/server/src/main/java/com/doumee/api/business/CompanyMemberController.java
index 4bd5e0b..6777284 100644
--- a/server/src/main/java/com/doumee/api/business/CompanyMemberController.java
+++ b/server/src/main/java/com/doumee/api/business/CompanyMemberController.java
@@ -15,9 +15,6 @@
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * @author 姹熻箘韫�
  * @since 2025/04/03 16:30
@@ -73,7 +70,7 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:companymember:exportExcel")
     public void exportExcel (@RequestBody PageWrap<CompanyMember> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(CompanyMember.class).exportData(companyMemberService.findPage(pageWrap).getRecords(), "浜哄憳淇℃伅琛�", response);
+        ExcelExporter.build(CompanyMember.class).export(companyMemberService.findPage(pageWrap).getRecords(), "浜哄憳淇℃伅琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/src/main/java/com/doumee/api/business/ManagersController.java b/server/src/main/java/com/doumee/api/business/ManagersController.java
index 0e3170f..cb962e0 100644
--- a/server/src/main/java/com/doumee/api/business/ManagersController.java
+++ b/server/src/main/java/com/doumee/api/business/ManagersController.java
@@ -15,9 +15,6 @@
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * @author 姹熻箘韫�
  * @since 2025/04/02 17:49
@@ -73,7 +70,7 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:managers:exportExcel")
     public void exportExcel (@RequestBody PageWrap<Managers> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(Managers.class).exportData(managersService.findPage(pageWrap).getRecords(), "璐d换浜轰俊鎭〃", response);
+        ExcelExporter.build(Managers.class).export(managersService.findPage(pageWrap).getRecords(), "璐d换浜轰俊鎭〃", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/src/main/java/com/doumee/api/business/MemberController.java b/server/src/main/java/com/doumee/api/business/MemberController.java
index 7770e56..8781748 100644
--- a/server/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/src/main/java/com/doumee/api/business/MemberController.java
@@ -3,7 +3,6 @@
 import com.doumee.api.BaseController;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
-import com.doumee.core.constants.Constants;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
@@ -16,7 +15,6 @@
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -86,7 +84,7 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:member:exportExcel")
     public void exportExcel (@RequestBody PageWrap<Member> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(Member.class).exportData(memberService.findPage(pageWrap).getRecords(), "浜哄憳淇℃伅琛�", response);
+        ExcelExporter.build(Member.class).export(memberService.findPage(pageWrap).getRecords(), "浜哄憳淇℃伅琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/src/main/java/com/doumee/api/business/MultifileController.java b/server/src/main/java/com/doumee/api/business/MultifileController.java
index 0fc4546..cceeb16 100644
--- a/server/src/main/java/com/doumee/api/business/MultifileController.java
+++ b/server/src/main/java/com/doumee/api/business/MultifileController.java
@@ -1,7 +1,6 @@
 package com.doumee.api.business;
 
 import com.doumee.api.BaseController;
-import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
@@ -14,9 +13,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
-
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * @author 姹熻箘韫�
@@ -69,12 +65,6 @@
         return ApiResponse.success(multifileService.findPage(pageWrap));
     }
 
-    @ApiOperation("瀵煎嚭Excel")
-    @PostMapping("/exportExcel")
-    @RequiresPermissions("business:multifile:exportExcel")
-    public void exportExcel (@RequestBody PageWrap<Multifile> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(Multifile.class).exportData(multifileService.findPage(pageWrap).getRecords(), "闄勪欢涓婁紶淇℃伅琛�", response);
-    }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
diff --git a/server/src/main/java/com/doumee/api/business/NoticesController.java b/server/src/main/java/com/doumee/api/business/NoticesController.java
index c494e2f..b5a081d 100644
--- a/server/src/main/java/com/doumee/api/business/NoticesController.java
+++ b/server/src/main/java/com/doumee/api/business/NoticesController.java
@@ -15,9 +15,6 @@
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * @author 姹熻箘韫�
  * @since 2025/04/02 17:49
@@ -73,7 +70,7 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:notices:exportExcel")
     public void exportExcel (@RequestBody PageWrap<Notices> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(Notices.class).exportData(noticesService.findPage(pageWrap).getRecords(), "绯荤粺娑堟伅淇℃伅琛�", response);
+        ExcelExporter.build(Notices.class).export(noticesService.findPage(pageWrap).getRecords(), "绯荤粺娑堟伅淇℃伅琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/src/main/java/com/doumee/api/business/WorkorderController.java b/server/src/main/java/com/doumee/api/business/WorkorderController.java
index 28822c1..7813df5 100644
--- a/server/src/main/java/com/doumee/api/business/WorkorderController.java
+++ b/server/src/main/java/com/doumee/api/business/WorkorderController.java
@@ -3,19 +3,30 @@
 import com.doumee.api.BaseController;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.dao.business.model.Workorder;
+import com.doumee.dao.business.vo.WorkorderDbhDto;
+import com.doumee.dao.business.vo.WorkorderDcaChildDto;
+import com.doumee.dao.business.vo.WorkorderDcaDto;
+import com.doumee.dao.business.vo.WorkorderSheDto;
 import com.doumee.service.business.WorkorderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
-
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -73,7 +84,76 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:workorder:exportExcel")
     public void exportExcel (@RequestBody PageWrap<Workorder> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(Workorder.class).exportData(workorderService.findPage(pageWrap).getRecords(), "宸ュ崟淇℃伅琛�", response);
+        //0SHE浜嬩欢 1DCA浜嬩欢鎻愪氦璁板綍 2DCA宸ュ崟 3璺岀粖婊戜簨浠�
+        long index = 1;
+        if(Constants.equalsInteger(pageWrap.getModel().getType(),Constants.ZERO)){
+            List<Workorder> records = workorderService.findPage(pageWrap).getRecords();
+            List<WorkorderSheDto> list = new ArrayList<>();
+            if(records!=null){
+                for(Workorder model : records){
+                    WorkorderSheDto t = new WorkorderSheDto();
+                    t.setIndex(index++);
+                    BeanUtils.copyProperties(model,t);
+                    if(Constants.equalsInteger(model.getOutJiuyi(),Constants.ONE)){
+                        t.setJiuyiInfo("澶栭儴灏卞尰");
+                    }else{
+                        t.setJiuyiInfo("闈炲閮ㄥ氨鍖�");
+                        if(Constants.equalsInteger(model.getIsYiwushi(),Constants.ONE)){
+                            t.setJiuyiInfo(t.getJiuyiInfo() + "-鍖诲姟瀹�");
+                        }else{
+                            t.setJiuyiInfo(t.getJiuyiInfo() + "-闈炲尰鍔″");
+                            if(Constants.equalsInteger(model.getIsHurted(),Constants.ONE)){
+                                t.setJiuyiInfo(t.getJiuyiInfo() + "-鍙椾激");
+                            }else{
+                                t.setJiuyiInfo(t.getJiuyiInfo() + "-鏈彈浼�");
+                            }
+                        }
+                    }
+                    t.setMemberNames("鏈汉");
+                    t.setMemberNames(t.getMemberNames()+"-"+StringUtils.defaultString(model.getMemberNames(),""));
+                    list.add(t);
+                }
+            }
+            ExcelExporter.build(WorkorderSheDto.class).export(list, "SHE浜嬩欢宸ュ崟鎶ヨ〃_"+ DateUtil.formatDate(new Date(),"yyyyMMddHHmmss"), response);
+        }else if(Constants.equalsInteger(pageWrap.getModel().getType(),Constants.ONE)){
+            List<Workorder> records = workorderService.findPage(pageWrap).getRecords();
+            List<WorkorderDcaDto> list = new ArrayList<>();
+            if(records!=null){
+                for(Workorder model : records){
+                    WorkorderDcaDto t = new WorkorderDcaDto();
+                    t.setIndex(index++);
+                    BeanUtils.copyProperties(model,t);
+                    list.add(t);
+                }
+            }
+            ExcelExporter.build(WorkorderDcaDto.class).export(list, "DCA浜嬩欢宸ュ崟鎻愪氦璁板綍鎶ヨ〃_"+ DateUtil.formatDate(new Date(),"yyyyMMddHHmmss"), response);
+          }else if(Constants.equalsInteger(pageWrap.getModel().getType(),Constants.TWO)){
+            List<Workorder> records = workorderService.findPage(pageWrap).getRecords();
+            List<WorkorderDcaChildDto> list = new ArrayList<>();
+            if(records!=null){
+                for(Workorder model : records){
+                    WorkorderDcaChildDto t = new WorkorderDcaChildDto();
+                    t.setIndex(index++);
+                    BeanUtils.copyProperties(model,t);
+                    list.add(t);
+                }
+            }
+            ExcelExporter.build(WorkorderDcaChildDto.class).export(list, "DCA浜嬩欢宸ュ崟鎶ヨ〃_"+ DateUtil.formatDate(new Date(),"yyyyMMddHHmmss"), response);
+        }else if(Constants.equalsInteger(pageWrap.getModel().getType(),Constants.THREE)){
+            List<Workorder> records = workorderService.findPage(pageWrap).getRecords();
+            List<WorkorderDbhDto> list = new ArrayList<>();
+            if(records!=null){
+                for(Workorder model : records){
+                    WorkorderDbhDto t = new WorkorderDbhDto();
+                    t.setIndex(index++);
+                    BeanUtils.copyProperties(model,t);
+                    list.add(t);
+                }
+            }
+            ExcelExporter.build(WorkorderDbhDto.class).export(list, "璺岀粖婊戜簨浠跺伐鍗曟姤琛╛"+ DateUtil.formatDate(new Date(),"yyyyMMddHHmmss"), response);
+        }else{
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/src/main/java/com/doumee/api/business/WorkorderLogController.java b/server/src/main/java/com/doumee/api/business/WorkorderLogController.java
index ea3c688..c50ed6d 100644
--- a/server/src/main/java/com/doumee/api/business/WorkorderLogController.java
+++ b/server/src/main/java/com/doumee/api/business/WorkorderLogController.java
@@ -15,9 +15,6 @@
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * @author 姹熻箘韫�
  * @since 2025/04/02 17:49
@@ -73,7 +70,7 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:workorderlog:exportExcel")
     public void exportExcel (@RequestBody PageWrap<WorkorderLog> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(WorkorderLog.class).exportData(workorderLogService.findPage(pageWrap).getRecords(), "宸ュ崟鎿嶄綔鍘嗗彶琛�", response);
+        ExcelExporter.build(WorkorderLog.class).export(workorderLogService.findPage(pageWrap).getRecords(), "宸ュ崟鎿嶄綔鍘嗗彶琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/src/main/java/com/doumee/api/system/SystemLoginLogController.java b/server/src/main/java/com/doumee/api/system/SystemLoginLogController.java
index f9034f5..bb09a75 100644
--- a/server/src/main/java/com/doumee/api/system/SystemLoginLogController.java
+++ b/server/src/main/java/com/doumee/api/system/SystemLoginLogController.java
@@ -39,6 +39,6 @@
     @ApiOperation("瀵煎嚭Excel")
     @RequiresPermissions("system:loginLog:query")
     public void export (@RequestBody PageWrap<QuerySystemLoginLogDTO> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(SystemLoginLog.class).exportData(systemLoginLogService.findPage(pageWrap).getRecords(), "鐧诲綍鏃ュ織", response);
+        ExcelExporter.build(SystemLoginLog.class).export(systemLoginLogService.findPage(pageWrap).getRecords(), "鐧诲綍鏃ュ織", response);
     }
 }
diff --git a/server/src/main/java/com/doumee/api/system/SystemTraceLogController.java b/server/src/main/java/com/doumee/api/system/SystemTraceLogController.java
index 79ac2d9..5998295 100644
--- a/server/src/main/java/com/doumee/api/system/SystemTraceLogController.java
+++ b/server/src/main/java/com/doumee/api/system/SystemTraceLogController.java
@@ -3,7 +3,6 @@
 import com.doumee.api.BaseController;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.model.ApiResponse;
-import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.system.dto.QuerySystemTraceLogDTO;
 import com.doumee.dao.system.model.SystemTraceLog;
@@ -39,6 +38,6 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("system:traceLog:query")
     public void exportExcel (@RequestBody PageWrap<QuerySystemTraceLogDTO> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(SystemTraceLog.class).exportData(systemTraceLogService.findPage(pageWrap).getRecords(), "鎿嶄綔鏃ュ織", response);
+        ExcelExporter.build(SystemTraceLog.class).export(systemTraceLogService.findPage(pageWrap).getRecords(), "鎿嶄綔鏃ュ織", response);
     }
 }
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/ExcelColumn.java b/server/src/main/java/com/doumee/core/annotation/excel/ExcelColumn.java
new file mode 100644
index 0000000..c0de11a
--- /dev/null
+++ b/server/src/main/java/com/doumee/core/annotation/excel/ExcelColumn.java
@@ -0,0 +1,115 @@
+package com.doumee.core.annotation.excel;
+
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+
+import java.lang.annotation.*;
+
+/**
+ * 鏍囪涓篍xcel鍒�
+ * @author Eva.Caesar Liu
+ * @date 2023/02/14 11:14
+ */
+@Inherited
+//@Target(ElementType.FIELD)
+@Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ExcelColumn {
+    /**
+     * 瀵煎嚭瀛楁鍚嶏紙榛樿璋冪敤褰撳墠瀛楁鐨勨�済et鈥濇柟娉曪紝濡傛寚瀹氬鍑哄瓧娈典负瀵硅薄锛岃濉啓鈥滃璞″悕.瀵硅薄灞炴�р�濓紝渚嬶細鈥渁rea.name鈥濄�佲�渙ffice.name鈥濓級
+     */
+    String value() default "";
+    /**
+     * 瀛楁绫诲瀷锛�0锛氬鍑哄鍏ワ紱1锛氫粎瀵煎嚭锛�2锛氫粎瀵煎叆锛�
+     */
+    int type() default 0;
+    /**
+     * 鍒楀悕
+     */
+    String name();
+
+    /**
+     * 鍒楀锛堝崟浣嶄负瀛楃锛夛紝-1鑷姩璁$畻
+     */
+    int width() default -1;
+
+    /**
+     * 鎺掑簭锛屽�艰秺灏忚秺闈犲墠锛�-1鎸夊瓧娈靛弽灏勯『搴忔帓搴�
+     */
+    int index() default -1;
+
+    /**
+     * 瀵归綈鏂瑰紡
+     */
+    HorizontalAlignment align() default HorizontalAlignment.LEFT;
+
+    /**
+     * 鍒楄儗鏅壊
+     */
+    IndexedColors backgroundColor() default IndexedColors.GREY_25_PERCENT;
+
+    /**
+     * 鍒楁暟鎹崟鍏冩牸鑳屾櫙鑹�
+     */
+    IndexedColors dataBackgroundColor() default IndexedColors.WHITE;
+
+    /**
+     * 瀛椾綋棰滆壊
+     */
+    IndexedColors color() default IndexedColors.BLACK;
+
+    /**
+     * 瀛椾綋澶у皬锛堝儚绱狅級
+     */
+    short fontSize() default 12;
+
+    /**
+     * 绮椾綋
+     */
+    boolean bold() default false;
+
+    /**
+     * 鏂滀綋
+     */
+    boolean italic() default false;
+
+    /**
+     * 鍊兼槧灏勶紝濡�0=濂�;1=鐢�
+     */
+    String valueMapping() default "";
+
+    /**
+     * 鏁版嵁鍓嶇紑
+     */
+    String prefix() default "";
+
+    /**
+     * 鏁版嵁鍚庣紑
+     */
+    String suffix() default "";
+
+    /**
+     * 鏃ユ湡鏍煎紡
+     */
+    String dateFormat() default "yyyy-MM-dd";
+
+    /**
+     * 鑷畾涔夋暟鎹鐞嗗櫒
+     */
+    Class handler() default ExcelDataHandlerAdapter.class;
+
+    /**
+     * 鑷畾涔夋暟鎹鐞嗗櫒鍙傛暟
+     */
+    String[] args() default {};
+
+    /**
+     * 鍙嶅皠绫诲瀷
+     */
+    Class<?> fieldType() default Class.class;
+
+    /**
+     * 瀛楁褰掑睘缁勶紙鏍规嵁鍒嗙粍瀵煎嚭瀵煎叆锛�
+     */
+    int[] groups() default {};
+}
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/ExcelDataConverterAdapter.java b/server/src/main/java/com/doumee/core/annotation/excel/ExcelDataHandlerAdapter.java
similarity index 62%
rename from server/src/main/java/com/doumee/core/annotation/excel/ExcelDataConverterAdapter.java
rename to server/src/main/java/com/doumee/core/annotation/excel/ExcelDataHandlerAdapter.java
index 8d666a4..33a153b 100644
--- a/server/src/main/java/com/doumee/core/annotation/excel/ExcelDataConverterAdapter.java
+++ b/server/src/main/java/com/doumee/core/annotation/excel/ExcelDataHandlerAdapter.java
@@ -2,16 +2,16 @@
 
 /**
  * Excel鏁版嵁鏍煎紡澶勭悊閫傞厤鍣�
- * @author  dm
- * @since 2025/03/31 16:44
+ * @author Eva.Caesar Liu
+ * @date 2023/02/14 11:14
  */
-public interface ExcelDataConverterAdapter {
+public interface ExcelDataHandlerAdapter {
 
     /**
      * 鏍煎紡鍖�
-     *
      * @param args 鍙傛暟闆嗗悎锛岀涓�涓弬鏁颁负鍗曞厓鏍兼暟鎹�
+     *
      * @return String
      */
-    Object convert(Object... args);
+    Object format (Object... args);
 }
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/ExcelExportColumn.java b/server/src/main/java/com/doumee/core/annotation/excel/ExcelExportColumn.java
deleted file mode 100644
index 1a6ac31..0000000
--- a/server/src/main/java/com/doumee/core/annotation/excel/ExcelExportColumn.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package com.doumee.core.annotation.excel;
-
-import org.apache.poi.ss.usermodel.HorizontalAlignment;
-import org.apache.poi.ss.usermodel.IndexedColors;
-
-import java.lang.annotation.*;
-
-/**
- * 鏍囪涓篍xcel瀵煎嚭鍒�
- * @author  dm
- * @since 2025/03/31 16:44
- */
-@Inherited
-@Target(ElementType.FIELD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ExcelExportColumn {
-
-    /**
-     * 鍒楀悕
-     */
-    String name();
-
-    /**
-     * 鍒楀锛堝崟浣嶄负瀛楃锛夛紝-1鎸夊瓧娈靛弽灏勯『搴忔帓搴�
-     */
-    int width() default -1;
-
-    /**
-     * 鎺掑簭锛屽�艰秺灏忚秺闈犲墠锛�-1鎸夊瓧娈靛弽灏勯『搴忔帓搴�
-     */
-    int index() default -1;
-
-    /**
-     * 瀵归綈鏂瑰紡
-     */
-    HorizontalAlignment align() default HorizontalAlignment.LEFT;
-
-    /**
-     * 鍒楀ご鑳屾櫙鑹�
-     */
-    IndexedColors backgroundColor() default IndexedColors.GREY_25_PERCENT;
-
-    /**
-     * 鏁版嵁鍗曞厓鏍肩殑鑳屾櫙鑹�
-     */
-    IndexedColors dataBackgroundColor() default IndexedColors.WHITE;
-
-    /**
-     * 瀛椾綋棰滆壊
-     */
-    IndexedColors color () default IndexedColors.BLACK;
-
-    /**
-     * 瀛椾綋澶у皬锛堝儚绱狅級
-     */
-    short fontSize () default 12;
-
-    /**
-     * 鏄惁鍔犵矖
-     */
-    boolean bold () default false;
-
-    /**
-     * 鏄惁鍊炬枩
-     */
-    boolean italic () default false;
-
-    /**
-     * 鍊兼槧灏勶紝濡�0=濂�;1=鐢�
-     */
-    String valueMapping() default "";
-
-    /**
-     * 鏁版嵁鍓嶇紑
-     */
-    String prefix() default "";
-
-    /**
-     * 鏁版嵁鍚庣紑
-     */
-    String suffix() default "";
-
-    /**
-     * 鏃ユ湡鏍煎紡锛屽彧鏈夋暟鎹负java.util.Date鏃舵墠鐢熸晥
-     */
-    String dateFormat() default "yyyy-MM-dd";
-
-    /**
-     * 鏁版嵁杞崲鍣�
-     */
-    Class<? extends ExcelDataConverterAdapter> converter() default ExcelDataConverterAdapter.class;
-
-    /**
-     * 鏁版嵁杞崲鍣ㄥ弬鏁�
-     */
-    String[] args() default {};
-
-}
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java b/server/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
index dd72cdc..477d2fd 100644
--- a/server/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
+++ b/server/src/main/java/com/doumee/core/annotation/excel/ExcelExporter.java
@@ -5,6 +5,7 @@
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.springframework.core.annotation.AnnotationConfigurationException;
 
@@ -14,14 +15,14 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
+import java.nio.charset.Charset;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
  * Excel瀵煎嚭瀹炵幇
- * @author  dm
- * @since 2025/03/31 16:44
+ * @author Eva.Caesar Liu
+ * @date 2023/02/14 11:14
  */
 @Data
 public class ExcelExporter<T> {
@@ -29,12 +30,12 @@
     private static final String DEFAULT_SHEET_NAME = "Sheet1";
 
     private Class<T> modelClass;
+    private static int maxrows = 50000;
 
     private ExcelExporter(){}
 
     /**
      * 鏋勯�犲櫒
-     *
      * @param modelClass 瀹炰綋Class瀵硅薄
      */
     public static <T> ExcelExporter<T> build(Class<T> modelClass) {
@@ -42,22 +43,26 @@
         excelExporter.setModelClass(modelClass);
         return excelExporter;
     }
-
     /**
      * 瀵煎嚭鍒版寚瀹氳緭鍑烘祦
-     *
      * @param data 鏁版嵁
      * @param sheetName Sheet鍚嶇О
-     * @param os 杈撳嚭娴�
      */
-    public void exportData(List<T> data, String sheetName, OutputStream os) {
+    public void exportWithFirstAndEnd (List<T> data, String sheetName,String first,String end, OutputStream os) {
         SXSSFWorkbook sxssfWorkbook;
         try {
             sxssfWorkbook = new SXSSFWorkbook();
             Sheet sheet = sxssfWorkbook.createSheet(sheetName);
             // 鍒涘缓鍒楀ご
-            sheet.createFreezePane(0, 1);
-            Row header = sheet.createRow(0);
+            sheet.createFreezePane(0, 2);
+            sheet.addMergedRegion(new CellRangeAddress(0   ,0,0,this.getColumns().size()-1));
+            Row title = sheet.createRow(0);
+            title.setHeight((short) 1000);
+            Cell c = title.createCell(0);
+            c.setCellValue(first);
+            configFirstCell(sxssfWorkbook,c);
+
+            Row header = sheet.createRow(1);
             List<ColumnInfo> columns = this.getColumns();
             for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
                 ColumnInfo column = columns.get(columnIndex);
@@ -72,17 +77,27 @@
                 // 璁剧疆鍒楀ご鍗曞厓鏍�
                 configHeaderCell(sxssfWorkbook, cell, column.columnConfig);
             }
+            List<CellStyle> styleList = new ArrayList<>();
+            for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
+                ColumnInfo column = columns.get(columnIndex);
+                styleList.add( configDataCell(sxssfWorkbook,   column.columnConfig));
+            }
             // 鍒涘缓鏁版嵁璁板綍
             for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
-                Row row = sheet.createRow(rowIndex + 1);
+                Row row = sheet.createRow(rowIndex + 2);
                 for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
                     ColumnInfo column = columns.get(columnIndex);
                     Cell cell = row.createCell(columnIndex);
                     cell.setCellValue(getCellData(column, data.get(rowIndex)));
-                    // 璁剧疆鏁版嵁鍗曞厓鏍�
-                    configDataCell(sxssfWorkbook, cell, column.columnConfig);
+                    cell.setCellStyle(styleList.get(columnIndex));
                 }
             }
+            sheet.addMergedRegion(new CellRangeAddress(data.size()+2   ,data.size()+2,0,this.getColumns().size()-1));
+            Row endRow = sheet.createRow(data.size()+2);
+//            endRow.setHeight((short) 600);
+            Cell c1 = endRow.createCell(0);
+            c1.setCellValue(end);
+            c1.setCellStyle(  configEndCell(sxssfWorkbook));
             sxssfWorkbook.write(os);
             os.close();
         } catch (Exception e) {
@@ -99,21 +114,117 @@
     }
 
     /**
+     * 瀵煎嚭鍒版寚瀹氳緭鍑烘祦
+     * @param data 鏁版嵁
+     * @param sheetName Sheet鍚嶇О
+     * @param os 杈撳嚭娴�
+     */
+    public void export (List<T> data, String sheetName, OutputStream os) {
+        SXSSFWorkbook sxssfWorkbook;
+        try {
+            sxssfWorkbook = new SXSSFWorkbook();
+            int totalSheet =1;
+            if( data!=null && data.size()>0){
+                totalSheet = data.size()/maxrows;
+                if(data.size()%maxrows !=0){
+                    totalSheet += 1;
+                }
+            }
+            for (int i = 0; i < totalSheet; i++) {
+                List<T> list = null;
+                if(data.size() < maxrows * (i+1)) {
+                    list = data.subList(maxrows*i,data.size());
+                }else{
+                    list = data.subList(maxrows*i,maxrows*(i+1));
+                }
+                createSheetDataBiz(list,"銆�"+(i+1)+"銆�"+sheetName,sxssfWorkbook);
+            }
+            sxssfWorkbook.write(os);
+            os.close();
+        } catch (Exception e) {
+            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+        } finally {
+            if (os != null) {
+                try {
+                    os.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    private void createSheetDataBiz(List<T> data, String sheetName, SXSSFWorkbook sxssfWorkbook) throws Exception{
+        Sheet sheet = sxssfWorkbook.createSheet(sheetName);
+        // 鍒涘缓鍒楀ご
+        sheet.createFreezePane(0, 1);
+        Row header = sheet.createRow(0);
+        List<ColumnInfo> columns = this.getColumns();
+        for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
+            ColumnInfo column = columns.get(columnIndex);
+            Cell cell = header.createCell(columnIndex);
+            cell.setCellValue(column.columnConfig.name());
+            // 鍒楀璁剧疆
+            if (column.columnConfig.width() == -1) {
+                sheet.setColumnWidth(columnIndex, column.columnConfig.name().length() * 2 * 256);
+            } else {
+                sheet.setColumnWidth(columnIndex, column.columnConfig.width() * 2 * 256);
+            }
+            // 璁剧疆鍒楀ご鍗曞厓鏍�
+            configHeaderCell(sxssfWorkbook, cell, column.columnConfig);
+        }
+        List<CellStyle> styleList = new ArrayList<>();
+        for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
+            ColumnInfo column = columns.get(columnIndex);
+            styleList.add( configDataCell(sxssfWorkbook,   column.columnConfig));
+        }
+        // 鍒涘缓鏁版嵁璁板綍
+        for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
+            Row row = sheet.createRow(rowIndex + 1);
+            for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
+                ColumnInfo column = columns.get(columnIndex);
+                Cell cell = row.createCell(columnIndex);
+                cell.setCellValue(getCellData(column, data.get(rowIndex)));
+                // 璁剧疆鏁版嵁鍗曞厓鏍兼牱寮�
+                cell.setCellStyle(styleList.get(columnIndex));
+            }
+        }
+    }
+
+    /**
      * 瀵煎嚭鑷冲搷搴旀祦
-     *
      * @param data 鏁版嵁
      * @param fileName Excel鏂囦欢鍚�
      * @param sheetName Sheet鍚嶇О
      * @param response HttpServletResponse瀵硅薄
      */
-    public void exportData(List<T> data, String fileName, String sheetName, HttpServletResponse response) {
+    public void export (List<T> data, String fileName, String sheetName, HttpServletResponse response) {
         try {
-            String encodeFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString()) + ".xlsx";
+            String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx";
             response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
             response.setContentType("application/octet-stream");
             response.setHeader("doumee-opera-type", "download");
             response.setHeader("doumee-download-filename", encodeFileName);
-            this.exportData(data, sheetName, response.getOutputStream());
+            this.export(data, sheetName, response.getOutputStream());
+        } catch (IOException e) {
+            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+        }
+    }
+    /**
+     * 瀵煎嚭鑷冲搷搴旀祦
+     * @param data 鏁版嵁
+     * @param fileName Excel鏂囦欢鍚�
+     * @param sheetName Sheet鍚嶇О
+     * @param response HttpServletResponse瀵硅薄
+     */
+    public void exportWithFirstAndEnd (List<T> data, String fileName, String sheetName, String first,String end ,HttpServletResponse response) {
+        try {
+            String encodeFileName = URLEncoder.encode(fileName, Charset.forName("UTF-8").toString()) + ".xlsx";
+            response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
+            response.setContentType("application/octet-stream");
+            response.setHeader("doumee-opera-type", "download");
+            response.setHeader("doumee-download-filename", encodeFileName);
+            this.exportWithFirstAndEnd(data, sheetName,first,end, response.getOutputStream());
         } catch (IOException e) {
             throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
         }
@@ -121,16 +232,25 @@
 
     /**
      * 瀵煎嚭鑷冲搷搴旀祦
-     *
      * @param data 鏁版嵁
      * @param fileName Excel鏂囦欢鍚�
      * @param response HttpServletResponse瀵硅薄
      */
-    public void exportData(List<T> data, String fileName, HttpServletResponse response) {
-        this.exportData(data, fileName, DEFAULT_SHEET_NAME, response);
+    public void export (List<T> data, String fileName, HttpServletResponse response) {
+
+        this.export(data, fileName, DEFAULT_SHEET_NAME, response);
+    }
+    /**
+     * 瀵煎嚭鑷冲搷搴旀祦
+     * @param data 鏁版嵁
+     * @param fileName Excel鏂囦欢鍚�
+     * @param response HttpServletResponse瀵硅薄
+     */
+    public void exportWithFirstAndEnd (List<T> data, String fileName,String first,String end, HttpServletResponse response) {
+        this.exportWithFirstAndEnd(data, fileName, DEFAULT_SHEET_NAME, first,end,response);
     }
 
-    /**
+    /**O
      * 鑾峰彇鍒楅泦鍚�
      */
     private List<ColumnInfo> getColumns () {
@@ -138,12 +258,12 @@
         Field[] fields = modelClass.getDeclaredFields();
         int index = 0;
         for (Field field : fields) {
-            ExcelExportColumn excelColumn = field.getAnnotation(ExcelExportColumn.class);
+            ExcelColumn excelColumn = field.getAnnotation(ExcelColumn.class);
             if (excelColumn == null) {
                 continue;
             }
             if (sortedFields.get(excelColumn.index()) != null) {
-                throw new AnnotationConfigurationException("EVA: excel column contains the same index.");
+                throw new AnnotationConfigurationException("Excel column contains the same index.");
             }
             sortedFields.put(excelColumn.index() == -1 ? index : excelColumn.index(), new ColumnInfo(excelColumn, field));
             index++;
@@ -154,32 +274,35 @@
     /**
      * 閰嶇疆鏁版嵁鍗曞厓鏍�
      */
-    private void configDataCell (SXSSFWorkbook workbook, Cell cell, ExcelExportColumn columnConfig) {
-        CellStyle style = workbook.createCellStyle();
-        style.setAlignment(columnConfig.align());
-        style.setVerticalAlignment(VerticalAlignment.CENTER);
-        // 璁剧疆鑳屾櫙
-        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
-        style.setFillForegroundColor(columnConfig.dataBackgroundColor().getIndex());
-        // 瀛椾綋
-        Font font = workbook.createFont();
-        font.setFontHeightInPoints(columnConfig.fontSize());
-        // 瀛椾綋棰滆壊
-        font.setColor(columnConfig.color().getIndex());
-        // 绮椾綋
-        font.setBold(columnConfig.bold());
-        // 鏂滀綋
-        font.setItalic(columnConfig.italic());
-        style.setFont(font);
-        // 杈规
-        configCellBorder(style);
-        cell.setCellStyle(style);
+    private CellStyle configDataCell (SXSSFWorkbook workbook, ExcelColumn columnConfig) {
+            CellStyle  configDataCellStyle = workbook.createCellStyle();
+            configDataCellStyle.setAlignment(columnConfig.align());
+            configDataCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+            // 璁剧疆鑳屾櫙
+            configDataCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+            configDataCellStyle.setFillForegroundColor(columnConfig.dataBackgroundColor().getIndex());
+            // 瀛椾綋
+            Font font = workbook.createFont();
+            font.setFontHeightInPoints(columnConfig.fontSize());
+            // 瀛椾綋棰滆壊
+            font.setColor(columnConfig.color().getIndex());
+            // 绮椾綋
+            font.setBold(columnConfig.bold());
+            // 鏂滀綋
+            font.setItalic(columnConfig.italic());
+            configDataCellStyle.setFont(font);
+            // 杈规
+            configCellBorder(configDataCellStyle);
+            configDataCellStyle.setWrapText(true);
+
+        return configDataCellStyle;
+//        cell.setCellStyle(configDataCellStyle);
     }
 
     /**
      * 閰嶇疆鍒楀ご鍗曞厓鏍�
      */
-    private void configHeaderCell (SXSSFWorkbook workbook, Cell cell, ExcelExportColumn columnConfig) {
+    private void configHeaderCell (SXSSFWorkbook workbook, Cell cell, ExcelColumn columnConfig) {
         CellStyle style = workbook.createCellStyle();
         style.setAlignment(columnConfig.align());
         style.setVerticalAlignment(VerticalAlignment.CENTER);
@@ -193,6 +316,44 @@
         // 璁剧疆杈规
         configCellBorder(style);
         cell.setCellStyle(style);
+    }
+    /**
+     * 閰嶇疆鍒楀ご鍗曞厓鏍�
+     */
+    private void configFirstCell (SXSSFWorkbook workbook, Cell cell ) {
+        CellStyle style = workbook.createCellStyle();
+        style.setAlignment(HorizontalAlignment.CENTER);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        // 璁剧疆鑳屾櫙
+        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+        // 瀛椾綋
+        Font font = workbook.createFont();
+        font.setFontHeightInPoints((short)18);
+        style.setFont(font);
+        // 璁剧疆杈规
+        configCellBorder(style);
+        cell.setCellStyle(style);
+    }
+//    public static CellStyle configEndCellStyle =null;
+    /**
+     * 閰嶇疆鍒楀ご鍗曞厓鏍�
+     */
+    private CellStyle configEndCell (SXSSFWorkbook workbook ) {
+        CellStyle style = workbook.createCellStyle();
+        style.setAlignment(HorizontalAlignment.RIGHT);
+        style.setVerticalAlignment(VerticalAlignment.CENTER);
+        // 璁剧疆鑳屾櫙
+        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+        style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+        // 瀛椾綋
+        Font font = workbook.createFont();
+        font.setFontHeightInPoints((short)14);
+        style.setFont(font);
+        // 璁剧疆杈规
+        configCellBorder(style);
+        return style;
+
     }
 
     /**
@@ -221,19 +382,19 @@
         }
         String stringValue = value.toString();
         // 瀛樺湪鑷畾涔夋暟鎹鐞嗗櫒
-        if (!columnInfo.columnConfig.converter().equals(ExcelDataConverterAdapter.class)) {
+        if (!columnInfo.columnConfig.handler().equals(ExcelDataHandlerAdapter.class)) {
             try {
-                Object instance = columnInfo.columnConfig.converter().newInstance();
-                Method convertMethod = columnInfo.columnConfig.converter().getMethod("convert", Object[].class);
+                Object instance = columnInfo.columnConfig.handler().newInstance();
+                Method formatMethod = columnInfo.columnConfig.handler().getMethod("format", Object[].class);
                 List<Object> args = new ArrayList<>();
                 args.add(value);
                 for (String arg : columnInfo.columnConfig.args()) {
                     args.add(arg);
                 }
-                value = convertMethod.invoke(instance, new Object[]{args.toArray()});
+                value = formatMethod.invoke(instance, new Object[]{args.toArray()});
                 stringValue = value.toString();
             } catch (Exception e) {
-                throw new IllegalStateException("EVA: can not convert data by " + columnInfo.columnConfig.converter(), e);
+                throw new IllegalStateException("Can not format data by " + columnInfo.columnConfig.handler(), e);
             }
         }
         // 鏃ユ湡澶勭悊
@@ -258,17 +419,12 @@
         return stringValue;
     }
 
-    /**
-     * 鍒椾俊鎭�
-     */
     @Data
     @AllArgsConstructor
     private static class ColumnInfo {
 
-        // 鍒楅厤缃�
-        private ExcelExportColumn columnConfig;
+        private ExcelColumn columnConfig;
 
-        // 瀛楁淇℃伅
         private Field field;
     }
 
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/ExcelImportCallback.java b/server/src/main/java/com/doumee/core/annotation/excel/ExcelImportCallback.java
deleted file mode 100644
index 75ee333..0000000
--- a/server/src/main/java/com/doumee/core/annotation/excel/ExcelImportCallback.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.doumee.core.annotation.excel;
-
-import java.util.List;
-
-/**
- * 鏁版嵁瀵煎叆鍥炶皟
- * @author  dm
- * @since 2025/03/31 16:44
- */
-public interface ExcelImportCallback<T> {
-
-    /**
-     * 瀵煎叆鍥炶皟鏂规硶
-     *
-     * @param rows 鏁版嵁琛�
-     * @param sync 鏄惁鍚屾宸插瓨鍦ㄦ暟鎹�
-     * @return 鍚屾鎴愬姛鏁�
-     */
-    int callback(List<T> rows, boolean sync);
-}
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/ExcelImportColumn.java b/server/src/main/java/com/doumee/core/annotation/excel/ExcelImportColumn.java
deleted file mode 100644
index 2f4777c..0000000
--- a/server/src/main/java/com/doumee/core/annotation/excel/ExcelImportColumn.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.doumee.core.annotation.excel;
-
-import java.lang.annotation.*;
-
-/**
- * 鏍囪涓篍xcel瀵煎叆鍒�
- * @author  dm
- * @since 2025/03/31 16:44
- */
-@Inherited
-@Target(ElementType.FIELD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ExcelImportColumn {
-
-    /**
-     * 鎺掑簭锛屽�艰秺灏忚秺闈犲墠锛�-1鎸夊瓧娈靛弽灏勯『搴忔帓搴�
-     */
-    int index() default -1;
-
-    /**
-     * 鏁版嵁杞崲鍣�
-     */
-    Class<? extends ExcelDataConverterAdapter> converter() default ExcelDataConverterAdapter.class;
-
-    /**
-     * 鑷畾涔夋暟鎹鐞嗗櫒鍙傛暟
-     */
-    String[] args() default {};
-
-}
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/ExcelImporter.java b/server/src/main/java/com/doumee/core/annotation/excel/ExcelImporter.java
index ea4ee4d..f8f067c 100644
--- a/server/src/main/java/com/doumee/core/annotation/excel/ExcelImporter.java
+++ b/server/src/main/java/com/doumee/core/annotation/excel/ExcelImporter.java
@@ -1,212 +1,394 @@
 package com.doumee.core.annotation.excel;
 
-import com.doumee.core.constants.ResponseStatus;
-import com.doumee.core.exception.BusinessException;
-import lombok.AllArgsConstructor;
-import lombok.Data;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.core.annotation.AnnotationConfigurationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
+import java.util.*;
 
 /**
- * Excel瀵煎叆瀹炵幇
- * @author  dm
- * @since 2025/03/31 16:44
+ * 瀵煎叆Excel鏂囦欢锛堟敮鎸佲�淴LS鈥濆拰鈥淴LSX鈥濇牸寮忥級
  */
-public class ExcelImporter<T> {
+public class ExcelImporter {
 
-    private Class<T> modelClass;
-
-    private ExcelImporter () {}
+    private static Logger log = LoggerFactory.getLogger(ExcelImporter.class);
 
     /**
-     * 鏋勯�燛xcelImporter瀵硅薄
-     *
-     * @param modelClass 瀹炰綋Class瀵硅薄
-     * @return ExcelImporter瀹炰緥
+     * 宸ヤ綔钖勫璞�
      */
-    public static <T> ExcelImporter<T> build(Class<T> modelClass) {
-        ExcelImporter<T> excelImporter = new ExcelImporter<>();
-        excelImporter.modelClass = modelClass;
-        return excelImporter;
+    private Workbook wb;
+
+    /**
+     * 宸ヤ綔琛ㄥ璞�
+     */
+    private Sheet sheet;
+
+    /**
+     * 鏍囬琛屽彿
+     */
+    private int headerNum;
+    /**
+     * 鏍囬琛屽彿
+     */
+    private CellType changeType;
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     * @param--path 瀵煎叆鏂囦欢锛岃鍙栫涓�涓伐浣滆〃
+     * @param headerNum 鏍囬琛屽彿锛屾暟鎹鍙�=鏍囬琛屽彿+1
+     * @throws InvalidFormatException
+     * @throws IOException
+     */
+    public ExcelImporter(String fileName, int headerNum)
+        throws InvalidFormatException, IOException {
+        this(new File(fileName), headerNum);
     }
 
     /**
-     * 瀵煎叆鏁版嵁
-     *
-     * @param is 杈撳叆娴�
-     * @param callback 鍥炶皟
-     * @param sync 鏄惁鍚屾宸插瓨鍦ㄦ暟鎹�
-     * @return 瀵煎叆鎴愬姛鏁�
+     * 鏋勯�犲嚱鏁�
+     * @param--path 瀵煎叆鏂囦欢瀵硅薄锛岃鍙栫涓�涓伐浣滆〃
+     * @param headerNum 鏍囬琛屽彿锛屾暟鎹鍙�=鏍囬琛屽彿+1   (eg: 1)
+     * @throws InvalidFormatException
+     * @throws IOException
      */
-    public int importData (InputStream is, ExcelImportCallback<T> callback, boolean sync) {
-        return this.importData(is, 0, callback, sync);
+    public ExcelImporter(File file, int headerNum)
+        throws InvalidFormatException, IOException {
+        this(file, headerNum, 0);
     }
 
     /**
-     * 瀵煎叆鏁版嵁
-     *
-     * @param is 杈撳叆娴�
-     * @param sheetIndex sheet鍧愭爣
-     * @param callback 鍥炶皟
-     * @param sync 鏄惁鍚屾宸插瓨鍦ㄦ暟鎹�
-     * @return 瀵煎叆鎴愬姛鏁�
+     * 鏋勯�犲嚱鏁�
+     * @param--path 瀵煎叆鏂囦欢
+     * @param headerNum 鏍囬琛屽彿锛屾暟鎹鍙�=鏍囬琛屽彿+1
+     * @param sheetIndex 宸ヤ綔琛ㄧ紪鍙�
+     * @throws InvalidFormatException
+     * @throws IOException
      */
-    public int importData (InputStream is, int sheetIndex, ExcelImportCallback<T> callback, boolean sync) {
-        try {
-            Workbook workbook = new XSSFWorkbook(is);
-            Sheet sheet = workbook.getSheetAt(sheetIndex);
-            // 鑾峰彇鍒椾俊鎭�
-            List<ColumnInfo> columns = this.getColumns();
-            List<T> data = new ArrayList<>();
-            // 寰幆鑾峰彇excel琛岃褰�
-            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
-                // 鏋勯�犳暟鎹疄渚嬪璞�
-                T instance = modelClass.newInstance();
-                Row row = sheet.getRow(i);
-                // 寰幆鑾峰彇鍗曞厓鏍间俊鎭�
-                for (int columnIndex = 0; columnIndex < columns.size(); columnIndex++) {
-                    Cell cell = row.getCell(columnIndex);
-                    if (cell == null) {
-                        continue;
-                    }
-                    if (StringUtils.isBlank(cell.toString())) {
-                        continue;
-                    }
-                    ColumnInfo columnInfo = columns.get(columnIndex);
-                    if (columnInfo == null) {
-                        break;
-                    }
-                    // 鍐欏叆瀵硅薄灞炴��
-                    columnInfo.getField().setAccessible(Boolean.TRUE);
-                    columnInfo.getField().set(instance, this.getCellValue(cell, columnInfo));
-                    columnInfo.getField().setAccessible(Boolean.FALSE);
-                }
-                // 濡傛灉鏄┖琛屽垯缁撴潫琛岃鍙�
-                if (this.isEmptyRow(instance)) {
-                    break;
-                }
-                data.add(instance);
-            }
-            // 鎵ц鍥炶皟鍑芥暟
-            return callback.callback(data, sync);
-        } catch (Exception e) {
-            throw new BusinessException(ResponseStatus.IMPORT_EXCEL_ERROR, e);
-        }  finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
+    public ExcelImporter(String fileName, int headerNum, int sheetIndex)
+        throws InvalidFormatException, IOException {
+        this(new File(fileName), headerNum, sheetIndex);
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     * @param--path 瀵煎叆鏂囦欢瀵硅薄
+     * @param headerNum 鏍囬琛屽彿锛屾暟鎹鍙�=鏍囬琛屽彿+1
+     * @param sheetIndex 宸ヤ綔琛ㄧ紪鍙�
+     * @throws InvalidFormatException
+     * @throws IOException
+     */
+    public ExcelImporter(File file, int headerNum, int sheetIndex)
+        throws InvalidFormatException, IOException {
+        this(file.getName(), new FileInputStream(file), headerNum, sheetIndex);
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁� (閲嶈)
+     * @param--file 瀵煎叆鏂囦欢瀵硅薄
+     * @param headerNum 鏍囬琛屽彿锛屾暟鎹鍙�=鏍囬琛屽彿+1
+     * @param sheetIndex 宸ヤ綔琛ㄧ紪鍙�
+     * @throws InvalidFormatException
+     * @throws IOException
+     */
+    public ExcelImporter(MultipartFile multipartFile, int headerNum, int sheetIndex)
+        throws InvalidFormatException, IOException {
+        this(multipartFile.getOriginalFilename(), multipartFile.getInputStream(), headerNum, sheetIndex);
+    }
+    /**
+     * 鏋勯�犲嚱鏁� (閲嶈)
+     * @param--file 瀵煎叆鏂囦欢瀵硅薄
+     * @param headerNum 鏍囬琛屽彿锛屾暟鎹鍙�=鏍囬琛屽彿+1
+     * @param sheetIndex 宸ヤ綔琛ㄧ紪鍙�
+     * @throws InvalidFormatException
+     * @throws IOException
+     */
+    public ExcelImporter(MultipartFile multipartFile, int headerNum, int sheetIndex, CellType cellType)
+        throws InvalidFormatException, IOException {
+        this(multipartFile.getOriginalFilename(), multipartFile.getInputStream(), headerNum, sheetIndex,cellType);
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁� 锛堬級
+     * @param--path 瀵煎叆鏂囦欢瀵硅薄
+     * @param headerNum 鏍囬琛屽彿锛屾暟鎹鍙�=鏍囬琛屽彿+1
+     * @param sheetIndex 宸ヤ綔琛ㄧ紪鍙� (eg: 0)
+     * @throws InvalidFormatException
+     * @throws IOException
+     */
+    public ExcelImporter(String fileName, InputStream in, int headerNum, int sheetIndex)
+        throws InvalidFormatException, IOException {
+        if (StringUtils.isBlank(fileName)){
+            throw new RuntimeException("瀵煎叆鏂囨。涓虹┖!");
+        }else if(fileName.toLowerCase().endsWith("xls")){
+            this.wb = new HSSFWorkbook(in);
+        }else if(fileName.toLowerCase().endsWith("xlsx")){
+            this.wb = new XSSFWorkbook(in);
+        }else{
+            throw new RuntimeException("鏂囨。鏍煎紡涓嶆纭�!");
         }
+        if (this.wb.getNumberOfSheets()<sheetIndex){
+            throw new RuntimeException("鏂囨。涓病鏈夊伐浣滆〃!");
+        }
+        this.sheet = this.wb.getSheetAt(sheetIndex);
+        this.headerNum = headerNum;
+        log.debug("Initialize success.");
+    }
+    public ExcelImporter(String fileName, InputStream in, int headerNum, int sheetIndex,CellType cellType)
+        throws InvalidFormatException, IOException {
+        if (StringUtils.isBlank(fileName)){
+            throw new RuntimeException("瀵煎叆鏂囨。涓虹┖!");
+        }else if(fileName.toLowerCase().endsWith("xls")){
+            this.wb = new HSSFWorkbook(in);
+        }else if(fileName.toLowerCase().endsWith("xlsx")){
+            this.wb = new XSSFWorkbook(in);
+        }else{
+            throw new RuntimeException("鏂囨。鏍煎紡涓嶆纭�!");
+        }
+        if (this.wb.getNumberOfSheets()<sheetIndex){
+            throw new RuntimeException("鏂囨。涓病鏈夊伐浣滆〃!");
+        }
+        this.sheet = this.wb.getSheetAt(sheetIndex);
+        this.headerNum = headerNum;
+        this.changeType = cellType;
+        log.debug("Initialize success.");
+    }
+
+
+
+    /**
+     * 鑾峰彇琛屽璞�
+     * @param rownum
+     * @return
+     */
+    public Row getRow(int rownum){
+        return this.sheet.getRow(rownum);
     }
 
     /**
-     * 鑾峰彇Cell鍊�
-     *
-     * @param cell 鍗曞厓鏍煎璞�
-     * @param columnInfo 鍒楅厤缃�
+     * 鑾峰彇鏁版嵁琛屽彿
+     * @return
+     */
+    public int getDataRowNum(){
+        return headerNum+1;
+    }
+
+    /**
+     * 鑾峰彇鏈�鍚庝竴涓暟鎹鍙�
+     * @return
+     */
+    public int getLastDataRowNum(){
+        return this.sheet.getLastRowNum()+headerNum;
+    }
+
+    /**
+     * 鑾峰彇鏈�鍚庝竴涓垪鍙�
+     * @return
+     */
+    public int getLastCellNum(){
+        return this.getRow(headerNum).getLastCellNum();
+    }
+
+    /**
+     * 鑾峰彇鍗曞厓鏍煎��
+     * @param row 鑾峰彇鐨勮
+     * @param column 鑾峰彇鍗曞厓鏍煎垪鍙�
      * @return 鍗曞厓鏍煎��
      */
-    private Object getCellValue (Cell cell, ColumnInfo columnInfo) {
-        CellType cellType = cell.getCellType();
-        Type fieldType = columnInfo.getField().getGenericType();
-        Object value = null;
-        if (fieldType.getTypeName().equals("java.util.Date")) {
-            value = cell.getDateCellValue();
-        } else if (cellType.equals(CellType.NUMERIC)) {
-            value = cell.getNumericCellValue();
-        } else if (cellType.equals(CellType.STRING)) {
-            value = cell.getStringCellValue();
-        } else if (cellType.equals(CellType.BOOLEAN)) {
-            value = cell.getBooleanCellValue();
-        } else if (cellType.equals(CellType.BLANK)) {
-            value = "";
-        } else if (cellType.equals(CellType.ERROR)) {
-            value = cell.getErrorCellValue();
-        }
-        // 璋冪敤杞崲鍣�
-        if (!columnInfo.columnConfig.converter().equals(ExcelDataConverterAdapter.class)) {
-            try {
-                Object instance = columnInfo.columnConfig.converter().newInstance();
-                Method convertMethod = columnInfo.columnConfig.converter().getMethod("convert", Object[].class);
-                List<Object> args = new ArrayList<>();
-                args.add(value);
-                for (String arg : columnInfo.columnConfig.args()) {
-                    args.add(arg);
+    public Object getCellValue(Row row, int column){
+        Object val = "";
+        try{
+            Cell cell = row.getCell(column);
+            if (cell != null){
+                if (cell.getCellType() == CellType.NUMERIC){
+                    cell.setCellType(CellType.STRING); // 纭繚鍗曞厓鏍肩被鍨嬩负瀛楃涓�
+                    val = cell.getStringCellValue();
+                }else if (cell.getCellType() == CellType.STRING){
+                    val = cell.getStringCellValue();
+                }else if (cell.getCellType() == CellType.FORMULA){
+                    val = cell.getCellFormula();
+                }else if (cell.getCellType() == CellType.BOOLEAN){
+                    val = cell.getBooleanCellValue();
+                }else if (cell.getCellType() == CellType.ERROR){
+                    val = cell.getErrorCellValue();
                 }
-                value = convertMethod.invoke(instance, new Object[]{args.toArray()});
-            } catch (Exception e) {
-                throw new IllegalStateException("EVA: can not convert data by " + columnInfo.columnConfig.converter(), e);
             }
+        }catch (Exception e) {
+            return val;
         }
-        return value;
+        return val;
     }
 
     /**
-     * 鑾峰彇鍒楅泦鍚�
+     * 鑾峰彇瀵煎叆鏁版嵁鍒楄〃
+     * @param cls 瀵煎叆瀵硅薄绫诲瀷
+     * @param groups 瀵煎叆鍒嗙粍  鍙负绌�
      */
-    private List<ColumnInfo> getColumns () {
-        Map<Integer, ColumnInfo> sortedFields = new TreeMap<>();
-        Field[] fields = modelClass.getDeclaredFields();
-        int index = 0;
-        for (Field field : fields) {
-            ExcelImportColumn excelColumn = field.getAnnotation(ExcelImportColumn.class);
-            if (excelColumn == null) {
+    public <E> List<E> getDataList(Class<E> cls, int... groups) throws InstantiationException, IllegalAccessException{
+        List<Object[]> annotationList = new ArrayList<>();
+        // Get annotation field
+        Field[] fs = cls.getDeclaredFields();
+        for (Field f : fs){
+            ExcelColumn ef = f.getAnnotation(ExcelColumn.class);
+            if (ef != null && (ef.type()==0 || ef.type()==2)){
+                if (groups!=null && groups.length>0){
+                    boolean inGroup = false;
+                    for (int g : groups){
+                        if (inGroup){
+                            break;
+                        }
+                        for (int efg : ef.groups()){
+                            if (g == efg){
+                                inGroup = true;
+                                annotationList.add(new Object[]{ef, f});
+                                break;
+                            }
+                        }
+                    }
+                }else{
+                    annotationList.add(new Object[]{ef, f});
+                }
+            }
+        }
+        // Get annotation method
+        Method[] ms = cls.getDeclaredMethods();
+        for (Method m : ms){
+            ExcelColumn ef = m.getAnnotation(ExcelColumn.class);
+            if (ef != null && (ef.type()==0 || ef.type()==2)){
+                if (groups!=null && groups.length>0){
+                    boolean inGroup = false;
+                    for (int g : groups){
+                        if (inGroup){
+                            break;
+                        }
+                        for (int efg : ef.groups()){
+                            if (g == efg){
+                                inGroup = true;
+                                annotationList.add(new Object[]{ef, m});
+                                break;
+                            }
+                        }
+                    }
+                }else{
+                    annotationList.add(new Object[]{ef, m});
+                }
+            }
+        }
+        // Field sorting
+        Collections.sort(annotationList, (o1, o2) -> {
+            int index1 =((ExcelColumn)o1[0]).index(), index2=((ExcelColumn)o2[0]).index();
+            if(index1 == -1){
+                index1  = annotationList.size()+99999;
+            }
+            if(index2 == -1){
+                index2  = annotationList.size()+99999;
+            }
+            return new Integer(index1).compareTo(new Integer(index2));
+        });
+        //log.debug("Import column count:"+annotationList.size());
+        // Get excel data
+        List<E> dataList = new ArrayList<>();
+        System.out.println("璧峰鏁版嵁琛�:"+getDataRowNum());
+        System.out.println("缁撴潫鏁版嵁琛�:"+getLastDataRowNum());
+        for (int i = this.getDataRowNum(); i <= this.getLastDataRowNum(); i++) {
+            E e = (E)cls.newInstance();
+            int column = 0;
+            Row row = this.getRow(i);
+            if (Objects.isNull(row)){
                 continue;
             }
-            if (sortedFields.get(excelColumn.index()) != null) {
-                throw new AnnotationConfigurationException("EVA: Excel column contains the same index.");
+            StringBuilder sb = new StringBuilder();
+            for (Object[] os : annotationList){
+                Object val = this.getCellValue(row, column++);
+                if (val != null){
+                    ExcelColumn ef = (ExcelColumn)os[0];
+                    // Get param type and type cast
+                    Class<?> valType = Class.class;
+                    if (os[1] instanceof Field){
+                        valType = ((Field)os[1]).getType();
+                    }else if(os[1] instanceof Method){
+                        Method method = ((Method)os[1]);
+                        if ("get".equals(method.getName().substring(0, 3))){
+                            valType = method.getReturnType();
+                        }else if("set".equals(method.getName().substring(0, 3))){
+                            valType = ((Method)os[1]).getParameterTypes()[0];
+                        }
+                    }
+                    //log.debug("Import value type: ["+i+","+column+"] " + valType);
+                    try {
+                        if (valType == String.class){
+                            String s = String.valueOf(val.toString());
+                            if(StringUtils.endsWith(s, ".0")){
+                                val = StringUtils.substringBefore(s, ".0");
+                            }else{
+                                val = String.valueOf(val.toString()).trim();
+                            }
+                        }
+                        else if (valType == Integer.class){
+                            val = Double.valueOf(val.toString()).intValue();
+                        }else if (valType == Long.class){
+                            val = Double.valueOf(val.toString()).longValue();
+                        }else if (valType == Double.class){
+                            val = Double.valueOf(val.toString());
+                        }else if (valType == Float.class){
+                            val = Float.valueOf(val.toString());
+                        }else if (valType == Date.class){
+                            val = DateUtil.getJavaDate((Double)val);
+                        }else{
+                            if (ef.fieldType() != Class.class){
+                                val = ef.fieldType().getMethod("getValue", String.class).invoke(null, val.toString());
+                            }else{
+                                val = Class.forName(this.getClass().getName().replaceAll(this.getClass().getSimpleName(),
+                                    "fieldtype."+valType.getSimpleName()+"Type")).getMethod("getValue", String.class).invoke(null, val.toString());
+                            }
+                        }
+                    } catch (Exception ex) {
+                        log.info("Get cell value ["+i+","+column+"] error: " + ex.toString());
+                        val = null;
+                    }
+                    // set entity value
+                    if (os[1] instanceof Field){
+                        Reflections.invokeSetter(e, ((Field)os[1]).getName(), val);
+                    }else if (os[1] instanceof Method){
+                        String mthodName = ((Method)os[1]).getName();
+                        if ("get".equals(mthodName.substring(0, 3))){
+                            mthodName = "set"+StringUtils.substringAfter(mthodName, "get");
+                        }
+                        Reflections.invokeMethod(e, mthodName, new Class[] {valType}, new Object[] {val});
+                    }
+                }
+                sb.append(val+", ");
             }
-            sortedFields.put(excelColumn.index() == -1 ? index : excelColumn.index(), new ColumnInfo(excelColumn, field));
-            index++;
+            dataList.add(e);
+            log.debug("Read success: ["+i+"] "+sb.toString());
         }
-        return new ArrayList<>(sortedFields.values());
+        return dataList;
     }
 
     /**
-     * 鍒ゆ柇鏄惁涓虹┖琛�
-     *
-     * @param row 琛屽璞�
-     * @return Boolean
+     *  鍏抽棴娴� 娓呯悊涓存椂鏂囦欢
      */
-    private boolean isEmptyRow(Object row) throws IllegalAccessException{
-        Field[] fields = row.getClass().getDeclaredFields();
-        for (Field field : fields) {
-            field.setAccessible(Boolean.TRUE);
-            if (field.get(row) != null) {
-                field.setAccessible(Boolean.FALSE);
-                return Boolean.FALSE;
+    public void dispose(){
+        try {
+            if(wb!=null){
+                wb.close();
             }
-            field.setAccessible(Boolean.FALSE);
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
         }
-        return Boolean.TRUE;
+
     }
 
-    /**
-     * 鍒椾俊鎭�
-     */
-    @Data
-    @AllArgsConstructor
-    private static class ColumnInfo {
 
-        // 鍒楅厤缃�
-        private ExcelImportColumn columnConfig;
-
-        // 瀛楁淇℃伅
-        private Field field;
-    }
-}
+}
\ No newline at end of file
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/Reflections.java b/server/src/main/java/com/doumee/core/annotation/excel/Reflections.java
new file mode 100644
index 0000000..044dc97
--- /dev/null
+++ b/server/src/main/java/com/doumee/core/annotation/excel/Reflections.java
@@ -0,0 +1,294 @@
+package com.doumee.core.annotation.excel;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.Validate;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.Assert;
+
+import java.lang.reflect.*;
+
+/**
+ * 鍙嶅皠宸ュ叿绫�.
+ * 鎻愪緵璋冪敤getter/setter鏂规硶, 璁块棶绉佹湁鍙橀噺, 璋冪敤绉佹湁鏂规硶, 鑾峰彇娉涘瀷绫诲瀷Class, 琚獳OP杩囩殑鐪熷疄绫荤瓑宸ュ叿鍑芥暟.
+ */
+@SuppressWarnings("rawtypes")
+public class Reflections {
+
+    private static final String SETTER_PREFIX = "set";
+
+    private static final String GETTER_PREFIX = "get";
+
+    private static final String CGLIB_CLASS_SEPARATOR = "$$";
+
+    private static Logger logger = LoggerFactory.getLogger(Reflections.class);
+
+    /**
+     * 璋冪敤Getter鏂规硶.
+     * 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚�.鏂规硶
+     */
+    public static Object invokeGetter(Object obj, String propertyName) {
+        Object object = obj;
+        for (String name : StringUtils.split(propertyName, ".")){
+            String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name);
+            object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {});
+        }
+        return object;
+    }
+
+    /**
+     * 璋冪敤Setter鏂规硶, 浠呭尮閰嶆柟娉曞悕銆�
+     * 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚�.鏂规硶
+     */
+    public static void invokeSetter(Object obj, String propertyName, Object value) {
+        Object object = obj;
+        String[] names = StringUtils.split(propertyName, ".");
+        for (int i=0; i<names.length; i++){
+            if(i<names.length-1){
+                String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]);
+                object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {});
+            }else{
+                String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]);
+                invokeMethodByName(object, setterMethodName, new Object[] { value });
+            }
+        }
+    }
+
+    /**
+     * 鐩存帴璇诲彇瀵硅薄灞炴�у��, 鏃犺private/protected淇グ绗�, 涓嶇粡杩噂etter鍑芥暟.
+     */
+    public static Object getFieldValue(final Object obj, final String fieldName) {
+        Field field = getAccessibleField(obj, fieldName);
+
+        if (field == null) {
+            throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]");
+        }
+
+        Object result = null;
+        try {
+            result = field.get(obj);
+        } catch (IllegalAccessException e) {
+            logger.error("闈炴硶璁块棶鐨勫紓甯竰}", e.getMessage());
+        }
+        return result;
+    }
+
+    /**
+     * 鐩存帴璁剧疆瀵硅薄灞炴�у��, 鏃犺private/protected淇グ绗�, 涓嶇粡杩噑etter鍑芥暟.
+     */
+    public static void setFieldValue(final Object obj, final String fieldName, final Object value) {
+        Field field = getAccessibleField(obj, fieldName);
+
+        if (field == null) {
+            throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + obj + "]");
+        }
+
+        try {
+            field.set(obj, value);
+        } catch (IllegalAccessException e) {
+            logger.error("闈炴硶璁块棶鐨勫紓甯�:{}", e.getMessage());
+        }
+    }
+
+    /**
+     * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗�.
+     * 鐢ㄤ簬涓�娆℃�ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethod()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢�.
+     * 鍚屾椂鍖归厤鏂规硶鍚�+鍙傛暟绫诲瀷锛�
+     */
+    public static Object invokeMethod(final Object obj, final String methodName, final Class<?>[] parameterTypes,
+        final Object[] args) {
+        Method method = getAccessibleMethod(obj, methodName, parameterTypes);
+        if (method == null) {
+            throw new IllegalArgumentException("Could not find method [" + methodName + "] on target [" + obj + "]");
+        }
+
+        try {
+            return method.invoke(obj, args);
+        } catch (Exception e) {
+            throw convertReflectionExceptionToUnchecked(e);
+        }
+    }
+
+    /**
+     * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗︼紝
+     * 鐢ㄤ簬涓�娆℃�ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethodByName()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢�.
+     * 鍙尮閰嶅嚱鏁板悕锛屽鏋滄湁澶氫釜鍚屽悕鍑芥暟璋冪敤绗竴涓��
+     */
+    public static Object invokeMethodByName(final Object obj, final String methodName, final Object[] args) {
+        Method method = getAccessibleMethodByName(obj, methodName);
+        if (method == null) {
+            throw new IllegalArgumentException("Could not find method [" + methodName + "] on target [" + obj + "]");
+        }
+
+        try {
+            return method.invoke(obj, args);
+        } catch (Exception e) {
+            throw convertReflectionExceptionToUnchecked(e);
+        }
+    }
+
+    /**
+     * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredField, 骞跺己鍒惰缃负鍙闂�.
+     *
+     * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒�, 杩斿洖null.
+     */
+    public static Field getAccessibleField(final Object obj, final String fieldName) {
+        Validate.notNull(obj, "object can't be null");
+        Validate.notBlank(fieldName, "fieldName can't be blank");
+        for (Class<?> superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) {
+            try {
+                Field field = superClass.getDeclaredField(fieldName);
+                makeAccessible(field);
+                return field;
+            } catch (NoSuchFieldException e) {//NOSONAR
+                // Field涓嶅湪褰撳墠绫诲畾涔�,缁х画鍚戜笂杞瀷
+                continue;// new add
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂�.
+     * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒�, 杩斿洖null.
+     * 鍖归厤鍑芥暟鍚�+鍙傛暟绫诲瀷銆�
+     *
+     * 鐢ㄤ簬鏂规硶闇�瑕佽澶氭璋冪敤鐨勬儏鍐�. 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args)
+     */
+    public static Method getAccessibleMethod(final Object obj, final String methodName,
+        final Class<?>... parameterTypes) {
+        Validate.notNull(obj, "object can't be null");
+        Validate.notBlank(methodName, "methodName can't be blank");
+
+        for (Class<?> searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) {
+            try {
+                Method method = searchType.getDeclaredMethod(methodName, parameterTypes);
+                makeAccessible(method);
+                return method;
+            } catch (NoSuchMethodException e) {
+                // Method涓嶅湪褰撳墠绫诲畾涔�,缁х画鍚戜笂杞瀷
+                continue;// new add
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂�.
+     * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒�, 杩斿洖null.
+     * 鍙尮閰嶅嚱鏁板悕銆�
+     *
+     * 鐢ㄤ簬鏂规硶闇�瑕佽澶氭璋冪敤鐨勬儏鍐�. 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args)
+     */
+    public static Method getAccessibleMethodByName(final Object obj, final String methodName) {
+        Validate.notNull(obj, "object can't be null");
+        Validate.notBlank(methodName, "methodName can't be blank");
+
+        for (Class<?> searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) {
+            Method[] methods = searchType.getDeclaredMethods();
+            for (Method method : methods) {
+                if (method.getName().equals(methodName)) {
+                    makeAccessible(method);
+                    return method;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鏀瑰彉private/protected鐨勬柟娉曚负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨�ㄣ��
+     */
+    public static void makeAccessible(Method method) {
+        if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers()))
+            && !method.isAccessible()) {
+            method.setAccessible(true);
+        }
+    }
+
+    /**
+     * 鏀瑰彉private/protected鐨勬垚鍛樺彉閲忎负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨�ㄣ��
+     */
+    public static void makeAccessible(Field field) {
+        if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) || Modifier
+            .isFinal(field.getModifiers())) && !field.isAccessible()) {
+            field.setAccessible(true);
+        }
+    }
+
+    /**
+     * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑娉涘瀷鍙傛暟鐨勭被鍨�, 娉ㄦ剰娉涘瀷蹇呴』瀹氫箟鍦ㄧ埗绫诲
+     * 濡傛棤娉曟壘鍒�, 杩斿洖Object.class.
+     * eg.
+     * public UserDao extends HibernateDao<User>
+     *
+     * @param clazz The class to introspect
+     * @return the first generic declaration, or Object.class if cannot be determined
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> Class<T> getClassGenricType(final Class clazz) {
+        return getClassGenricType(clazz, 0);
+    }
+
+    /**
+     * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑鐖剁被鐨勬硾鍨嬪弬鏁扮殑绫诲瀷.
+     * 濡傛棤娉曟壘鍒�, 杩斿洖Object.class.
+     *
+     * 濡俻ublic UserDao extends HibernateDao<User,Long>
+     *
+     * @param clazz clazz The class to introspect
+     * @param index the Index of the generic ddeclaration,start from 0.
+     * @return the index generic declaration, or Object.class if cannot be determined
+     */
+    public static Class getClassGenricType(final Class clazz, final int index) {
+
+        Type genType = clazz.getGenericSuperclass();
+
+        if (!(genType instanceof ParameterizedType)) {
+            logger.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
+            return Object.class;
+        }
+
+        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
+
+        if (index >= params.length || index < 0) {
+            logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: "
+                + params.length);
+            return Object.class;
+        }
+        if (!(params[index] instanceof Class)) {
+            logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
+            return Object.class;
+        }
+
+        return (Class) params[index];
+    }
+
+    public static Class<?> getUserClass(Object instance) {
+        Assert.notNull(instance, "Instance must not be null");
+        Class clazz = instance.getClass();
+        if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) {
+            Class<?> superClass = clazz.getSuperclass();
+            if (superClass != null && !Object.class.equals(superClass)) {
+                return superClass;
+            }
+        }
+        return clazz;
+
+    }
+
+    /**
+     * 灏嗗弽灏勬椂鐨刢hecked exception杞崲涓簎nchecked exception.
+     */
+    public static RuntimeException convertReflectionExceptionToUnchecked(Exception e) {
+        if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException
+            || e instanceof NoSuchMethodException) {
+            return new IllegalArgumentException(e);
+        } else if (e instanceof InvocationTargetException) {
+            return new RuntimeException(((InvocationTargetException) e).getTargetException());
+        } else if (e instanceof RuntimeException) {
+            return (RuntimeException) e;
+        }
+        return new RuntimeException("Unexpected Checked Exception.", e);
+    }
+}
\ No newline at end of file
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/converter/DoubleToStringConverter.java b/server/src/main/java/com/doumee/core/annotation/excel/converter/DoubleToStringConverter.java
deleted file mode 100644
index 107a9d0..0000000
--- a/server/src/main/java/com/doumee/core/annotation/excel/converter/DoubleToStringConverter.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.doumee.core.annotation.excel.converter;
-
-import com.doumee.core.annotation.excel.ExcelDataConverterAdapter;
-
-import java.math.BigDecimal;
-
-/**
- * 灏忔暟杞瓧绗︿覆
- * @author  dm
- * @since 2025/03/31 16:44
- */
-public class DoubleToStringConverter implements ExcelDataConverterAdapter {
-
-    /**
-     * 杞崲
-     *
-     * @param args 鍙傛暟闆嗗悎
-     * - args[0] 鍗曞厓鏍兼暟鎹�
-     * - args[1] 淇濈暀绮惧害浣嶆暟
-     */
-    @Override
-    public Object convert(Object... args) {
-        Object value = args[0];
-        if (value == null) {
-            return null;
-        }
-        BigDecimal decimalValue = new BigDecimal(String.valueOf((value)));
-        // 绮惧害澶勭悊
-        if (args.length > 1) {
-            decimalValue = decimalValue.setScale(Integer.valueOf(args[1].toString()), BigDecimal.ROUND_HALF_UP);
-        }
-        decimalValue.toString();
-        return decimalValue.toPlainString();
-    }
-}
diff --git a/server/src/main/java/com/doumee/core/annotation/excel/converter/IntegerToStringConverter.java b/server/src/main/java/com/doumee/core/annotation/excel/converter/IntegerToStringConverter.java
deleted file mode 100644
index ef0e27b..0000000
--- a/server/src/main/java/com/doumee/core/annotation/excel/converter/IntegerToStringConverter.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.doumee.core.annotation.excel.converter;
-
-import com.doumee.core.annotation.excel.ExcelDataConverterAdapter;
-
-/**
- * 鏁存暟杞瓧绗︿覆
- * @author  dm
- * @since 2025/03/31 16:44
- */
-public class IntegerToStringConverter implements ExcelDataConverterAdapter {
-
-    /**
-     * 杞崲
-     *
-     * @param args 鍙傛暟闆嗗悎
-     * - args[0] 鍗曞厓鏍兼暟鎹�
-     */
-    @Override
-    public Object convert(Object... args) {
-        Object value = args[0];
-        if (value == null) {
-            return null;
-        }
-        if (value instanceof String) {
-            return value;
-        }
-        return "" + ((Double)value).longValue();
-    }
-}
diff --git a/server/src/main/java/com/doumee/dao/business/model/Category.java b/server/src/main/java/com/doumee/dao/business/model/Category.java
index 363598c..9f9f611 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Category.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Category.java
@@ -1,14 +1,13 @@
 package com.doumee.dao.business.model;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
+
 import java.util.Date;
 import java.util.List;
 
@@ -24,65 +23,50 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelExportColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelExportColumn(name="鍒涘缓鏃堕棿")
 
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelExportColumn(name="鏇存柊鏃堕棿")
 
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "鍚嶇О")
-    @ExcelExportColumn(name="鍚嶇О")
     private String name;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelExportColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
-    @ExcelExportColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelExportColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "鍥炬爣")
-    @ExcelExportColumn(name="鍥炬爣")
     private String imgurl;
 
     @ApiModelProperty(value = "绫诲瀷 0SHE浼ゅ绫诲瀷 1璺岀粖婊戜激瀹崇被鍨� 2璺岀粖婊戝彂鐢熷湴鐐� 3DCA浣嶇疆 4DCA涓婚 5SHE椋庨櫓鍦扮偣 6DCA瑙傚療椤�", example = "1")
-    @ExcelExportColumn(name="绫诲瀷 0SHE浼ゅ绫诲瀷 1璺岀粖婊戜激瀹崇被鍨� 2璺岀粖婊戝彂鐢熷湴鐐� 3DCA浣嶇疆 4DCA涓婚 5SHE椋庨櫓鍦扮偣 6DCA瑙傚療椤�")
     private Integer type;
 
     @ApiModelProperty(value = "鐖剁骇缂栫爜锛堣嚜鍏宠仈锛�", example = "1")
-    @ExcelExportColumn(name="鐖剁骇缂栫爜锛堣嚜鍏宠仈锛�")
     private Integer parentId;
 
     @ApiModelProperty(value = "鍚嶇О璺緞")
-    @ExcelExportColumn(name="鍚嶇О璺緞")
     private String namePath;
 
     @ApiModelProperty(value = "缂栫爜璺緞")
-    @ExcelExportColumn(name="缂栫爜璺緞")
     private String idPath;
     @ApiModelProperty(value = "涓婄骇鍚嶇О")
     @TableField(exist = false)
diff --git a/server/src/main/java/com/doumee/dao/business/model/Company.java b/server/src/main/java/com/doumee/dao/business/model/Company.java
index 0eb4d26..f5be827 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Company.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Company.java
@@ -1,14 +1,13 @@
 package com.doumee.dao.business.model;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
+
 import java.util.Date;
 import java.util.List;
 
@@ -24,76 +23,58 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelExportColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelExportColumn(name="鍒涘缓鏃堕棿")
 
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelExportColumn(name="鏇存柊鏃堕棿")
 
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "鍚嶇О")
-    @ExcelExportColumn(name="鍚嶇О")
     private String name;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelExportColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0姝e父 1绂佺敤", example = "1")
-    @ExcelExportColumn(name="鐘舵�� 0姝e父 1绂佺敤")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelExportColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "澶村儚")
-    @ExcelExportColumn(name="澶村儚")
     private String imgurl;
 
     @ApiModelProperty(value = "绫诲瀷", example = "1")
-    @ExcelExportColumn(name="绫诲瀷")
     private Integer type;
 
     @ApiModelProperty(value = "鎵�灞炵埗绾х紪鐮侊紙鍏宠仈company)", example = "1")
-    @ExcelExportColumn(name="鎵�灞炵埗绾х紪鐮侊紙鍏宠仈company)")
     private Integer parentId;
 
     @ApiModelProperty(value = "缂栫爜")
-    @ExcelExportColumn(name="缂栫爜")
     private String code;
 
     @ApiModelProperty(value = "浼佸井鏍囪瘑")
-    @ExcelExportColumn(name="浼佸井鏍囪瘑")
     private String qwId;
 
     @ApiModelProperty(value = "鍚嶇О璺緞")
-    @ExcelExportColumn(name="鍚嶇О璺緞")
     private String namePath;
 
     @ApiModelProperty(value = "缂栫爜璺緞")
-    @ExcelExportColumn(name="缂栫爜璺緞")
     private String idPath;
     @ApiModelProperty(value = "浼佷笟寰俊鎵�灞炵埗绾х紪鐮侊紙鍏宠仈company)", example = "1")
-    @ExcelExportColumn(name="浼佷笟寰俊鎵�灞炵埗绾х紪鐮侊紙鍏宠仈company)")
     private String qwParentId;
 
 
diff --git a/server/src/main/java/com/doumee/dao/business/model/CompanyMember.java b/server/src/main/java/com/doumee/dao/business/model/CompanyMember.java
index dae2886..8df1158 100644
--- a/server/src/main/java/com/doumee/dao/business/model/CompanyMember.java
+++ b/server/src/main/java/com/doumee/dao/business/model/CompanyMember.java
@@ -1,13 +1,12 @@
 package com.doumee.dao.business.model;
 
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
+
 import java.util.Date;
 
 /**
@@ -22,52 +21,40 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelExportColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelExportColumn(name="鍒涘缓鏃堕棿")
 
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelExportColumn(name="鏇存柊鏃堕棿")
 
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelExportColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelExportColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮侊紙鍏宠仈company)", example = "1")
-    @ExcelExportColumn(name="鎵�灞炵粍缁囩紪鐮侊紙鍏宠仈company)")
     private Integer companyId;
     @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮佽矾寰� ", example = "1")
-    @ExcelExportColumn(name="鎵�灞炵粍缁囩紪鐮佽矾寰� ")
     private String companyIdPath;
 
     @ApiModelProperty(value = "浜哄憳缂栫爜锛堝叧鑱攎ember", example = "1")
-    @ExcelExportColumn(name="浜哄憳缂栫爜锛堝叧鑱攎ember")
     private Integer memberId;
 
     @ApiModelProperty(value = "鏄惁涓洪儴闂ㄨ礋璐d汉0-鍚︼紱1-鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁涓洪儴闂ㄨ礋璐d汉0-鍚︼紱1-鏄�")
     private Integer isLeader;
 
 }
diff --git a/server/src/main/java/com/doumee/dao/business/model/Managers.java b/server/src/main/java/com/doumee/dao/business/model/Managers.java
index 7c643bc..679154a 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Managers.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Managers.java
@@ -1,14 +1,13 @@
 package com.doumee.dao.business.model;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
+
 import java.util.Date;
 
 /**
@@ -23,53 +22,41 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelExportColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelExportColumn(name="鍒涘缓鏃堕棿")
 
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelExportColumn(name="鏇存柊鏃堕棿")
 
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "鎵�灞炲垎绫荤紪锛堝叧鑱攃ategory)")
-    @ExcelExportColumn(name="鎵�灞炲垎绫荤紪锛堝叧鑱攃ategory)")
     private String categoryId;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelExportColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
-    @ExcelExportColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelExportColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "绫诲瀷 0SHE璐熻矗浜� 1DCA鎵嬪姩鎶勯�佷汉鍛� 2DCA鏉冮檺浜哄憳", example = "1")
-    @ExcelExportColumn(name="绫诲瀷 0SHE璐熻矗浜� 1DCA鎵嬪姩鎶勯�佷汉鍛� 2DCA鏉冮檺浜哄憳")
     private Integer type;
 
     @ApiModelProperty(value = "浜哄憳缂栫爜锛堝叧鑱攎ember)", example = "1")
-    @ExcelExportColumn(name="浜哄憳缂栫爜锛堝叧鑱攎ember)")
     private Integer memberId;
     @ApiModelProperty(value = "缁勭粐鍚嶇О")
     @TableField(exist = false)
diff --git a/server/src/main/java/com/doumee/dao/business/model/Member.java b/server/src/main/java/com/doumee/dao/business/model/Member.java
index 0be966e..25026fc 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Member.java
@@ -1,14 +1,13 @@
 package com.doumee.dao.business.model;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
+
 import java.util.Date;
 import java.util.List;
 
@@ -24,89 +23,68 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelExportColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelExportColumn(name="鍒涘缓鏃堕棿")
 
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelExportColumn(name="鏇存柊鏃堕棿")
 
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "濮撳悕")
-    @ExcelExportColumn(name="濮撳悕")
     private String name;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelExportColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0姝e父 1绂佺敤", example = "1")
-    @ExcelExportColumn(name="鐘舵�� 0姝e父 1绂佺敤")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelExportColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "澶村儚")
-    @ExcelExportColumn(name="澶村儚")
     private String imgurl;
 
     @ApiModelProperty(value = "绫诲瀷", example = "1")
-    @ExcelExportColumn(name="绫诲瀷")
     private Integer type;
 
     @ApiModelProperty(value = "鎵�灞炵粍缁囩紪鐮侊紙鍏宠仈company)", example = "1")
-    @ExcelExportColumn(name="鎵�灞炵粍缁囩紪鐮侊紙鍏宠仈company)")
     private String companyId;
 
     @ApiModelProperty(value = "鎵嬫満鍙�")
-    @ExcelExportColumn(name="鎵嬫満鍙�")
     private String phone;
 
     @ApiModelProperty(value = "閭")
-    @ExcelExportColumn(name="閭")
     private String email;
 
     @ApiModelProperty(value = "鎬у埆 0鐢� 1濂� 2浣嶇疆", example = "1")
-    @ExcelExportColumn(name="鎬у埆 0鐢� 1濂� 2浣嶇疆")
     private Integer sex;
 
     @ApiModelProperty(value = "宸ュ彿")
-    @ExcelExportColumn(name="宸ュ彿")
     private String code;
 
     @ApiModelProperty(value = "浼佸井鏍囪瘑")
-    @ExcelExportColumn(name="浼佸井鏍囪瘑")
     private String qwId;
 
     @ApiModelProperty(value = "璇佷欢鍙�")
-    @ExcelExportColumn(name="璇佷欢鍙�")
     private String idcard;
 
     @ApiModelProperty(value = "鏈�杩戜笂绾挎椂闂�")
-    @ExcelExportColumn(name="鏈�杩戜笂绾挎椂闂�")
     private Date lastLoginDate;
 
     @ApiModelProperty(value = "鐧诲綍娆℃暟", example = "1")
-    @ExcelExportColumn(name="鐧诲綍娆℃暟")
     private Integer loginCount;
 
     @ApiModelProperty(value = "鏄惁鍖呭惈涓嬬骇缁勭粐鐢ㄦ埛")
diff --git a/server/src/main/java/com/doumee/dao/business/model/Multifile.java b/server/src/main/java/com/doumee/dao/business/model/Multifile.java
index 5408a5c..c5e23a1 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Multifile.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Multifile.java
@@ -1,14 +1,11 @@
 package com.doumee.dao.business.model;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
+
 import java.util.Date;
 
 /**
@@ -22,63 +19,49 @@
 public class Multifile {
 
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelExportColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelExportColumn(name="鍒涘缓鏃堕棿")
 
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelExportColumn(name="鏇存柊鏃堕棿")
 
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "鏂囦欢鍚�")
-    @ExcelExportColumn(name="鏂囦欢鍚�")
     private String name;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelExportColumn(name="澶囨敞")
     private String info;
 
     @ApiModelProperty(value = "鍏宠仈瀵硅薄缂栫爜", example = "1")
-    @ExcelExportColumn(name="鍏宠仈瀵硅薄缂栫爜")
     private Integer objId;
 
     @ApiModelProperty(value = "绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬", example = "1")
-    @ExcelExportColumn(name="绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬")
     private Integer type;
 
 //    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1璺岀粖婊戜笂鎶� 2璺岀粖婊戝鐞� 3璺岀粖婊戝垎閰嶇墿涓氫富绠� 4璺岀粖婊戝垎閰嶅鐞嗕汉 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊 7DCA宸ュ崟鍥剧墖", example = "1")
 //    @ExcelExportColumn(name="鍏宠仈瀵硅薄绫诲瀷 0SHE涓婃姤 1璺岀粖婊戜笂鎶� 2璺岀粖婊戝鐞� 3璺岀粖婊戝垎閰嶇墿涓氫富绠� 4璺岀粖婊戝垎閰嶅鐞嗕汉 5DCA椋庨櫓涓婃姤 6DCA椋庨櫓澶勭悊 7DCA宸ュ崟鍥剧墖")
     @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0宸ュ崟涓婃姤 1宸ュ崟澶勭悊 2宸ュ崟杞氦", example = "1")
-    @ExcelExportColumn(name="鍏宠仈瀵硅薄绫诲瀷 0宸ュ崟涓婃姤 1宸ュ崟澶勭悊 2宸ュ崟杞氦")
     private Integer objType;
 
     @ApiModelProperty(value = "鏂囦欢鍦板潃")
-    @ExcelExportColumn(name="鏂囦欢鍦板潃")
     private String fileurl;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelExportColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "浼佷笟缂栫爜(鍏宠仈company琛級", example = "1")
-    @ExcelExportColumn(name="浼佷笟缂栫爜(鍏宠仈company琛級")
     private Integer companyId;
 
     @ApiModelProperty(value = "鏂囦欢鍦板潃")
diff --git a/server/src/main/java/com/doumee/dao/business/model/Notices.java b/server/src/main/java/com/doumee/dao/business/model/Notices.java
index 53e03b7..0eb7c3d 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Notices.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Notices.java
@@ -1,13 +1,12 @@
 package com.doumee.dao.business.model;
 
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
+
 import java.util.Date;
 
 /**
@@ -22,108 +21,83 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelExportColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelExportColumn(name="鍒涘缓鏃堕棿")
 
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelExportColumn(name="鏇存柊鏃堕棿")
 
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelExportColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鏍囬")
-    @ExcelExportColumn(name="鏍囬")
     private String title;
 
     @ApiModelProperty(value = "绠�浠�")
-    @ExcelExportColumn(name="绠�浠�")
     private String info;
 
     @ApiModelProperty(value = "鍐呭")
-    @ExcelExportColumn(name="鍐呭")
     private String content;
 
     @ApiModelProperty(value = "鍏宠仈瀵硅薄缂栫爜", example = "1")
-    @ExcelExportColumn(name="鍏宠仈瀵硅薄缂栫爜")
     private Integer objId;
 
     @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0宸ュ崟")
-    @ExcelExportColumn(name="鍏宠仈瀵硅薄绫诲瀷 0宸ュ崟")
     private String objType;
 
     @ApiModelProperty(value = "鍏宠仈瀵硅薄鍚嶇О")
-    @ExcelExportColumn(name="鍏宠仈瀵硅薄鍚嶇О")
     private String objName;
 
     @ApiModelProperty(value = "绫诲瀷 0宸ュ崟涓婃姤 1鎶勯�� 2杞氦")
     private String type;
 
     @ApiModelProperty(value = "鐢ㄦ埛浼佸井涓婚敭")
-    @ExcelExportColumn(name="鍏宠仈鍙傛暟1")
     private String param1;
 
     @ApiModelProperty(value = "鍏宠仈鍙傛暟2")
-    @ExcelExportColumn(name="鍏宠仈鍙傛暟2")
     private String param2;
 
     @ApiModelProperty(value = "鍏宠仈鍙傛暟3")
-    @ExcelExportColumn(name="鍏宠仈鍙傛暟3")
     private String param3;
 
     @ApiModelProperty(value = "鍏宠仈鍙傛暟4")
-    @ExcelExportColumn(name="鍏宠仈鍙傛暟4")
     private String param4;
 
     @ApiModelProperty(value = "鍏宠仈鍙傛暟5")
-    @ExcelExportColumn(name="鍏宠仈鍙傛暟5")
     private String param5;
 
     @ApiModelProperty(value = "鍏宠仈鐢ㄦ埛濮撳悕")
-    @ExcelExportColumn(name="鍏宠仈鐢ㄦ埛濮撳悕")
     private String memberName;
 
     @ApiModelProperty(value = "鍏宠仈鐢ㄦ埛浼佸井缂栫爜")
-    @ExcelExportColumn(name="鍏宠仈鐢ㄦ埛浼佸井缂栫爜")
     private String qwId;
 
     @ApiModelProperty(value = "鍏宠仈鐢ㄦ埛缂栫爜锛堝叧鑱攎ember)", example = "1")
-    @ExcelExportColumn(name="鍏宠仈鐢ㄦ埛缂栫爜锛堝叧鑱攎ember)")
     private Integer memberId;
 
     @ApiModelProperty(value = "鍏宠仈浼佷笟缁勭粐缂栫爜(鍏宠仈company锛�", example = "1")
-    @ExcelExportColumn(name="鍏宠仈浼佷笟缁勭粐缂栫爜(鍏宠仈company锛�")
     private Integer companyId;
 
     @ApiModelProperty(value = "鐘舵�� 0姝e父 1宸插叧闂�", example = "1")
-    @ExcelExportColumn(name="鐘舵�� 0姝e父 1宸插叧闂�")
     private Integer status;
 
     @ApiModelProperty(value = "鏄惁鎶勯�� 0涓嶆槸 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鎶勯�� 0涓嶆槸 1鏄�")
     private Integer sendacopy;
 
     @ApiModelProperty(value = "鏄惁宸茶 0鏈 1宸茶", example = "1")
-    @ExcelExportColumn(name="鏄惁宸茶 0鏈 1宸茶")
     private Integer readed;
 
 }
diff --git a/server/src/main/java/com/doumee/dao/business/model/Workorder.java b/server/src/main/java/com/doumee/dao/business/model/Workorder.java
index 404c62a..37d581d 100644
--- a/server/src/main/java/com/doumee/dao/business/model/Workorder.java
+++ b/server/src/main/java/com/doumee/dao/business/model/Workorder.java
@@ -1,7 +1,6 @@
 package com.doumee.dao.business.model;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import com.doumee.dao.web.dto.DCANoProblemDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -25,179 +24,135 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelExportColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelExportColumn(name="鍒涘缓鏃堕棿")
 
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelExportColumn(name="鏇存柊鏃堕棿")
 
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "DCA鍒嗙被锛堝叧鑱攃ategory)")
-    @ExcelExportColumn(name="DCA鍒嗙被锛堝叧鑱攃ategory)")
     private String categoryId;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelExportColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�  3SHE鍏抽棴 4WTS鍏抽棴 5宸ョ▼甯堝叧闂�", example = "1")
-    @ExcelExportColumn(name="鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�  3SHE鍏抽棴 4WTS鍏抽棴 5宸ョ▼甯堝叧闂�")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelExportColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "绫诲瀷 0SHE浜嬩欢 1DCA浜嬩欢鎻愪氦璁板綍 2DCA宸ュ崟 3璺岀粖婊戜簨浠�", example = "1")
-    @ExcelExportColumn(name="绫诲瀷 0SHE浜嬩欢 1DCA浜嬩欢鎻愪氦璁板綍 2DCA宸ュ崟 3璺岀粖婊戜簨浠�")
     private Integer type;
 
     @ApiModelProperty(value = "涓婃姤浜哄憳缂栫爜锛堝叧鑱攎ember)", example = "1")
-    @ExcelExportColumn(name="涓婃姤浜哄憳缂栫爜锛堝叧鑱攎ember)")
     private Integer memberId;
 
     @ApiModelProperty(value = "閮ㄩ棬缂栫爜", example = "1")
-    @ExcelExportColumn(name="閮ㄩ棬缂栫爜")
     private Integer companyId;
 
     @ApiModelProperty(value = "涓婃姤鏃堕棿", example = "1")
-    @ExcelExportColumn(name="涓婃姤鏃堕棿")
     private Date submitDate;
 
     @ApiModelProperty(value = "SHE娑夊強浜哄憳绫诲瀷 0鏈汉 1鍚屼簨 2渚涘簲鍟�", example = "1")
-    @ExcelExportColumn(name="SHE娑夊強浜哄憳绫诲瀷 0鏈汉 1鍚屼簨 2渚涘簲鍟�")
     private Integer memberType;
 
     @ApiModelProperty(value = "SHE娑夊強浜哄憳浼佷笟缂栫爜闆嗗悎")
-    @ExcelExportColumn(name="SHE娑夊強浜哄憳浼佷笟缂栫爜闆嗗悎")
     private String memberQwids;
 
     @ApiModelProperty(value = "SHE娑夊強浜哄憳渚涘簲鍟嗛泦鍚�")
-    @ExcelExportColumn(name="SHE娑夊強浜哄憳渚涘簲鍟嗛泦鍚�")
     private String memberNames;
 
     @ApiModelProperty(value = "鍙戠敓鍦扮偣/浣嶇疆缂栫爜锛堝叧鑱攃ategory锛�", example = "1")
-    @ExcelExportColumn(name="鍙戠敓鍦扮偣/浣嶇疆缂栫爜锛堝叧鑱攃ategory锛�")
     private Integer localtionId;
 
     @ApiModelProperty(value = "鏄惁澶栭儴灏卞尰 0鍚� 1鏄�")
-    @ExcelExportColumn(name="鏄惁澶栭儴灏卞尰 0鍚� 1鏄�")
     private Integer outJiuyi;
 
     @ApiModelProperty(value = "鏄惁鍖诲姟瀹� 0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍖诲姟瀹� 0鍚� 1鏄�")
     private Integer isYiwushi;
 
     @ApiModelProperty(value = "鏄惁鍙椾激 0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍙椾激 0鍚� 1鏄�")
     private Integer isHurted;
 
     @ApiModelProperty(value = "鏄惁鍜屽伐浣滅浉鍏�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍜屽伐浣滅浉鍏�")
     private Integer workRelated;
 
     @ApiModelProperty(value = "浜嬩欢璇存槑", example = "1")
-    @ExcelExportColumn(name="浜嬩欢璇存槑")
     private String eventInfo;
 
     @ApiModelProperty(value = "閭欢閫氱煡浜哄憳缂栫爜闆嗗悎")
-    @ExcelExportColumn(name="閭欢閫氱煡浜哄憳缂栫爜闆嗗悎")
     private String emialMemberIds;
 
     @ApiModelProperty(value = "浼佷笟寰俊閫氱煡浜哄憳缂栫爜闆嗗悎")
-    @ExcelExportColumn(name="浼佷笟寰俊閫氱煡浜哄憳缂栫爜闆嗗悎")
     private String qwnoticeMemberIds;
 
     @ApiModelProperty(value = "鍙戠敓鏃堕棿")
-    @ExcelExportColumn(name="鍙戠敓鏃堕棿")
     private Date happenTime;
 
     @ApiModelProperty(value = "椋庨櫓銆佷激瀹炽�佽瀵熶富棰樼被鍨�(鍏宠仈category锛�")
-    @ExcelExportColumn(name="椋庨櫓銆佷激瀹炽�佽瀵熶富棰樼被鍨�(鍏宠仈category锛�")
     private Integer typeId;
 
     @ApiModelProperty(value = "椋庨櫓鎻忚堪", example = "1")
-    @ExcelExportColumn(name="椋庨櫓鎻忚堪")
     private String riskInfo;
     @ApiModelProperty(value = "褰撳墠鐗╀笟涓荤浼佷笟寰俊缂栫爜", example = "1")
-    @ExcelExportColumn(name="褰撳墠鐗╀笟涓荤浼佷笟寰俊缂栫爜")
     private String managerId;
     @ApiModelProperty(value = "褰撳墠澶勭悊浜哄憳浼佷笟寰俊缂栫爜", example = "1")
-    @ExcelExportColumn(name="褰撳墠澶勭悊浜哄憳浼佷笟寰俊缂栫爜")
     private String dealerId;
 
     @ApiModelProperty(value = "鍒嗛厤鏃堕棿")
-    @ExcelExportColumn(name="鍒嗛厤鏃堕棿")
     private Date dispatchTime;
 
     @ApiModelProperty(value = "鍒嗛厤澶囨敞")
-    @ExcelExportColumn(name="鍒嗛厤澶囨敞")
     private String dispatchInfo;
 
     @ApiModelProperty(value = "澶勭悊鏃堕棿")
-    @ExcelExportColumn(name="澶勭悊鏃堕棿")
     private Date dealTime;
 
     @ApiModelProperty(value = "澶勭悊澶囨敞")
-    @ExcelExportColumn(name="澶勭悊澶囨敞")
     private String dealInfo;
 
     @ApiModelProperty(value = "DCA闂鏍囬")
-    @ExcelExportColumn(name="DCA闂鏍囬")
     private String problemTitle;
 
     @ApiModelProperty(value = "DCA闂缂栫爜(鍏宠仈category锛�", example = "1")
-    @ExcelExportColumn(name="DCA闂缂栫爜(鍏宠仈category锛�")
     private Integer problemId;
 
     @ApiModelProperty(value = "DCA闂鎻忚堪")
-    @ExcelExportColumn(name="DCA闂鎻忚堪")
     private String problemInfo;
 
     @ApiModelProperty(value = "浣嶇疆鍦扮偣璺緞鍚嶇О")
-    @ExcelExportColumn(name="浣嶇疆鍦扮偣璺緞鍚嶇О")
     private String locationName;
 
     @ApiModelProperty(value = "宸ュ崟鍙�")
-    @ExcelExportColumn(name="宸ュ崟鍙�")
     private String code;
 
     @ApiModelProperty(value = "DCA绗﹀悎鏁伴噺", example = "1")
-    @ExcelExportColumn(name="DCA绗﹀悎鏁伴噺")
     private Integer dcaYesNum;
 
     @ApiModelProperty(value = "DCA涓嶇鍚堟暟閲�", example = "1")
-    @ExcelExportColumn(name="DCA涓嶇鍚堟暟閲�")
     private Integer dcaNoNum;
 
     @ApiModelProperty(value = "DCA鎻愪氦璁板綍缂栫爜锛堣嚜鍏宠仈锛�", example = "1")
-    @ExcelExportColumn(name="DCA鎻愪氦璁板綍缂栫爜锛堣嚜鍏宠仈锛�")
     private Integer dcaRecordId;
 
     @ApiModelProperty(value = "DCA宸ュ崟鎶勯�佷汉鍛樹紒涓氬井淇$紪鐮侀泦鍚�(澶氫釜鑻辨枃閫楀彿闅斿紑锛�")
-    @ExcelExportColumn(name="DCA宸ュ崟鎶勯�佷汉鍛樹紒涓氬井淇$紪鐮侀泦鍚�(澶氫釜鑻辨枃閫楀彿闅斿紑锛�")
     private String dcaCsIds;
 
     @ApiModelProperty(value = "涓嬫鍌績鏃堕棿")
-    @ExcelExportColumn(name="涓嬫鍌績鏃堕棿")
     private Date urgeDate;
 
     @ApiModelProperty("闄勪欢淇℃伅")
diff --git a/server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java b/server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java
index 30815f8..d3b4657 100644
--- a/server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java
+++ b/server/src/main/java/com/doumee/dao/business/model/WorkorderLog.java
@@ -1,14 +1,13 @@
 package com.doumee.dao.business.model;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
+
 import java.util.Date;
 import java.util.List;
 
@@ -24,77 +23,59 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelExportColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelExportColumn(name="鍒涘缓鏃堕棿")
 
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelExportColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelExportColumn(name="鏇存柊鏃堕棿")
 
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelExportColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelExportColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "宸ュ崟缂栫爜锛堝叧鑱攚orkorder)", example = "1")
-    @ExcelExportColumn(name="宸ュ崟缂栫爜锛堝叧鑱攚orkorder)")
     private Integer workorderId;
 
     @ApiModelProperty(value = "鏍囬")
-    @ExcelExportColumn(name="鏍囬")
     private String title;
 
     @ApiModelProperty(value = "绠�浠�")
-    @ExcelExportColumn(name="绠�浠�")
     private String content;
 
     @ApiModelProperty(value = "鎿嶄綔绫诲瀷 0浠诲姟涓婃姤 1浠诲姟鍒嗛厤鐗╀笟涓荤 2浠诲姟鍒嗛厤澶勭悊浜� 3浠诲姟澶勭悊鍏抽棴 4浠诲姟鍌績", example = "1")
-    @ExcelExportColumn(name="鎿嶄綔绫诲瀷 0浠诲姟涓婃姤 1浠诲姟鍒嗛厤鐗╀笟涓荤 2浠诲姟鍒嗛厤澶勭悊浜� 3浠诲姟澶勭悊鍏抽棴 4浠诲姟鍌績")
     private Integer objType;
 
     @ApiModelProperty(value = "鍏宠仈瀵硅薄缂栫爜")
-    @ExcelExportColumn(name="鍏宠仈瀵硅薄缂栫爜")
     private String objId;
 
     @ApiModelProperty(value = "鎿嶄綔鍓嶅唴瀹�")
-    @ExcelExportColumn(name="鎿嶄綔鍓嶅唴瀹�")
     private String beforeContent;
 
     @ApiModelProperty(value = "鎿嶄綔鍚庡唴瀹�")
-    @ExcelExportColumn(name="鎿嶄綔鍚庡唴瀹�")
     private String afterContent;
 
     @ApiModelProperty(value = "鎿嶄綔浜�")
-    @ExcelExportColumn(name="鍙傛暟1")
     private String param1;
 
     @ApiModelProperty(value = "澶勭悊浜�")
-    @ExcelExportColumn(name="鍙傛暟2")
     private String param2;
 
     @ApiModelProperty(value = "鍙傛暟3")
-    @ExcelExportColumn(name="鍙傛暟3")
     private String param3;
 
     @ApiModelProperty(value = "鍙傛暟4")
-    @ExcelExportColumn(name="鍙傛暟4")
     private String param4;
 
     @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�")
diff --git a/server/src/main/java/com/doumee/dao/business/vo/WorkorderAllDto.java b/server/src/main/java/com/doumee/dao/business/vo/WorkorderAllDto.java
new file mode 100644
index 0000000..18150e4
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/business/vo/WorkorderAllDto.java
@@ -0,0 +1,97 @@
+package com.doumee.dao.business.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.dao.business.model.Multifile;
+import com.doumee.dao.business.model.Workorder;
+import com.doumee.dao.business.model.WorkorderLog;
+import com.doumee.dao.web.dto.DCANoProblemDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/7/13 10:40
+ */
+@Data
+@ApiModel("宸ュ崟瀵煎嚭淇℃伅")
+public class WorkorderAllDto {
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鎻愪氦鏃堕棿",index =10 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date createDate;
+    @ApiModelProperty(value = "鏈�杩戞搷浣滄椂闂�")
+    @ExcelColumn(name="鎻愪氦鏃堕棿",index =10 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date editDate;
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞",index =10  ,width = 10)
+    private String remark;
+    @ApiModelProperty(value = "鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�   4WTS鍏抽棴 5宸ョ▼甯堝叧闂�", example = "1")
+    @ExcelColumn(name="鐘舵��",index =13,width = 6, valueMapping = "0=寰呭鐞�;1=寰呭垎閰�;2=寰呭鐞�;3=SHE鍏抽棴;4=WTS鍏抽棴;5=宸ョ▼甯堝叧闂�;")
+    private Integer status;
+    @ApiModelProperty(value = "涓婃姤鏃堕棿", example = "1")
+    @ExcelColumn(name="涓婃姤鏃堕棿",index =10 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date submitDate;
+    @ApiModelProperty(value = "SHE娑夊強浜哄憳渚涘簲鍟嗛泦鍚�")
+    private String memberNames;
+    @ApiModelProperty(value = "鏄惁澶栭儴灏卞尰")
+    @ExcelColumn(name="鏄惁澶栭儴灏卞尰",index =13,width = 6, valueMapping = "0=鍚�;1=鏄�;")
+    private Integer outJiuyi;
+    @ApiModelProperty(value = "鏄惁鍖诲姟瀹�", example = "1")
+    @ExcelColumn(name="鏄惁鍖诲姟瀹�",index =13,width = 6, valueMapping = "0=鍚�;1=鏄�;")
+    private Integer isYiwushi;
+    @ApiModelProperty(value = "鏄惁鍙椾激", example = "1")
+    @ExcelColumn(name="鏄惁鍙椾激",index =13,width = 6, valueMapping = "0=鍚�;1=鏄�;")
+    private Integer isHurted;
+    @ApiModelProperty(value = "鏄惁鍜屽伐浣滅浉鍏�", example = "1")
+    @ExcelColumn(name="鏄惁鍜屽伐浣滅浉鍏�",index =13,width = 6, valueMapping = "0=鍚�;1=鏄�;")
+    private Integer workRelated;
+    @ApiModelProperty(value = "浜嬩欢璇存槑", example = "1")
+    @ExcelColumn(name="浜嬩欢璇存槑",index =13,width = 6)
+    private String eventInfo;
+    @ApiModelProperty(value = "鍙戠敓鏃堕棿")
+    @ExcelColumn(name="鍙戠敓鏃堕棿",index =10 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date happenTime;
+    @ApiModelProperty(value = "椋庨櫓鎻忚堪", example = "1")
+    @ExcelColumn(name="椋庨櫓鎻忚堪",index =13,width = 6)
+    private String riskInfo;
+    @ApiModelProperty(value = "瑙傚療椤�")
+    @ExcelColumn(name="椋庨櫓鎻忚堪",index =13,width = 6)
+    private String problemTitle;
+    @ApiModelProperty(value = "DCA闂鎻忚堪")
+    @ExcelColumn(name="DCA闂鎻忚堪",index =13,width = 6)
+    private String problemInfo;
+    @ApiModelProperty(value = "浣嶇疆鍦扮偣璺緞鍚嶇О")
+    @ExcelColumn(name="浣嶇疆鍦扮偣璺緞鍚嶇О",index =13,width = 6)
+    private String locationName;
+    @ApiModelProperty(value = "绗﹀悎椤规暟閲�", example = "1")
+    @ExcelColumn(name="绗﹀悎椤规暟閲�",index =13,width = 6)
+    private Integer dcaYesNum;
+    @ApiModelProperty(value = "DCA涓嶇鍚堟暟閲�", example = "1")
+    @ExcelColumn(name="绗﹀悎椤规暟閲�",index =13,width = 6)
+    private Integer dcaNoNum;
+    @ApiModelProperty("鎻愭姤浜哄憳鍚嶇О")
+    @ExcelColumn(name="鎻愭姤浜哄憳",index =13,width = 6)
+    private String memberName;
+    @ApiModelProperty("鍛樺伐鎵嬫満鍙�")
+    @ExcelColumn(name="鍛樺伐鎵嬫満鍙�",index =13,width = 6)
+    private String memberPhone;
+    @ApiModelProperty("鎻愭姤浜哄憳鎵�灞為儴闂�")
+    @ExcelColumn(name="鎵�灞為儴闂�",index =13,width = 6)
+    private String companyName;
+    @ApiModelProperty("椋庨櫓绫诲瀷鍚嶇О")
+    @ExcelColumn(name="椋庨櫓绫诲瀷",index =13,width = 6)
+    private String typeName;
+    @ApiModelProperty("浜岀骇涓婚鍚嶇О")
+    @ExcelColumn(name="浜岀骇涓婚",index =13,width = 6)
+    @TableField(exist = false)
+    private String categoryName;
+
+
+
+}
diff --git a/server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java
new file mode 100644
index 0000000..71767d5
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDbhDto.java
@@ -0,0 +1,57 @@
+package com.doumee.dao.business.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/7/13 10:40
+ */
+@Data
+@ApiModel("璺岀粖婊戝伐鍗曞鍑轰俊鎭�")
+public class WorkorderDbhDto {
+    @ApiModelProperty(value = "搴忓彿")
+    @ExcelColumn(name="搴忓彿",index =1  ,width = 4)
+    private Long index;
+    @ApiModelProperty(value = "宸ュ崟鍙�")
+    @ExcelColumn(name="宸ュ崟鍙�",index =2  ,width = 8)
+    private String code;
+    @ApiModelProperty("椋庨櫓绫诲瀷")
+    @ExcelColumn(name="椋庨櫓绫诲瀷",index =3,width = 6)
+    private String typeName;
+    @ApiModelProperty(value = "鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�   4WTS鍏抽棴 5宸ョ▼甯堝叧闂�", example = "1")
+    @ExcelColumn(name="鐘舵��",index =4,width = 4, valueMapping = "0=寰呭鐞�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
+    private Integer status;
+    @ApiModelProperty(value = "涓婃姤鏃堕棿", example = "1")
+    @ExcelColumn(name="涓婃姤鏃堕棿",index =5 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date submitDate;
+    @ApiModelProperty(value = "鍙戠幇鏃堕棿", example = "1")
+    @ExcelColumn(name="鍙戠幇鏃堕棿",index =6 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date happenTime;
+    @ApiModelProperty(value = "浣嶇疆", example = "1")
+    @ExcelColumn(name="浣嶇疆",index =7 ,width = 6)
+    private String locationName;
+    @ApiModelProperty(value = "椋庨櫓鎻忚堪", example = "1")
+    @ExcelColumn(name="riskInfo",index =11,width = 10)
+    private String eventInfo;
+    @ApiModelProperty("鎻愭姤浜哄憳鍚嶇О")
+    @ExcelColumn(name="涓婃姤鍛樺伐",index =12,width = 4)
+    private String memberName;
+    @ApiModelProperty("鍛樺伐鎵嬫満鍙�")
+    @ExcelColumn(name="鍛樺伐鎵嬫満鍙�",index =13,width = 6)
+    private String memberPhone;
+    @ApiModelProperty("鎻愭姤浜哄憳鎵�灞為儴闂�")
+    @ExcelColumn(name="鎵�灞為儴闂�",index =14,width = 8)
+    private String companyName;
+    @ApiModelProperty(value = "鎻愪氦鏃堕棿")
+    @ExcelColumn(name="鎻愪氦鏃堕棿",index =15 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date createDate;
+
+
+}
diff --git a/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java
new file mode 100644
index 0000000..5e89ba1
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaChildDto.java
@@ -0,0 +1,65 @@
+package com.doumee.dao.business.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/7/13 10:40
+ */
+@Data
+@ApiModel("DCA宸ュ崟璁板綍瀵煎嚭淇℃伅")
+public class WorkorderDcaChildDto {
+    @ApiModelProperty(value = "搴忓彿")
+    @ExcelColumn(name="搴忓彿",index =1  ,width = 4)
+    private Long index;
+    @ApiModelProperty(value = "宸ュ崟鍙�")
+    @ExcelColumn(name="宸ュ崟鍙�",index =2  ,width = 8)
+    private String code;
+    @ApiModelProperty("涓�绾ц瀵熶富棰�")
+    @ExcelColumn(name="涓�绾ц瀵熶富棰�",index =3,width = 6)
+    private String typeName;
+    @ApiModelProperty("浜岀骇瑙傚療涓婚")
+    @ExcelColumn(name="浜岀骇瑙傚療涓婚",index =4,width = 6)
+    private String categoryName;
+    @ApiModelProperty("涓嶇鍚堥」")
+    @ExcelColumn(name="涓嶇鍚堥」",index =5,width = 10)
+    private String problemTitle;
+    @ApiModelProperty(value = "鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�   4WTS鍏抽棴 5宸ョ▼甯堝叧闂�", example = "1")
+    @ExcelColumn(name="鐘舵��",index =6,width = 4, valueMapping = "0=寰呭鐞�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
+    private Integer status;
+    @ApiModelProperty(value = "涓婃姤鏃堕棿", example = "1")
+    @ExcelColumn(name="涓婃姤鏃堕棿",index =7 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date submitDate;
+    @ApiModelProperty(value = "鍙戠幇鏃堕棿", example = "1")
+    @ExcelColumn(name="鍙戠幇鏃堕棿",index =8 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date happenTime;
+    @ApiModelProperty(value = "浣嶇疆", example = "1")
+    @ExcelColumn(name="浣嶇疆",index =9 ,width = 6)
+    private String locationName;
+    @ApiModelProperty(value = "闂鎻忚堪", example = "1")
+    @ExcelColumn(name="闂鎻忚堪",index =10,width = 4)
+    private String eventInfo;
+    @ApiModelProperty("鎻愭姤浜哄憳鍚嶇О")
+    @ExcelColumn(name="涓婃姤鍛樺伐",index =12,width = 4)
+    private String memberName;
+    @ApiModelProperty("鍛樺伐鎵嬫満鍙�")
+    @ExcelColumn(name="鍛樺伐鎵嬫満鍙�",index =13,width = 6)
+    private String memberPhone;
+    @ApiModelProperty("鎻愭姤浜哄憳鎵�灞為儴闂�")
+    @ExcelColumn(name="鎵�灞為儴闂�",index =14,width = 8)
+    private String companyName;
+    @ApiModelProperty(value = "鎻愪氦鏃堕棿")
+    @ExcelColumn(name="鎻愪氦鏃堕棿",index =15 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date createDate;
+
+
+
+
+}
diff --git a/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java
new file mode 100644
index 0000000..d9e5f3b
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/business/vo/WorkorderDcaDto.java
@@ -0,0 +1,56 @@
+package com.doumee.dao.business.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/7/13 10:40
+ */
+@Data
+@ApiModel("DCA宸ュ崟璁板綍瀵煎嚭淇℃伅")
+public class WorkorderDcaDto {
+    @ApiModelProperty(value = "搴忓彿")
+    @ExcelColumn(name="搴忓彿",index =1  ,width = 4)
+    private Long index;
+    @ApiModelProperty(value = "宸ュ崟鍙�")
+    @ExcelColumn(name="宸ュ崟鍙�",index =2  ,width = 8)
+    private String code;
+    @ApiModelProperty("瑙傚療涓婚")
+    @ExcelColumn(name="瑙傚療涓婚",index =3,width = 6)
+    private String typeName;
+    @ApiModelProperty(value = "涓婃姤鏃堕棿", example = "1")
+    @ExcelColumn(name="涓婃姤鏃堕棿",index =5 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date submitDate;
+    @ApiModelProperty(value = "鍙戠幇鏃堕棿", example = "1")
+    @ExcelColumn(name="鍙戠幇鏃堕棿",index =6 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date happenTime;
+    @ApiModelProperty(value = "绗﹀悎椤规暟閲�", example = "1")
+    @ExcelColumn(name="绗﹀悎椤规暟閲�",index =7,width = 4)
+    private Integer dcaYesNum;
+    @ApiModelProperty(value = "涓嶇鍚堥」鏁伴噺", example = "1")
+    @ExcelColumn(name="涓嶇鍚堥」鏁伴噺",index =8,width = 4)
+    private Integer dcaNoNum;
+    @ApiModelProperty("鎻愭姤浜哄憳鍚嶇О")
+    @ExcelColumn(name="涓婃姤鍛樺伐",index =12,width = 4)
+    private String memberName;
+    @ApiModelProperty("鍛樺伐鎵嬫満鍙�")
+    @ExcelColumn(name="鍛樺伐鎵嬫満鍙�",index =13,width = 6)
+    private String memberPhone;
+    @ApiModelProperty("鎻愭姤浜哄憳鎵�灞為儴闂�")
+    @ExcelColumn(name="鎵�灞為儴闂�",index =14,width = 8)
+    private String companyName;
+    @ApiModelProperty(value = "鎻愪氦鏃堕棿")
+    @ExcelColumn(name="鎻愪氦鏃堕棿",index =15 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date createDate;
+
+
+
+
+}
diff --git a/server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java b/server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java
new file mode 100644
index 0000000..2a4e7a9
--- /dev/null
+++ b/server/src/main/java/com/doumee/dao/business/vo/WorkorderSheDto.java
@@ -0,0 +1,77 @@
+package com.doumee.dao.business.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.model.Multifile;
+import com.doumee.dao.business.model.Workorder;
+import com.doumee.dao.business.model.WorkorderLog;
+import com.doumee.dao.web.dto.DCANoProblemDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/7/13 10:40
+ */
+@Data
+@ApiModel("SHE宸ュ崟瀵煎嚭淇℃伅")
+public class WorkorderSheDto {
+    @ApiModelProperty(value = "搴忓彿")
+    @ExcelColumn(name="搴忓彿",index =1  ,width = 4)
+    private Long index;
+    @ApiModelProperty(value = "宸ュ崟鍙�")
+    @ExcelColumn(name="宸ュ崟鍙�",index =2  ,width = 8)
+    private String code;
+    @ApiModelProperty("浼ゅ绫诲瀷")
+    @ExcelColumn(name="浼ゅ绫诲瀷",index =3,width = 6)
+    private String typeName;
+    @ApiModelProperty(value = "涓婃姤鏃堕棿", example = "1")
+    @ExcelColumn(name="涓婃姤鏃堕棿",index =4 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date submitDate;
+    @ApiModelProperty(value = "鐘舵�� 鐘舵�� 0寰呯‘璁�/寰呭垵瀹� 1寰呭垎閰�/寰呯粓瀹� 2寰呭鐞�   4WTS鍏抽棴 5宸ョ▼甯堝叧闂�", example = "1")
+    @ExcelColumn(name="鐘舵��",index =5,width = 4, valueMapping = "0=寰呭鐞�;1=澶勭悊涓�;2=澶勭悊涓�;3=宸插鐞�;4=宸插鐞�;5=宸插鐞�;")
+    private Integer status;
+    @ApiModelProperty(value = "鍙戠敓鍦扮偣")
+    @ExcelColumn(name="鍙戠敓鍦扮偣",index =6,width = 8)
+    private String locationName;
+    @ApiModelProperty(value = "SHE娑夊強浜哄憳渚涘簲鍟嗛泦鍚�")
+    @ExcelColumn(name="娑夊強浜哄憳",index =7,width = 8)
+    private String memberNames;
+    @ApiModelProperty(value = "鍏蜂綋浣嶇疆")
+    @ExcelColumn(name="鍏蜂綋浣嶇疆",index =8,width = 8)
+    private String remark;
+    @ApiModelProperty(value = "灏卞尰鎯呭喌")
+    @ExcelColumn(name="灏卞尰鎯呭喌",index =9,width = 8)
+    private String jiuyiInfo;
+    @ApiModelProperty(value = "鏄惁鍜屽伐浣滅浉鍏�", example = "1")
+    @ExcelColumn(name="鏄惁鍜屽伐浣滅浉鍏�",index =10,width = 4, valueMapping = "0=鍚�;1=鏄�;")
+    private Integer workRelated;
+    @ApiModelProperty(value = "浜嬩欢璇存槑", example = "1")
+    @ExcelColumn(name="浜嬩欢璇存槑",index =11,width = 10)
+    private String eventInfo;
+
+    @ApiModelProperty("鎻愭姤浜哄憳鍚嶇О")
+    @ExcelColumn(name="涓婃姤鍛樺伐",index =12,width = 4)
+    private String memberName;
+    @ApiModelProperty("鍛樺伐鎵嬫満鍙�")
+    @ExcelColumn(name="鍛樺伐鎵嬫満鍙�",index =13,width = 6)
+    private String memberPhone;
+    @ApiModelProperty("鎻愭姤浜哄憳鎵�灞為儴闂�")
+    @ExcelColumn(name="鎵�灞為儴闂�",index =14,width = 8)
+    private String companyName;
+
+    @ApiModelProperty(value = "鎻愪氦鏃堕棿")
+    @ExcelColumn(name="鎻愪氦鏃堕棿",index =15 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10)
+    private Date createDate;
+
+
+}
diff --git a/server/src/main/java/com/doumee/dao/system/model/SystemLoginLog.java b/server/src/main/java/com/doumee/dao/system/model/SystemLoginLog.java
index d554baa..fa83b30 100644
--- a/server/src/main/java/com/doumee/dao/system/model/SystemLoginLog.java
+++ b/server/src/main/java/com/doumee/dao/system/model/SystemLoginLog.java
@@ -1,13 +1,10 @@
 package com.doumee.dao.system.model;
 
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
-import org.apache.poi.ss.usermodel.HorizontalAlignment;
-import org.apache.poi.ss.usermodel.IndexedColors;
 
 import java.util.Date;
 
@@ -28,47 +25,36 @@
     private Integer userId;
 
     @ApiModelProperty(value = "鐧诲綍鐢ㄦ埛鍚�")
-    @ExcelExportColumn(name="鐧诲綍鐢ㄦ埛鍚�")
     private String loginUsername;
 
     @ApiModelProperty(value = "鐧诲綍IP")
-    @ExcelExportColumn(name="鐧诲綍IP", color = IndexedColors.RED, width = 8)
     private String ip;
 
     @ApiModelProperty(value = "鐧诲綍鍦板潃")
-    @ExcelExportColumn(name="鐧诲綍鍦板潃", width = 10)
     private String location;
 
     @ApiModelProperty(value = "瀹㈡埛绔�")
-    @ExcelExportColumn(name="瀹㈡埛绔�", width = 10)
     private String clientInfo;
 
     @ApiModelProperty(value = "鎿嶄綔绯荤粺")
-    @ExcelExportColumn(name="鎿嶄綔绯荤粺")
     private String osInfo;
 
     @ApiModelProperty(value = "鐧诲綍骞冲彴")
-    @ExcelExportColumn(name="鐧诲綍骞冲彴")
     private String platform;
 
     @ApiModelProperty(value = "绯荤粺鐗堟湰")
-    @ExcelExportColumn(name="绯荤粺鐗堟湰")
     private String systemVersion;
 
     @ApiModelProperty(value = "鏈嶅姟鍣↖P")
-    @ExcelExportColumn(name="鏈嶅姟鍣↖P", width = 8)
     private String serverIp;
 
     @ApiModelProperty(value = "鏄惁鐧诲綍鎴愬姛")
-    @ExcelExportColumn(name="鏄惁鐧诲綍鎴愬姛", valueMapping = "true=鏄�;false=鍚�", align = HorizontalAlignment.CENTER)
     private Boolean success;
 
     @ApiModelProperty(value = "澶辫触鍘熷洜")
-    @ExcelExportColumn(name="澶辫触鍘熷洜", color = IndexedColors.RED, width = 16)
     private String reason;
 
     @ApiModelProperty(value = "鐧诲綍鏃堕棿")
-    @ExcelExportColumn(name="鐧诲綍鏃堕棿", dateFormat = "yyyy-MM-dd HH:mm:ss", width = 10)
     private Date loginTime;
 
 }
diff --git a/server/src/main/java/com/doumee/dao/system/model/SystemTraceLog.java b/server/src/main/java/com/doumee/dao/system/model/SystemTraceLog.java
index bf77f5d..2213746 100644
--- a/server/src/main/java/com/doumee/dao/system/model/SystemTraceLog.java
+++ b/server/src/main/java/com/doumee/dao/system/model/SystemTraceLog.java
@@ -1,6 +1,5 @@
 package com.doumee.dao.system.model;
 
-import com.doumee.core.annotation.excel.ExcelExportColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -27,11 +26,9 @@
     private Integer userId;
 
     @ApiModelProperty(value = "鍥哄寲鐢ㄦ埛鍚�")
-    @ExcelExportColumn(name="鎿嶄綔浜虹敤鎴峰悕")
     private String username;
 
     @ApiModelProperty(value = "鍥哄寲鐢ㄦ埛濮撳悕")
-    @ExcelExportColumn(name="鎿嶄綔浜哄鍚�")
     private String userRealname;
 
     @ApiModelProperty(value = "鍥哄寲鐢ㄦ埛瑙掕壊")
@@ -41,75 +38,57 @@
     private String userPermissions;
 
     @ApiModelProperty(value = "鎿嶄綔妯″潡")
-    @ExcelExportColumn(name="鎿嶄綔妯″潡")
     private String operaModule;
 
     @ApiModelProperty(value = "鎿嶄綔绫诲瀷")
-    @ExcelExportColumn(name="鎿嶄綔绫诲瀷")
     private String operaType;
 
     @ApiModelProperty(value = "鎿嶄綔澶囨敞")
-    @ExcelExportColumn(name="澶囨敞", width = 5)
     private String operaRemark;
 
     @ApiModelProperty(value = "鎿嶄綔寮�濮嬫椂闂�")
-    @ExcelExportColumn(name="鎿嶄綔寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd HH:mm:ss", width = 10)
     private Date operaTime;
 
     @ApiModelProperty(value = "鑰楁椂", example = "1")
-    @ExcelExportColumn(name="鑰楁椂锛坢s锛�")
     private Integer operaSpendTime;
 
     @ApiModelProperty(value = "璇锋眰鏂瑰紡")
-    @ExcelExportColumn(name="璇锋眰鏂瑰紡")
     private String requestMethod;
 
     @ApiModelProperty(value = "璇锋眰鍦板潃")
-    @ExcelExportColumn(name="璇锋眰鍦板潃", width = 14)
     private String requestUri;
 
     @ApiModelProperty(value = "璇锋眰鍙傛暟")
-    @ExcelExportColumn(name="璇锋眰鍙傛暟", width = 16)
     private String requestParams;
 
     @ApiModelProperty(value = "璇锋眰缁撴灉")
-    @ExcelExportColumn(name="璇锋眰缁撴灉", width = 10)
     private String requestResult;
 
     @ApiModelProperty(value = "鐘舵�侊紙0鎿嶄綔澶辫触锛�1鎿嶄綔鎴愬姛锛�-1鏈緱鍒板鐞嗭級", example = "1")
-    @ExcelExportColumn(name="鐘舵��", valueMapping = "0=鎿嶄綔澶辫触;1=鎿嶄綔鎴愬姛;-1=鏈鐞�", width = 4)
     private Integer status;
 
     @ApiModelProperty(value = "寮傚父绛夌骇")
-    @ExcelExportColumn(name="寮傚父绛夌骇", valueMapping = "0=浣�;5=涓�;10=楂�")
     private Integer exceptionLevel;
 
     @ApiModelProperty(value = "寮傚父淇℃伅")
-    @ExcelExportColumn(name="寮傚父淇℃伅", width = 16)
     private String exceptionStack;
 
     @ApiModelProperty(value = "IP")
-    @ExcelExportColumn(name="IP", width = 8)
     private String ip;
 
     @ApiModelProperty(value = "鏈嶅姟鍣↖P")
-    @ExcelExportColumn(name="鏈嶅姟鍣↖P", width = 8)
     private String serverIp;
 
     @ApiModelProperty(value = "鎺ュ彛鐗堟湰")
-    @ExcelExportColumn(name="鎺ュ彛鐗堟湰")
     private String systemVersion;
 
     @ApiModelProperty(value = "鎿嶄綔骞冲彴")
-    @ExcelExportColumn(name="鎿嶄綔骞冲彴")
     private String platform;
 
     @ApiModelProperty(value = "瀹㈡埛绔俊鎭�")
-    @ExcelExportColumn(name="瀹㈡埛绔俊鎭�", width = 10)
     private String clientInfo;
 
     @ApiModelProperty(value = "绯荤粺淇℃伅")
-    @ExcelExportColumn(name="绯荤粺淇℃伅")
     private String osInfo;
 
 }

--
Gitblit v1.9.3