From 77946261ec663aa1fe7f6f97e550532ed879f982 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 06 六月 2025 13:47:46 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/2.0.1' into 2.0.1

---
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java                |    6 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java                      |   16 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java                     |   38 
 admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue                                              |    6 
 h5/pages/inventory/detail.vue                                                                                    | 1024 +++++++-------
 h5/pages/operation/device.vue                                                                                    |   63 
 h5/pages/workOrder/wait.vue                                                                                      |    6 
 admin/src/views/client/category.vue                                                                              |    2 
 h5/pages/login.vue                                                                                               |   80 
 admin/src/views/stock/components/newWarehouse.vue                                                                |    3 
 h5/pages/polling/point.vue                                                                                       |  226 +-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java       |    2 
 admin/src/views/stock/components/AssetSel.vue                                                                    |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java                    |    5 
 admin/src/views/contract/components/terminationAgreement.vue                                                     |   10 
 h5/pages.json                                                                                                    |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java          |   95 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java              |   12 
 admin/src/views/contract/components/terminateLease.vue                                                           |   19 
 admin/src/api/ywMaterial.js                                                                                      |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java          |  153 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java           |   10 
 admin/src/components/common/GlobalWindow.vue                                                                     |    1 
 admin/src/api/client/staff.js                                                                                    |    8 
 admin/src/views/stock/out.vue                                                                                    |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java         |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java                    |   25 
 admin/src/views/stock/record.vue                                                                                 |    2 
 admin/src/views/workorder/components/OperaYwWorkorderWindow.vue                                                  |   32 
 admin/src/views/finance/collectionSettings.vue                                                                   |   58 
 h5/pages/workOrder/edit.vue                                                                                      |   50 
 server/visits/dmvisit_service/src/main/resources/application-pro.yml                                             |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java               |   26 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java  |   28 
 admin/src/api/ywStocktaking.js                                                                                   |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java                      |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java            |   47 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java                           |   33 
 admin/src/api/store/index.js                                                                                     |   11 
 admin/src/views/project/housingList.vue                                                                          |    6 
 h5/pages/polling/empty.vue                                                                                       |   60 
 admin/src/views/finance/overdueBills.vue                                                                         |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java      |  162 +
 admin/src/views/finance/components/bullDetail.vue                                                                |    2 
 admin/src/components/base/BaseTable.vue                                                                          |    2 
 admin/src/views/stock/query.vue                                                                                  |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java            |    2 
 admin/src/views/contract/components/pendingBills.vue                                                             |   23 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java           |   21 
 h5/pages/polling/detail.vue                                                                                      |   11 
 admin/src/views/stock/in.vue                                                                                     |    1 
 admin/src/views/workorder/components/problemReportingDetails.vue                                                 |   42 
 server/system_service/src/main/java/com/doumee/dao/system/dto/ImportMaterialDTO.java                             |   60 
 admin/src/views/workorder/components/detail.vue                                                                  |   48 
 admin/src/views/workorder/problemReporting.vue                                                                   |    6 
 admin/src/views/operation/components/deviceDetail.vue                                                            |   22 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java              |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java        |    2 
 admin/src/views/operation/components/deviceEdit.vue                                                              |   21 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java                   |   12 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java                       |   21 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java                            |    7 
 admin/src/assets/icons/ic_key_green.png                                                                          |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java              |   53 
 admin/src/views/project/components/houseDetails.vue                                                              |  273 +--
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java               |   55 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java                   |    5 
 admin/src/views/stock/components/config.js                                                                       |    6 
 h5/utils/service.js                                                                                              |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java                        |    4 
 admin/src/views/stock/components/newMaterial.vue                                                                 |    7 
 server/system_gateway/src/main/resources/bootstrap.yml                                                           |    4 
 admin/src/assets/icons/ic_key_yellow.png                                                                         |    0 
 server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java                                   |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java                        |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java            |   10 
 admin/src/views/stock/components/inventoryDetails.vue                                                            |   46 
 admin/public/template/material.xlsx                                                                              |    0 
 admin/src/views/index.vue                                                                                        |   20 
 admin/src/components/common/Header.vue                                                                           |    2 
 server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java                                    |   11 
 admin/src/views/stock/components/OutEdit.vue                                                                     |   43 
 h5/pages/workOrder/problemEdit.vue                                                                               |   14 
 admin/src/components/common/tagsview.vue                                                                         |    5 
 admin/src/views/stock/assetList.vue                                                                              |   55 
 admin/src/views/stock/asset.vue                                                                                  |    2 
 admin/src/components/common/Menu.vue                                                                             |    3 
 server/visits/dmvisit_service/src/main/resources/application-dev.yml                                             |   12 
 admin/src/views/stock/assetCate.vue                                                                              |    6 
 admin/src/views/contract/components/contractDetail.vue                                                           |    6 
 admin/src/views/workorder/components/handleProblem.vue                                                           |    2 
 h5/pages/polling/task.vue                                                                                        |    5 
 admin/src/views/client/staffList.vue                                                                             |   23 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java        |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java                |   22 
 admin/src/views/workorder/workorderList.vue                                                                      |   14 
 admin/src/views/Inspection/components/taskDetail.vue                                                             |    6 
 h5/static/side/default_empty@2x.png                                                                              |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java                        |   30 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java      |   28 
 admin/src/layouts/AppLayout.vue                                                                                  |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java                     |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MemberExcelVO.java                        |   45 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java        |   27 
 server/visits/dmvisit_service/src/main/resources/application-test.yml                                            |   12 
 admin/src/views/operation/record.vue                                                                             |   35 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java                      |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java                       |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                            |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java                    |   12 
 admin/src/views/roomStatus/index.vue                                                                             |  519 ++++--
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelInVO.java                |   50 
 server/system_gateway/src/main/resources/application.yml                                                         |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java                          |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java         |    3 
 116 files changed, 2,695 insertions(+), 1,554 deletions(-)

diff --git a/admin/public/template/material.xlsx b/admin/public/template/material.xlsx
new file mode 100644
index 0000000..6a53660
--- /dev/null
+++ b/admin/public/template/material.xlsx
Binary files differ
diff --git a/admin/src/api/client/staff.js b/admin/src/api/client/staff.js
index 5b40176..7d57949 100644
--- a/admin/src/api/client/staff.js
+++ b/admin/src/api/client/staff.js
@@ -20,6 +20,14 @@
   })
 }
 
+// 瀵煎嚭Excel
+export function ywExportExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/member/ywExportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
 // 鍒涘缓
 export function create (data) {
   return request.post('/visitsAdmin/cloudService/business/member/ywCreate', data)
diff --git a/admin/src/api/store/index.js b/admin/src/api/store/index.js
index bcd9b21..09260a5 100644
--- a/admin/src/api/store/index.js
+++ b/admin/src/api/store/index.js
@@ -7,7 +7,8 @@
 }
 export function ywOutinboundEx (data) {
   return request.post('/visitsAdmin/cloudService/business/ywOutinbound/exportExcel', data, {
-    trim: true
+    trim: true,
+    download: true
   })
 }
 export function ywOutinboundDetail (id) {
@@ -28,7 +29,8 @@
 }
 export function ywStockPageEx (data) {
   return request.post('/visitsAdmin/cloudService/business/ywStock/exportExcel', data, {
-    trim: true
+    trim: true,
+    download: true
   })
 }
 
@@ -39,6 +41,7 @@
 }
 export function ywOutinboundRecordEx (data) {
   return request.post('/visitsAdmin/cloudService/business/ywOutinboundRecord/exportExcel', data, {
-    trim: true
+    trim: true,
+    download: true
   })
-}
\ No newline at end of file
+}
diff --git a/admin/src/api/ywMaterial.js b/admin/src/api/ywMaterial.js
index e7da119..92e8655 100644
--- a/admin/src/api/ywMaterial.js
+++ b/admin/src/api/ywMaterial.js
@@ -26,3 +26,16 @@
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywMaterial/delete/${id}`)
 }
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywMaterial/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
+// 瀵煎叆妯℃澘
+export function importMaterialBatch (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywMaterial/importMaterialBatch', data)
+}
diff --git a/admin/src/api/ywStocktaking.js b/admin/src/api/ywStocktaking.js
index 00c5235..8eb6fb9 100644
--- a/admin/src/api/ywStocktaking.js
+++ b/admin/src/api/ywStocktaking.js
@@ -37,6 +37,14 @@
   return request.get(`/visitsAdmin/cloudService/business/ywStocktaking/finishById?id=${id}`)
 }
 
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywStocktakingRecord/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
 // 鏌ヨ
 export function ywStocktakingRecordPage (data) {
   return request.post('/visitsAdmin/cloudService/business/ywStocktakingRecord/page', data, {
diff --git a/admin/src/assets/icons/ic_key_green.png b/admin/src/assets/icons/ic_key_green.png
new file mode 100644
index 0000000..0a59990
--- /dev/null
+++ b/admin/src/assets/icons/ic_key_green.png
Binary files differ
diff --git a/admin/src/assets/icons/ic_key_yellow.png b/admin/src/assets/icons/ic_key_yellow.png
new file mode 100644
index 0000000..1dc8bf5
--- /dev/null
+++ b/admin/src/assets/icons/ic_key_yellow.png
Binary files differ
diff --git a/admin/src/components/base/BaseTable.vue b/admin/src/components/base/BaseTable.vue
index 5b96868..7aea229 100644
--- a/admin/src/components/base/BaseTable.vue
+++ b/admin/src/components/base/BaseTable.vue
@@ -220,4 +220,4 @@
     }
   }
 }
-</script>
\ No newline at end of file
+</script>
diff --git a/admin/src/components/common/GlobalWindow.vue b/admin/src/components/common/GlobalWindow.vue
index 504f62f..d8c67a2 100644
--- a/admin/src/components/common/GlobalWindow.vue
+++ b/admin/src/components/common/GlobalWindow.vue
@@ -8,6 +8,7 @@
     :close-on-press-escape="false"
     :wrapper-closable="false"
     :append-to-body="true"
+    :destroy-on-close="true"
     :modal="true"
     @close="close"
   >
diff --git a/admin/src/components/common/Header.vue b/admin/src/components/common/Header.vue
index a286282..a812472 100644
--- a/admin/src/components/common/Header.vue
+++ b/admin/src/components/common/Header.vue
@@ -4,7 +4,6 @@
       <h2>
         <i class="el-icon-s-unfold" v-if="menuData.collapse" @click="switchCollapseMenu(null)"></i>
         <i class="el-icon-s-fold" v-else @click="switchCollapseMenu(null)"></i>
-        {{title}}
       </h2>
       <tagsview class="tags"></tagsview>
     </div>
@@ -41,7 +40,6 @@
   h2 {
     flex-shrink: 0;
     line-height: 48px;
-    width: 240px;
     font-size: 19px;
     color: #606263;
     font-weight: normal;
diff --git a/admin/src/components/common/Menu.vue b/admin/src/components/common/Menu.vue
index 0b0df39..75a48d1 100644
--- a/admin/src/components/common/Menu.vue
+++ b/admin/src/components/common/Menu.vue
@@ -44,13 +44,12 @@
       } else {
         this.$store.commit('pushtags', menuConfig)
       }
-      // console.log(menuConfig.index);
       return menuConfig.index
     },
     // 榛樿灞曞紑鐨勮彍鍗昳ndex
     defaultOpeneds() {
       // return this.menuData.list.map(menu => menu.index)
-
+      
       return [this.menuData.list[0].index]
     }
   },
diff --git a/admin/src/components/common/tagsview.vue b/admin/src/components/common/tagsview.vue
index 6f66b69..76749bc 100644
--- a/admin/src/components/common/tagsview.vue
+++ b/admin/src/components/common/tagsview.vue
@@ -151,8 +151,8 @@
     },
     // 閫氳繃鍒ゆ柇璺敱涓�鑷磋繑鍥炲竷灏斿�兼坊鍔燾lass锛屾坊鍔犻珮浜晥鏋�
     isActive(route,params, index) {
-      const res =(route === this.$route.path && params== this.$route.query.param)
-      return res
+      // const res =(route === this.$route.path && params== this.$route.query.param)
+      return route === this.$route.path
     },
     scrollToStart() {
       const tagsDiv = document.getElementById('tags-box')
@@ -237,6 +237,7 @@
 //鏍囩楂樹寒
 .active {
   color: #2080f7;
+  box-sizing: border-box;
   border-bottom: 2px solid #2080f7;
 }
 //鍙抽敭鑿滃崟鏍峰紡
diff --git a/admin/src/layouts/AppLayout.vue b/admin/src/layouts/AppLayout.vue
index b13f5dc..469c4ab 100644
--- a/admin/src/layouts/AppLayout.vue
+++ b/admin/src/layouts/AppLayout.vue
@@ -7,7 +7,7 @@
         <Menu/>
       </el-aside>
       <el-main>
-        <header>
+        <header style="background-color: #ffffff;">
           <AppHeader/>
         </header>
         <main ref="containerS">
diff --git a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
index 343b02b..a5e0fe1 100644
--- a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
+++ b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
@@ -118,6 +118,10 @@
     })
   },
   methods: {
+    open(title) {
+      this.title = title
+      this.visible = true
+    },
     __confirmCreate () {
       this.$refs.form.validate((valid) => {
         if (!valid) {
@@ -201,7 +205,7 @@
       detailById(id).then(res => {
         this.form = res
         if (res.userIds) {
-          this.$set(this.form, 'userIds', Number(res.userIds))
+          this.$set(this.form, 'userIds', [...res.userIds.split(',').map(item => Number(item))])
         }
         if (res.startTime) {
           this.$set(this.form, 'selTime', [res.startTime, res.endTime])
diff --git a/admin/src/views/Inspection/components/taskDetail.vue b/admin/src/views/Inspection/components/taskDetail.vue
index a357861..635969f 100644
--- a/admin/src/views/Inspection/components/taskDetail.vue
+++ b/admin/src/views/Inspection/components/taskDetail.vue
@@ -1,5 +1,5 @@
 <template>
-  <GlobalWindow title="宸℃浠诲姟璇︽儏" width="800px" :showConfirm="false" :visible.sync="isShowModal">
+  <GlobalWindow title="宸℃浠诲姟璇︽儏" width="100%" :showConfirm="false" :visible.sync="isShowModal">
     <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getDetail(1)" @clear="clear" />
     <el-table v-loading="loading" :data="list" stripe>
       <el-table-column prop="pointName" label="宸℃鐐瑰悕绉�" min-width="100" show-overflow-tooltip />
@@ -20,11 +20,11 @@
       <el-table-column prop="" label="宸℃闄勪欢" min-width="100" show-overflow-tooltip>
         <template v-slot="{ row }">
           <div class="value" v-if="row.multifileList != null && row.multifileList.length">
-            <div v-for="item in row.multifileList" :key="item.id" style="display: inline;margin-right: 20px">
+            <div v-for="item in row.multifileList.slice(0, 1)" :key="item.id" style="display: inline;margin-right: 20px">
               <video v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')" ref="videoRef" controls preload="auto"
                      style="width: 60px;height: 60px;object-fit: contain;" :src="item.fileurlFull" />
               <el-image v-else-if="item.fileurlFull" style="width:60px; height: 60px" :src="item.fileurlFull"
-                        :preview-src-list="[item.fileurlFull]">
+                        :preview-src-list="row.multifileList.map(item1 => item1.fileurlFull)">
               </el-image>
             </div>
           </div>
diff --git a/admin/src/views/client/category.vue b/admin/src/views/client/category.vue
index 5999ff0..16a45b4 100644
--- a/admin/src/views/client/category.vue
+++ b/admin/src/views/client/category.vue
@@ -97,7 +97,7 @@
       }).then(res => {
         this.loading = false
         this.dataList = res.records || []
-        this.pagination.total = res.total || 0
+        this.tableData.pagination.total = res.total || 0
       }, () => {
         this.loading = false
       })
diff --git a/admin/src/views/client/staffList.vue b/admin/src/views/client/staffList.vue
index e3be587..fdb031d 100644
--- a/admin/src/views/client/staffList.vue
+++ b/admin/src/views/client/staffList.vue
@@ -70,6 +70,7 @@
 import OperaYwCustomerWindow from './components/staffEdit.vue'
 import { fetchList } from '@/api/client/ywCustomer'
 import { updateStatusById } from '@/api/business/member'
+import { ywExportExcel } from '@/api/client/staff'
 import { Message } from 'element-ui'
 export default {
   name: 'YwCustomer',
@@ -113,6 +114,28 @@
         this.clientList = res.records || []
       })
     },
+    exportExcel () {
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.isWorking.export = true
+          ywExportExcel({
+            page: this.tableData.pagination.pageIndex,
+            capacity: 1000000,
+            model: this.searchForm,
+            sorts: this.tableData.sorts
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking.export = false
+            })
+        })
+        .catch(() => {})
+    },
   }
 }
 </script>
diff --git a/admin/src/views/contract/components/contractDetail.vue b/admin/src/views/contract/components/contractDetail.vue
index 5683288..47292ea 100644
--- a/admin/src/views/contract/components/contractDetail.vue
+++ b/admin/src/views/contract/components/contractDetail.vue
@@ -46,7 +46,7 @@
           <div class="val">{{ info.creatorName }}</div>
         </div>
         <div class="item">
-          <div class="la">鍚堝悓绉熻祦鏁�</div>
+          <div class="la">鍚堝悓绉熻祦闈㈢Н</div>
           <div class="val">{{ info.totalArea }}銕�</div>
         </div>
         <div class="item">
@@ -81,12 +81,12 @@
           <el-table-column prop="buildingName" label="妤煎畤鍚嶇О" show-overflow-tooltip />
           <el-table-column prop="" label="妤煎眰/鎴垮彿" show-overflow-tooltip>
             <template slot-scope="{row}">
-              {{row.floorName}}/{{row.code}}
+              {{row.floorName}}/{{row.roomNum}}
             </template>
           </el-table-column>
           <el-table-column prop="area" label="闈㈢Н" show-overflow-tooltip>
             <template slot-scope="{row}">
-              {{row.area}}銕�
+              {{row.rentArea}}銕�
             </template>
           </el-table-column>
         </el-table>
diff --git a/admin/src/views/contract/components/pendingBills.vue b/admin/src/views/contract/components/pendingBills.vue
index b694d96..64496d5 100644
--- a/admin/src/views/contract/components/pendingBills.vue
+++ b/admin/src/views/contract/components/pendingBills.vue
@@ -34,8 +34,10 @@
                     border
                     style="width: 100%">
                     <el-table-column
-                        prop="date"
                         label="璐﹀崟缂栧彿">
+                        <template slot-scope="{row}">
+                            <el-button type="text" @click="handleDetail(row.id)">{{row.code}}</el-button>
+                        </template>
                     </el-table-column>
                     <el-table-column
                         label="璐圭敤绫诲瀷">
@@ -65,16 +67,24 @@
                         label="瀹炴敹/浠橀噾棰�">
                     </el-table-column>
                     <el-table-column
-                        prop="needReceivableFee"
                         label="闇�鏀�/浠橀噾棰�">
+                        <template slot-scope="{row}">
+                            <div style="display: flex; align-items: center;">
+                                <el-tag type="success" v-if="row.needReceivableFee > 0">鏀�</el-tag>
+                                <el-tag type="warning" v-if="row.needReceivableFee < 0">浠�</el-tag>
+                                <span>{{Math.abs(row.needReceivableFee)}}</span>
+                            </div>
+                        </template>
                     </el-table-column>
                     <el-table-column
-                        prop="receivableFee"
+                        prop="planPayDate"
                         label="搴旀敹/浠樻棩鏈�">
                     </el-table-column>
                 </el-table>
             </div>
         </div>
+        <!--    璐﹀崟璇︽儏    -->
+        <Detail ref="DetailRef" />
     </GlobalWindow>
 </template>
 
@@ -82,10 +92,12 @@
   import GlobalWindow from '@/components/common/GlobalWindow'
   import BaseOpera from '@/components/base/BaseOpera'
   import { getWaitDealList } from '@/api/ywContractBill'
+  import Detail from '../../finance/components/bullDetail.vue'
   export default {
     name: 'pendingBills',
     components: {
-      GlobalWindow
+      GlobalWindow,
+      Detail
     },
     extends: BaseOpera,
     data () {
@@ -101,6 +113,9 @@
               this.info = res
               this.visible = true
             })
+      },
+      handleDetail (id) {
+        this.$refs.DetailRef.open('璐﹀崟璇︽儏', id)
       }
     }
   }
diff --git a/admin/src/views/contract/components/terminateLease.vue b/admin/src/views/contract/components/terminateLease.vue
index 0f0fd5d..5520b8a 100644
--- a/admin/src/views/contract/components/terminateLease.vue
+++ b/admin/src/views/contract/components/terminateLease.vue
@@ -27,6 +27,7 @@
                             <el-date-picker
                                 v-model="form.btDate"
                                 type="date"
+                                :picker-options="pickerOptions"
                                 @change="changeBtDate"
                                 value-format="yyyy-MM-dd"
                                 placeholder="璇烽�夋嫨">
@@ -56,12 +57,12 @@
                         <el-table-column prop="projectName" label="椤圭洰鍚嶇О" show-overflow-tooltip />
                         <el-table-column label="鎴挎簮鍚嶇О" show-overflow-tooltip>
                             <template slot-scope="{row}">
-                                {{row.buildingName}}/{{row.code}}
+                                {{row.buildingName}}/{{row.roomNum}}
                             </template>
                         </el-table-column>
                         <el-table-column label="绉熻祦闈㈢Н(銕�)" show-overflow-tooltip>
                             <template slot-scope="{row}">
-                                {{row.area}}銕�
+                                {{row.rentArea}}銕�
                             </template>
                         </el-table-column>
                     </el-table>
@@ -96,7 +97,7 @@
                             <i class="el-icon-delete"
                                style="color: red; margin-left: 10px; font-size: 18px; cursor: pointer;"
                                @click="deleRow(scope.$index)"
-                               v-if="scope.row.date && scope.row.date.length !==0">
+                               v-if="scope.row.isDele">
                             </i>
                         </div>
                     </template>
@@ -250,7 +251,7 @@
         },
         
         list: [],
-
+        pickerOptions: {},
         agentList: [],
 
         receivable: '',
@@ -263,6 +264,14 @@
       open (title, info) {
         this.title = title
         this.info = info
+        this.pickerOptions = {
+          disabledDate(time) {
+            // 濡傛灉娌℃湁鍚庨潰鐨� -8.64e7 灏辨槸涓嶅彲浠ラ�夋嫨浠婂ぉ鐨�
+            const beginDate = new Date(info.startDate).getTime() - 8.64e7
+            const endDate = new Date(info.endDate).getTime()
+            return beginDate > time.getTime() || endDate < time.getTime()
+          }
+        }
         this.form.id = info.id
         this.form.btSignDate = this.getDay()
         this.form.btUserId = this.userInfo.id
@@ -370,9 +379,9 @@
         })
       },
       getObjS (obj) {
-        console.log(obj)
         obj.startDate = obj.startDate.substring(0, 10)
         obj.endDate = obj.endDate.substring(0, 10)
+        obj.isDele = true
         this.info.terminateList.push(obj)
         this.countData()
       },
diff --git a/admin/src/views/contract/components/terminationAgreement.vue b/admin/src/views/contract/components/terminationAgreement.vue
index 835fe12..d870309 100644
--- a/admin/src/views/contract/components/terminationAgreement.vue
+++ b/admin/src/views/contract/components/terminationAgreement.vue
@@ -18,10 +18,14 @@
                     <el-table-column prop="buildingName" label="妤煎畤鍚嶇О" show-overflow-tooltip />
                     <el-table-column label="妤煎眰/鎴垮彿" show-overflow-tooltip>
                         <template slot-scope="{row}">
-                            {{row.floorName}}{{row.roomNum}}
+                            {{row.floorName}}/{{row.roomNum}}
                         </template>
                     </el-table-column>
-                    <el-table-column prop="area" label="闈㈢Н" show-overflow-tooltip></el-table-column>
+                    <el-table-column label="闈㈢Н" show-overflow-tooltip>
+                        <template slot-scope="{row}">
+                            {{row.rentArea}}銕�
+                        </template>
+                    </el-table-column>
                 </el-table>
             </div>
             <div class="title">閫�绉熶俊鎭�</div>
@@ -43,7 +47,7 @@
                 </div>
                 <div class="item">
                     <div class="la">鍗忚绛捐鏃ユ湡</div>
-                    <div class="val">{{ info.signDate }}銕�</div>
+                    <div class="val">{{ info.signDate }}</div>
                 </div>
                 <div class="item">
                     <div class="la">閫�绉熷師鍥�</div>
diff --git a/admin/src/views/finance/collectionSettings.vue b/admin/src/views/finance/collectionSettings.vue
index 9a1ec04..fce513d 100644
--- a/admin/src/views/finance/collectionSettings.vue
+++ b/admin/src/views/finance/collectionSettings.vue
@@ -20,28 +20,41 @@
                             <el-tooltip style="margin-right: 10px; margin-top: 10px; flex-shrink: 0;" effect="dark" content="鍖呭惈绉熻祦璐广�佺墿涓氳垂銆佺璧佹娂閲戙�佺墿涓氭娂閲�" placement="bottom-start">
                                 <i class="el-icon-question"></i>
                             </el-tooltip>
-                            <el-upload
-                                style="flex: 1;"
-                                class="upload-demo"
-                                :action="uploadImgUrl"
-                                :data="uploadData"
-                                :on-success="uploadAvatarSuccess"
-                                :on-remove="handleRemove"
-                                :file-list="form.leaseTemp">
-                                <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
-                            </el-upload>
+                            <div style="display: flex; align-items: center;">
+                                <el-button type="text" v-for="(item, index) in form.leaseTemp" :key="index" style="margin-right: 10px;" @click="openFile(item.url)">{{item.name}}</el-button>
+                                <el-upload
+                                    class="upload-demo"
+                                    :action="uploadImgUrl"
+                                    :data="uploadData"
+                                    :on-success="uploadAvatarSuccess"
+                                    :on-remove="handleRemove">
+                                    <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+                                </el-upload>
+                            </div>
+<!--                            <el-upload-->
+<!--                                style="flex: 1;"-->
+<!--                                class="upload-demo"-->
+<!--                                :action="uploadImgUrl"-->
+<!--                                :data="uploadData"-->
+<!--                                :on-success="uploadAvatarSuccess"-->
+<!--                                :on-remove="handleRemove"-->
+<!--                                :file-list="form.leaseTemp">-->
+<!--                                <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>-->
+<!--                            </el-upload>-->
                         </div>
                     </el-form-item>
                     <el-form-item label="鍏朵粬閫氱煡鍗曟ā鏉�">
-                        <el-upload
-                            class="upload-demo"
-                            :action="uploadImgUrl"
-                            :data="uploadData"
-                            :on-success="uploadAvatarSuccess1"
-                            :on-remove="handleRemove1"
-                            :file-list="form.otherTemp">
-                            <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
-                        </el-upload>
+                        <div style="display: flex; align-items: center;">
+                            <el-button type="text" v-for="(item, index) in form.otherTemp" :key="index" style="margin-right: 10px;" @click="openFile(item.url)">{{item.name}}</el-button>
+                            <el-upload
+                                class="upload-demo"
+                                :action="uploadImgUrl"
+                                :data="uploadData"
+                                :on-success="uploadAvatarSuccess1"
+                                :on-remove="handleRemove1">
+                                <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
+                            </el-upload>
+                        </div>
                     </el-form-item>
                     <el-form-item>
                         <el-button type="primary" @click="submit" :disabled="loading" :loading="loading">淇濆瓨</el-button>
@@ -93,6 +106,9 @@
           this.loading = false
         })
       },
+      openFile(url) {
+        window.open(url)
+      },
       handleRemove(e) {
         this.form.leaseTemp = []
       },
@@ -112,8 +128,8 @@
             .then(res => {
               this.form.smsTemp = res.smsTemp
               this.form.emailTemp = res.emailTemp
-              this.form.leaseTemp = [{ url: res.leaseTemp.url, name: res.leaseTemp.title }]
-              this.form.otherTemp = [{ url: res.otherTemp.url, name: res.otherTemp.title }]
+              this.form.leaseTemp = [{ url: res.leaseTemp.url, ...res.leaseTemp, name: res.leaseTemp.title }]
+              this.form.otherTemp = [{ url: res.otherTemp.url, ...res.otherTemp, name: res.otherTemp.title }]
             })
       }
     }
diff --git a/admin/src/views/finance/components/bullDetail.vue b/admin/src/views/finance/components/bullDetail.vue
index 976f0a0..70cfe50 100644
--- a/admin/src/views/finance/components/bullDetail.vue
+++ b/admin/src/views/finance/components/bullDetail.vue
@@ -9,7 +9,7 @@
           <el-tag type="info" v-if="info.status === 1">鍏抽棴</el-tag>
         </div>
         <div style="display: flex; align-items: center;">
-          <el-button @click="$refs.call.open('鍙戦�佸偓缂撮�氱煡', [info.id])">鍙戦�佺即璐归�氱煡</el-button>
+          <el-button @click="$refs.call.open('鍙戦�佸偓缂撮�氱煡', [info.id])" v-if="info.isOverdue === 1 && info.billType === 0">鍙戦�佺即璐归�氱煡</el-button>
           <el-button plain type="primary" v-if="![1].includes(info.payStatus)" @click="$refs.flowingWater.open('鍒涘缓鏀舵敮娴佹按', {
             billType: returnBillType(),
             billId: info.id,
diff --git a/admin/src/views/finance/overdueBills.vue b/admin/src/views/finance/overdueBills.vue
index 41c000b..c3ed810 100644
--- a/admin/src/views/finance/overdueBills.vue
+++ b/admin/src/views/finance/overdueBills.vue
@@ -7,7 +7,7 @@
                 <div class="tab" :class="{ active: billType === 1 }" @click="tabsClick(1)">閫炬湡浠樻璐﹀崟</div>
             </div>
             <div class="btns">
-                <el-button :disabled="ids.length === 0" @click="batchCall">鎵归噺鍌即</el-button>
+                <el-button :disabled="ids.length === 0" @click="batchCall" v-if="billType === 0">鎵归噺鍌即</el-button>
             </div>
         </div>
         <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" stripe>
@@ -64,18 +64,21 @@
                 <template slot-scope="{row}">
                     <span v-if="row.type === 0">鍚堝悓璐﹀崟</span>
                     <span v-if="row.type === 1">鑷缓璐﹀崟</span>
+                    <span v-if="row.type === 2">閫�娆捐处鍗�</span>
                 </template>
             </el-table-column>
             <el-table-column label="鐭俊鍙戦�佺姸鎬�" min-width="100" fixed="right" show-overflow-tooltip>
                 <template slot-scope="{row}">
-                    <span v-if="row.isSendSms === 0">鍚�</span>
-                    <span v-if="row.isSendSms === 1">鏄�</span>
+                    <span v-if="row.isSendSms === 0">鏈彂閫�</span>
+                    <span v-if="row.isSendSms === 1" style="color: green;">鍙戦�佹垚鍔�</span>
+                    <span v-if="row.isSendSms === 2" style="color: red;">鍙戦�佸け璐�</span>
                 </template>
             </el-table-column>
             <el-table-column label="閭欢鍙戦�佺姸鎬�" min-width="100" fixed="right" show-overflow-tooltip>
                 <template slot-scope="{row}">
-                    <span v-if="row.isSendEmail === 0">鍚�</span>
-                    <span v-if="row.isSendEmail === 1">鏄�</span>
+                    <span v-if="row.isSendEmail === 0">鏈彂閫�</span>
+                    <span v-if="row.isSendEmail === 1" style="color: green;">鍙戦�佹垚鍔�</span>
+                    <span v-if="row.isSendEmail === 2" style="color: red;">鍙戦�佸け璐�</span>
                 </template>
             </el-table-column>
             <el-table-column label="鎿嶄綔" min-width="120" fixed="right">
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index 32818b0..51f20e9 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -43,6 +43,9 @@
             </div>
             <i class="el-icon-arrow-right"></i>
           </div>
+          <div class="list_item1"></div>
+          <div class="list_item1"></div>
+          <div class="list_item1"></div>
         </div>
       </div>
     </div>
@@ -75,14 +78,14 @@
       </div>
       <div class="main_right_rc">
         <div class="main_right_rc_title">褰撴棩鏃ョ▼锛坽{dataList.length}}锛�</div>
-        <div class="main_right_rc_list">
+        <div class="main_right_rc_list" v-loading="loading">
           <div class="main_right_rc_list_row" v-for="(item, index) in dataList" :key="index">
             <div class="top">
               <div class="top_left">
                 <div class="top_left_dian"></div>
                 <div class="top_left_title">{{item.title}}</div>
               </div>
-              <div class="top_date">{{item.createDate}}</div>
+              <div class="top_date">{{item.param1}}</div>
             </div>
             <div class="bottom">
               {{item.content}}
@@ -109,7 +112,8 @@
       nian: '',
       yue: '',
       obj: {},
-      dataList: []
+      dataList: [],
+      loading: false
     }
   },
   components: { CommonFunctions, Calendar },
@@ -137,6 +141,7 @@
         })
     },
     clickDay(e) {
+      this.loading = true
       let date = e.replace("/\\//g", "-")
       let arr = this.markDateMore.filter(item => {
         if (item.date === date) {
@@ -148,6 +153,7 @@
       } else {
         this.dataList = []
       }
+      this.loading = false
     },
     // 鑾峰彇鏃ョ▼
     getMonthNoticess() {
@@ -307,6 +313,10 @@
           align-items: center;
           flex-wrap: wrap;
           justify-content: space-between;
+          .list_item1 {
+            width: 24%;
+            height: 0;
+          }
           .list_item {
             cursor: pointer;
             width: 24%;
@@ -435,8 +445,8 @@
           max-width: 100%;
         }
         ::v-deep .wh_content_item .wh_isToday {
-          background-color: #3E80EF;
-          color: #fff;
+          background-color: rgba(62, 128, 239, 0.47);
+          color: #ffffff;
         }
         ::v-deep .wh_item_date:hover {
           background-color: #3E80EF;
diff --git a/admin/src/views/operation/components/deviceDetail.vue b/admin/src/views/operation/components/deviceDetail.vue
index 02633b3..1dcab14 100644
--- a/admin/src/views/operation/components/deviceDetail.vue
+++ b/admin/src/views/operation/components/deviceDetail.vue
@@ -143,10 +143,12 @@
         border
         style="width: 100%">
         <el-table-column
+          :key="Date.now()"
           prop="realName"
           label="杩愮淮浜哄憳">
         </el-table-column>
         <el-table-column
+          :key="Date.now()"
           label="璁惧鐘舵��">
           <template slot-scope="{row}">
             <span v-if="row.status === 0">姝e父</span>
@@ -155,14 +157,17 @@
           </template>
         </el-table-column>
         <el-table-column
-          prop="remark"
+          :key="Date.now()"
+          prop="content"
           label="杩愮淮澶囨敞">
         </el-table-column>
         <el-table-column
+          :key="Date.now()"
           prop="dealDate"
           label="杩愮淮鏃堕棿">
         </el-table-column>
         <el-table-column
+          :key="Date.now()"
           label="鎿嶄綔">
           <template slot-scope="{row}">
             <el-button type="text" @click="handleDetail(row)">鏌ョ湅璇︽儏</el-button>
@@ -185,24 +190,34 @@
         border
         style="width: 100%">
         <el-table-column
+          :key="Date.now()"
           prop="schemeTitle"
           label="璁″垝鍚嶇О">
         </el-table-column>
         <el-table-column
+          :key="Date.now()"
           prop="taskCode"
           label="浠诲姟缂栧彿">
         </el-table-column>
         <el-table-column
+          :key="Date.now()"
           label="浠诲姟鏃堕棿">
           <template slot-scope="{row}">
             {{row.startDate}} ~ {{row.endDate}}
           </template>
         </el-table-column>
         <el-table-column
+          :key="Date.now()"
           prop="realname"
           label="宸℃浜�">
         </el-table-column>
         <el-table-column
+          :key="Date.now()"
+          prop="dealDate"
+          label="宸℃鏃堕棿">
+        </el-table-column>
+        <el-table-column
+          :key="Date.now()"
           label="宸℃缁撴灉">
           <template slot-scope="{row}">
             <span v-if="row.dealStatus === 0">姝e父</span>
@@ -210,6 +225,7 @@
           </template>
         </el-table-column>
         <el-table-column
+          :key="Date.now()"
           label="宸℃闄勪欢">
           <template slot-scope="{row}">
             <el-image
@@ -221,6 +237,7 @@
           </template>
         </el-table-column>
         <el-table-column
+          :key="Date.now()"
           prop="content"
           label="宸℃璇存槑">
         </el-table-column>
@@ -284,7 +301,7 @@
       }
     },
     getDetail() {
-      this.this.activeTabs = 0
+      this.activeTabs = 0
       const { id } = this
       detailById(id).then(res => {
         this.info = res
@@ -328,6 +345,7 @@
         capacity: this.pageSize,
         page: this.page,
         model: {
+          status: 1,
           deviceId: this.id
         }
       }).then(res => {
diff --git a/admin/src/views/operation/components/deviceEdit.vue b/admin/src/views/operation/components/deviceEdit.vue
index 1b125ed..f727966 100644
--- a/admin/src/views/operation/components/deviceEdit.vue
+++ b/admin/src/views/operation/components/deviceEdit.vue
@@ -197,7 +197,7 @@
         floorId: '',
         roomId: '',
         
-        supplier: [],
+        supplier: '',
         buyDate: '',
         content: '',
         supplierLinker: '',
@@ -228,7 +228,6 @@
   created() {
     this.initData()
     this.getProjectLists()
-    console.log(this.userInfo)
   },
   methods: {
     getHouseVal(e) {
@@ -326,13 +325,17 @@
       detailById(id).then(res => {
         this.param = res
         this.param.rooms = [res.projectId, res.buildingId, res.floorId, res.roomId]
-        this.param.multifileList = res.multifileList.map(item => {
-          return {
-            ...item,
-            createUserName: item.userName,
-            createTime: item.createDate
-          }
-        })
+        console.log(this.param.rooms)
+        if (res.multifileList && res.multifileList.length > 0) {
+          this.param.multifileList = res.multifileList.map(item => {
+            return {
+              ...item,
+              createUserName: item.userName,
+              createTime: item.createDate
+            }
+          })
+        }
+        this.changeProject()
         this.getHouseTree()
         const cateId = this.param.cateId || ''
         setTimeout(() => {
diff --git a/admin/src/views/operation/record.vue b/admin/src/views/operation/record.vue
index 37c421a..a7f872b 100644
--- a/admin/src/views/operation/record.vue
+++ b/admin/src/views/operation/record.vue
@@ -4,7 +4,7 @@
     <div class="mt20">
       <el-button type="primary" @click="handleEdit()" icon="el-icon-plus"
         v-permissions="['business:ywpatrolline:create']">鏂板缓</el-button>
-      <el-button type="primary" @click="handleEx" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
+      <el-button type="primary" @click="exportExcel" :loading="isWorking.export" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe>
       <el-table-column prop="realName" label="杩愮淮浜�" min-width="100" show-overflow-tooltip />
@@ -38,7 +38,8 @@
 import QueryForm from '@/components/common/QueryForm'
 import Edit from './components/maintain.vue'
 import Detail from './components/maintainDetail.vue'
-import { fetchList, deleteById } from '@/api/Inspection/deviceRecord'
+import { fetchList, deleteById, exportExcel } from '@/api/Inspection/deviceRecord'
+import { ywExportExcel } from '@/api/client/staff'
 export default {
   components: {
     Pagination,
@@ -73,6 +74,9 @@
           },
         ],
         online: true
+      },
+      isWorking: {
+        export: false
       }
     }
   },
@@ -100,9 +104,6 @@
         this.loading = false
       })
     },
-    handleEx() {
-
-    },
     handleEdit(row) {
       this.showEdit = true
       this.$nextTick(() => {
@@ -111,7 +112,6 @@
           this.$refs.EditRef.getDetail(row.id)
         }
       })
-
     },
     handleDetail(row) {
       this.$refs.DetailRef.visible = true
@@ -139,7 +139,28 @@
     handleSizeChange(capacity) {
       this.pagination.pageSize = capacity
       this.getList()
-    }
+    },
+    exportExcel () {
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.isWorking.export = true
+          exportExcel({
+            page: this.pagination.page,
+            capacity: 1000000,
+            model: this.filters
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking.export = false
+            })
+        })
+        .catch(() => {})
+    },
   }
 }
 </script>
diff --git a/admin/src/views/project/components/houseDetails.vue b/admin/src/views/project/components/houseDetails.vue
index 394d64a..d3c18b0 100644
--- a/admin/src/views/project/components/houseDetails.vue
+++ b/admin/src/views/project/components/houseDetails.vue
@@ -6,10 +6,10 @@
         width="100%">
         <div class="right">
             <div class="right_head">
-                <span>{{info.roomNum}}</span>
-                <el-tag type="success" v-if="info.leaseStatus === 0">寰呯璧�</el-tag>
-                <el-tag type="success" v-if="info.leaseStatus === 1">宸茬璧�</el-tag>
-                <el-tag type="success" v-if="info.leaseStatus === 2">鏈紑鍚璧�</el-tag>
+                <span class="right_head_title">{{info.roomNum}}</span>
+                <el-tag type="info" v-if="info.leaseStatus == 0">寰呯璧�</el-tag>
+                <el-tag type="success" v-if="info.leaseStatus == 1">宸茬璧�</el-tag>
+                <el-tag type="info" v-if="info.leaseStatus == 2">鏈紑鍚璧�</el-tag>
             </div>
             <div class="right_cate">
                 <el-tabs v-model="activeName" @tab-click="handleClick">
@@ -64,9 +64,6 @@
                     <el-tab-pane label="绉熷鍚堝悓" name="project">
                         <div class="xm">
                             <el-card style="margin-top: 20px;">
-                                <div slot="header" class="clearfix">
-                                    <span>褰撳墠鍦ㄧ鍚堝悓</span>
-                                </div>
                                 <div class="xm_table">
                                     <div style="width: 100%; display: flex; align-items: center; margin-bottom: 15px;">
                                         <el-input v-model="form.code" style="width: 300px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
@@ -80,13 +77,17 @@
                                         <el-table-column
                                             label="鍚堝悓缂栧彿">
                                             <template slot-scope="{row}">
-                                                <el-button type="text" @click="$refs.ContractDetailRef.open('鍚堝悓璇︽儏', row.id)" v-if="row.status === 1">{{row.code}}</el-button>
-                                                <el-button type="text" v-else>{{row.code}}</el-button>
+                                                <el-button type="text" @click="$refs.ContractDetailRef.open('鍚堝悓璇︽儏', row.id)">{{row.code}}</el-button>
                                             </template>
                                         </el-table-column>
                                         <el-table-column
-                                            prop="renterName"
                                             label="瀹㈡埛鍚嶇О">
+                                            <template slot-scope="{row}">
+                                                <div style="display: flex; align-items: center;">
+                                                    {{row.renterName}}
+                                                    <el-tag type="success" v-if="[1,2,3].includes(row.status)">褰撳墠绉熸埛</el-tag>
+                                                </div>
+                                            </template>
                                         </el-table-column>
                                         <el-table-column
                                             prop="startDate"
@@ -114,10 +115,6 @@
                                         <el-table-column
                                             prop="signDate"
                                             label="绛捐鏃�">
-                                        </el-table-column>
-                                        <el-table-column
-                                            prop="address"
-                                            label="鍚堝悓鏉ユ簮">
                                         </el-table-column>
                                         <el-table-column
                                             label="鍚堝悓鐘舵��">
@@ -177,14 +174,15 @@
                                                     value: 'id',
                                                     children: 'childCategoryList'
                                                 }" />
-                                            <el-select v-model="form.status" style="width: 150px; margin-right: 15px;" placeholder="宸ュ崟鐘舵��">
-                                                <el-option label="鍚敤" :value="0"></el-option>
-                                                <el-option label="绂佺敤" :value="1"></el-option>
+                                            <el-select v-model="form.dealStatus" style="width: 150px; margin-right: 15px;" placeholder="宸ュ崟鐘舵��">
+                                                <el-option label="寰呮寚娲�" :value="0"></el-option>
+                                                <el-option label="宸叉寚娲�" :value="1"></el-option>
+                                                <el-option label="宸插鐞�" :value="2"></el-option>
                                             </el-select>
                                             <el-button type="primary" @click="getFetchList">鏌ヨ</el-button>
                                             <el-button @click="clear">娓呯┖</el-button>
                                         </div>
-                                        <el-button type="primary" @click="$refs.operaYwWorkorderWindow.open('鏂板缓宸ュ崟')">鏂板宸ュ崟</el-button>
+                                        <el-button type="primary" @click="addWorkOrder">鏂板宸ュ崟</el-button>
                                     </div>
                                     <el-table
                                         :data="tableData"
@@ -248,10 +246,14 @@
                         <div class="xm">
                             <div class="xm_chat">
                                 <el-card class="xm_chat_row">
-                                    <div id="chat1"></div>
+                                    <div class="xm_chat_row_info">
+                                        <span>鎬昏</span>
+                                        <span>{{amount}}</span>
+                                    </div>
+                                    <div id="chat1" v-if="activeName === 'third'"></div>
                                 </el-card>
                                 <el-card class="xm_chat_row">
-                                    <div id="chat2"></div>
+                                    <div id="chat2" v-if="activeName === 'third'"></div>
                                 </el-card>
                             </div>
                             <el-card style="margin-top: 20px;">
@@ -322,80 +324,6 @@
                             </el-card>
                         </div>
                     </el-tab-pane>
-                    <el-tab-pane label="璧勪骇淇℃伅" name="fourth">
-                        <div class="xm">
-                            <el-card>
-                                <div slot="header" class="clearfix">
-                                    <span>璧勪骇娓呭崟</span>
-                                </div>
-                                <div class="xm_table">
-                                    <div class="xm_table_search">
-                                        <div class="xm_table_search_left">
-                                            <el-input v-model="form.code" placeholder="璇疯緭鍏ヨ祫浜у悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
-                                            <el-select v-model="value" style="width: 200px; margin-right: 15px;" placeholder="璧勪骇鍒嗙被">
-                                                <el-option
-                                                    v-for="item in options"
-                                                    :key="item.value"
-                                                    :label="item.label"
-                                                    :value="item.value">
-                                                </el-option>
-                                            </el-select>
-                                            <el-button type="primary" @click="getPropertyLists">鏌ヨ</el-button>
-                                            <el-button @click="clear">娓呯┖</el-button>
-                                        </div>
-                                        <el-button type="primary" @click="$refs.newMaterial.open('鏂板缓鐗╂枡')">鏂板</el-button>
-                                    </div>
-                                    <el-table
-                                        :data="tableData"
-                                        border
-                                        v-loading="loading"
-                                        style="width: 100%">
-                                        <el-table-column
-                                            prop="code"
-                                            label="璧勪骇缂栫爜">
-                                        </el-table-column>
-                                        <el-table-column
-                                            prop="name"
-                                            label="璧勪骇鍚嶇О">
-                                        </el-table-column>
-                                        <el-table-column
-                                            prop="qrcode"
-                                            label="鏉$爜">
-                                        </el-table-column>
-                                        <el-table-column
-                                            prop="brand"
-                                            label="鍝佺墝">
-                                        </el-table-column>
-                                        <el-table-column
-                                            prop="attr"
-                                            label="瑙勬牸鍨嬪彿">
-                                        </el-table-column>
-                                        <el-table-column
-                                            prop="unitName"
-                                            label="鍗曚綅">
-                                        </el-table-column>
-                                        <el-table-column
-                                            label="搴撳瓨鏁伴噺">
-                                            <template v-slot="scope">
-                                                <span>{{ scope.row.maxStock }} ~ {{ scope.row.minStock }}</span>
-                                            </template>
-                                        </el-table-column>
-                                    </el-table>
-                                    <div class="xm_table_f">
-                                        <el-pagination
-                                            @size-change="handleSizeChange"
-                                            @current-change="handleCurrentChange"
-                                            :current-page="page"
-                                            :page-sizes="[10, 20, 30, 40]"
-                                            :page-size="pageTotal"
-                                            layout="total, sizes, prev, pager, next, jumper"
-                                            :total="total">
-                                        </el-pagination>
-                                    </div>
-                                </div>
-                            </el-card>
-                        </div>
-                    </el-tab-pane>
                 </el-tabs>
             </div>
         </div>
@@ -448,18 +376,21 @@
           areaIds: [],
           cateId: '',
           status: '',
-          name: ''
+          name: '',
+          dealStatus: ''
         },
         cateList: [],
         categaryList: [],
         deviceList: [],
         showDetail: false,
-        showEdit1: false
+        showEdit1: false,
+        amount: 0
       }
     },
     methods: {
       open (title, id) {
         this.title = title
+        this.activeName = 'houseinfo'
         this.houseId = id
         detailById(id)
           .then(res => {
@@ -470,7 +401,11 @@
       handleEdit(row) {
         this.showEdit1 = true
         this.$nextTick(() => {
+          this.$refs.EditRef.param.projectId = this.info.projectId
+          this.$refs.EditRef.param.rooms = [this.info.projectId, this.info.buildingId, this.info.floor, this.info.id]
           this.$refs.EditRef.isShowModal = true
+          this.$refs.EditRef.changeProject()
+          this.$refs.EditRef.getHouseVal([this.info.projectId, this.info.buildingId, this.info.floor, this.info.id])
         })
       },
       handleDetail(row) {
@@ -481,6 +416,17 @@
           this.$refs.DetailRef.getDetail()
         })
       },
+      addWorkOrder() {
+        this.$refs.operaYwWorkorderWindow.open('鏂板缓宸ュ崟', {
+          rooms: [this.info.projectId, this.info.buildingId, this.info.floor, this.info.id],
+          areaType: 0,
+          content: '',
+          projectId: this.info.projectId,
+          buildingId: this.info.buildingId,
+          floorId: this.info.floor,
+          roomId: this.info.id
+        })
+      },
       // 鑾峰彇璁惧鐘舵��
       getDevice() {
         getDeviceStatus({ roomId: this.houseId })
@@ -488,9 +434,10 @@
               this.$nextTick(() => {
                 this.deviceList = [
                   { value: res.workAmount || 0, name: '姝e父' },
-                  { value: res.exceptionAmount || 0, name: '寮傚父' },
+                  { value: res.exceptionAmount || 0, name: '鎹熷潖' },
                   { value: res.errAmount || 0, name: '鎶ュ簾' }
                 ]
+                this.amount = res.amount
                 this.reand()
               })
             })
@@ -562,6 +509,7 @@
         this.form.status = ''
         this.form.areaIds = []
         this.form.cateId = ''
+        this.form.dealStatus = ''
         this.form.name = ''
         if (this.propsName === 'project') {
           this.getTenantContract()
@@ -590,7 +538,7 @@
           page: 1,
           model: {
             roomId: this.houseId,
-            status: this.form.status,
+            dealStatus: this.form.dealStatus,
             cateId: this.form.cateId
           }
         }).then(res => {
@@ -607,7 +555,7 @@
           capacity: this.pageTotal,
           page: this.page,
           model: {
-            roomIds: [this.houseId],
+            roomId: this.houseId,
             code: this.form.code
           }
         }).then(res => {
@@ -637,13 +585,7 @@
             {
               name: '璁惧鐘舵��',
               type: 'pie',
-              radius: ['40%', '80%'],
-              label: {
-                show: true,
-                position: 'center',
-                fontWeight: 'bold',
-                fontSize: 22
-              },
+              radius: ['50%', '80%'],
               data: this.deviceList
             }
           ]
@@ -654,53 +596,24 @@
         var chartDom = document.getElementById('chat2');
         var myChart = echarts.init(chartDom);
         var option;
-        const rawData = [
-          [100, 302, 301, 334, 390, 330, 320],
-          [320, 132, 101, 134, 90, 230, 210],
-          [220, 182, 191, 234, 290, 330, 310],
-          [150, 212, 201, 154, 190, 330, 410],
-          [820, 832, 901, 934, 1290, 1330, 1320]
-        ];
-        const totalData = [];
-        for (let i = 0; i < rawData[0].length; ++i) {
-          let sum = 0;
-          for (let j = 0; j < rawData.length; ++j) {
-            sum += rawData[j][i];
-          }
-          totalData.push(sum);
-        }
-        const series = [
-          'Direct',
-          'Mail Ad',
-          'Affiliate Ad',
-          'Video Ad',
-          'Search Engine'
-        ].map((name, sid) => {
-          return {
-            name,
-            type: 'bar',
-            stack: 'total',
-            barWidth: '60%',
-            data: rawData[sid].map((d, did) =>
-              totalData[did] <= 0 ? 0 : d / totalData[did]
-            )
-          };
-        });
-        let seriesArr = this.categaryList.map(item => {
-          return {
-            name: item.cateName,
-            type: 'bar',
-            stack: 'total',
-            barWidth: '60%',
-            data: item.ywDeviceCateDataVOList.map((child) =>
-              child.deviceAmount
-            )
-          }
+        let seriesArr = []
+        this.categaryList.forEach((one, index) => {
+          one.ywDeviceCateDataVOList.forEach(two => {
+            let data = []
+            this.categaryList.forEach(item => {
+              data.push(0)
+            })
+            data[index] = two.deviceAmount
+            seriesArr.push({
+              name: two.cateName,
+              type: 'bar',
+              barGap:-1,
+              stack: one.cateName,
+              data
+            })
+          })
         })
         let xAxisData = this.categaryList.map(item => item.cateName)
-        console.log(series)
-        console.log(seriesArr)
-        console.log(xAxisData)
         option = {
           title: {
             text: '璁惧鏁伴噺鍒嗙被缁熻'
@@ -715,15 +628,30 @@
             trigger: 'axis',
             axisPointer: {
               type: 'shadow'
+            },
+            formatter: params => {
+              var res = `${params[0].name} <br/>`
+              for (const item of params) {
+                if (item.value !== 0) {
+                  res += `<span style="background: ${item.color}; height:10px; width: 10px; border-radius: 50%;display: inline-block;margin-right:10px;"></span> ${item.seriesName} 锛�${item.value}<br/>`
+                }
+              }
+              return res
             }
           },
-          yAxis: {
-            type: 'value'
-          },
-          xAxis: {
-            type: 'category',
-            data: xAxisData
-          },
+          xAxis: [
+            {
+              type: 'category',
+              position: 'bottom',
+              data: xAxisData
+            }
+          ],
+          yAxis: [
+            {
+              type: 'value',
+              data: Array.from({ length: 100 }, (_, i) => i + 1)
+            }
+          ],
           series: seriesArr
         };
 
@@ -739,6 +667,7 @@
         this.form.cateId = ''
         this.form.status = ''
         this.form.name = ''
+        this.form.dealStatus = ''
         this.propsName = tab._props.name
         if (tab._props.name === 'project') {
           this.getTenantContract()
@@ -760,7 +689,7 @@
           this.getTenantContract()
         } else if (this.propsName === 'second') {
           this.getFetchList()
-        } else if (tab._props.name === 'third') {
+        } else if (this.propsName === 'third') {
           this.getDevicePage()
         } else if (this.propsName === 'fourth') {
           this.getPropertyLists()
@@ -772,7 +701,7 @@
           this.getTenantContract()
         } else if (this.propsName === 'second') {
           this.getFetchList()
-        } else if (tab._props.name === 'third') {
+        } else if (tab.propsName === 'third') {
           this.getDevicePage()
         } else if (this.propsName === 'fourth') {
           this.getPropertyLists()
@@ -791,7 +720,7 @@
             width: 100%;
             padding: 20px;
             box-sizing: border-box;
-            span {
+            .right_head_title {
                 font-size: 16px;
                 font-weight: bold;
                 color: black;
@@ -924,6 +853,28 @@
                     .xm_chat_row {
                         width: 49%;
                         height: 300px;
+                        position: relative;
+                        .xm_chat_row_info {
+                            position: absolute;
+                            top: 50%;
+                            left: 50%;
+                            transform: translate(-50%, -50%);
+                            display: flex;
+                            flex-direction: column;
+                            align-items: center;
+                            justify-content: center;
+                            span {
+                                &:nth-child(1) {
+                                    font-size: 20px;
+                                    color: #222222;
+                                }
+                                &:nth-child(2) {
+                                    font-size: 28px;
+                                    color: #222222;
+                                    font-weight: bold;
+                                }
+                            }
+                        }
                         #chat1 {
                             width: 100%;
                             height: 260px;
diff --git a/admin/src/views/project/housingList.vue b/admin/src/views/project/housingList.vue
index 7d0d874..15b946f 100644
--- a/admin/src/views/project/housingList.vue
+++ b/admin/src/views/project/housingList.vue
@@ -40,9 +40,9 @@
         <el-table-column prop="feeArea" label="璁¤垂闈㈢Н(m虏)" min-width="80px"></el-table-column>
         <el-table-column prop="" label="绉熻祦鐘舵��" min-width="80px">
           <template v-slot="{row}">
-            <span v-if="row.leaseStatus == 0">寰呯</span>
-            <span v-else-if="row.leaseStatus == 1">宸茬</span>
-            <span v-else>-</span>
+            <el-tag type="info" v-if="row.leaseStatus == 0">寰呯</el-tag>
+            <el-tag type="success" v-else-if="row.leaseStatus == 1">宸茬</el-tag>
+            <el-tag type="info" v-else-if="row.leaseStatus == 2">鏈紑鍚璧�</el-tag>
           </template>
         </el-table-column>
         <el-table-column prop="isInvestment" label="鎷涘晢鐘舵��" min-width="60px">
diff --git a/admin/src/views/roomStatus/index.vue b/admin/src/views/roomStatus/index.vue
index 3ef5bef..0bdccb2 100644
--- a/admin/src/views/roomStatus/index.vue
+++ b/admin/src/views/roomStatus/index.vue
@@ -17,7 +17,8 @@
                     <span class="custom-tree-node" style="width: 100%; display: flex; align-items: center; justify-content: space-between;" slot-scope="{ node, data }">
                       <span>{{ data.name }}</span>
                       <span style="color: #2080f7;" v-if="data.lv === 3">
-                        {{data.leaseStatus === 0 ? '寰呯璧�' : data.leaseStatus === 1 ? '宸茬璧�' : data.leaseStatus === 2 ? '鏈紑鍚璧�' : ''}}
+                          <img src="@/assets/icons/ic_key_green.png" style="width: 16px; height: 16px;" v-if="data.leaseStatus === 1" />
+<!--                          <img src="@/assets/icons/ic_key_yellow.png" style="width: 16px; height: 16px;" v-else-if="data.leaseStatus === 2" />-->
                       </span>
                     </span>
                 </el-tree>
@@ -33,34 +34,30 @@
                     <el-tabs v-model="activeName" @tab-click="handleClick">
                         <el-tab-pane label="椤圭洰姒傚喌" name="first" v-if="lv === 0">
                             <div class="xm">
-                                <el-card>
-                                    <div class="xm_one">
-                                        <div class="xm_one_row">
-                                            <span>鍦ㄧ鍚堝悓鏁�</span>
-                                            <span>{{projectNums.leaseContractAmount}}</span>
-                                            <span>鍦ㄧ鎴挎簮鏁帮細{{projectNums.leaseRoomAmount}}</span>
-                                        </div>
-                                        <div class="xm_one_row">
-                                            <span>鍙嫑鍟嗛潰绉�</span>
-                                            <span>{{projectNums.investmentArea}}銕�</span>
-                                            <span>鍙嫑鍟嗘埧婧愭暟锛歿{projectNums.investmentRoomAmount}}</span>
-                                        </div>
-                                        <div class="xm_one_row">
-                                            <span>鍦ㄧ瀹炴椂鍧囦环</span>
-                                            <span>{{projectNums.leasePrice}}鍏�/m虏路澶�</span>
-                                            <span>鍦ㄧ闈㈢Н锛歿{projectNums.leaseArea}}m虏</span>
-                                        </div>
-                                        <div class="xm_one_row">
-                                            <span>鍑虹鐜�</span>
-                                            <span>{{(projectNums.leaseRoomAmount / projectNums.investmentRoomAmount).toFixed(2)}}%</span>
-                                            <span>寰呯闈㈢Н锛歿{projectNums.investmentArea - projectNums.leaseArea}}m虏</span>
-                                        </div>
+                                <div class="xm_one">
+                                    <div class="xm_one_row">
+                                        <span>鍦ㄧ鍚堝悓鏁�</span>
+                                        <span>{{projectNums.leaseContractAmount}}</span>
+                                        <span>鍦ㄧ鎴挎簮鏁帮細{{projectNums.leaseRoomAmount}}</span>
                                     </div>
-                                </el-card>
-                                <el-card style="margin-top: 20px;">
-                                    <div slot="header" class="clearfix">
-                                        <span>椤圭洰淇℃伅</span>
+                                    <div class="xm_one_row">
+                                        <span>鍙嫑鍟嗛潰绉�</span>
+                                        <span>{{projectNums.investmentArea}}銕�</span>
+                                        <span>鍙嫑鍟嗘埧婧愭暟锛歿{projectNums.investmentRoomAmount}}</span>
                                     </div>
+                                    <div class="xm_one_row">
+                                        <span>鍦ㄧ瀹炴椂鍧囦环</span>
+                                        <span>{{projectNums.leasePrice}}鍏�/m虏路澶�</span>
+                                        <span>鍦ㄧ闈㈢Н锛歿{projectNums.leaseArea}}m虏</span>
+                                    </div>
+                                    <div class="xm_one_row">
+                                        <span>鍑虹鐜�</span>
+                                        <span>{{rentalRate()}}%</span>
+                                        <span>寰呯闈㈢Н锛歿{projectNums.investmentArea - projectNums.leaseArea}}m虏</span>
+                                    </div>
+                                </div>
+                                <div style="margin-top: 20px;">
+                                    <div style="font-size: 16px; color: #000000; font-weight: 500; margin-bottom: 20px;">椤圭洰淇℃伅</div>
                                     <div class="xm_info">
                                         <div class="xm_info_row" style="width: 25%;">
                                             <span>椤圭洰鍚嶇О</span>
@@ -79,15 +76,13 @@
                                             <span>{{projectInfo.remark}}</span>
                                         </div>
                                     </div>
-                                </el-card>
-                                <el-card style="margin-top: 20px;">
-                                    <div slot="header" class="clearfix">
-                                        <span>褰撳墠鍦ㄧ鍚堝悓</span>
-                                    </div>
+                                </div>
+                                <div style="margin-top: 20px;">
+                                    <div style="font-size: 16px; color: #000000; font-weight: 500; margin-bottom: 20px;">褰撳墠鍦ㄧ鍚堝悓</div>
                                     <div class="xm_table">
                                         <div style="display: flex; align-items: center; margin-bottom: 15px;">
                                             <el-input v-model="form.code" style="width: 150px; margin-right: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
-                                            <el-button type="primary" @click="getFetchList">鎼滅储</el-button>
+                                            <el-button type="primary" @click="getFetchList(1)">鎼滅储</el-button>
                                             <el-button @click="clear">閲嶇疆</el-button>
                                         </div>
                                         <el-table
@@ -98,7 +93,7 @@
                                             <el-table-column
                                                 label="鍚堝悓缂栧彿">
                                                 <template slot-scope="{row}">
-                                                    <el-button type="text">{{row.code}}</el-button>
+                                                    <el-button type="text" @click="$refs.ContractDetailRef.open('鍚堝悓璇︽儏', row.id)">{{row.code}}</el-button>
                                                 </template>
                                             </el-table-column>
                                             <el-table-column
@@ -146,7 +141,7 @@
                                             </el-pagination>
                                         </div>
                                     </div>
-                                </el-card>
+                                </div>
                             </div>
                         </el-tab-pane>
                         <el-tab-pane label="鎴挎簮淇℃伅" name="houseinfo" v-if="[3].includes(lv)">
@@ -199,73 +194,73 @@
                         </el-tab-pane>
                         <el-tab-pane label="绉熷鍚堝悓" name="project" v-if="[3].includes(lv)">
                             <div class="xm">
-                                <el-card style="margin-top: 20px;">
-                                    <div slot="header" class="clearfix">
-                                        <span>褰撳墠鍦ㄧ鍚堝悓</span>
+                                <div class="xm_table">
+                                    <div style="display: flex; align-items: center; margin-bottom: 15px;">
+                                        <el-input v-model="form.code" style="width: 150px; margin-right: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
+                                        <el-button type="primary" @click="getFetchList(1)">鎼滅储</el-button>
+                                        <el-button @click="clear">閲嶇疆</el-button>
                                     </div>
-                                    <div class="xm_table">
-                                        <div style="display: flex; align-items: center; margin-bottom: 15px;">
-                                            <el-input v-model="form.code" style="width: 150px; margin-right: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
-                                            <el-button type="primary" @click="getFetchList">鎼滅储</el-button>
-                                            <el-button @click="clear">閲嶇疆</el-button>
-                                        </div>
-                                        <el-table
-                                            :data="tableData"
-                                            border
-                                            v-loading="loading"
-                                            style="width: 100%">
-                                            <el-table-column
-                                                label="鍚堝悓缂栧彿">
-                                                <template slot-scope="{row}">
-                                                    <el-button type="text">{{row.code}}</el-button>
-                                                </template>
-                                            </el-table-column>
-                                            <el-table-column
-                                                prop="renterName"
-                                                label="绉熷">
-                                            </el-table-column>
-                                            <el-table-column
-                                                label="绉熻祦鍗曚环">
-                                                <template slot-scope="{row}">
-                                                    <div style="display: flex; align-items: center;">
-                                                        <span>{{row.leasePrice || 0}}鍏�/銕÷峰ぉ</span>
-                                                    </div>
-                                                </template>
-                                            </el-table-column>
-                                            <el-table-column
-                                                prop="leaseDays"
-                                                label="绉熻祦澶╂暟">
-                                            </el-table-column>
-                                            <el-table-column
-                                                label="绉熻祦闈㈢Н">
-                                                <template slot-scope="{row}">
-                                                    {{row.totalArea}}銕�
-                                                </template>
-                                            </el-table-column>
-                                            <el-table-column
-                                                label="鎴挎簮">
-                                                <template slot-scope="{row}">
-                                                    <div style="display: flex; flex-direction: column;">
-                                                        <span v-for="(item, index) in row.roomList" :key="index">
-                                                            {{item.projectName}}/{{item.buildingName}}/{{item.floorName}}/{{item.roomNum}}
-                                                        </span>
-                                                    </div>
-                                                </template>
-                                            </el-table-column>
-                                        </el-table>
-                                        <div class="xm_table_f">
-                                            <el-pagination
-                                                @size-change="handleSizeChange"
-                                                @current-change="handleCurrentChange"
-                                                :current-page="page"
-                                                :page-sizes="[10, 20, 30, 40]"
-                                                :page-size="pageTotal"
-                                                layout="total, sizes, prev, pager, next, jumper"
-                                                :total="total">
-                                            </el-pagination>
-                                        </div>
+                                    <el-table
+                                        :data="tableData"
+                                        border
+                                        v-loading="loading"
+                                        style="width: 100%">
+                                        <el-table-column
+                                            label="鍚堝悓缂栧彿">
+                                            <template slot-scope="{row}">
+                                                <el-button type="text" @click="$refs.ContractDetailRef.open('鍚堝悓璇︽儏', row.id)">{{row.code}}</el-button>
+                                            </template>
+                                        </el-table-column>
+                                        <el-table-column
+                                            label="绉熷">
+                                            <template slot-scope="{row}">
+                                                <div style="display: flex; align-items: center;">
+                                                    {{row.renterName}}
+                                                    <el-tag type="success" v-if="[1,2,3].includes(row.status)">褰撳墠绉熸埛</el-tag>
+                                                </div>
+                                            </template>
+                                        </el-table-column>
+                                        <el-table-column
+                                            label="绉熻祦鍗曚环">
+                                            <template slot-scope="{row}">
+                                                <div style="display: flex; align-items: center;">
+                                                    <span>{{row.leasePrice || 0}}鍏�/銕÷峰ぉ</span>
+                                                </div>
+                                            </template>
+                                        </el-table-column>
+                                        <el-table-column
+                                            prop="leaseDays"
+                                            label="绉熻祦澶╂暟">
+                                        </el-table-column>
+                                        <el-table-column
+                                            label="绉熻祦闈㈢Н">
+                                            <template slot-scope="{row}">
+                                                {{row.totalArea}}銕�
+                                            </template>
+                                        </el-table-column>
+                                        <el-table-column
+                                            label="鎴挎簮">
+                                            <template slot-scope="{row}">
+                                                <div style="display: flex; flex-direction: column;">
+                                                    <span v-for="(item, index) in row.roomList" :key="index">
+                                                        {{item.projectName}}/{{item.buildingName}}/{{item.floorName}}/{{item.roomNum}}
+                                                    </span>
+                                                </div>
+                                            </template>
+                                        </el-table-column>
+                                    </el-table>
+                                    <div class="xm_table_f">
+                                        <el-pagination
+                                            @size-change="handleSizeChange"
+                                            @current-change="handleCurrentChange"
+                                            :current-page="page"
+                                            :page-sizes="[10, 20, 30, 40]"
+                                            :page-size="pageTotal"
+                                            layout="total, sizes, prev, pager, next, jumper"
+                                            :total="total">
+                                        </el-pagination>
                                     </div>
-                                </el-card>
+                                </div>
                             </div>
                         </el-tab-pane>
                         <el-tab-pane label="鎴挎�佺鐞�" name="house" v-if="[1,2].includes(lv)">
@@ -287,23 +282,30 @@
                                     </div>
                                     <div class="xm_house_list" v-for="(item, index) in roomStatus" :key="index">
                                         <div class="xm_house_list_left">
-                                            <div class="xm_house_list_left_row">
+                                            <div class="xm_house_list_left_row" :style="{ height: (item.roomsList.length * 100) + ((item.roomsList.length - 1) * 10) + 'px' }">
                                                 <span>{{item.floorName}}</span>
                                                 <span>{{item.floorArea}}銕�</span>
                                             </div>
                                         </div>
                                         <div class="xm_house_list_right">
-                                            <div class="xm_house_list_right_row" :style="{ width: ifWidth(child.roomRentArea), backgroundColor: ifBackground(child.roomStatus) }" v-for="(child, i) in item.ywRoomStatusDataVOList" :key="i">
-                                                <div class="ft">
-                                                    <span>{{child.roomCode}}</span>
-                                                    <span>锛坽{child.roomRentArea}}銕★級</span>
+                                            <template v-for="(child, i) in item.roomsList" :key="i">
+                                                <div class="xm_house_list_right_row" v-for="(childThree, a) in child" :key="a" :style="{ width: childThree.width + 'px', backgroundColor: ifBackground(childThree.roomStatus) }">
+                                                    <div class="ft">
+                                                        <span>{{childThree.roomCode}}</span>
+                                                        <span>锛坽{childThree.roomRentArea}}銕★級</span>
+                                                    </div>
+                                                    <div class="xm_house_list_right_row_info" v-if="childThree.roomStatus !== 0">
+                                                        <div style="display: flex; align-items: center;">
+                                                            <span style="margin-right: 5px;">{{childThree.customerName}}</span>
+                                                            <img src="@/assets/icons/ic_key_green.png" style="width: 16px; height: 16px;" v-if="childThree.roomStatus === 1" />
+                                                            <img src="@/assets/icons/ic_key_yellow.png" style="width: 16px; height: 16px;" v-else-if="childThree.roomStatus === 2" />
+                                                        </div>
+                                                        <span :style="{ color: returnColor(childThree.overData.substring(0, 10)) ? 'red' : '' }">{{childThree.overData.substring(0, 10)}}{{returnColor(childThree.overData.substring(0, 10)) ? '宸�' : ''}}鍒版湡</span>
+                                                    </div>
+                                                    <div class="xm_house_list_right_row_day" v-if="childThree.roomStatus === 0">鏈嚭绉燂綔绌虹疆{{childThree.freeDayAmount}}澶�</div>
                                                 </div>
-                                                <div class="xm_house_list_right_row_info" v-if="child.roomStatus !== 0">
-                                                    <span>{{child.customerName}}</span>
-                                                    <span>{{child.overData.substring(0, 10)}}鍒版湡</span>
-                                                </div>
-                                                <div class="xm_house_list_right_row_day" v-if="child.roomStatus === 0">鏈嚭绉燂綔绌虹疆{{child.freeDayAmount}}澶�</div>
-                                            </div>
+                                            </template>
+                                            
                                         </div>
                                     </div>
                                 </div>
@@ -330,7 +332,7 @@
                                         </div>
                                         <div class="xm_one_row">
                                             <span>鍑虹鐜�</span>
-                                            <span>{{(projectNums.leaseRoomAmount / projectNums.investmentRoomAmount).toFixed(2)}}%</span>
+                                            <span>{{rentalRate()}}%</span>
                                             <span>寰呯闈㈢Н锛歿{projectNums.investmentArea - projectNums.leaseArea}}m虏</span>
                                         </div>
                                     </div>
@@ -362,7 +364,7 @@
                                         </div>
                                         <div class="xm_info_row" style="width: 25%; margin-top: 15px;">
                                             <span>寤虹瓚闈㈢Н</span>
-                                            <span>{{buildingInfo.cqArea}}銕�</span>
+                                            <span>{{buildingInfo.area}}銕�</span>
                                         </div>
                                         <div class="xm_info_row" style="width: 25%; margin-top: 15px;">
                                             <span>璁$闈㈢Н</span>
@@ -389,7 +391,7 @@
                                     <div class="xm_table">
                                         <div style="display: flex; align-items: center; margin-bottom: 15px;">
                                             <el-input v-model="form.code" style="width: 150px; margin-right: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
-                                            <el-button type="primary" @click="getFetchList">鎼滅储</el-button>
+                                            <el-button type="primary" @click="getFetchList(1)">鎼滅储</el-button>
                                             <el-button @click="clear">閲嶇疆</el-button>
                                         </div>
                                         <el-table
@@ -400,7 +402,7 @@
                                             <el-table-column
                                                 label="鍚堝悓缂栧彿">
                                                 <template slot-scope="{row}">
-                                                    <el-button type="text">{{row.code}}</el-button>
+                                                    <el-button type="text" @click="$refs.ContractDetailRef.open('鍚堝悓璇︽儏', row.id)">{{row.code}}</el-button>
                                                 </template>
                                             </el-table-column>
                                             <el-table-column
@@ -555,23 +557,27 @@
                             <div class="xm">
                                 <div class="xm_chat">
                                     <el-card class="xm_chat_row">
-                                        <div id="chat1"></div>
+                                        <div class="xm_chat_row_info">
+                                            <span>鎬昏</span>
+                                            <span>{{amount}}</span>
+                                        </div>
+                                        <div id="chat1" v-if="activeName === 'third'"></div>
                                     </el-card>
                                     <el-card class="xm_chat_row">
-                                        <div id="chat2"></div>
+                                        <div id="chat2" v-if="activeName === 'third'"></div>
                                     </el-card>
                                 </div>
                                 <el-card style="margin-top: 20px;">
                                     <div class="xm_table">
                                         <div class="xm_table_search">
                                             <div class="xm_table_search_left">
-                                                <el-input v-model="form.name" placeholder="璇疯緭鍏ヨ澶囧悕绉�/缂栫爜" style="width: 150px; margin-right: 15px;"></el-input>
+                                                <el-input v-model="form.name" placeholder="璇疯緭鍏ヨ澶囧悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
                                                 <el-select v-model="form.status" style="width: 150px; margin-right: 15px;" placeholder="璁惧鐘舵��">
                                                     <el-option label="姝e父" :value="0"></el-option>
                                                     <el-option label="鎹熷潖" :value="1"></el-option>
                                                     <el-option label="鎶ュ簾" :value="2"></el-option>
                                                 </el-select>
-                                                <el-button type="primary" @click="getDevicePage">鏌ヨ</el-button>
+                                                <el-button type="primary" @click="getDevicePage(1)">鏌ヨ</el-button>
                                                 <el-button @click="clear">娓呯┖</el-button>
                                             </div>
                                             <el-button type="primary" @click="handleEdit">鏂板</el-button>
@@ -584,7 +590,7 @@
                                             <el-table-column
                                                 label="璁惧缂栫爜">
                                                 <template slot-scope="{row}">
-                                                    <el-button type="text">{{row.code}}</el-button>
+                                                    <el-button type="text" @click="handledeviveDetail(row.id)">{{row.code}}</el-button>
                                                 </template>
                                             </el-table-column>
                                             <el-table-column
@@ -641,6 +647,10 @@
         <Detail v-if="showDetail" ref="DetailRef" @close="showDetail = false" />
         <!--    鏂板缓璁惧    -->
         <Edit v-if="showEdit1" ref="EditRef" @success="getDevicePage" @close="showEdit1 = false" />
+        <!--    鍚堝悓璇︽儏    -->
+        <ContractDetail ref="ContractDetailRef" />
+        <!--    璁惧璇︽儏    -->
+        <deviceDetail ref="deviceDetail" />
     </div>
 </template>
 
@@ -656,9 +666,11 @@
   import Detail from '../workorder/components/detail'
   import { fetchList as devicePage, getDeviceCateData, getDeviceStatus } from '@/api/Inspection/device'
   import Edit from '../operation/components/deviceEdit'
+  import ContractDetail from '../contract/components/contractDetail'
+  import deviceDetail from '../operation/components/deviceDetail'
   export default {
     name: 'index',
-    components: { OperaYwWorkorderWindow, Detail, Edit },
+    components: { OperaYwWorkorderWindow, Detail, Edit, ContractDetail, deviceDetail },
     data() {
       return {
         showDetail: false,
@@ -699,7 +711,10 @@
         roomInfo: {},
         loading: false,
         lv: 0,
-        leaseStatus: ''
+        leaseStatus: '',
+        amount: 0,
+        project: '',
+        widthNum: ''
       }
     },
     created () {
@@ -711,6 +726,11 @@
       }
     },
     methods: {
+      handledeviveDetail(id) {
+        this.$refs.deviceDetail.visible = true
+        this.$refs.deviceDetail.id = id
+        this.$refs.deviceDetail.getDetail()
+      },
       nodeClick(e) {
         this.tableData = []
         this.pageSize = 10
@@ -725,6 +745,7 @@
         if (e.lv === 0) {
           this.activeName = 'first'
           this.form.project = e.id
+          this.project = e.id
           this.getProjectByIds()
         } else if (e.lv === 1) {
           this.activeName = 'house'
@@ -741,10 +762,29 @@
           this.roomDetailByIds()
         }
       },
+      returnColor(date) {
+        let date1 = Number(date.replace(/-/g, ''))
+        let date2 = Number(this.getDay().replace(/-/g, ''))
+        return date2 > date1
+      },
+      getDay() {
+        const now = new Date();
+        const year = now.getFullYear();
+        let month = now.getMonth() + 1; // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ヨ鍔�1
+        let day = now.getDate();
+        const padZero = (num) => num < 10 ? '0' + num : num;
+        month = padZero(month);
+        day = padZero(day);
+        return `${year}-${month}-${day}`;
+      },
       // 鎼滅储鏍�
       filterNode(value, data) {
         if (!value) return true;
         return data.name.indexOf(value) !== -1;
+      },
+      // 鍑虹鐜�
+      rentalRate() {
+        return ((this.projectNums.leaseArea / this.projectNums.investmentArea) * 100).toFixed(2)
       },
       // 鍒ゆ柇鎴挎�佸搴�
       ifWidth(num) {
@@ -793,7 +833,52 @@
           buildingId: this.form.buildingId,
           floor: this.form.floorId
         }).then(res => {
+          // 鏁扮粍鍒嗗壊
+          res.forEach(item => {
+            item.ywRoomStatusDataVOList = item.ywRoomStatusDataVOList ? item.ywRoomStatusDataVOList : []
+            const chunkedArray = [];
+            for (let i = 0; i < item.ywRoomStatusDataVOList.length; i += 4) {
+              chunkedArray.push(item.ywRoomStatusDataVOList.slice(i, i + 4));
+            }
+            item.roomsList = chunkedArray
+          })
+          // 璁$畻瀹藉害
+          res.forEach(item => {
+            item.roomsList.forEach(one => {
+              let num = one.map(three => three.roomRentArea)
+              let total = num.reduce((sum, value) => sum + value, 0)
+              let width = 950
+              if (one.length > 1) {
+                width = 950 - ((one.length - 1) * 10)
+              }
+              one.forEach(two => {
+                two.width = Number(Math.max((two.roomRentArea / total) * width, 150).toFixed(0))
+              })
+            })
+          })
+          // 鍑忓幓骞冲潎澶氫綑鐨勫搴�
+          res.forEach(item => {
+            item.roomsList.forEach(one => {
+              let num = one.map(three => three.width)
+              let total = num.reduce((sum, value) => sum + value, 0)
+              let countGreaterThan150 = one.filter(num => num.width > 150).length;
+              let width = 950
+              if (one.length > 1) {
+                width = 950 - ((one.length - 1) * 10)
+              }
+              if (total > width) {
+                let cha = total - width
+                let deleNum = Math.floor(cha / countGreaterThan150)
+                one.forEach(two => {
+                  if (two.width > 150) {
+                    two.width = two.width - deleNum
+                  }
+                })
+              }
+            })
+          })
           this.roomStatus = res
+          console.log(this.roomStatus)
         })
       },
       // 鑾峰彇璁惧鐘舵��
@@ -808,9 +893,10 @@
             this.$nextTick(() => {
               this.deviceList = [
                 { value: res.workAmount || 0, name: '姝e父' },
-                { value: res.exceptionAmount || 0, name: '寮傚父' },
+                { value: res.exceptionAmount || 0, name: '鎹熷潖' },
                 { value: res.errAmount || 0, name: '鎶ュ簾' }
               ]
+              this.amount = res.amount
               this.reand()
             })
           })
@@ -829,14 +915,19 @@
           })
         })
       },
-      handleEdit(row) {
+      handleEdit() {
         this.showEdit1 = true
         this.$nextTick(() => {
+          this.$refs.EditRef.param.projectId = this.project
           this.$refs.EditRef.isShowModal = true
+          this.$refs.EditRef.changeProject()
         })
       },
       // 鑾峰彇璁惧鍒嗛〉
-      getDevicePage() {
+      getDevicePage(type) {
+        if (type === 1) {
+          this.page = 1
+        }
         this.loading = true
         devicePage({
           capacity: this.pageTotal,
@@ -943,6 +1034,7 @@
         })
       },
       clear() {
+        this.page = 1
         this.form.code = ''
         this.form.name = ''
         this.form.status = ''
@@ -958,7 +1050,10 @@
         }
       },
       // 鑾峰彇褰撳墠鍦ㄧ鍚堝悓
-      getFetchList() {
+      getFetchList(type) {
+        if (type === 1) {
+          this.page = 1
+        }
         this.loading = true
         fetchList({
           capacity: this.pageSize,
@@ -968,7 +1063,8 @@
             buildingId: this.form.buildingId,
             floorId: this.form.floorId,
             roomId: this.form.roomId,
-            code: this.form.code
+            code: this.form.code,
+            statusList: this.lv !== 3 ? [0,1,2,3] : null
           }
         }).then(res => {
           this.tableData = res.records
@@ -982,6 +1078,7 @@
           .then(res => {
             this.addParamToArray(res)
             this.form.project = res[0].id
+            this.project = res[0].id
             this.title = res[0].name
             this.houseList = res
             this.getProjectByIds()
@@ -1016,13 +1113,7 @@
             {
               name: '璁惧鐘舵��',
               type: 'pie',
-              radius: ['40%', '80%'],
-              label: {
-                show: true,
-                position: 'center',
-                fontWeight: 'bold',
-                fontSize: 22
-              },
+              radius: ['50%', '80%'],
               data: this.deviceList
             }
           ]
@@ -1033,53 +1124,25 @@
         var chartDom = document.getElementById('chat2');
         var myChart = echarts.init(chartDom);
         var option;
-        const rawData = [
-          [100, 302, 301, 334, 390, 330, 320],
-          [320, 132, 101, 134, 90, 230, 210],
-          [220, 182, 191, 234, 290, 330, 310],
-          [150, 212, 201, 154, 190, 330, 410],
-          [820, 832, 901, 934, 1290, 1330, 1320]
-        ];
-        const totalData = [];
-        for (let i = 0; i < rawData[0].length; ++i) {
-          let sum = 0;
-          for (let j = 0; j < rawData.length; ++j) {
-            sum += rawData[j][i];
-          }
-          totalData.push(sum);
-        }
-        const series = [
-          'Direct',
-          'Mail Ad',
-          'Affiliate Ad',
-          'Video Ad',
-          'Search Engine'
-        ].map((name, sid) => {
-          return {
-            name,
-            type: 'bar',
-            stack: 'total',
-            barWidth: '60%',
-            data: rawData[sid].map((d, did) =>
-              totalData[did] <= 0 ? 0 : d / totalData[did]
-            )
-          };
-        });
-        let seriesArr = this.categaryList.map(item => {
-          return {
-            name: item.cateName,
-            type: 'bar',
-            stack: 'total',
-            barWidth: '60%',
-            data: item.ywDeviceCateDataVOList.map((child) =>
-              child.deviceAmount
-            )
-          }
+        let seriesArr = []
+        this.categaryList.forEach((one, index) => {
+          one.ywDeviceCateDataVOList.forEach(two => {
+            let data = []
+            this.categaryList.forEach(item => {
+              data.push(0)
+            })
+            data[index] = two.deviceAmount
+            seriesArr.push({
+              name: two.cateName,
+              type: 'bar',
+              barGap:-1,
+              stack: one.cateName,
+              data
+            })
+          })
         })
         let xAxisData = this.categaryList.map(item => item.cateName)
-        console.log(series)
         console.log(seriesArr)
-        console.log(xAxisData)
         option = {
           title: {
             text: '璁惧鏁伴噺鍒嗙被缁熻'
@@ -1094,15 +1157,30 @@
             trigger: 'axis',
             axisPointer: {
               type: 'shadow'
+            },
+            formatter: params => {
+              var res = `${params[0].name} <br/>`
+              for (const item of params) {
+                if (item.value !== 0) {
+                  res += `<span style="background: ${item.color}; height:10px; width: 10px; border-radius: 50%;display: inline-block;margin-right:10px;"></span> ${item.seriesName} 锛�${item.value}<br/>`
+                }
+              }
+              return res
             }
           },
-          yAxis: {
-            type: 'value'
-          },
-          xAxis: {
-            type: 'category',
-            data: xAxisData
-          },
+          xAxis: [
+            {
+              type: 'category',
+              position: 'bottom',
+              data: xAxisData
+            }
+          ],
+          yAxis: [
+            {
+              type: 'value',
+              data: Array.from({ length: 100 }, (_, i) => i + 1)
+            }
+          ],
           series: seriesArr
         };
 
@@ -1114,7 +1192,7 @@
           this.getFetchList()
         } else if (this.activeName === 'second') {
           this.getWorkOrderList()
-        } else if (tab.name === 'third') {
+        } else if (this.activeName === 'third') {
           this.getDevicePage()
         }
       },
@@ -1215,17 +1293,17 @@
                             .xm_house_list {
                                 width: 100%;
                                 display: flex;
-                                align-items: center;
-                                margin-top: 10px;
+                                align-items: self-start;
                                 .xm_house_list_left {
                                     flex-shrink: 0;
                                     width: 100px;
                                     display: flex;
                                     margin-right: 15px;
                                     flex-direction: column;
+                                    margin-bottom: 10px;
                                     .xm_house_list_left_row {
                                         width: 100px;
-                                        height: 100px;
+                                        /*height: 100px;*/
                                         background: #F4F7FC;
                                         padding: 20px 0;
                                         box-sizing: border-box;
@@ -1233,7 +1311,7 @@
                                         display: flex;
                                         align-items: center;
                                         flex-direction: column;
-                                        justify-content: space-between;
+                                        justify-content: center;
                                         &:last-child {
                                             margin-bottom: 0;
                                         }
@@ -1253,8 +1331,11 @@
                                     }
                                 }
                                 .xm_house_list_right {
+                                    width: 950px;
                                     display: flex;
                                     align-items: center;
+                                    justify-content: space-between;
+                                    flex-wrap: wrap;
                                     .xm_house_list_right_row {
                                         height: 100px;
                                         padding: 12px 15px;
@@ -1262,10 +1343,7 @@
                                         display: flex;
                                         flex-direction: column;
                                         justify-content: space-between;
-                                        margin-right: 10px;
-                                        &:last-child {
-                                            margin: 0 !important;
-                                        }
+                                        margin-bottom: 10px;
                                         .ft {
                                             display: flex;
                                             align-items: center;
@@ -1308,6 +1386,7 @@
                             .xm_house_tips {
                                 display: flex;
                                 align-items: center;
+                                margin-bottom: 10px;
                                 .xm_house_tips_row {
                                     display: flex;
                                     align-items: center;
@@ -1335,6 +1414,28 @@
                             .xm_chat_row {
                                 width: 49%;
                                 height: 300px;
+                                position: relative;
+                                .xm_chat_row_info {
+                                    position: absolute;
+                                    top: 50%;
+                                    left: 50%;
+                                    transform: translate(-50%, -50%);
+                                    display: flex;
+                                    flex-direction: column;
+                                    align-items: center;
+                                    justify-content: center;
+                                    span {
+                                        &:nth-child(1) {
+                                            font-size: 20px;
+                                            color: #222222;
+                                        }
+                                        &:nth-child(2) {
+                                            font-size: 28px;
+                                            color: #222222;
+                                            font-weight: bold;
+                                        }
+                                    }
+                                }
                                 #chat1 {
                                     width: 100%;
                                     height: 260px;
@@ -1352,17 +1453,30 @@
                             justify-content: space-between;
                             .xm_one_row {
                                 flex: 1;
+                                margin-right: 20px;
                                 display: flex;
                                 flex-direction: column;
+                                justify-content: space-between;
+                                height: 120px;
+                                background: #F4F7FC;
+                                border-radius: 8px;
+                                padding: 15px 20px;
+                                box-sizing: border-box;
+                                &:last-child {
+                                    margin: 0;
+                                }
                                 span {
                                     font-size: 16px;
                                     color: black;
                                     &:nth-child(2) {
-                                        font-weight: bold;
-                                        margin: 15px 0;
+                                        font-weight: 600;
+                                        font-size: 24px;
+                                        color: #3E80EF;
                                     }
                                     &:nth-child(3) {
-                                        color: #666666;
+                                        font-weight: 400;
+                                        font-size: 14px;
+                                        color: #888888;
                                     }
                                 }
                             }
@@ -1412,13 +1526,16 @@
                                 display: flex;
                                 flex-direction: column;
                                 span {
-                                    font-size: 16px;
                                     &:nth-child(1) {
-                                        color: #666666;
+                                        font-weight: 400;
+                                        font-size: 13px;
+                                        color: #888888;
                                     }
                                     &:nth-child(2) {
-                                        color: #000000;
-                                        margin-top: 15px;
+                                        font-weight: 400;
+                                        font-size: 14px;
+                                        color: #222222;
+                                        margin-top: 7px;
                                     }
                                 }
                             }
diff --git a/admin/src/views/stock/asset.vue b/admin/src/views/stock/asset.vue
index 8f78846..787f8af 100644
--- a/admin/src/views/stock/asset.vue
+++ b/admin/src/views/stock/asset.vue
@@ -111,7 +111,7 @@
     },
     changeStatus(e, row) {
       updateStatusById({ id: row.id, status: e })
-        .then(res => {
+        .finally(() => {
           this.getList()
         })
     },
diff --git a/admin/src/views/stock/assetCate.vue b/admin/src/views/stock/assetCate.vue
index cfa31b6..69c9400 100644
--- a/admin/src/views/stock/assetCate.vue
+++ b/admin/src/views/stock/assetCate.vue
@@ -3,11 +3,11 @@
     <template v-slot:table-wrap>
       <ul class="toolbar">
         <li><el-button type="primary" @click="handleEdit()" icon="el-icon-plus">鏂板缓</el-button></li>
-        <li><el-button type="primary" @click="exportExcel">瀵煎嚭</el-button></li>
+<!--        <li><el-button type="primary" @click="exportExcel">瀵煎嚭</el-button></li>-->
       </ul>
       <el-table row-key="id" :tree-props="{ children: 'childCategoryList' }" v-loading="isWorking.search"
         :data="dataList" stripe @selection-change="handleSelectionChange">
-        <el-table-column prop="name" label="璧勪骇鍒嗙被" min-width="100px"></el-table-column>
+        <el-table-column prop="name" label="鐗╂枡鍒嗙被" min-width="100px"></el-table-column>
         <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
         <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete'])" label="鎿嶄綔"
           min-width="120" fixed="right">
@@ -68,7 +68,7 @@
   methods: {
     handleEdit(row) {
       this.isShowEdit = true
-      let str = row && row.id ? '缂栬緫璧勪骇鍒嗙被' : '鏂板缓璧勪骇鍒嗙被'
+      let str = row && row.id ? '缂栬緫鐗╂枡鍒嗙被' : '鏂板缓鐗╂枡鍒嗙被'
       this.$nextTick(() => {
         this.$refs.CateEditRef.open(str)
         this.$refs.CateEditRef.getList()
diff --git a/admin/src/views/stock/assetList.vue b/admin/src/views/stock/assetList.vue
index 1b28a25..7e4042c 100644
--- a/admin/src/views/stock/assetList.vue
+++ b/admin/src/views/stock/assetList.vue
@@ -3,12 +3,20 @@
     <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
     <div class="mt20">
       <el-button type="primary" @click="$refs.newMaterial.open('鏂板缓鐗╂枡')">娣诲姞</el-button>
-      <el-button>瀵煎嚭</el-button>
-      <el-button>瀵煎叆</el-button>
+      <el-button @click="exportExcel">瀵煎嚭</el-button>
+      <el-popover
+        placement="right"
+        trigger="click">
+        <div style="display: flex; align-items: center; justify-content: center;">
+          <el-button type="primary" @click="$refs.uploadFile.click()">瀵煎叆妯℃澘</el-button>
+          <el-button type="text" @click="exportTemplate">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button>
+        </div>
+        <el-button style="margin-left: 10px;" slot="reference">瀵煎叆</el-button>
+      </el-popover>
     </div>
     <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column prop="code" label="璧勪骇缂栫爜" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="name" label="璧勪骇鍚嶇О" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="code" label="鐗╂枡缂栫爜" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="name" label="鐗╂枡鍚嶇О" min-width="100" show-overflow-tooltip />
       <el-table-column prop="qrcode" label="鏉$爜" min-width="100" show-overflow-tooltip />
       <el-table-column prop="brand" label="鍝佺墝" min-width="100" show-overflow-tooltip />
       <el-table-column prop="attr" label="瑙勬牸鍨嬪彿" min-width="100" show-overflow-tooltip />
@@ -38,6 +46,7 @@
       <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
     </div>
     <newMaterial ref="newMaterial" @success="getList" />
+    <input type="file" ref="uploadFile" @change="importTemplate" accept=".xlsx" style="position: fixed; top: -100px;" />
   </div>
 </template>
 
@@ -48,7 +57,7 @@
 import dayjs from 'dayjs'
 import duration from 'dayjs/plugin/duration'
 dayjs.extend(duration)
-import { fetchList, updateStatus, deleteById } from '@/api/ywMaterial'
+import { fetchList, updateStatus, deleteById, exportExcel, importMaterialBatch } from '@/api/ywMaterial'
 export default {
   components: {
     Pagination,
@@ -87,7 +96,43 @@
     this.getList()
   },
   methods: {
+    // 瀵煎嚭妯℃澘
+    exportTemplate () {
+      window.open('/template/material.xlsx')
+    },
+    // 瀵煎叆妯℃澘
+    importTemplate(e) {
+      const FormDate = new FormData()
+      FormDate.append('file', e.target.files[0])
+      importMaterialBatch(FormDate)
+        .then(res => {
+          this.getList()
+        })
+        .finally(() => {
+          this.$refs.uploadFile.value = null
+        })
+    },
+    exportExcel () {
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          exportExcel({
+            page: this.pagination.page,
+            capacity: 1000000,
+            model: this.filters
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+        })
+        .catch(() => {})
+    },
     getList(page) {
+      if (page) {
+        this.pagination.page = page
+      }
       const { pagination, filters } = this
       this.loading = true
       fetchList({
diff --git a/admin/src/views/stock/components/AssetSel.vue b/admin/src/views/stock/components/AssetSel.vue
index d4bb919..f06fbda 100644
--- a/admin/src/views/stock/components/AssetSel.vue
+++ b/admin/src/views/stock/components/AssetSel.vue
@@ -21,14 +21,14 @@
     </el-form>
     <!--  -->
     <el-table @selection-change="handleSelectionChange" :data="list" stripe>
-      <el-table-column type="selection"  width="55" />
+      <el-table-column type="selection" width="55" />
       <el-table-column prop="code" label="鐗╂枡缂栫爜" min-width="100px"></el-table-column>
       <el-table-column prop="name" label="鐗╂枡鍚嶇О" min-width="80px"></el-table-column>
       <el-table-column prop="qrcode" label="鏉$爜" min-width="100px"></el-table-column>
       <el-table-column prop="brand" label="鍝佺墝" min-width="80px"></el-table-column>
       <el-table-column prop="attr" label="瑙勬牸鍨嬪彿" min-width="80px"></el-table-column>
       <el-table-column prop="unitName" label="鍗曚綅" min-width="80px"></el-table-column>
-      <el-table-column prop="maxStock" label="搴撳瓨" min-width="80px"></el-table-column>
+      <el-table-column v-if="isOut" prop="maxStock" label="搴撳瓨" min-width="80px"></el-table-column>
     </el-table>
     <Pagination class="mt10" @size-change="handleSizeChange" @current-change="getList" :pagination="pagination">
     </Pagination>
@@ -82,19 +82,19 @@
     getList(page) {
       const { pagination, searchForm, isOut, warehouseId } = this
       this.listLoading = true
-      if(page){pagination.page = page}
-      console.log('isOut', isOut);
-      
+      if (page) { pagination.page = page }
+      console.log('isOut', isOut)
+
       let fn = isOut ? ywStockPage : fetchList
       fn({
         capacity: pagination.pageSize,
         page: pagination.page,
-        model: {...searchForm,status: 0, warehouseId}
+        model: { ...searchForm, status: 0, warehouseId }
       }).then((res) => {
         this.listLoading = false
         this.list = res.records
         this.pagination.total = res.total || 0
-        if(isOut){
+        if (isOut) {
           this.list.forEach(item => {
             item.brand = item.materialBrand
             item.attr = item.materialAttr
@@ -123,7 +123,7 @@
       if (e && e.length == 2) {
         this.$set(this.searchForm, 'cateId', e[1])
         this.$set(this.searchForm, 'parentCateId', '')
-      }else if((e && e.length == 1)){
+      } else if ((e && e.length == 1)) {
         this.$set(this.searchForm, 'parentCateId', e[0])
         this.$set(this.searchForm, 'cateId', '')
       } else {
diff --git a/admin/src/views/stock/components/OutEdit.vue b/admin/src/views/stock/components/OutEdit.vue
index 0bad33c..e0ec1ad 100644
--- a/admin/src/views/stock/components/OutEdit.vue
+++ b/admin/src/views/stock/components/OutEdit.vue
@@ -17,12 +17,19 @@
             <el-option v-for="op in StoreTypeOps" :key="op.id" :label="op.name" :value="op.id"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item class="w3" label="澶勭悊浜�" prop="name">
-          <el-input v-model="param.createUserName" :disabled="true" v-trim />
+        <el-form-item class="w3" label="棰嗙敤浜�" prop="outUserId">
+          <el-select v-model="param.outUserId" filterable placeholder="璇烽�夋嫨">
+            <el-option v-for="item in userList" :key="item.id" :label="item.realname" :value="item.id">
+            </el-option>
+          </el-select>
         </el-form-item>
         <el-form-item class="w6" label="澶囨敞" prop="remark">
           <el-input v-model="param.remark" placeholder="璇疯緭鍏�" v-trim />
         </el-form-item>
+        <el-form-item class="w3" label="澶勭悊浜�" prop="name">
+          <el-input v-model="param.createUserName" :disabled="true" v-trim />
+        </el-form-item>
+
       </div>
     </el-form>
     <!--  -->
@@ -39,8 +46,9 @@
       <el-table-column prop="unitName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column>
       <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" min-width="90px">
         <template v-slot="{ row }">
-          <el-input oninput="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/^\./g, '')" v-model="row.stock"
-            class="w100"></el-input>
+          <el-input
+            oninput="value=value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#$').replace(/\./g, '').replace('$#$', '.').replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3').replace(/^\./g, '')"
+            v-model="row.stock" class="w100"></el-input>
         </template>
       </el-table-column>
       <el-table-column prop="maxStock" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column>
@@ -60,6 +68,7 @@
 import AssetSel from './AssetSel'
 import { fetchList as getStoreList } from '@/api/ywWarehouse'
 import { ywOutinboundCreate } from '@/api/store/index'
+import { getUserList } from '@/api/system/user'
 import { StoreTypeOps, rules } from './config'
 import { Message } from 'element-ui'
 import dayjs from 'dayjs'
@@ -82,7 +91,8 @@
       rules,
       storeList: [],
       list: [],
-      StoreTypeOps: StoreTypeOps.filter(i => i.type == 1),
+      userList: [],
+      StoreTypeOps: StoreTypeOps.filter(i => i.type == 1 && i.id != 10),
 
       dataList: [],
     }
@@ -95,12 +105,12 @@
       this.$refs['form'].validate((valid) => {
         if (valid) {
           const { param, list } = this
-          if(list.length == 0) return Message.warning('璇峰厛閫夋嫨鐗╂枡淇℃伅')
+          if (list.length == 0) return Message.warning('璇峰厛閫夋嫨鐗╂枡淇℃伅')
           let count = 0 // 鍑哄簱鏁伴噺蹇呭~
           list.forEach(item => {
-            if(!item.stock) count ++
+            if (!item.stock) count++
           })
-          if(count > 0) return Message.warning('璇疯緭鍏ユ纭殑鍑哄簱鏁伴噺')
+          if (count > 0) return Message.warning('璇疯緭鍏ユ纭殑鍑哄簱鏁伴噺')
           this.isLoading = true
           ywOutinboundCreate({
             ...param,
@@ -116,19 +126,26 @@
         }
       })
     },
+    getUser() {
+      getUserList({})
+        .then(res => {
+          this.userList = res
+        })
+    },
     changeStore() {
       this.list = []
     },
     initData() {
       this.$set(this.param, 'doneDate', dayjs().format('YYYY-MM-DD'))
-      getStoreList({ capacity: 9999, page: 1, model: {status: 0} }).then(res => {
+      getStoreList({ capacity: 9999, page: 1, model: { status: 0 } }).then(res => {
         this.storeList = res.records || []
       })
+      this.getUser()
     },
     changeSel(val) {
       const list = val
       list.forEach(item => {
-        if(this.list.indexOf(item.id) === -1){
+        if (this.list.indexOf(item.id) === -1) {
           item.materialId = item.id
           item.stock = null
           item.createDate = null
@@ -142,15 +159,15 @@
 
     },
     handleOpenMaterial() {
-      if(!this.param.warehouseId) return Message.warning('璇峰厛閫夋嫨鍑哄簱浠撳簱')
+      if (!this.param.warehouseId) return Message.warning('璇峰厛閫夋嫨鍑哄簱浠撳簱')
       this.isShowSel = true
       this.$nextTick(() => {
         this.$refs.AssetSelRef.isShowModal = true
         this.$refs.AssetSelRef.isOut = true
         this.$refs.AssetSelRef.warehouseId = this.param.warehouseId
         this.$refs.AssetSelRef.getList()
-        console.log('-----');
-        
+        console.log('-----')
+
       })
     },
     close() {
diff --git a/admin/src/views/stock/components/config.js b/admin/src/views/stock/components/config.js
index f03110b..30a9d84 100644
--- a/admin/src/views/stock/components/config.js
+++ b/admin/src/views/stock/components/config.js
@@ -3,16 +3,18 @@
   { name: '棰嗙敤閫�鍥�', id: 1, type: 0 },
   { name: '搴撳瓨璋冩暣', id: 2, type: 0 },
   { name: '鍏跺畠鍏ュ簱', id: 3, type: 0 },
-  // { name: '鐩樼泩鍏ュ簱', id: 4, type: 0 },
+  { name: '鐩樼泩鍏ュ簱', id: 4, type: 0 },
+
   { name: '棰嗙敤鍑哄簱', id: 5, type: 1 },
   { name: '浠撳簱鍑哄崟', id: 6, type: 1 },
   { name: '璋冩暣鍑哄簱', id: 7, type: 1 },
   { name: '閲囪喘鍑哄簱', id: 8, type: 1 },
   { name: '鍏跺畠鍑哄簱', id: 9, type: 1 },
-  // { name: '鐩樺嚭鍑哄簱', id: 10, type: 1 },
+  { name: '鐩樹簭鍑哄簱', id: 10, type: 1 },
 ]
 export const rules = {
   warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+  outUserId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
   doneDate: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
   type: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
 }
\ No newline at end of file
diff --git a/admin/src/views/stock/components/inventoryDetails.vue b/admin/src/views/stock/components/inventoryDetails.vue
index 790d7bf..b5e7a9b 100644
--- a/admin/src/views/stock/components/inventoryDetails.vue
+++ b/admin/src/views/stock/components/inventoryDetails.vue
@@ -36,10 +36,10 @@
             <div class="list">
                 <div class="list_search">
                     <div class="list_search_left">
-                        <el-input v-model="form.code" style="width: 200px; margin-right: 10px;" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�/缂栫爜"></el-input>
+                        <el-input v-model="form.materialCode" style="width: 200px; margin-right: 10px;" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�/缂栫爜"></el-input>
                         <el-select v-model="form.status" style="width: 150px; margin-right: 10px;" placeholder="鐩樼偣鐘舵��">
                             <el-option label="宸茬洏" :value="1"></el-option>
-                            <el-option label="鏈洏" :value="0"></el-option>
+                            <el-option label="鏈洏" :value="2"></el-option>
                         </el-select>
                         <el-select v-model="form.type" style="width: 150px; margin-right: 10px;" placeholder="鐩樼偣缁撴灉">
                             <el-option label="璐﹀疄鐩哥" :value="0"></el-option>
@@ -48,7 +48,7 @@
                         </el-select>
                         <el-button type="primary" @click="getList">鏌ヨ</el-button>
                         <el-button @click="clear">娓呯┖</el-button>
-                        <el-button>瀵煎嚭</el-button>
+                        <el-button @click="exportExcel">瀵煎嚭</el-button>
                     </div>
                     <div class="list_search_right">
                         <span>宸茬洏:{{info.finishAmount || 0}}</span>
@@ -60,15 +60,21 @@
                 </div>
                 <div style="width: 100%; margin: 20px 0;">
                     <el-table :data="list" stripe>
-                        <el-table-column prop="materialCode" label="璧勪骇缂栫爜" show-overflow-tooltip />
-                        <el-table-column prop="materialName" label="璧勪骇鍚嶇О" show-overflow-tooltip />
+                        <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" show-overflow-tooltip />
+                        <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" show-overflow-tooltip />
                         <el-table-column prop="materialQrcode" label="鏉$爜" show-overflow-tooltip />
                         <el-table-column prop="materialBrand" label="鍝佺墝" show-overflow-tooltip />
                         <el-table-column prop="materialAttr" label="瑙勬牸鍨嬪彿" show-overflow-tooltip />
                         <el-table-column prop="materialUnitName" label="鍗曚綅" show-overflow-tooltip />
                         <el-table-column prop="warehouseName" label="鎵�鍦ㄤ粨搴�" show-overflow-tooltip />
                         <el-table-column prop="stock" label="璐﹂潰鏁伴噺" show-overflow-tooltip />
-                        <el-table-column prop="actStock" label="鐩樼偣鏁伴噺" show-overflow-tooltip />
+                        <el-table-column label="鐩樼偣鏁伴噺" show-overflow-tooltip>
+                            <template slot-scope="{row}">
+                                <span style="color: green;" v-if="row.type === 1">{{row.actStock}}</span>
+                                <span style="color: red;" v-else-if="row.type === 2">{{row.actStock}}</span>
+                                <span v-else>{{row.actStock}}</span>
+                            </template>
+                        </el-table-column>
                         <el-table-column prop="remark" label="澶囨敞" show-overflow-tooltip />
                     </el-table>
                 </div>
@@ -91,7 +97,7 @@
 <script>
   import GlobalWindow from '@/components/common/GlobalWindow'
   import BaseOpera from '@/components/base/BaseOpera'
-  import { ywStocktakingRecordPage, getById } from '@/api/ywStocktaking'
+  import { ywStocktakingRecordPage, getById, exportExcel } from '@/api/ywStocktaking'
   export default {
     name: "inventoryDetails",
     components: {
@@ -104,7 +110,7 @@
         info: {},
         list: [],
         form: {
-          code: '',
+          materialCode: '',
           status: '',
           type: ''
         },
@@ -114,6 +120,26 @@
       }
     },
     methods: {
+      exportExcel () {
+        this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+          .then(() => {
+            exportExcel({
+              page: this.page,
+              capacity: 1000000,
+              model: {
+                ...this.form,
+                stocktakingId: this.id
+              }
+            })
+              .then(response => {
+                this.download(response)
+              })
+              .catch(e => {
+                this.$tip.apiFailed(e)
+              })
+          })
+          .catch(() => {})
+      },
       handleSizeChange(size) {
         this.pageSize = size
         this.getList()
@@ -139,6 +165,7 @@
         this.form.name = ''
         this.form.status = ''
         this.form.type = ''
+        this.form.materialCode = ''
         this.page = 1
         this.getList()
       },
@@ -148,12 +175,13 @@
           page: this.page,
           model: {
             stocktakingId: this.id,
-            code: this.form.code,
+            materialCode: this.form.materialCode,
             status: this.form.status,
             type: this.form.type
           }
         }).then(res => {
           this.list = res.records
+          this.total = res.total
         })
       }
     }
diff --git a/admin/src/views/stock/components/newMaterial.vue b/admin/src/views/stock/components/newMaterial.vue
index 6c45610..6f887f4 100644
--- a/admin/src/views/stock/components/newMaterial.vue
+++ b/admin/src/views/stock/components/newMaterial.vue
@@ -10,7 +10,7 @@
                 <el-form :model="form" label-position="top" ref="form" :rules="rules">
                     <div class="list">
                         <el-form-item label="鐗╂枡缂栫爜" prop="code">
-                            <el-input v-model="form.code" placeholder="涓嶈緭鍏ョ郴缁熶細鑷姩缂栫爜" v-trim />
+                            <el-input v-model="form.code" :disabled="form.id" placeholder="涓嶈緭鍏ョ郴缁熶細鑷姩缂栫爜" v-trim />
                         </el-form-item>
                         <el-form-item label="鐗╂枡鍚嶇О" prop="name">
                             <el-input v-model="form.name" placeholder="璇疯緭鍏�" v-trim />
@@ -46,7 +46,9 @@
                                 :action="uploadImgUrl"
                                 :file-list="fileList"
                                 :data="uploadData"
+                                :limit="1"
                                 list-type="picture-card"
+                                :on-exceed="exceed"
                                 :on-success="uploadAvatarSuccess"
                                 :on-remove="dele">
                                 <i class="el-icon-plus"></i>
@@ -147,6 +149,9 @@
           }
         })
       },
+      exceed() {
+        this.$message.warning('鍙兘涓婁紶涓�寮犲浘鐗囷紒')
+      },
       getCateVal(e) {
         this.form.parentCateId = e[0]
         this.form.cateId = e[1]
diff --git a/admin/src/views/stock/components/newWarehouse.vue b/admin/src/views/stock/components/newWarehouse.vue
index e2f076b..92b7471 100644
--- a/admin/src/views/stock/components/newWarehouse.vue
+++ b/admin/src/views/stock/components/newWarehouse.vue
@@ -63,7 +63,8 @@
         },
         // 楠岃瘉瑙勫垯
         rules: {
-          name: [{ required: true, message: '浠撳簱鍚嶇О涓嶈兘涓虹┖', trigger: 'blur' }]
+          name: [{ required: true, message: '浠撳簱鍚嶇О涓嶈兘涓虹┖', trigger: 'blur' }],
+          userId: [{ required: true, message: '璐熻矗浜轰笉鑳戒负绌�', trigger: 'blur' }]
         },
         userList: []
       }
diff --git a/admin/src/views/stock/in.vue b/admin/src/views/stock/in.vue
index c35f304..a1ee0ea 100644
--- a/admin/src/views/stock/in.vue
+++ b/admin/src/views/stock/in.vue
@@ -18,6 +18,7 @@
       </el-table-column>
       <el-table-column prop="createUserName" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip />
       <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
+      <el-table-column prop="remark" label="澶囨敞" min-width="100" show-overflow-tooltip />
       <el-table-column prop="workTime" label="鎿嶄綔" min-width="80" show-overflow-tooltip>
         <template v-slot="{ row }">
           <span @click="handleDetail(row)" v-permissions="['business:ywoutinboundrecord:query']" class="primaryColor pointer">鏌ョ湅璇︽儏</span>
diff --git a/admin/src/views/stock/out.vue b/admin/src/views/stock/out.vue
index c94aedf..9a01b67 100644
--- a/admin/src/views/stock/out.vue
+++ b/admin/src/views/stock/out.vue
@@ -15,8 +15,10 @@
           <div v-for="item in row.recordList">{{ item.materialName }}[{{ item.materialCode }}]*{{ item.stock }}{{ item.materialUnitName }}</div>
         </template>
       </el-table-column>
-      <el-table-column prop="createUserName" label="棰嗙敤浜�" min-width="90" show-overflow-tooltip />
+      <el-table-column prop="outUserName" label="棰嗙敤浜�" min-width="90" show-overflow-tooltip />
+      <el-table-column prop="createUserName" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip />
       <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip />
+      <el-table-column prop="remark" label="澶囨敞" min-width="100" show-overflow-tooltip />
       <el-table-column prop="workTime" label="鎿嶄綔" min-width="80" show-overflow-tooltip>
         <template v-slot="{ row }">
           <span @click="handleDetail(row)" v-permissions="['business:ywoutinboundrecord:query']" class="primaryColor pointer">鏌ョ湅璇︽儏</span>
@@ -40,7 +42,7 @@
 import dayjs from 'dayjs'
 import duration from 'dayjs/plugin/duration'
 dayjs.extend(duration)
-import { ywOutinboundPage } from '@/api'
+import { ywOutinboundPage, ywOutinboundEx } from '@/api'
 import { fetchList as getStoreList } from '@/api/ywWarehouse'
 import { StoreTypeOps, rules } from './components/config'
 export default {
@@ -87,7 +89,7 @@
             label: '鍑哄簱绫诲瀷',
             labelCode: 'name',
             valueCode: 'id',
-            options: StoreTypeOps.filter(i => i.type == 0)
+            options: StoreTypeOps.filter(i => i.type == 1)
           },
         ],
         online: true
diff --git a/admin/src/views/stock/query.vue b/admin/src/views/stock/query.vue
index d5d750f..565c971 100644
--- a/admin/src/views/stock/query.vue
+++ b/admin/src/views/stock/query.vue
@@ -26,6 +26,7 @@
 import duration from 'dayjs/plugin/duration'
 dayjs.extend(duration)
 import { ywStockPage,ywStockPageEx  } from '@/api/store/index'
+import { fetchList as getStoreList } from '@/api/ywWarehouse'
 export default {
   components: {
     Pagination,
@@ -48,6 +49,8 @@
             filed: 'warehouseId',
             type: 'select',
             label: '鎵�鍦ㄤ粨搴�',
+            labelCode: 'name',
+            valueCode: 'id',
             options: []
           },
           {
@@ -67,8 +70,14 @@
   },
   created() {
     this.getList()
+    this.initData()
   },
   methods: {
+    initData() {
+      getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => {
+        this.queryFormConfig.formItems[0].options = res.records || []
+      })
+    },
     getList(page) {
       const { pagination, filters } = this
       this.loading = true
diff --git a/admin/src/views/stock/record.vue b/admin/src/views/stock/record.vue
index b2e1863..94cc276 100644
--- a/admin/src/views/stock/record.vue
+++ b/admin/src/views/stock/record.vue
@@ -5,7 +5,7 @@
       <el-button @click="handleEx()" v-permissions="['business:ywoutinboundrecord:exportExcel']">瀵煎嚭</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column prop="doneDate" label="鍗曟嵁鏃ユ湡" min-width="90" show-overflow-tooltip />
+      <el-table-column prop="doneDate" label="鍗曟嵁鏃ユ湡" min-width="100" show-overflow-tooltip />
       <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" min-width="90" show-overflow-tooltip />
       <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" min-width="90" show-overflow-tooltip />
       <el-table-column prop="carCodeFront" label="鐗╂枡鍒嗙被" min-width="120" show-overflow-tooltip>
diff --git a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
index f3c7e3a..02f6cad 100644
--- a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
+++ b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
@@ -8,7 +8,6 @@
           <el-option label="鍏叡缁翠慨" :value="1"></el-option>
         </el-select>
       </el-form-item>
-  
       <el-form-item label="鎶ヤ慨鍖哄煙" prop="rooms">
         <el-cascader
           v-model="form.rooms"
@@ -23,28 +22,6 @@
               children: 'projectDataVOList'
           }" />
       </el-form-item>
-      
-<!--      <el-form-item label="閫夋嫨椤圭洰" prop="projectId">-->
-<!--        <el-select v-model="form.projectId" clearable filterable @change="getBuild">-->
-<!--          <el-option v-for="item in projectList" :label="item.name" :value="item.id" />-->
-<!--        </el-select>-->
-<!--      </el-form-item>-->
-<!--      <el-form-item label="閫夋嫨妤煎畤" prop="buildingId">-->
-<!--        <el-select v-model="form.buildingId" clearable filterable @change="changeBuild">-->
-<!--          <el-option v-for="item in buildList" :label="item.name" :value="item.id" />-->
-<!--        </el-select>-->
-<!--      </el-form-item>-->
-
-<!--      <el-form-item v-if="form.areaType == 1" label="閫夋嫨妤煎眰" prop="floorId">-->
-<!--        <el-select v-model="form.floorId">-->
-<!--          <el-option v-for="item in levelList" clearable filterable :label="item.name" :value="item.id" />-->
-<!--        </el-select>-->
-<!--      </el-form-item>-->
-<!--      <el-form-item v-if="form.areaType == 0" label="閫夋嫨鎴块棿" prop="roomId">-->
-<!--        <el-select v-model="form.roomId" clearable filterable>-->
-<!--          <el-option v-for="item in roomList" :label="item.roomNum" :value="item.id" />-->
-<!--        </el-select>-->
-<!--      </el-form-item>-->
       <el-form-item label="宸ュ崟鍒嗙被" prop="cateId">
         <el-cascader v-model="form.areaIds" @change="changeSel" placeholder="璇烽�夋嫨鍒嗙被" clearable :options="cateList"
           :props="{
@@ -156,12 +133,13 @@
   methods: {
     open(title, target) {
       this.title = title
+      this.fileList = []
       this.visible = true
-      this.getProject()
       this.getCate()
       this.getHouseTree()
       // 鏂板缓
       if (target == null) {
+        this.getProject()
         this.form = {
           id: null,
           editDate: '',
@@ -199,8 +177,12 @@
         })
         return
       }
+      getProjectList({}).then(res => {
+        this.projectList = res || []
+      })
       // 缂栬緫
       this.$nextTick(() => {
+        // this.$refs.form.resetFields()
         for (const key in this.form) {
           this.form[key] = target[key]
         }
@@ -210,7 +192,7 @@
       this.form.rooms = []
       this.form.projectId = ''
       this.form.buildingId = ''
-      this.form.levelList = ''
+      this.form.floorId = ''
       this.form.roomId = ''
     },
     getHouseVal(e) {
diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue
index 0743cfa..039bad0 100644
--- a/admin/src/views/workorder/components/detail.vue
+++ b/admin/src/views/workorder/components/detail.vue
@@ -1,6 +1,6 @@
 <template>
-  <GlobalWindow width="100%" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
-    @confirm="confirm">
+  <GlobalWindow width="100%" title="宸ュ崟璇︽儏" :withFooter="withFooter" :visible.sync="visible" :confirm-working="isWorking"
+    @confirm="confirm" @close="closeView">
     <div class="main">
       <div class="title">
         <div class="title_left">
@@ -11,7 +11,7 @@
             <div class="status gray" v-if="info.dealStatus == 2">宸插鐞�</div>
           </div>
         </div>
-        <el-button v-if="info.origin === 1" @click="openWT">鏌ョ湅闂涓婃姤</el-button>
+        <el-button v-if="info.origin === 1 && isShow" @click="openWT">鏌ョ湅闂涓婃姤</el-button>
       </div>
       <div class="main_content">
         <div class="list">
@@ -171,31 +171,33 @@
           </div>
         </template>
       </el-form>
+      <!--  闂涓婃姤璇︽儏  -->
+      <ProblemReportingDetails ref="problem_Reporting_Details" @close="closeDetails" />
     </div>
-    <!--  闂涓婃姤璇︽儏  -->
-    <problemReportingDetails ref="problemReportingDetails" />
   </GlobalWindow>
 </template>
 
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import BaseOpera from '@/components/base/BaseOpera'
-import problemReportingDetails from './problemReportingDetails'
+// import ProblemReportingDetails from './problemReportingDetails'
+// import ProblemReportingDetails from '@/views/workorder/components/problemReportingDetails'
 import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder'
 import { getByWorkorderId } from '@/api/ywProblem'
 import { getUserList } from '@/api/system/user'
 import { Message, Loading } from 'element-ui'
+import { mapState } from 'vuex'
 import dayjs from 'dayjs'
 export default {
+  name: 'detail',
   components: {
     GlobalWindow,
-    problemReportingDetails
+    ProblemReportingDetails: () => import('./problemReportingDetails')
   },
   extends: BaseOpera,
   data() {
     return {
       id: '',
-      visible: false,
       param: {
         dealType: 0
       },
@@ -211,22 +213,47 @@
       uploadData: {
         folder: 'YW_WORKORDER_FILE'
       },
+      isShow: true,
+      test: false
     }
   },
   computed: {
     userInfo() {
       return this.$store.state.userInfo
+    },
+    withFooter() {
+      if (this.info) {
+        return this.info.dealStatus === 0 || (this.info.dealStatus === 1 && (this.userInfo.id === this.info.dealUserId));
+      } else {
+        return false;
+      }
     }
   },
   created() {
     this.getStaff()
   },
   methods: {
+    closeDetails() {
+      console.log('1')
+      this.test = false
+    },
+    closeView() {
+      this.$emit('close')
+      this.visible = false
+    },
+    open (title, target, show) {
+      this.title = title
+      this.isShow = show
+      this.id = target.workorderId
+      this.getDetail()
+    },
     openWT() {
       getByWorkorderId(this.id)
         .then(res => {
-          console.log(res)
-          this.$refs.problemReportingDetails.open('闂涓婃姤璇︽儏', res)
+          this.test = true
+          this.$nextTick(() => {
+            this.$refs.problem_Reporting_Details.open('闂涓婃姤璇︽儏', res, false)
+          })
         })
     },
     confirm() {
@@ -258,6 +285,7 @@
         if (this.info.dealStatus == 1) {
           this.$set(this.param, 'getDate', dayjs().format('YYYY-MM-DD HH:mm:ss'))
         }
+        this.visible = true
       })
     },
     getStaff() {
diff --git a/admin/src/views/workorder/components/handleProblem.vue b/admin/src/views/workorder/components/handleProblem.vue
index 6560bc3..838ab1f 100644
--- a/admin/src/views/workorder/components/handleProblem.vue
+++ b/admin/src/views/workorder/components/handleProblem.vue
@@ -104,7 +104,7 @@
                             :file-list="form.workOrderFileList"
                             accept=".png,.jpg,.jpeg,.PNG,.JPG"
                             :on-success="getFile"
-                            :data="{ folder: 'YW_PROBLEM' }"
+                            :data="{ folder: 'YW_WORKORDER' }"
                             list-type="picture-card">
                             <i class="el-icon-plus"></i>
                         </el-upload>
diff --git a/admin/src/views/workorder/components/problemReportingDetails.vue b/admin/src/views/workorder/components/problemReportingDetails.vue
index cbdcbbb..83379bb 100644
--- a/admin/src/views/workorder/components/problemReportingDetails.vue
+++ b/admin/src/views/workorder/components/problemReportingDetails.vue
@@ -3,6 +3,7 @@
         :title="title"
         :showConfirm="false"
         :visible.sync="visible"
+        @close="closeView"
         width="100%">
         <div class="wt">
             <div class="wt_head">
@@ -10,9 +11,9 @@
                     <div class="title">闂璇︽儏</div>
                     <el-tag style="margin-left: 10px;" v-if="form.dealStatus === 0">寰呭鐞�</el-tag>
                     <el-tag style="margin-left: 10px;" v-if="form.dealStatus === 1">宸茶浆宸ュ崟</el-tag>
-                    <el-tag style="margin-left: 10px;" v-if="form.dealStatus === 2">宸插叧闂�</el-tag>
+                    <el-tag style="margin-left: 10px;" type="info" v-if="form.dealStatus === 2">宸插叧闂�</el-tag>
                 </div>
-                <el-button @click="handleDetail" v-if="form.dealStatus === 1">鏌ョ湅宸ュ崟</el-button>
+                <el-button @click="handleDetail" v-if="form.dealStatus === 1 && isShow">鏌ョ湅宸ュ崟</el-button>
             </div>
             <div class="wt_content">
                 <div class="wt_content_row" style="width: 25%;">
@@ -45,7 +46,7 @@
             </div>
             <div class="wt_head">
                 <div class="wt_head_title">
-                    <div class="title">闂璇︽儏</div>
+                    <div class="title">澶勭悊缁撴灉</div>
                 </div>
             </div>
             <div class="wt_content">
@@ -62,31 +63,46 @@
                     鍏抽棴璇存槑锛歿{form.dealInfo}}
                 </div>
             </div>
+            <!--    宸ュ崟璇︽儏    -->
+            <GDDetail ref="GD_Detail" @close="closeDetails" />
         </div>
-        <!--    宸ュ崟璇︽儏    -->
-        <Detail v-if="showDetail" ref="DetailRef" @close="showDetail = false" />
     </GlobalWindow>
 </template>
 
 <script>
   import BaseOpera from '@/components/base/BaseOpera'
   import GlobalWindow from '@/components/common/GlobalWindow'
-  import Detail from './detail'
+  // import GDDetail from './detail'
+  // import GDDetail from '@/views/workorder/components/detail'
   import { getById } from '@/api/ywProblem'
   export default {
     name: "problemReportingDetails",
     extends: BaseOpera,
-    components: { GlobalWindow, Detail },
+    components: {
+      GlobalWindow,
+      GDDetail: () => import('./detail')
+    },
     data() {
       return {
         form: {},
         showDetail: false,
+        isShow: true,
+        test: false
       }
     },
     methods: {
-      open (title, target) {
+      closeView() {
+        this.$emit('close')
+        this.visible = false
+      },
+      closeDetails() {
+        console.log('1')
+        this.test = false
+      },
+      open (title, target, show) {
         this.title = title
         this.form = target
+        this.isShow = show
         getById(target.id)
             .then(res => {
               this.form = res
@@ -94,11 +110,13 @@
             })
       },
       handleDetail() {
-        this.showDetail = true
+        this.test = true
         this.$nextTick(() => {
-          this.$refs.DetailRef.visible = true
-          this.$refs.DetailRef.id = this.form.workorderId
-          this.$refs.DetailRef.getDetail()
+          this.$refs.GD_Detail.open('宸ュ崟璇︽儏', { workorderId: this.form.workorderId }, false)
+            // this.$refs.GD_Detail.isShow = false
+            // this.$refs.GD_Detail.visible = true
+            // this.$refs.GD_Detail.id = this.form.workorderId
+            // this.$refs.GD_Detail.getDetail()
         })
       },
       returnText(status) {
diff --git a/admin/src/views/workorder/problemReporting.vue b/admin/src/views/workorder/problemReporting.vue
index 1de3fb4..867ce47 100644
--- a/admin/src/views/workorder/problemReporting.vue
+++ b/admin/src/views/workorder/problemReporting.vue
@@ -7,7 +7,7 @@
             </el-form-item>
             <el-form-item prop="dealStatus" label="澶勭悊鐘舵��">
                 <el-select v-model="searchForm.dealStatus">
-                    <el-option label="鏈鐞�" :value="0"></el-option>
+                    <el-option label="寰呭鐞�" :value="0"></el-option>
                     <el-option label="宸茶浆宸ュ崟" :value="1"></el-option>
                     <el-option label="宸插叧闂�" :value="2"></el-option>
                 </el-select>
@@ -28,7 +28,7 @@
         <!-- 琛ㄦ牸鍜屽垎椤� -->
         <template v-slot:table-wrap>
             <el-table v-loading="isWorking.search" :data="tableData.list" stripe>
-                <el-table-column prop="remark" label="鎻忚堪" min-width="70px"></el-table-column>
+                <el-table-column prop="content" label="鎻忚堪" min-width="70px"></el-table-column>
                 <el-table-column prop="position" label="浣嶇疆" min-width="100px"></el-table-column>
                 <el-table-column label="鐜板満鍥剧墖" min-width="100px">
                     <template slot-scope="{row}">
@@ -53,7 +53,7 @@
                     fixed="right">
                     <template slot-scope="{row}">
                         <el-button type="text" v-if="row.dealStatus === 0" @click="$refs.handleProblem.open('闂涓婃姤', row)">澶勭悊</el-button>
-                        <el-button type="text" @click="$refs.problemReportingDetails.open('闂涓婃姤璇︽儏', row)">鏌ョ湅璇︽儏</el-button>
+                        <el-button type="text" @click="$refs.problemReportingDetails.open('闂涓婃姤璇︽儏', row, true)">鏌ョ湅璇︽儏</el-button>
                     </template>
                 </el-table-column>
             </el-table>
diff --git a/admin/src/views/workorder/workorderList.vue b/admin/src/views/workorder/workorderList.vue
index d22f32d..6d497de 100644
--- a/admin/src/views/workorder/workorderList.vue
+++ b/admin/src/views/workorder/workorderList.vue
@@ -90,7 +90,7 @@
       <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
       </pagination>
     </template>
-    <Detail v-if="showDetail" ref="DetailRef" @close="showDetail = false" @success="search" />
+    <Detail v-if="openDetail" ref="DetailRef" @close="openDetail = false" @success="search" />
     <!-- 鏂板缓/淇敼 -->
     <OperaYwWorkorderWindow ref="operaYwWorkorderWindow" @success="handlePageChange" />
   </TableLayout>
@@ -112,7 +112,7 @@
   data() {
     return {
       // 鎼滅储
-      showDetail: false,
+      openDetail: false,
       searchForm: {
         selDate: [],
         areaIds: '',
@@ -138,11 +138,13 @@
   },
   methods: {
     handleDetail(row) {
-      this.showDetail = true
+      this.openDetail = true
       this.$nextTick(() => {
-        this.$refs.DetailRef.visible = true
-        this.$refs.DetailRef.id = row.id
-        this.$refs.DetailRef.getDetail()
+        this.$refs.DetailRef.open('宸ュ崟璇︽儏', { workorderId: row.id }, true)
+        // this.$refs.DetailRef.isShow = true
+        // this.$refs.DetailRef.visible = true
+        // this.$refs.DetailRef.id = row.id
+        // this.$refs.DetailRef.getDetail()
 
       })
     },
diff --git a/h5/pages.json b/h5/pages.json
index 908bd3a..f5f619d 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -118,6 +118,13 @@
 			{
 				"navigationBarTitleText" : "浠诲姟涓績"
 			}
+		},
+		{
+			"path" : "pages/polling/empty",
+			"style" : 
+			{
+				"navigationBarTitleText" : "鎵爜宸℃"
+			}
 		}
 	],
 	"globalStyle": {
diff --git a/h5/pages/inventory/detail.vue b/h5/pages/inventory/detail.vue
index 29a92e6..268f979 100644
--- a/h5/pages/inventory/detail.vue
+++ b/h5/pages/inventory/detail.vue
@@ -32,7 +32,7 @@
 						<view class="line">瑙勬牸鍨嬪彿锛歿{ item.materialAttr }}</view>
 						<view class="line" v-if="item.status == 0">
 							<view class="">璐﹂潰鏁伴噺锛歿{ item.stock }}{{ item.materialUnitName }}</view>
-							<view @click.stop="openEheck(item)" class="btn">鎵ц鐩樼偣</view>
+							<view v-if="info.status == 1" @click.stop="openEheck(item)" class="btn">鎵ц鐩樼偣</view>
 						</view>
 						<view class="static" v-if="item.status == 1">
 							<view class="ite">
@@ -81,13 +81,15 @@
 						<view class="line">
 							<view class="la">鐩樼偣鏁伴噺锛�</view>
 							<view class="val">
-								<view class="wrap">
-									<template v-if="!modalForm.handleType">
-										<image v-if="!modalForm.actStock" src="@/static/side/btn_jian_grey@2x.png" mode=""></image>
-										<image v-else @click="changeAct(-1)" src="@/static/side/btn_jian@3x.png" mode=""></image>
+								<view class="wrap">
+									<template v-if="!modalForm.handleType">
+										<image v-if="!modalForm.actStock" src="@/static/side/btn_jian_grey@2x.png" mode=""></image>
+										<image v-else @click="changeAct(-1)" src="@/static/side/btn_jian@3x.png" mode=""></image>
 									</template>
-									<input :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" type="digit" v-model="modalForm.actStock"></input>
-									<image v-if="!modalForm.handleType" @click="changeAct(1)" src="@/static/side/btn_jia@3x.png" mode=""></image>
+									<input :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" type="digit"
+										v-model="modalForm.actStock"></input>
+									<image v-if="!modalForm.handleType" @click="changeAct(1)" src="@/static/side/btn_jia@3x.png" mode="">
+									</image>
 								</view>
 								<view class="unit">{{ modalForm.materialUnitName }}</view>
 							</view>
@@ -95,8 +97,9 @@
 					</view>
 					<view class="remark">
 						<view class="la">澶囨敞锛�</view>
-						<textarea v-model="modalForm.remark" :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" placeholder="璇峰~鍐欏娉�" :maxlength="-1" placeholder-class="placeholder9"
-							cols="30" rows="10"></textarea>
+						<textarea v-model="modalForm.remark"
+							:disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" placeholder="璇峰~鍐欏娉�"
+							:maxlength="-1" placeholder-class="placeholder9" cols="30" rows="10"></textarea>
 					</view>
 					<view v-if="!modalForm.handleType" class="btns">
 						<view class="btn" @click="showModal = false">鍙栨秷</view>
@@ -127,557 +130,574 @@
 </template>
 
 <script>
-import {
-	ywStocktakingDetail,
-	getYwStocktakingRecord,
-	takingDataOpen,
-	ywStocktaFinishById
-} from '@/api'
-import {
-	Html5Qrcode
-} from 'html5-qrcode'
-export default {
-	data() {
-		return {
-			param: {},
-			info: {},
-			id: '',
-			activeTab: 0,
+	import {
+		ywStocktakingDetail,
+		getYwStocktakingRecord,
+		takingDataOpen,
+		ywStocktaFinishById
+	} from '@/api'
+	import {
+		Html5Qrcode
+	} from 'html5-qrcode'
+	export default {
+		data() {
+			return {
+				param: {},
+				info: {},
+				id: '',
+				activeTab: 0,
 
-			list: [],
-			page: 0,
-			total: 0,
+				list: [],
+				page: 0,
+				total: 0,
 
-			showModal: false,
-			showTip: false,
-			modalForm: {},
+				showModal: false,
+				showTip: false,
+				modalForm: {},
 
-			html5Qrcode: null,
-			isScaning: false,
+				html5Qrcode: null,
+				isScaning: false,
 
-		}
-	},
-	onLoad(op) {
-		this.id = op.id
-		this.getDetail()
-		this.getList()
-	},
-	methods: {
-		itemClick(item) {
-			if(item.status == 1){
-				this.showItem(item)
-			}
-		},
-		showItem(item){
-			this.showModal = true
-			this.modalForm = {
-				...item,
-				handleType: this.info.status != 1 ? 'detail' : ''
-			}
-			console.log('modalForm', this.modalForm);
-		},
-		getDetail() {
-			const {
-				id
-			} = this
-			ywStocktakingDetail(id).then(res => {
-				this.info = res.data
-
-			})
-		},
-		handleQuery(str) {
-			this.list = []
-			this.page = 1
-			this.getList(str)
-		},
-		getList(str) {
-			const {
-				page,
-				activeTab,
-				id,
-				param
-			} = this
-			getYwStocktakingRecord({
-				capacity: 20,
-				page,
-				model: {
-					status: str || activeTab,
-					stocktakingId: id,
-					...param
-				}
-			}).then(res => {
-				this.list = [...this.list, ...res.data.records]
-				this.total = res.data.total
-				if (this.param.materialQrcode && this.list.length == 1) {
-					this.openEheck(this.list[0])
-					this.$set(this.param, 'materialQrcode', null)
-				}
-			})
-		},
-		scrolltolower() {
-			const {
-				total,
-				list
-			} = this
-			if (list.length < total) {
-				this.page = this.page + 1
-				this.getList()
-			} else {
-				this.showToast('鏆傛棤鏇村鏁版嵁')
 			}
 		},
-		openEheck(item) {
-			this.modalForm = {
-				...item
-			}
-			this.showModal = true
-		},
-		onSubmit() {
-			const {
-				modalForm
-			} = this
-			if (!modalForm.actStock) return this.showToast('璇疯緭鍏ユ纭殑鐩樼偣鏁伴噺')
-			takingDataOpen({
-				...modalForm
-			}).then(res => {
-				if (res.code == 200) {
-					this.showToast('鎻愪氦鎴愬姛')
-					this.handleQuery()
-					this.getDetail()
-					this.showModal = false
-				}
-			})
-		},
-		changeAct(val) {
-			const actStock = this.modalForm.actStock || 0
-			this.$set(this.modalForm, 'actStock', actStock + val)
-		},
-		tabsClick(val) {
-			this.activeTab = val
-			this.page = 0
-			this.list = []
+		onLoad(op) {
+			this.id = op.id
+			this.getDetail()
 			this.getList()
 		},
-		tipSub() {
-			const { info } = this
-			ywStocktaFinishById(info.id).then(res => {
-				this.showTip = false
-				uni.navigateBack()
-			})
-
-		},
-		openQrcode() {
-			this.isScaning = true
-			Html5Qrcode.getCameras().then((devices) => {
-				if (devices && devices.length) {
-					this.html5Qrcode = new Html5Qrcode('reader')
-					this.html5Qrcode.start({
-						facingMode: 'environment'
-					}, {
-						focusMode: 'continuous', //璁剧疆杩炵画鑱氱劍妯″紡
-						fps: 5, //璁剧疆鎵爜璇嗗埆閫熷害
-						qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
-					},
-						(decodeText, decodeResult) => {
-							if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
-								this.stopScan()
-								this.$set(this.param, 'materialQrcode', decodeText)
-								this.handleQuery('null')
-							}
-						},
-						(err) => {
-							// console.log(err);  //閿欒淇℃伅
-						}
-					)
+		methods: {
+			itemClick(item) {
+				if (item.status == 1) {
+					this.showItem(item)
 				}
-			})
-		},
+			},
+			showItem(item) {
+				this.showModal = true
+				this.modalForm = {
+					...item,
+					handleType: this.info.status != 1 ? 'detail' : ''
+				}
+				console.log('modalForm', this.modalForm);
+			},
+			getDetail() {
+				const {
+					id
+				} = this
+				ywStocktakingDetail(id).then(res => {
+					this.info = res.data
 
-		stopScan() {
-			console.log('鍋滄鎵爜')
-			this.isScaning = false
-			if (this.html5Qrcode) {
-				this.html5Qrcode.stop()
+				})
+			},
+			handleQuery() {
+				this.list = []
+				this.page = 1
+				this.getList()
+			},
+			getList() {
+				const {
+					page,
+					activeTab,
+					id,
+					param
+				} = this
+				getYwStocktakingRecord({
+					capacity: 20,
+					page,
+					model: {
+						status: activeTab,
+						stocktakingId: id,
+						...param
+					}
+				}).then(res => {
+					this.list = [...this.list, ...res.data.records || []]
+					this.total = res.data.total
+					if (this.param.materialQrcode && this.total == 1) {
+						this.openEheck(this.list[0])
+						this.param = {}
+					} else if (this.param.materialQrcode && this.total == 0) {
+						this.param = {}
+						uni.showModal({
+							content: '鏈尮閰嶅埌鐗╂枡锛岃閲嶆柊鎵爜',
+							showCancel: false,
+							success: (res) => {
+								if (res.confirm) {
+									this.getList()
+								}
+							}
+						});
+					}
+
+				})
+			},
+			scrolltolower() {
+				const {
+					total,
+					list
+				} = this
+				if (list.length < total) {
+					this.page = this.page + 1
+					this.getList()
+				} else {
+					this.showToast('鏆傛棤鏇村鏁版嵁')
+				}
+			},
+			openEheck(item) {
+				this.modalForm = {
+					...item
+				}
+				this.showModal = true
+			},
+			onSubmit() {
+				const {
+					modalForm
+				} = this
+				if (!modalForm.actStock) return this.showToast('璇疯緭鍏ユ纭殑鐩樼偣鏁伴噺')
+				takingDataOpen({
+					...modalForm
+				}).then(res => {
+					if (res.code == 200) {
+						this.showToast('鎻愪氦鎴愬姛')
+						this.handleQuery()
+						this.getDetail()
+						this.showModal = false
+					}
+				})
+			},
+			changeAct(val) {
+				const actStock = this.modalForm.actStock || 0
+				this.$set(this.modalForm, 'actStock', actStock + val)
+			},
+			tabsClick(val) {
+				this.activeTab = val
+				this.page = 0
+				this.list = []
+				this.getList()
+			},
+			tipSub() {
+				const {
+					info
+				} = this
+				ywStocktaFinishById(info.id).then(res => {
+					this.showTip = false
+					uni.navigateBack()
+				})
+
+			},
+			openQrcode() {
+				this.isScaning = true
+				Html5Qrcode.getCameras().then((devices) => {
+					if (devices && devices.length) {
+						this.html5Qrcode = new Html5Qrcode('reader')
+						this.html5Qrcode.start({
+								facingMode: 'environment'
+							}, {
+								focusMode: 'continuous', //璁剧疆杩炵画鑱氱劍妯″紡
+								fps: 5, //璁剧疆鎵爜璇嗗埆閫熷害
+								qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
+							},
+							(decodeText, decodeResult) => {
+								if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
+									this.stopScan()
+									this.$set(this.param, 'materialQrcode', decodeText)
+									this.handleQuery()
+								}
+							},
+							(err) => {
+								// console.log(err);  //閿欒淇℃伅
+							}
+						)
+					}
+				})
+			},
+
+			stopScan() {
+				console.log('鍋滄鎵爜')
+				this.isScaning = false
+				if (this.html5Qrcode) {
+					this.html5Qrcode.stop()
+				}
 			}
 		}
 	}
-}
 </script>
 
 <style lang="scss">
-.main_app {
-	padding: 0 30rpx;
-	overflow: hidden;
-}
+	.main_app {
+		padding: 0 30rpx;
+		overflow: hidden;
+	}
 
-.tabs {
-	display: flex;
-	width: 750rpx;
-	margin: 12rpx -30rpx 20rpx;
-	border-bottom: 1rpx solid #E5E5E5;
-
-	.tab {
-		font-size: 30rpx;
-		color: #666666;
-		flex: 1;
+	.tabs {
 		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: flex-end;
-		height: 72rpx;
+		width: 750rpx;
+		margin: 12rpx -30rpx 20rpx;
+		border-bottom: 1rpx solid #E5E5E5;
 
-		.name {
+		.tab {
+			font-size: 30rpx;
+			color: #666666;
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: flex-end;
+			height: 72rpx;
+
+			.name {
+				display: flex;
+				align-items: center;
+			}
+
+			.border {
+				width: 54rpx;
+				height: 6rpx;
+				background-color: #fff;
+				border-radius: 3rpx;
+				margin-top: 12rpx;
+			}
+		}
+
+		.active {
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #222222;
+
+			.border {
+				background-color: $primaryColor;
+			}
+
+		}
+
+	}
+
+	.head_wrap {
+		display: flex;
+		align-items: center;
+		margin-bottom: 36rpx;
+
+		.search_wrap {
 			display: flex;
 			align-items: center;
+			width: 100%;
+			height: 76rpx;
+			background: #F7F7F7;
+			border-radius: 38rpx;
+			padding-left: 30rpx;
+
+			input {
+				flex: 1;
+			}
+
+			.search {
+				width: 28rpx;
+				height: 28rpx;
+			}
 		}
 
-		.border {
-			width: 54rpx;
-			height: 6rpx;
+	}
+
+	.scroll_Y {
+		height: calc(100vh - 350rpx);
+	}
+
+	.list {
+
+		.item {
+			border-bottom: 1rpx solid #E5E5E5;
+			padding-bottom: 24rpx;
+			margin-bottom: 16rpx;
+
+			.title {
+				font-weight: 600;
+				font-size: 34rpx;
+				color: #222222;
+				margin-bottom: 10rpx;
+				flex: 1;
+			}
+
+			.head {
+				display: flex;
+				// align-items: center;
+				justify-content: space-between;
+				color: #666666;
+
+				.status {
+					width: 76rpx;
+					text-align: right;
+					padding-top: 3rpx;
+				}
+			}
+
+			.line {
+				height: 60rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				color: #666666;
+
+				.btn {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					height: 60rpx;
+					padding: 0 20rpx;
+					background: #0068FF;
+					box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
+					border-radius: 30rpx;
+					font-size: 26rpx;
+					color: #FFFFFF;
+				}
+			}
+
+			.static {
+				display: flex;
+				height: 84rpx;
+				background: #F7F7F7;
+				font-size: 30rpx;
+				margin-top: 12rpx;
+				padding: 16rpx 0;
+
+				.spi {
+					border: 1rpx solid #E5E5E5;
+				}
+
+				.ite {
+					flex: 1;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+
+					.val {
+						font-weight: 500;
+					}
+				}
+			}
+		}
+	}
+
+	.footer_btn {
+		padding: 20rpx 40rpx 0;
+		border-top: 1px solid #e5e5e5;
+		width: 750rpx;
+		margin: 0 -30rpx;
+
+		.sweep {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			font-size: 32rpx;
+			font-weight: 500;
+			width: 670rpx;
+			height: 88rpx;
+			background: #0068FF;
+			box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
+			border-radius: 44rpx;
+			color: #FFFFFF;
+		}
+
+		.sub_result {
 			background-color: #fff;
-			border-radius: 3rpx;
-			margin-top: 12rpx;
+			color: #FF0000;
+			border: 1rpx solid #FF0000;
+			box-shadow: none
+		}
+
+		image {
+			width: 32rpx;
+			height: 32rpx;
+			margin-right: 6rpx;
 		}
 	}
 
-	.active {
-		font-weight: 600;
-		font-size: 32rpx;
-		color: #222222;
+	.modal_wrap {
+		padding: 36rpx 30rpx;
 
-		.border {
-			background-color: $primaryColor;
+		.modal_title {
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #222222;
+			margin-bottom: 40rpx;
+			text-align: center;
 		}
-
-	}
-
-}
-
-.head_wrap {
-	display: flex;
-	align-items: center;
-	margin-bottom: 36rpx;
-
-	.search_wrap {
-		display: flex;
-		align-items: center;
-		width: 100%;
-		height: 76rpx;
-		background: #F7F7F7;
-		border-radius: 38rpx;
-		padding-left: 30rpx;
-
-		input {
-			flex: 1;
-		}
-
-		.search {
-			width: 28rpx;
-			height: 28rpx;
-		}
-	}
-
-}
-
-.scroll_Y {
-	height: calc(100vh - 350rpx);
-}
-
-.list {
-
-	.item {
-		border-bottom: 1rpx solid #E5E5E5;
-		padding-bottom: 24rpx;
-		margin-bottom: 16rpx;
 
 		.title {
 			font-weight: 600;
 			font-size: 34rpx;
 			color: #222222;
-			margin-bottom: 10rpx;
-			flex: 1;
 		}
-		.head{
-			display: flex;
-			// align-items: center;
-			justify-content: space-between;
-			color: #666666;
-			.status{
-				width: 76rpx;
-				text-align: right;
-				padding-top: 3rpx;
-			}
-		}
-		.line {
-			height: 60rpx;
+
+		.item {
+			font-size: 28rpx;
+			color: #666666;
+			height: 56rpx;
 			display: flex;
 			align-items: center;
-			justify-content: space-between;
-			color: #666666;
-			
-			.btn {
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				height: 60rpx;
-				padding: 0 20rpx;
-				background: #0068FF;
-				box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
-				border-radius: 30rpx;
-				font-size: 26rpx;
-				color: #FFFFFF;
-			}
 		}
 
-		.static {
-			display: flex;
-			height: 84rpx;
-			background: #F7F7F7;
-			font-size: 30rpx;
-			margin-top: 12rpx;
-			padding: 16rpx 0;
+		.content {
+			border-top: 1rpx solid #E5E5E5;
+			margin-top: 16rpx;
 
-			.spi {
-				border: 1rpx solid #E5E5E5;
-			}
-
-			.ite {
-				flex: 1;
+			.line {
+				height: 84rpx;
 				display: flex;
 				align-items: center;
-				justify-content: center;
+				justify-content: space-between;
+
+				.la {
+					font-weight: 500;
+					font-size: 32rpx;
+					color: #222222;
+				}
 
 				.val {
-					font-weight: 500;
-				}
-			}
-		}
-	}
-}
-
-.footer_btn {
-	padding: 20rpx 40rpx 0;
-	border-top: 1px solid #e5e5e5;
-	width: 750rpx;
-	margin: 0 -30rpx;
-
-	.sweep {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		font-size: 32rpx;
-		font-weight: 500;
-		width: 670rpx;
-		height: 88rpx;
-		background: #0068FF;
-		box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
-		border-radius: 44rpx;
-		color: #FFFFFF;
-	}
-
-	.sub_result {
-		background-color: #fff;
-		color: #FF0000;
-		border: 1rpx solid #FF0000;
-		box-shadow: none
-	}
-
-	image {
-		width: 32rpx;
-		height: 32rpx;
-		margin-right: 6rpx;
-	}
-}
-
-.modal_wrap {
-	padding: 36rpx 30rpx;
-
-	.modal_title {
-		font-weight: 500;
-		font-size: 32rpx;
-		color: #222222;
-		margin-bottom: 40rpx;
-		text-align: center;
-	}
-
-	.title {
-		font-weight: 600;
-		font-size: 34rpx;
-		color: #222222;
-	}
-
-	.item {
-		font-size: 28rpx;
-		color: #666666;
-		height: 56rpx;
-		display: flex;
-		align-items: center;
-	}
-
-	.content {
-		border-top: 1rpx solid #E5E5E5;
-		margin-top: 16rpx;
-
-		.line {
-			height: 84rpx;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-
-			.la {
-				font-weight: 500;
-				font-size: 32rpx;
-				color: #222222;
-			}
-
-			.val {
-				display: flex;
-				justify-content: flex-end;
-				align-items: center;
-				flex: 1;
-
-				.wrap {
 					display: flex;
+					justify-content: flex-end;
 					align-items: center;
+					flex: 1;
 
-					input {
-						width: 120rpx;
-						height: 72rpx;
-						border-radius: 8rpx;
-						border: 2rpx solid #0068FF;
-						margin: 0 16rpx;
-						padding: 0 10rpx;
-						text-align: center;
+					.wrap {
+						display: flex;
+						align-items: center;
+
+						input {
+							width: 120rpx;
+							height: 72rpx;
+							border-radius: 8rpx;
+							border: 2rpx solid #0068FF;
+							margin: 0 16rpx;
+							padding: 0 10rpx;
+							text-align: center;
+						}
+					}
+
+					.unit {
+						font-size: 30rpx;
+						color: #666666;
+						margin-left: 20rpx;
 					}
 				}
 
-				.unit {
-					font-size: 30rpx;
-					color: #666666;
-					margin-left: 20rpx;
+				image {
+					width: 72rpx;
+					height: 72rpx;
+				}
+			}
+		}
+
+		.remark {
+			margin-top: 16rpx;
+
+			.la {
+				font-size: 30rpx;
+				color: #222222;
+				margin-bottom: 16rpx;
+			}
+
+			textarea {
+				width: 690rpx;
+				height: 240rpx;
+				background: #F7F7F7;
+				border-radius: 12rpx;
+				padding: 10rpx 20rpx;
+			}
+		}
+
+		.btns {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 80rpx;
+
+			.btn {
+				width: 336rpx;
+				height: 88rpx;
+				border-radius: 44rpx;
+				border: 2rpx solid $primaryColor;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				font-size: 32rpx;
+				color: $primaryColor;
+			}
+
+			.sub {
+				background-color: $primaryColor;
+				color: #fff;
+			}
+		}
+	}
+
+
+	.modal_t {
+		width: 520rpx;
+		text-align: center;
+		display: flex;
+		flex-direction: column;
+
+		.h1 {
+			height: 86rpx;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #333333;
+			display: flex;
+			align-items: flex-end;
+			justify-content: center;
+		}
+
+		.content {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			padding: 30rpx 0;
+		}
+
+		.btns {
+			height: 102rpx;
+			display: flex;
+			align-items: center;
+			border-top: 1rpx solid #E5E5E5;
+
+			.btn {
+				height: 102rpx;
+				flex: 1;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				border-right: 1rpx solid #E5E5E5;
+				font-weight: 400;
+				font-size: 32rpx;
+				color: #999999;
+
+				&:nth-last-child(1) {
+					border-right: none;
 				}
 			}
 
-			image {
-				width: 72rpx;
-				height: 72rpx;
+			.sub {
+				color: $primaryColor;
 			}
 		}
 	}
 
-	.remark {
-		margin-top: 16rpx;
-
-		.la {
-			font-size: 30rpx;
-			color: #222222;
-			margin-bottom: 16rpx;
-		}
-
-		textarea {
-			width: 690rpx;
-			height: 240rpx;
-			background: #F7F7F7;
-			border-radius: 12rpx;
-			padding: 10rpx 20rpx;
-		}
+	.reader-box {
+		position: fixed;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: rgba(0, 0, 0, 0.5);
 	}
 
-	.btns {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-top: 80rpx;
-
-		.btn {
-			width: 336rpx;
-			height: 88rpx;
-			border-radius: 44rpx;
-			border: 2rpx solid $primaryColor;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			font-size: 32rpx;
-			color: $primaryColor;
-		}
-
-		.sub {
-			background-color: $primaryColor;
-			color: #fff;
-		}
+	.reader {
+		width: 100%;
+		// width: 540rpx;
+		// height: 540rpx;
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
 	}
-}
-
-
-.modal_t {
-	width: 520rpx;
-	text-align: center;
-	display: flex;
-	flex-direction: column;
-
-	.h1 {
-		height: 86rpx;
-		font-weight: 500;
-		font-size: 32rpx;
-		color: #333333;
-		display: flex;
-		align-items: flex-end;
-		justify-content: center;
-	}
-
-	.content {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		padding: 30rpx 0;
-	}
-
-	.btns {
-		height: 102rpx;
-		display: flex;
-		align-items: center;
-		border-top: 1rpx solid #E5E5E5;
-
-		.btn {
-			height: 102rpx;
-			flex: 1;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			border-right: 1rpx solid #E5E5E5;
-			font-weight: 400;
-			font-size: 32rpx;
-			color: #999999;
-
-			&:nth-last-child(1) {
-				border-right: none;
-			}
-		}
-
-		.sub {
-			color: $primaryColor;
-		}
-	}
-}
-
-.reader-box {
-	position: fixed;
-	top: 0;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	background-color: rgba(0, 0, 0, 0.5);
-}
-
-.reader {
-	width: 100%;
-	// width: 540rpx;
-	// height: 540rpx;
-	position: absolute;
-	top: 50%;
-	left: 50%;
-	transform: translate(-50%, -50%);
-}
 </style>
\ No newline at end of file
diff --git a/h5/pages/login.vue b/h5/pages/login.vue
index dc65036..134d69c 100644
--- a/h5/pages/login.vue
+++ b/h5/pages/login.vue
@@ -29,8 +29,8 @@
 		loginPost,
 		getUserInfo,
 		sendSMsPost,
-		ywWxAuthorize,
-		
+		ywWxAuthorize,
+
 		getRecordByUserPoint
 	} from '@/api'
 	import {
@@ -45,7 +45,7 @@
 				form: {
 					phone: '',
 					code: ''
-				},
+				},
 				ywinfo: {},
 				downTime: 0,
 				code: ''
@@ -53,11 +53,11 @@
 		},
 		onLoad(option) {
 			console.log('onLoad');
-			// https://zhcg.fnwtzx.com/#/pages/login?type=0&ywid=ywid
-			const ywinfo = uni.getStorageSync('ywinfo') || {}
-			if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
-				this.ywinfo = ywinfo
-				uni.setStorageSync('ywinfo', {})
+			// https://zhcg.fnwtzx.com/#/pages/login?type=0&ywid=ywid
+			const ywinfo = uni.getStorageSync('ywinfo') || {}
+			if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+				this.ywinfo = ywinfo
+				uni.setStorageSync('ywinfo', {})
 			}
 			if (option.ywid || option.ywid == 0) {
 				uni.setStorageSync('ywinfo', {
@@ -83,7 +83,7 @@
 					code: code || this.code
 				}).then(res => {
 					if (res.code === 200) {
-						console.log('res', res);
+						// console.log('res', res);
 						that.$store.commit('setOpenId', res.data.openid)
 						if (res.data.token && res.data.token != '') {
 							that.$store.commit('setToken', res.data.token)
@@ -91,13 +91,19 @@
 								that.$store.commit('setUserInfo', ress.data)
 							})
 							const ywinfo = this.ywinfo
-							if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
-								getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
-									if(res.data && res.data.id){
-										uni.redirectTo({
-											url: "/pages/polling/point?id=" + res.data.id
-										})
-									}
+							if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+								getRecordByUserPoint({
+									pointCode: ywinfo.ywid
+								}).then(res => {
+									if (res.data && res.data.id) {
+										uni.redirectTo({
+											url: "/pages/polling/point?id=" + res.data.id
+										})
+									} else {
+										uni.redirectTo({
+											url: "/pages/polling/empty?message=" + res.message
+										})
+									}
 								})
 							} else {
 								setTimeout(() => {
@@ -111,8 +117,8 @@
 				})
 			} else {
 				// let url = 'https://zhcg.fnwtzx.com/yunwei_h5'
-				// const appID = 'wx95ac1efb67f0330d'
-				let url = 'https://dmtest.ahapp.net/yunwei_h5'
+				// const appID = 'wx95ac1efb67f0330d'
+				let url = 'https://dmtest.ahapp.net/yunwei_h5'
 				const appID = 'wx4d7c10bdec51942b'
 				let uri = encodeURIComponent(url)
 				let authURL =
@@ -145,22 +151,28 @@
 						this.setToken(res.data)
 						this.showToast('鐧诲綍鎴愬姛')
 						getUserInfo().then(ress => {
-							this.setUserInfo(ress.data)
-							const ywinfo = this.ywinfo
-							if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
-							getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
-								getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
-									if(res.data && res.data.id){
-										uni.redirectTo({
-											url: "/pages/polling/point?id=" + res.data.id
-										})
-									}
-								})
-							})
-							} else {
-								uni.redirectTo({
-									url: "/pages/index"
-								})
+							this.setUserInfo(ress.data)
+							const ywinfo = this.ywinfo
+							if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+								// getRecordByUserPoint({pointCode: ywinfo.ywid}).then(res => {
+								getRecordByUserPoint({
+									pointCode: ywinfo.ywid
+								}).then(res => {
+									if (res.data && res.data.id) {
+										uni.redirectTo({
+											url: "/pages/polling/point?id=" + res.data.id
+										})
+									} else {
+										uni.redirectTo({
+											url: "/pages/polling/empty?message=" + res.message
+										})
+									}
+								})
+								// })
+							} else {
+								uni.redirectTo({
+									url: "/pages/index"
+								})
 							}
 						})
 					}
diff --git a/h5/pages/operation/device.vue b/h5/pages/operation/device.vue
index 25d7921..9ec4389 100644
--- a/h5/pages/operation/device.vue
+++ b/h5/pages/operation/device.vue
@@ -83,7 +83,7 @@
 	import {
 		uploadUrl,
 		ywDevicePost,
-		ywDeviceCreate,
+		ywDeviceCreate,
 		getFindByCode
 	} from '@/api'
 	import dayjs from 'dayjs';
@@ -123,7 +123,7 @@
 			},
 			handleP() {
 				const {
-					param, 
+					param,
 					fileList
 				} = this
 				ywDeviceCreate({
@@ -132,24 +132,27 @@
 					dealDate: dayjs().format('YYYY-MM-DD HH:mm:ss'),
 					multifileList: fileList
 				}).then(res => {
-					if (param.status != 0) {
-						uni.showModal({
-							title: '娓╅Θ鎻愮ず',
-							content: '璁惧杩愮淮缁撴灉寮傚父锛屾槸鍚﹀墠寰�鎻愪氦宸ュ崟?',
-							success: function(res) {
-								if (res.confirm) {
-									uni.redirectTo({
-										url: '/pages/workOrder/edit'
-									})
-								} else if (res.cancel) {
-									uni.navigateBack()
+					if (res && res.code == 200) {
+						if (param.status != 0) {
+							uni.showModal({
+								title: '娓╅Θ鎻愮ず',
+								content: '璁惧杩愮淮缁撴灉寮傚父锛屾槸鍚﹀墠寰�鎻愪氦宸ュ崟?',
+								success: function(res) {
+									if (res.confirm) {
+										uni.redirectTo({
+											url: '/pages/workOrder/edit'
+										})
+									} else if (res.cancel) {
+										uni.navigateBack()
+									}
 								}
-							}
-						});
-					}else{
-						this.showToast('鎻愪氦鎴愬姛')
-						uni.navigateBack()
+							});
+						} else {
+							this.showToast('鎻愪氦鎴愬姛')
+							uni.navigateBack()
+						}
 					}
+
 				})
 			},
 			getDevice() {
@@ -285,19 +288,19 @@
 								qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
 							},
 							(decodeText, decodeResult) => {
-								if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
-									this.stopScan(); //鍏抽棴鎵爜鍔熻兘
-									getFindByCode(decodeText).then(ress => {
-										if (ress.data) {
-											console.log('ress', ress.data);
-											this.$set(this.param, 'deviceCode', ress.data.code)
-											this.$set(this.param, 'deviceId', ress.data.id)
-											this.$set(this.param, 'deviceName', ress.data.name)
-										} else {
-											this.showToast('鏈尮閰嶅埌宸℃鐐�,璇烽噸鏂版壂鎻�')
-										}
+								if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
+									this.stopScan(); //鍏抽棴鎵爜鍔熻兘
+									getFindByCode(decodeText).then(ress => {
+										if (ress.data) {
+											console.log('ress', ress.data);
+											this.$set(this.param, 'deviceCode', ress.data.code)
+											this.$set(this.param, 'deviceId', ress.data.id)
+											this.$set(this.param, 'deviceName', ress.data.name)
+										} else {
+											this.showToast('鏈尮閰嶅埌宸℃鐐�,璇烽噸鏂版壂鎻�')
+										}
 									})
-									
+
 								}
 							},
 							(err) => {
diff --git a/h5/pages/polling/detail.vue b/h5/pages/polling/detail.vue
index 2f2620a..228733e 100644
--- a/h5/pages/polling/detail.vue
+++ b/h5/pages/polling/detail.vue
@@ -42,7 +42,7 @@
 					<template v-if="item.status == 1">
 						<view class="line">
 							<view class="la">宸℃缁撴灉锛�</view>
-							<view class="val" :class="{ red: item.dealStatus == 1 }">{{ item.dealStatus == 0 ? '姝e父' : '寮傚父' }}</view>
+							<view class="val" :class="{ red: item.dealStatus == 1 }">{{ item.dealStatus == 0 ? '姝e父' : item.dealStatus == 1 ? '寮傚父' : '-' }}</view>
 						</view>
 						<view class="line">
 							<view class="la">宸℃鏃堕棿锛�</view>
@@ -83,7 +83,8 @@
 				id: '',
 				info: {},
 				list: [],
-				flag: false,
+				flag: false,
+				userInfo: uni.getStorageSync('userInfo') || {},
 				statusM: [{
 						color: '#4593f7',
 						name: '寰呭紑濮�'
@@ -180,8 +181,10 @@
 				ywPatrolDetail(id).then(res => {
 					this.info = res.data
 					let time = new Date(res.data.startDate).getTime()
-					console.log('res.data.startDate', new Date().getTime());
-					this.flag = new Date().getTime() > time && (this.info.status == 0 || this.info.status == 1)
+					console.log('res.data.startDate', new Date().getTime());
+					if(res.data.userIds.indexOf(this.userInfo.id) > -1){
+						this.flag = new Date().getTime() > time && (this.info.status == 0 || this.info.status == 1 || this.info.status == 2)
+					}
 				})
 				ywPatrolTaskRecord({
 					capacity: 999,
diff --git a/h5/pages/polling/empty.vue b/h5/pages/polling/empty.vue
new file mode 100644
index 0000000..9b78f4f
--- /dev/null
+++ b/h5/pages/polling/empty.vue
@@ -0,0 +1,60 @@
+<template>
+	<view class="main_app">
+		<image class="logo" src="@/static/side/default_empty@2x.png" mode=""></image>
+		<view class="message">{{message}}</view>
+		<view class="btn" @click="backHome">杩斿洖涓婚〉</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				message: ''
+			};	
+		},
+		onLoad(op) {
+			this.message = op.message || ''
+		},
+		methods: {
+			backHome(){
+				uni.redirectTo({
+					url: '/pages/index'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+.main_app{
+	.logo{
+		width: 272rpx;
+		height: 228rpx;
+		margin: 60% auto 0;
+	}
+	.message{
+		font-weight: 500;
+		font-size: 30rpx;
+		color: #222222;
+		margin-top: 20rpx;
+		text-align: center;
+	}
+	.btn{
+		position: fixed;
+		bottom: 64rpx;
+		left: 40rpx;
+		width: 670rpx;
+		height: 88rpx;
+		background: #0068FF;
+		box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0,104,255,0.3);
+		border-radius: 44rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		font-weight: 500;
+		font-size: 32rpx;
+		color: #FFFFFF;
+	}
+}
+</style>
diff --git a/h5/pages/polling/point.vue b/h5/pages/polling/point.vue
index 122737b..b85c9d8 100644
--- a/h5/pages/polling/point.vue
+++ b/h5/pages/polling/point.vue
@@ -8,7 +8,8 @@
 			<template v-if="info.status == 1">
 				<view class="line">
 					<div class="la">宸℃缁撴灉锛�</div>
-					<div class="val primaryColor" :class="{red: info.dealStatus == 1}">{{ info.dealStatus == 0 ? '姝e父' : '寮傚父' }}
+					<div class="val primaryColor" :class="{red: info.dealStatus == 1}">
+						{{ info.dealStatus == 0 ? '姝e父' : info.dealStatus == 1 ? '寮傚父' : '-' }}
 					</div>
 				</view>
 				<view class="line">
@@ -28,11 +29,11 @@
 			<view class="files">
 				<view class="adduser_list_item_ipt1_upload" v-for="(item, i) in info.multifileList" :key="i">
 					<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
-					<!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> -->
-					<view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap">
-						<video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
-							class="video" :enable-progress-gesture="false" muted />
-						<image src="@/static/play.png" class="play" mode=""></image>
+					<!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> -->
+					<view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap">
+						<video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false"
+							class="video" :enable-progress-gesture="false" muted />
+						<image src="@/static/play.png" class="play" mode=""></image>
 					</view>
 				</view>
 			</view>
@@ -101,13 +102,13 @@
 			@cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker>
 		<u-picker :show="isShowRes" keyName="name" @cancel="isShowRes = false" @confirm='confirmRes'
 			:columns="columns"></u-picker>
-			<!--  -->
-			<view v-if="videoPlay" class="video_app">
-				<video controls autoplay muted x5-video-player-type="h5" x5-video-player-fullscreen="true" id="myvideo"
-					:src="videoUrl" @fullscreenchange="screenChange"></video>
-				<view class="bg" @click="closeVideo"></view>
-			</view>
-			<!--  -->
+		<!--  -->
+		<view v-if="videoPlay" class="video_app">
+			<video controls autoplay muted x5-video-player-type="h5" x5-video-player-fullscreen="true" id="myvideo"
+				:src="videoUrl" @fullscreenchange="screenChange"></video>
+			<view class="bg" @click="closeVideo"></view>
+		</view>
+		<!--  -->
 	</view>
 </template>
 
@@ -141,16 +142,16 @@
 							id: 1,
 							name: '寮傚父'
 						},
-						{
-							id: '',
-							name: '璺宠繃'
-						},
+						// {
+						// 	id: 2,
+						// 	name: '璺宠繃'
+						// },
 					]
-				],
-				
-				videoPlay: false,
-				videoContext: null,
-				videoUrl: ''
+				],
+
+				videoPlay: false,
+				videoContext: null,
+				videoUrl: ''
 			};
 		},
 		onLoad(option) {
@@ -170,32 +171,35 @@
 					multifileList: fileList,
 					id,
 				}).then(res => {
-					if (handleParam.dealStatus == 1) {
-						return uni.showModal({
-							title: '娓╅Θ鎻愮ず',
-							content: '宸℃缁撴灉寮傚父锛屾槸鍚﹀墠寰�鎻愪氦宸ュ崟锛�',
-							success: (res) => {
-								if (res.confirm) {
-									this.showToast('鎿嶄綔鎴愬姛')
-									setTimeout(() => {
-										uni.redirectTo({
-											url: '/pages/workOrder/edit'
-										})
-									}, 300)
-								}else{
-									this.showToast('鎿嶄綔鎴愬姛')
-									setTimeout(() => {
-										uni.navigateBack()
-									}, 300)
+					if (res.code == 200) {
+						if (handleParam.dealStatus == 1) {
+							return uni.showModal({
+								title: '娓╅Θ鎻愮ず',
+								content: '宸℃缁撴灉寮傚父锛屾槸鍚﹀墠寰�鎻愪氦宸ュ崟锛�',
+								success: (res) => {
+									if (res.confirm) {
+										this.showToast('鎿嶄綔鎴愬姛')
+										setTimeout(() => {
+											uni.redirectTo({
+												url: '/pages/workOrder/edit'
+											})
+										}, 300)
+									} else {
+										this.showToast('鎿嶄綔鎴愬姛')
+										setTimeout(() => {
+											uni.navigateBack()
+										}, 300)
+									}
 								}
-							}
-						});
-					} else {
-						this.showToast('鎿嶄綔鎴愬姛')
-						setTimeout(() => {
-							uni.navigateBack()
-						}, 300)
+							});
+						} else {
+							this.showToast('鎿嶄綔鎴愬姛')
+							setTimeout(() => {
+								uni.navigateBack()
+							}, 300)
+						}
 					}
+
 				})
 			},
 			getDetail() {
@@ -219,26 +223,26 @@
 				this.$set(this.handleParam, 'dealStatus', e.value[0].id)
 				this.$set(this.handleParam, 'dealName', e.value[0].name)
 				this.isShowRes = false
-			},
-			videoClick(item) {
-				this.videoPlay = true;
-				this.videoContext = uni.createVideoContext("myvideo", this); // this杩欎釜鏄疄渚嬪璞� 蹇呬紶
-				this.videoUrl = item.fileurlFull;
-				this.videoContext.requestFullScreen();
-				this.$nextTick(() => {
-					this.videoContext.play();
-				})
-			},
-			screenChange(e) {
-				let fullScreen = e.detail.fullScreen // 鍊紅rue涓鸿繘鍏ュ叏灞忥紝false涓洪��鍑哄叏灞�
-				if (!fullScreen) {
-					//閫�鍑哄叏灞�
-					this.videoPlay = false // 闅愯棌鎾斁鐩掑瓙
-				}
-			},
-			closeVideo() {
-				this.videoPlay = false
-				this.videoContext = null
+			},
+			videoClick(item) {
+				this.videoPlay = true;
+				this.videoContext = uni.createVideoContext("myvideo", this); // this杩欎釜鏄疄渚嬪璞� 蹇呬紶
+				this.videoUrl = item.fileurlFull;
+				this.videoContext.requestFullScreen();
+				this.$nextTick(() => {
+					this.videoContext.play();
+				})
+			},
+			screenChange(e) {
+				let fullScreen = e.detail.fullScreen // 鍊紅rue涓鸿繘鍏ュ叏灞忥紝false涓洪��鍑哄叏灞�
+				if (!fullScreen) {
+					//閫�鍑哄叏灞�
+					this.videoPlay = false // 闅愯棌鎾斁鐩掑瓙
+				}
+			},
+			closeVideo() {
+				this.videoPlay = false
+				this.videoContext = null
 			},
 			fileDel(str, i) {
 				this[str].splice(i, 1);
@@ -505,51 +509,53 @@
 		image {
 			width: 100%;
 			height: 100%;
-		}
-		video {
-			width: 100%;
-			height: 100%;
 		}
-		.video_wrap {
-			position: relative;
-			border: 1px solid;
-			width: 156rpx;
-			height: 156rpx;
-			border-radius: 4rpx;
-		
-			.play {
-				width: 60rpx !important;
-				height: 60rpx !important;
-				position: absolute;
-				top: 50%;
-				left: 50%;
-				transform: translate(-50%, -50%);
-			}
+
+		video {
+			width: 100%;
+			height: 100%;
 		}
-	}
-	
-	.video_app {
-		overflow: hidden;
-		position: fixed;
-		left: 0;
-		top: 0;
-		width: 100vw;
-		height: 100vh;
-		display: flex;
-		align-items: center;
-		z-index: 9990;
-	
-		.bg {
-			background-color: rgba(0, 0, 0, .6);
-			position: absolute;
-			width: 100%;
-			height: 100%;
-			z-index: -1;
-		}
-	
-		video {
-			width: 100%;
-			height: 42vh;
-		}
+
+		.video_wrap {
+			position: relative;
+			border: 1px solid;
+			width: 156rpx;
+			height: 156rpx;
+			border-radius: 4rpx;
+
+			.play {
+				width: 60rpx !important;
+				height: 60rpx !important;
+				position: absolute;
+				top: 50%;
+				left: 50%;
+				transform: translate(-50%, -50%);
+			}
+		}
+	}
+
+	.video_app {
+		overflow: hidden;
+		position: fixed;
+		left: 0;
+		top: 0;
+		width: 100vw;
+		height: 100vh;
+		display: flex;
+		align-items: center;
+		z-index: 9990;
+
+		.bg {
+			background-color: rgba(0, 0, 0, .6);
+			position: absolute;
+			width: 100%;
+			height: 100%;
+			z-index: -1;
+		}
+
+		video {
+			width: 100%;
+			height: 42vh;
+		}
 	}
 </style>
\ No newline at end of file
diff --git a/h5/pages/polling/task.vue b/h5/pages/polling/task.vue
index e76a9cc..0981643 100644
--- a/h5/pages/polling/task.vue
+++ b/h5/pages/polling/task.vue
@@ -44,7 +44,7 @@
 						<view class="line" @click="itemClick(item)">鎵ц鏃堕棿锛歿{ item.startDate.slice(11, 16) }} 鑷� {{ item.endDate.slice(11, 16) }}</view>
 						<view class="line">
 							<view @click="itemClick(item)">瀹屾垚鎯呭喌锛歿{item.finishNum || 0}}/{{item.patrolNum}}</view>
-							<view v-if="param.queryStatus == '0,1' && item.flag && (item.status == 0 || item.status == 1)" class="btn" @click="openSc(item)">
+							<view v-if="param.queryStatus == '0,1' && item.flag && (item.status == 0 || item.status == 1 || item.status == 2)" class="btn" @click="openSc(item)">
 								<image src="@/static/side/ic_saoma@2x.png" class="saoma" mode=""></image>
 								<view>鎵爜宸℃</view>
 							</view>
@@ -195,7 +195,8 @@
 					this.list = [...this.list, ...res.data.records]
 					this.list.forEach(item => {
 					let time = new Date(item.startDate).getTime()
-					item.flag = new Date().getTime() > time
+					let userInfo = uni.getStorageSync('userInfo') || {}
+					item.flag = new Date().getTime() > time && item.userIds.indexOf(userInfo.id) > -1
 					})
 					this.total = res.data.total
 				})
diff --git a/h5/pages/workOrder/edit.vue b/h5/pages/workOrder/edit.vue
index ff72df9..653c56c 100644
--- a/h5/pages/workOrder/edit.vue
+++ b/h5/pages/workOrder/edit.vue
@@ -22,7 +22,8 @@
 				<view class="la"><text class="red">*</text>宸ュ崟鍒嗙被</view>
 				<view class="line sel_wrap" @click="showCate1 = true">
 					<view class="left" :class="param.cateName ? '' : 'placeholder9'">
-						{{ param.cateName ? param.cateName : '璇烽�夋嫨' }}</view>
+						{{ param.cateName ? param.cateName : '璇烽�夋嫨' }}
+					</view>
 					<u-icon name="arrow-right" color="#999999" size="15"></u-icon>
 				</view>
 			</view>
@@ -51,7 +52,8 @@
 						<u-icon class="close" size="20" name="close-circle-fill" color="red"
 							@click="fileDel('fileList', i)"></u-icon>
 						<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image>
-						<video v-if="item.type == 1" :show-center-play-btn="false" :src="item.fileurlFull" :controls="false"></video>
+						<video v-if="item.type == 1" :show-center-play-btn="false" :src="item.fileurlFull"
+							:controls="false"></video>
 					</view>
 				</view>
 			</view>
@@ -142,20 +144,22 @@
 				const {
 					param,
 					fileList
-				} = this
-				if (!param.projectId) return this.showToast('璇烽�夋嫨瀹屾暣鐨勫尯鍩�')
-				if (!param.buildingId) return this.showToast('璇烽�夋嫨瀹屾暣鐨勫尯鍩�')
-				if (!param.floorName && !param.roomNum) return this.showToast('璇烽�夋嫨瀹屾暣鐨勫尯鍩�')
+				} = this
+				if (!param.projectId) return this.showToast('璇烽�夋嫨瀹屾暣鐨勫尯鍩�')
+				if (!param.buildingId) return this.showToast('璇烽�夋嫨瀹屾暣鐨勫尯鍩�')
+				if (!param.floorName && !param.roomNum) return this.showToast('璇烽�夋嫨瀹屾暣鐨勫尯鍩�')
 				if (!param.cateName) return this.showToast('璇烽�夋嫨宸ュ崟鍒嗙被')
 				ywWorkorderCreate({
 					...param,
 					// roomId: '',
 					fileList
 				}).then(res => {
-					this.showToast('鎻愪氦鎴愬姛')
-					uni.redirectTo({
-						url: '/pages/workOrder/list'
-					})
+					if (res && res.code == 200) {
+						this.showToast('鎻愪氦鎴愬姛')
+						uni.redirectTo({
+							url: '/pages/workOrder/list'
+						})
+					}
 				})
 			},
 			changeHandler(e) {
@@ -167,8 +171,8 @@
 					// 寰俊灏忕▼搴忔棤娉曞皢picker瀹炰緥浼犲嚭鏉ワ紝鍙兘閫氳繃ref鎿嶄綔
 					picker = this.$refs.uPicker
 				} = e
-				// 褰撶涓�鍒楀�煎彂鐢熷彉鍖栨椂锛屽彉鍖栫浜屽垪(鍚庝竴鍒�)瀵瑰簲鐨勯�夐」
-				console.log(index);
+				// 褰撶涓�鍒楀�煎彂鐢熷彉鍖栨椂锛屽彉鍖栫浜屽垪(鍚庝竴鍒�)瀵瑰簲鐨勯�夐」
+				console.log(index);
 				console.log(index);
 				if (columnIndex === 0) {
 					// picker涓洪�夋嫨鍣╰his瀹炰緥锛屽彉鍖栫浜屽垪瀵瑰簲鐨勯�夐」
@@ -176,13 +180,13 @@
 				}
 			},
 			confirmCate1(e) {
-				console.log(e.value[1]);
-				if(e.value.length == 2){
-					this.$set(this.param, 'cateId', e.value[1].id)
-					this.$set(this.param, 'cateName', e.value[1].name)
-					this.showCate1 = false
-				}
-				
+				console.log(e.value[1]);
+				if (e.value.length == 2) {
+					this.$set(this.param, 'cateId', e.value[1].id)
+					this.$set(this.param, 'cateName', e.value[1].name)
+					this.showCate1 = false
+				}
+
 			},
 			confirm0(e) {
 				const item = e.value[0]
@@ -431,9 +435,9 @@
 					position: absolute;
 					right: -20rpx;
 					top: -20rpx;
-					z-index: 9999;
-					background-color: #fff;
-					border-radius: 50%;
+					z-index: 9999;
+					background-color: #fff;
+					border-radius: 50%;
 					overflow: hidden;
 				}
 
@@ -456,7 +460,7 @@
 		// bottom: 68rpx;
 		// left: 40rpx;
 		width: 670rpx;
-		height: 88rpx;
+		height: 88rpx;
 		margin-top: 80rpx;
 		background: $primaryColor;
 		box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
diff --git a/h5/pages/workOrder/problemEdit.vue b/h5/pages/workOrder/problemEdit.vue
index 0cf8f09..568c592 100644
--- a/h5/pages/workOrder/problemEdit.vue
+++ b/h5/pages/workOrder/problemEdit.vue
@@ -83,12 +83,14 @@
 				ywProblemCreate({
 					...param,
 					fileList
-				}).then(res => {
-					this.showToast('鎻愪氦鎴愬姛')
-					this.param = {}
-					uni.navigateTo({
-						url: '/pages/workOrder/result'
-					})
+				}).then(res => {
+					if(res && res.code == 200){
+						this.showToast('鎻愪氦鎴愬姛')
+						this.param = {}
+						uni.navigateTo({
+							url: '/pages/workOrder/result'
+						})
+					}
 				})
 			},
 			fileDel(str, i) {
diff --git a/h5/pages/workOrder/wait.vue b/h5/pages/workOrder/wait.vue
index d3fd3e1..6d0ee7c 100644
--- a/h5/pages/workOrder/wait.vue
+++ b/h5/pages/workOrder/wait.vue
@@ -28,7 +28,7 @@
 							<view v-if="item.status == 0 && item.param3 == 0 && (item.type == 0 || item.type == 1)" class="status">鏈紑濮�
 							</view>
 							<view v-if="item.status == 0 && item.param3 == 1 && (item.type == 0 || item.type == 1)"
-								class="status green">杩涜涓�</view>
+								class="status green">{{ item.type == 0 ? '鐩樼偣涓�' : '杩涜涓�' }}</view>
 							<view v-if="item.status == 1 && item.type == 2" class="status gray">宸插鐞�</view>
 							<view v-if="item.status == 1 && (item.type == 0 || item.type == 1)" class="status gray">宸插畬鎴�</view>
 						</view>
@@ -37,7 +37,7 @@
 							<view class="text">鎵ц鏃堕棿锛歿{item.obj.key3}}</view>
 							<view class="text">
 								<view class="">宸℃璐熻矗浜猴細{{item.obj.key4}}</view>
-								<view class="btn" @click.stop="openSc(item)">
+								<view v-if="queryStatus == 0" class="btn" @click.stop="openSc(item)">
 									<image src="@/static/side/ic_saoma@2x.png" mode=""></image>
 									<view v-if="item.status == 0" class="">鎵爜宸℃</view>
 								</view>
@@ -249,7 +249,7 @@
 		.tabs {
 			display: flex;
 			width: 750rpx;
-			margin: 12rpx 0rpx 0;
+			margin: 0rpx 0rpx 0;
 			border-bottom: 1rpx solid #E5E5E5;
 			background-color: #fff;
 
diff --git a/h5/static/side/default_empty@2x.png b/h5/static/side/default_empty@2x.png
new file mode 100644
index 0000000..72c83fd
--- /dev/null
+++ b/h5/static/side/default_empty@2x.png
Binary files differ
diff --git a/h5/utils/service.js b/h5/utils/service.js
index 0a05213..6df5176 100644
--- a/h5/utils/service.js
+++ b/h5/utils/service.js
@@ -37,10 +37,10 @@
 						if (data.code === 500 || data.code === 5112) {
 							uni.clearStorageSync()
 							return uni.navigateTo({
-								url: '/pages/login/login'
+								url: '/pages/login'
 							})
 						}
-						return
+						return resolve(data)
 					}
 					resolve(data)
 					// return response.data
diff --git a/server/system_gateway/src/main/resources/application.yml b/server/system_gateway/src/main/resources/application.yml
index 6503fa3..8994b05 100644
--- a/server/system_gateway/src/main/resources/application.yml
+++ b/server/system_gateway/src/main/resources/application.yml
@@ -1,6 +1,6 @@
 # 椤圭洰淇℃伅閰嶇疆
 project:
-  name: 瀹夋嘲鐗╂祦璁垮绯荤粺
+  name: 闃滃畞鍦洪杩愮淮
   version: 1.0.0
   env: development
 #  env: production
diff --git a/server/system_gateway/src/main/resources/bootstrap.yml b/server/system_gateway/src/main/resources/bootstrap.yml
index 8ecd0a5..bbb8fb4 100644
--- a/server/system_gateway/src/main/resources/bootstrap.yml
+++ b/server/system_gateway/src/main/resources/bootstrap.yml
@@ -1,11 +1,11 @@
 spring:
   profiles:
-    active: dev
+    active: pro
   application:
     name: system_gateway
   # 瀹夊叏閰嶇疆
-  security:
     # 楠岀鍏挜鍦板潃
+  security:
     oauth2:
       authorizationserver:
         token-uri: https://
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/ImportMaterialDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/ImportMaterialDTO.java
new file mode 100644
index 0000000..716e7b5
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/ImportMaterialDTO.java
@@ -0,0 +1,60 @@
+package com.doumee.dao.system.dto;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/05/04 18:21
+ */
+@Data
+@ApiModel("瀵煎叆鐗╂枡淇℃伅")
+public class ImportMaterialDTO {
+
+    @ApiModelProperty(value = "鐗╂枡缂栧彿")
+    @ExcelColumn(name="鐗╂枡缂栧彿",index = 0,width = 10)
+    private String code;
+
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    @ExcelColumn(name="鐗╂枡鍚嶇О",index = 1,width = 10)
+    private String name;
+
+    @ApiModelProperty(value = "鐗╂枡鍒嗙被")
+    @ExcelColumn(name="鐗╂枡鍒嗙被",index = 2,width = 10)
+    private String categoryName;
+
+    @ApiModelProperty(value = "鐗╂枡瀛愬垎绫�")
+    @ExcelColumn(name="鐗╂枡瀛愬垎绫�",index = 3,width = 10)
+    private String categoryChildName;
+
+    @ApiModelProperty(value = "鏉$爜")
+    @ExcelColumn(name="鏉$爜",index = 4,width = 10)
+    private String qrcode;
+
+    @ApiModelProperty(value = "鍝佺墝")
+    @ExcelColumn(name="鍝佺墝",index = 5,width = 10)
+    private String brand;
+
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    @ExcelColumn(name="瑙勬牸鍨嬪彿",index = 6,width = 10)
+    private String attr;
+
+    @ApiModelProperty(value = "鍗曚綅")
+    @ExcelColumn(name="鍗曚綅",index = 7,width = 10)
+    private String unitName;
+
+    @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笅闄愶級", example = "1")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笅闄愶級",index = 8,width = 16)
+    private BigDecimal minStock;
+
+    @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笂闄愶級", example = "1")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笂闄愶級",index = 9,width = 16)
+    private BigDecimal maxStock;
+
+
+
+}
diff --git a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
index 3dd4077..3a31274 100644
--- a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
+++ b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -98,4 +98,11 @@
     @GetMapping("/timer/yw/ywPatrolSchemeTaskTimer")
     ApiResponse ywPatrolSchemeTaskTimer();
 
+    @ApiOperation("銆愰槣瀹佽繍缁淬�戝畾鏃舵洿鏂版埧婧愮璧佺姸鎬�")
+    @GetMapping("/timer/yw/ywRoomStatusTimer")
+    ApiResponse ywRoomStatusTimer();
+
+
+
+
 }
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java
index eda709f..4d0d49f 100644
--- a/server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/YwTimerController.java
@@ -83,6 +83,17 @@
     }
 
 
+
+    @ApiOperation("瀹氭椂鏇存柊鎴挎簮绉熻祦鐘舵��")
+    @GetMapping("/ywRoomStatusTimer")
+    public ApiResponse ywRoomStatusTimer() {
+        ywContractService.updRentContractStatus();
+        ywContractService.updRoomLeaseNowStatus();
+        return ApiResponse.success("瀹氭椂鏇存柊鎴挎簮绉熻祦鐘舵�佷换鍔℃墽琛屼腑");
+    }
+
+
+
     @ApiOperation("瀹氭椂鏇存柊redis鏁版嵁")
     @GetMapping("/ywUpdRedisDataTimer")
     public ApiResponse ywUpdRedisDataTimer() {
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
index e5f73cb..6386c16 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -20,6 +20,7 @@
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberCard;
 import com.doumee.dao.business.model.MemberRole;
+import com.doumee.dao.business.vo.MemberExcelVO;
 import com.doumee.dao.system.dto.UpdatePwdDto;
 import com.doumee.service.business.MemberService;
 import com.doumee.service.business.ext.ERPSyncService;
@@ -27,6 +28,7 @@
 import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromSelfServiceImpl;
 import io.swagger.annotations.*;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -412,4 +414,18 @@
         return ApiResponse.success(memberService.ywFindPage(pageWrap));
     }
 
+
+    @ApiOperation("闃滃畞 - 瀵煎嚭Excel")
+    @PostMapping("/ywExportExcel")
+    @CloudRequiredPermission("business:member:exportExcel")
+    public void ywExportExcel (@RequestBody PageWrap<Member> pageWrap, HttpServletResponse response, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        List<Member> memberList =  memberService.ywFindPage(pageWrap).getRecords();
+        List<MemberExcelVO> memberExcelVOList = new ArrayList<MemberExcelVO>();
+        for (Member member:memberList) {
+            MemberExcelVO memberExcelVO = new MemberExcelVO();
+            BeanUtils.copyProperties(member,memberExcelVO);
+            memberExcelVOList.add(memberExcelVO);
+        }
+        ExcelExporter.build(MemberExcelVO.class).export(memberExcelVOList, "浜哄憳淇℃伅琛�", response);
+    }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java
index 23eccac..11c08ca 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java
@@ -49,11 +49,30 @@
 
     @LoginNoRequired
     @PreventRepeat
-    @ApiOperation("鑷畾涔夌煭淇″唴瀹�")
-    @PostMapping("/testSendSms")
-    public ApiResponse testSendSms(@RequestBody SmsEmail smsEmail) {
+    @ApiOperation("鑷畾涔夌煭淇″唴瀹筯k")
+    @PostMapping("/testSendSmsHk")
+    public ApiResponse testSendSmsHk(@RequestBody SmsEmail smsEmail) {
         emayService.sendSmsByHk(smsEmail.getPhone(),smsEmail.getContent());
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
+
+
+    @LoginNoRequired
+    @PreventRepeat
+    @ApiOperation("鑷畾涔夌煭淇″唴瀹�")
+    @PostMapping("/testSendSms")
+    public ApiResponse testSendSms(@RequestBody SmsEmail smsEmail) {
+        smsEmailService.sendBillSms(smsEmail.getContent(),smsEmail.getPhone(),null);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginNoRequired
+    @PreventRepeat
+    @ApiOperation("鑷畾涔夐偖浠跺唴瀹�")
+    @PostMapping("/testSendEmail")
+    public ApiResponse testSendEmail(@RequestBody SmsEmail smsEmail) {
+        smsEmailService.sendEmail(smsEmail.getEmail(),smsEmail.getContent(),null);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
index 1d6d9d6..4916c65 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java
@@ -14,6 +14,7 @@
 import com.doumee.dao.business.vo.YwContractBillCallDataVO;
 import com.doumee.dao.business.vo.YwContractBillDataVO;
 import com.doumee.service.business.YwContractBillService;
+import com.doumee.service.business.YwContractService;
 import com.doumee.service.business.impl.SmsEmailServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -38,6 +39,9 @@
 
     @Autowired
     private SmsEmailServiceImpl smsEmailService;
+
+    @Autowired
+    private YwContractService ywContractService;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -129,6 +133,15 @@
         return ApiResponse.success("鐢熸垚鎴愬姛");
     }
 
+    @LoginNoRequired
+    @ApiOperation("鏇存柊鎴挎簮绉熻祦鐘舵��")
+    @GetMapping("/dealRoomStatus")
+    public ApiResponse dealRoomStatus() {
+        ywContractService.updRentContractStatus();
+        ywContractService.updRoomLeaseNowStatus();
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
     @ApiOperation("鑾峰彇寰呭鐞嗚处鍗�")
     @GetMapping("/getWaitDealList")
     @CloudRequiredPermission("business:ywcontractbill:query")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java
index 4470c79..1929afc 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java
@@ -10,13 +10,15 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.YwMaterial;
 import com.doumee.service.business.YwMaterialService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import io.swagger.annotations.*;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
 import javax.servlet.http.HttpServletResponse;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -91,7 +93,7 @@
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywmaterial:exportExcel")
     public void exportExcel (@RequestBody PageWrap<YwMaterial> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        ExcelExporter.build(YwMaterial.class).export(ywMaterialService.findPage(pageWrap).getRecords(), "杩愮淮璧勪骇淇℃伅琛�", response);
+        ExcelExporter.build(YwMaterial.class).export(ywMaterialService.findPage(pageWrap).getRecords(), "鐗╂枡淇℃伅琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
@@ -100,4 +102,15 @@
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywMaterialService.getDetail(id));
     }
+
+
+    @ApiOperation("鐗╂枡淇℃伅瀵煎叆")
+    @PostMapping("/importMaterialBatch")
+    @CloudRequiredPermission("business:ywmaterial:query")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+    })
+    public ApiResponse importMaterialBatch(@ApiParam(value = "file") MultipartFile file,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success(ywMaterialService.importMaterialBatch(file,getLoginUser(token)));
+    }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java
index 07544f7..9ac8faf 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java
@@ -1,5 +1,6 @@
 package com.doumee.cloud.admin;
 
+import cn.emay.sdk.util.StringUtil;
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.core.annotation.excel.ExcelExporter;
@@ -9,10 +10,13 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.YwOutinbound;
+import com.doumee.dao.business.model.YwOutinboundRecord;
+import com.doumee.dao.business.vo.YwOutinboundExcelInVO;
+import com.doumee.dao.business.vo.YwOutinboundExcelOutVO;
 import com.doumee.service.business.YwOutinboundService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
@@ -82,7 +86,37 @@
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywoutinbound:exportExcel")
     public void exportExcel (@RequestBody PageWrap<YwOutinbound> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        ExcelExporter.build(YwOutinbound.class).export(ywOutinboundService.findPage(pageWrap).getRecords(), "杩愮淮鍑哄叆搴撲俊鎭〃", response);
+        List<YwOutinbound> ywOutinboundList = ywOutinboundService.findPage(pageWrap).getRecords();
+        Integer inOut = pageWrap.getModel().getInOut();
+        if(Constants.equalsInteger(inOut,Constants.ZERO)){
+            List<YwOutinboundExcelInVO> inList = new ArrayList<>();
+            for (YwOutinbound ywOutinbound:ywOutinboundList) {
+                YwOutinboundExcelInVO inVO = new YwOutinboundExcelInVO();
+                BeanUtils.copyProperties(ywOutinbound,inVO);
+                List<YwOutinboundRecord> ywOutinboundRecordList = ywOutinbound.getRecordList();
+                StringBuffer stringBuffer = new StringBuffer();
+                for (YwOutinboundRecord ywOutinboundRecord:ywOutinboundRecordList) {
+                    stringBuffer.append(ywOutinboundRecord.getMaterialName()+"["+ywOutinboundRecord.getMaterialCode()+"]*"+ywOutinboundRecord.getStock()+ywOutinboundRecord.getMaterialUnitName()+";");
+                }
+                inVO.setOutMaterialNum(stringBuffer.toString());
+                inList.add(inVO);
+            }
+            ExcelExporter.build(YwOutinboundExcelInVO.class).export(inList, "鍏ュ簱淇℃伅琛�", response);
+        }else{
+            List<YwOutinboundExcelOutVO> outList = new ArrayList<>();
+            for (YwOutinbound ywOutinbound:ywOutinboundList) {
+                YwOutinboundExcelOutVO ywOutinboundExcelOutVO = new YwOutinboundExcelOutVO();
+                BeanUtils.copyProperties(ywOutinbound,ywOutinboundExcelOutVO);
+                List<YwOutinboundRecord> ywOutinboundRecordList = ywOutinbound.getRecordList();
+                StringBuffer stringBuffer = new StringBuffer();
+                for (YwOutinboundRecord ywOutinboundRecord:ywOutinboundRecordList) {
+                    stringBuffer.append(ywOutinboundRecord.getMaterialName()+"["+ywOutinboundRecord.getMaterialCode()+"]*"+ywOutinboundRecord.getStock()+ywOutinboundRecord.getMaterialUnitName()+";");
+                }
+                ywOutinboundExcelOutVO.setOutMaterialNum(stringBuffer.toString());
+                outList.add(ywOutinboundExcelOutVO);
+            }
+            ExcelExporter.build(YwOutinboundExcelOutVO.class).export(outList, "鍑哄簱淇℃伅琛�", response);
+        }
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java
index bfe3148..7676246 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java
@@ -8,7 +8,9 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwPatrolTask;
 import com.doumee.dao.business.model.YwStock;
+import com.doumee.dao.business.model.YwWorkorder;
 import com.doumee.service.business.YwStockService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -80,9 +82,10 @@
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywstock:exportExcel")
     public void exportExcel (@RequestBody PageWrap<YwStock> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        ExcelExporter.build(YwStock.class).export(ywStockService.findPage(pageWrap).getRecords(), "杩愮淮搴撳瓨淇℃伅琛�", response);
+        ExcelExporter.build(YwStock.class).export(ywStockService.findPage(pageWrap).getRecords(), "搴撳瓨淇℃伅琛╛"+System.currentTimeMillis(), response);
     }
 
+
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywstock:query")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java
index e0c27a1..9adc1f6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java
@@ -94,7 +94,7 @@
             IContext context = report.createContext();
             for (YwTempConfig ywTempConfig:ywTempConfigList) {
                 if(StringUtils.isBlank(ywTempConfig.getUrl())){
-                    ywTempConfig.setUrl("-");
+                    ywTempConfig.setUrl(" - ");
                 }
                 context.put(ywTempConfig.getTitle().replace("${","").replace("}",""), ywTempConfig.getUrl());
             }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index 399570e..4e1b250 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -222,7 +222,6 @@
     private String email;
 
 
-
     @ApiModelProperty(value = "鏈�鍚庢搷浣滀汉")
     @TableField(exist = false)
     private String editorName;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
index de03a54..e476672 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java
@@ -204,6 +204,10 @@
     @ExcelColumn(name="鐗╀笟璐规�婚噾棰�")
     private BigDecimal wyTotalFee;
 
+    @ApiModelProperty(value = "鍚堝悓鐘舵�侀泦鍚�")
+    @TableField(exist = false)
+    private List<Integer> statusList;
+
     @ApiModelProperty(value = "鎴块棿涓婚敭 鏌ヨ浣跨敤")
     @TableField(exist = false)
     private Integer roomId;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
index c59d394..dadcb8f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java
@@ -157,11 +157,11 @@
     @TableField(exist = false)
     private Integer customerId;
 
-    @ApiModelProperty(value = "鏄惁鍙戦�侀偖浠讹細0=鍚︼紱1=鏄�", example = "1")
+    @ApiModelProperty(value = "鏄惁鍙戦�侀偖浠讹細0=鍚︼紱1=鍙戦�佹垚鍔燂紱2=鍙戦�佸け璐�", example = "1")
     @TableField(exist = false)
     private Integer isSendEmail;
 
-    @ApiModelProperty(value = "鏄惁鍙戦�佺煭淇★細0=鍚︼紱1=鏄�", example = "1")
+    @ApiModelProperty(value = "鏄惁鍙戦�佺煭淇★細0=鍚︼紱1=鍙戦�佹垚鍔燂紱2=鍙戦�佸け璐�", example = "1")
     @TableField(exist = false)
     private Integer isSendSms;
 
@@ -178,6 +178,7 @@
     @ExcelColumn(name="鍚堝悓缂栧彿",index = 2,width = 10)
     @TableField(exist = false)
     private String contractCode;
+
     @ApiModelProperty(value = "鍚堝悓鐘舵��", example = "1")
     @TableField(exist = false)
     private Integer contractStatus;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
index 1ab32e6..7438d92 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
@@ -32,7 +32,7 @@
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿",index = 5, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @ExcelColumn(name="鍒涘缓鏃堕棿",index = 5, dateFormat = "yyyy-MM-dd HH:mm:ss",width = 16)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createDate;
 
@@ -50,7 +50,7 @@
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0姝e父 1鎹熷潖 2鎶ュ簾", example = "1")
-    @ExcelColumn(name="璁惧鐘舵��",index = 3, valueMapping = "0=姝e父;1=鎹熷潖;2=鎶ュ簾;")
+    @ExcelColumn(name="璁惧鐘舵��",index = 3, valueMapping = "0=姝e父;1=鎹熷潖;2=鎶ュ簾;",width = 10)
     private Integer status;
 
     @ApiModelProperty(value = "璁惧鍨嬪彿", example = "1")
@@ -67,7 +67,7 @@
     private Date company;
 
     @ApiModelProperty(value = "鎯呭喌璇存槑")
-    @ExcelColumn(name="杩愮淮澶囨敞",index = 4)
+    @ExcelColumn(name="杩愮淮澶囨敞",index = 4,width = 30)
     private String content;
 
     @ApiModelProperty(value = "杩愮淮鏃堕棿")
@@ -75,17 +75,17 @@
     private Date dealDate;
 
     @ApiModelProperty(value = "璁惧鍚嶇О")
-    @ExcelColumn(name="璁惧鍚嶇О",index = 2)
+    @ExcelColumn(name="璁惧鍚嶇О",index = 2,width = 20)
     @TableField(exist = false)
     private String deviceName;
 
     @ApiModelProperty(value = "璁惧缂栧彿")
-    @ExcelColumn(name="璁惧缂栧彿",index = 1)
+    @ExcelColumn(name="璁惧缂栧彿",index = 1,width = 10)
     @TableField(exist = false)
     private String deviceCode;
 
     @ApiModelProperty(value = "杩愮淮浜哄悕绉�")
-    @ExcelColumn(name="杩愮淮浜�",index = 0)
+    @ExcelColumn(name="杩愮淮浜�",index = 0,width = 10)
     @TableField(exist = false)
     private String realName;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java
index 37e6303..258a1c5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java
@@ -26,89 +26,77 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鍚嶇О")
-    @ExcelColumn(name="鍚嶇О")
+    @ExcelColumn(name="鐗╂枡鍚嶇О",index = 1,width = 10)
     private String name;
 
     @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
-    @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+    @ExcelColumn(name="鐘舵��",index = 8,width = 8,valueMapping = "0=鍚敤;1=绂佺敤;")
     private Integer status;
 
     @ApiModelProperty(value = "缂栧彿")
-    @ExcelColumn(name="缂栧彿")
+    @ExcelColumn(name="鐗╂枡缂栧彿",index = 0,width = 10)
     private String code;
 
     @ApiModelProperty(value = "鎵�灞炰竴绾у垎绫荤紪鐮侊紙鍏宠仈category)", example = "1")
-    @ExcelColumn(name="鎵�灞炰竴绾у垎绫荤紪鐮侊紙鍏宠仈category)")
     private Integer parentCateId;
 
     @ApiModelProperty(value = "鎵�灞炰簩绾у垎绫荤紪鐮�(鍏宠仈category锛�", example = "1")
-    @ExcelColumn(name="鎵�灞炰簩绾у垎绫荤紪鐮�(鍏宠仈category锛�")
     private Integer cateId;
 
     @ApiModelProperty(value = "鏉$爜")
-    @ExcelColumn(name="鏉$爜")
+    @ExcelColumn(name="鏉$爜",index = 2,width = 10)
     private String qrcode;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
-    @ExcelColumn(name="鎺掑簭鐮�")
     private Integer sortnum;
 
     @ApiModelProperty(value = "鍝佺墝")
-    @ExcelColumn(name="鍝佺墝")
+    @ExcelColumn(name="鍝佺墝",index = 3,width = 10)
     private String brand;
 
     @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
-    @ExcelColumn(name="瑙勬牸鍨嬪彿")
+    @ExcelColumn(name="瑙勬牸鍨嬪彿",index = 4,width = 10)
     private String attr;
 
     @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笅闄愶級", example = "1")
-    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笅闄愶級")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笅闄愶級",index = 6,width = 16)
     private BigDecimal minStock;
 
     @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笂闄愶級", example = "1")
-    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笂闄愶級")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笂闄愶級",index = 7,width = 16)
     private BigDecimal maxStock;
 
     @ApiModelProperty(value = "鍗曚綅")
-    @ExcelColumn(name="鍗曚綅")
+    @ExcelColumn(name="鍗曚綅",index = 5,width = 10)
     private String unitName;
 
     @ApiModelProperty(value = "鎵�灞炴埧婧愮紪鐮�(鍏宠仈yw_room)", example = "1")
-    @ExcelColumn(name="鎵�灞炴埧婧愮紪鐮�(鍏宠仈yw_room)")
     private Integer roomId;
 
     @ApiModelProperty(value = "鏄惁鑷姩缂栫爜锛�0=鍚︼紱1=鏄紱", example = "1")
-    @ExcelColumn(name="鏄惁鑷姩缂栫爜锛�0=鍚︼紱1=鏄紱")
     private Integer autoCode;
 
     @ApiModelProperty(value = "闄勪欢淇℃伅", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
index 36e1608..4ce319c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
@@ -92,6 +92,9 @@
     @ExcelColumn(name="鍗曟嵁缂栧彿")
     private String code;
 
+    @ApiModelProperty(value = "棰嗙敤浜�", example = "1")
+    private Integer outUserId;
+
     @ApiModelProperty(value = "鍑哄叆搴撴暟鎹槑缁�", example = "1")
     @TableField(exist = false)
     private List<YwOutinboundRecord> recordList;
@@ -108,4 +111,8 @@
     @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
     @TableField(exist = false)
     private String createUserName;
+
+    @ApiModelProperty(value = "棰嗙敤浜哄悕绉�", example = "1")
+    @TableField(exist = false)
+    private String outUserName;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java
index d8a3f12..ef8192b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java
@@ -24,53 +24,47 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ExcelColumn(name="鍒涘缓鏃堕棿",width = 10,index = 11,dateFormat = "yyyy-MM-dd HH:mm:ss")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "鍑哄叆搴撹褰曚富閿�", example = "1")
-    @ExcelColumn(name="鍑哄叆搴撹褰曚富閿�")
     private Integer outInBoundId;
 
     @ApiModelProperty(value = "鐗╄祫缂栫爜锛堝叧鑱攜w_material)", example = "1")
-    @ExcelColumn(name="鐗╄祫缂栫爜锛堝叧鑱攜w_material)")
     private Integer materialId;
 
     @ApiModelProperty(value = "鏁伴噺", example = "1")
-    @ExcelColumn(name="鏁伴噺")
+    @ExcelColumn(name="鏁伴噺",width = 10,index = 5)
     private BigDecimal stock;
 
     @ApiModelProperty(value = "璧勪骇缂栫爜")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡缂栫爜",width = 10,index = 1)
     private String materialCode;
 
     @ApiModelProperty(value = "璧勪骇鍚嶇О")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡鍚嶇О",width = 10,index = 2)
     private String materialName;
 
     @ApiModelProperty(value = "璧勪骇鏉″舰鐮�")
@@ -83,6 +77,7 @@
 
     @ApiModelProperty(value = "璧勪骇鍗曚綅")
     @TableField(exist = false)
+    @ExcelColumn(name="鍗曚綅",width = 10,index = 6)
     private String materialUnitName;
 
     @ApiModelProperty(value = "鎿嶄綔绫诲瀷锛�1=鍑哄簱锛�0=鍏ュ簱锛堝垎椤靛垪琛ㄦ煡璇娇鐢級", example = "1")
@@ -95,31 +90,38 @@
 
     @ApiModelProperty(value = "浠撳簱鍚嶇О")
     @TableField(exist = false)
+    @ExcelColumn(name="浠撳簱",width = 10,index = 8)
     private String warehouseName;
 
     @ApiModelProperty(value = "鍗曟嵁鏃ユ湡")
     @TableField(exist = false)
     @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelColumn(name="鍗曟嵁鏃ユ湡",width = 10,index = 0,dateFormat = "yyyy-MM-dd")
     private Date doneDate;
 
     @ApiModelProperty(value = "涓�绾у垎绫诲悕绉�")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡鍒嗙被",width = 10,index = 3)
     private String categoryParentName;
 
     @ApiModelProperty(value = "浜岀骇鍒嗙被鍚嶇О")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡瀛愬垎绫�",width = 10,index = 4)
     private String categoryName;
 
     @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
     @TableField(exist = false)
+    @ExcelColumn(name="鍒涘缓浜�",width = 10,index = 10)
     private String createUserName;
 
     @ApiModelProperty(value = "鍗曟嵁缂栧彿", example = "1")
     @TableField(exist = false)
+    @ExcelColumn(name="鍗曟嵁缂栧彿",width = 10,index = 9)
     private String code;
 
     @ApiModelProperty(value = "绫诲瀷 0閲囪喘鍏ュ簱 1棰嗙敤閫�鍥� 2璋冩暣鍏ュ簱 3鍏朵粬鍏ュ簱 4鐩樼泩鍏ュ簱 5棰嗙敤鍑哄簱 6浠撳簱鍑哄簱 7璋冩暣鍑哄簱 8閲囪喘鍑哄簱 9鍏朵粬鍑哄簱 10鐩樹簭鍑哄簱", example = "1")
     @TableField(exist = false)
+    @ExcelColumn(name="绫诲瀷",width = 10,index = 7,valueMapping = "0=閲囪喘鍏ュ簱;1=棰嗙敤閫�鍥�;2=璋冩暣鍏ュ簱;3=鍏朵粬鍏ュ簱;4=鐩樼泩鍏ュ簱;5=棰嗙敤鍑哄簱;6=浠撳簱鍑哄簱;7=璋冩暣鍑哄簱;8=閲囪喘鍑哄簱;9=鍏朵粬鍑哄簱;10=鐩樹簭鍑哄簱;")
     private Integer type;
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java
index 69f6075..2ea3bf2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTask.java
@@ -54,7 +54,7 @@
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0寰呭紑濮� 1杩涜涓� 2宸茶秴鏈� 3宸插畬鎴� 4宸插彇娑�", example = "1")
-    @ExcelColumn(name="鎵ц缁撴灉",index = 7,width = 6,valueMapping = "0=寰呭紑濮�;1=杩涜涓�;2=宸茶秴鏈�;3=宸插畬鎴�;")
+    @ExcelColumn(name="鎵ц缁撴灉",index = 7,width = 6,valueMapping = "0=寰呭紑濮�;1=杩涜涓�;2=宸茶秴鏈�;3=宸插畬鎴�;4=宸插彇娑�;")
     private Integer status;
 
     @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
@@ -103,6 +103,9 @@
     @TableField(exist = false)
     private String userName;
 
+    @ApiModelProperty(value = "鍙鐞嗕汉锛堝涓互,鍒嗗壊锛�")
+    @TableField(exist = false)
+    private String userIds;
 
     @ApiModelProperty(value = "浠诲姟鐘舵�侊細澶氫釜浠�,鍒嗗壊 0寰呭紑濮� 1杩涜涓� 2宸茶秴鏈� 3宸插畬鎴� 4宸插彇娑�")
     @TableField(exist = false)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java
index ef8a041..379c7ff 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java
@@ -75,15 +75,15 @@
 
     @ApiModelProperty(value = "澶勭悊鏃堕棿")
     @ExcelColumn(name="澶勭悊鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date dealDate;
 
     @ApiModelProperty(value = "鏄惁宸℃  0=寰呭紑濮嬶紱1=宸插贰妫�锛�", example = "1")
     @ExcelColumn(name="鏄惁宸℃  0=寰呭紑濮嬶紱1=宸插贰妫�")
     private Integer status;
 
-    @ApiModelProperty(value = "宸℃缁撴灉  0=姝e父锛�1=寮傚父", example = "1")
-    @ExcelColumn(name="宸℃缁撴灉  0=姝e父锛�1=寮傚父")
+    @ApiModelProperty(value = "宸℃缁撴灉  0=姝e父锛�1=寮傚父;2=璺宠繃锛�", example = "1")
+    @ExcelColumn(name="宸℃缁撴灉  0=姝e父锛�1=寮傚父锛�2=璺宠繃锛�")
     private Integer dealStatus;
 
     @ApiModelProperty(value = "澶勭悊澶囨敞")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
index caa8f4a..d0434c4 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java
@@ -106,6 +106,13 @@
     @ExcelColumn(name="鎵�灞炴ゼ瀹囩紪鐮侊紙鍏宠仈yw_building)")
     private Integer buildingId;
 
+    @ApiModelProperty(value = "褰撳墠绉熻祦鐘舵�侊細0=鏈璧侊紱1=宸茬璧�")
+    private Integer leaseNowStatus;
+
+    @ApiModelProperty(value = "閫�绉熷埌鏈熸棩鏈燂紝閫�绉熶娇鐢�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date leaseRentDate;
+
     @ApiModelProperty(value = "绉熻祦鐘舵�侊細0=寰呯璧侊紱1=宸茬璧� ;2=鏈紑鍚璧�", example = "1")
     @TableField(exist = false)
     private Integer leaseStatus;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
index dc2ec33..b402a67 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.core.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -20,65 +21,59 @@
 @Data
 @ApiModel("杩愮淮搴撳瓨淇℃伅琛�")
 @TableName("`yw_stock`")
-public class YwStock {
+public class YwStock  extends LoginUserModel {
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "浠撳簱缂栫爜(鍏宠仈yw_warehouse)")
-    @ExcelColumn(name="浠撳簱缂栫爜(鍏宠仈yw_warehouse)")
     private Integer warehouseId;
 
     @ApiModelProperty(value = "鐗╄祫缂栫爜锛堝叧鑱攜w_material)", example = "1")
-    @ExcelColumn(name="鐗╄祫缂栫爜锛堝叧鑱攜w_material)")
     private Integer materialId;
 
     @ApiModelProperty(value = "鏁伴噺", example = "1")
-    @ExcelColumn(name="鏁伴噺")
+    @ExcelColumn(name="鏁伴噺",index = 6,width = 10)
     private BigDecimal stock;
 
-
-    @ApiModelProperty(value = "璧勪骇缂栫爜")
+    @ApiModelProperty(value = "鐗╂枡缂栫爜")
+    @ExcelColumn(name="鐗╂枡缂栫爜",index = 0,width = 10)
     @TableField(exist = false)
     private String materialCode;
 
-    @ApiModelProperty(value = "璧勪骇鍚嶇О")
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    @ExcelColumn(name="鐗╂枡鍚嶇О",index = 1,width = 10)
     @TableField(exist = false)
     private String materialName;
 
-    @ApiModelProperty(value = "璧勪骇鏉″舰鐮�")
+    @ApiModelProperty(value = "鏉$爜")
+    @ExcelColumn(name="鏉$爜",index = 2,width = 10)
     @TableField(exist = false)
     private String materialQrcode;
 
-    @ApiModelProperty(value = "璧勪骇鍝佺墝")
+    @ApiModelProperty(value = "鍝佺墝")
+    @ExcelColumn(name="鍝佺墝",index = 3,width = 10)
     @TableField(exist = false)
     private String materialBrand;
 
@@ -86,11 +81,13 @@
     @TableField(exist = false)
     private String materialUnitName;
 
-    @ApiModelProperty(value = "璧勪骇瑙勬牸鍨嬪彿")
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    @ExcelColumn(name="瑙勬牸鍨嬪彿",index = 4,width = 10)
     @TableField(exist = false)
     private String materialAttr;
 
-    @ApiModelProperty(value = "浠撳簱鍚嶇О")
+    @ApiModelProperty(value = "鎵�鍦ㄤ粨搴�")
+    @ExcelColumn(name="鎵�鍦ㄤ粨搴�",index = 5,width = 10)
     @TableField(exist = false)
     private String warehouseName;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java
index 3addc97..ea7869f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java
@@ -35,7 +35,7 @@
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @ExcelColumn(name="鍒涘缓鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java
index 6672876..44c5b68 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java
@@ -25,97 +25,91 @@
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
+    @ExcelColumn(name="澶囨敞",index = 9,width = 30)
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0鏈紑濮� 1宸茬洏鐐�", example = "1")
-    @ExcelColumn(name="鐘舵�� 0鏈紑濮� 1宸茬洏鐐�")
     private Integer status;
 
     @ApiModelProperty(value = "鐩樼偣鍛樼紪鐮�(鍏宠仈system_user)")
-    @ExcelColumn(name="鐩樼偣鍛樼紪鐮�(鍏宠仈system_user)")
     private String userId;
 
     @ApiModelProperty(value = "鐩樼偣鏃堕棿")
-    @ExcelColumn(name="鐩樼偣鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date planDate;
 
     @ApiModelProperty(value = "缂栧彿")
-    @ExcelColumn(name="缂栧彿")
     private String code;
 
     @ApiModelProperty(value = "鐗╄祫缂栫爜锛堝叧鑱攜w_material)", example = "1")
-    @ExcelColumn(name="鐗╄祫缂栫爜锛堝叧鑱攜w_material)")
     private Integer materialId;
 
     @ApiModelProperty(value = "璐﹂潰鏁伴噺", example = "1")
-    @ExcelColumn(name="璐﹂潰鏁伴噺")
+    @ExcelColumn(name="璐﹂潰鏁伴噺",index = 7,width = 10)
     private BigDecimal stock;
 
     @ApiModelProperty(value = "瀹為檯鐩樼偣搴撳瓨閲�", example = "1")
-    @ExcelColumn(name="瀹為檯鐩樼偣搴撳瓨閲�")
+    @ExcelColumn(name="鐩樼偣鏁伴噺",index = 8,width = 10)
     private BigDecimal actStock;
 
     @ApiModelProperty(value = "鐩樼偣 0璐﹀疄鐩哥 1鐩樹簭 2鐩樼泩", example = "1")
-    @ExcelColumn(name="鐩樼偣 0璐﹀疄鐩哥 1鐩樹簭 2鐩樼泩")
     private Integer type;
 
     @ApiModelProperty(value = "鐩樼偣璁″垝缂栫爜(鍏宠仈yw_stocktaking)", example = "1")
-    @ExcelColumn(name="鐩樼偣璁″垝缂栫爜(鍏宠仈yw_stocktaking)")
     private Integer stocktakingId;
 
     @ApiModelProperty(value = "璧勪骇缂栫爜")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡缂栫爜",index = 0,width = 10)
     private String materialCode;
 
     @ApiModelProperty(value = "璧勪骇鍚嶇О")
     @TableField(exist = false)
+    @ExcelColumn(name="鐗╂枡鍚嶇О",index = 1,width = 10)
     private String materialName;
 
     @ApiModelProperty(value = "璧勪骇鏉″舰鐮�")
     @TableField(exist = false)
+    @ExcelColumn(name="鏉$爜",index = 2,width = 10)
     private String materialQrcode;
 
     @ApiModelProperty(value = "璧勪骇鍝佺墝")
     @TableField(exist = false)
+    @ExcelColumn(name="鍝佺墝",index = 3,width = 10)
     private String materialBrand;
 
     @ApiModelProperty(value = "璧勪骇瑙勬牸鍨嬪彿")
     @TableField(exist = false)
+    @ExcelColumn(name="瑙勬牸鍨嬪彿",index = 4,width = 10)
     private String materialAttr;
 
     @ApiModelProperty(value = "璧勪骇鍗曚綅")
     @TableField(exist = false)
+    @ExcelColumn(name="鍗曚綅",index = 5,width = 10)
     private String materialUnitName;
 
     @ApiModelProperty(value = "浠撳簱鍚嶇О")
+    @ExcelColumn(name="浠撳簱",index = 6,width = 10)
     @TableField(exist = false)
     private String warehouseName;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
index 6c80566..f2c95f8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java
@@ -98,7 +98,7 @@
     private String code;
 
     @ApiModelProperty(value = "澶勭悊鐘舵�� 0寰呭鐞� 1宸插垎娲� 2宸插鐞�", example = "1")
-    @ExcelColumn(name="宸ュ崟鐘舵��",index = 7,width = 10,valueMapping = "0=寰呭鐞�;1=宸插垎娲�;2=宸插鐞�;")
+    @ExcelColumn(name="宸ュ崟鐘舵��",index = 7,width = 10,valueMapping = "0=寰呮寚娲�;1=宸叉寚娲�;2=宸插鐞�;")
     private Integer dealStatus;
 
     @ApiModelProperty(value = "鍒嗘淳浜虹紪鐮�(鍏宠仈system_user)", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MemberExcelVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MemberExcelVO.java
new file mode 100644
index 0000000..210cdc9
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MemberExcelVO.java
@@ -0,0 +1,45 @@
+package com.doumee.dao.business.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.core.model.LoginUserModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 浜哄憳淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Data
+public class MemberExcelVO {
+
+    @ApiModelProperty(value = "瀹㈡埛鍚嶇О", example = "1")
+    @ExcelColumn(name="瀹㈡埛鍚嶇О",width = 10,index = 1)
+    private String customerName;
+
+    @ApiModelProperty(value = "鑱旂郴浜�", example = "1")
+    @ExcelColumn(name="鑱旂郴浜�",width = 10,index = 2)
+    private String name;
+
+    @ApiModelProperty(value = "鑱旂郴鐢佃瘽", example = "1")
+    @ExcelColumn(name="鑱旂郴鐢佃瘽",width = 10,index = 3)
+    private String phone;
+
+    @ApiModelProperty(value = "韬唤 0鑰佹澘/瓒呯骇绠$悊鍛� 1浜轰簨/绠$悊鍛� 2鍛樺伐/鏅�氬憳宸�", example = "1")
+    @ExcelColumn(name="韬唤",width = 10,index = 4,valueMapping = "0=鑰佹澘/瓒呯骇绠$悊鍛�;1=浜轰簨/绠$悊鍛�;2=鍛樺伐/鏅�氬憳宸�;")
+    private Integer highCheckor;
+
+    @ApiModelProperty(value = "鐘舵�� 0姝e父 1绂佺敤 2鎷夐粦/鍐荤粨", example = "1")
+    @ExcelColumn(name="韬唤",width = 10,index = 5,valueMapping = "0=姝e父;1=绂佺敤;")
+    private Integer status;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelInVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelInVO.java
new file mode 100644
index 0000000..1766d31
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelInVO.java
@@ -0,0 +1,50 @@
+package com.doumee.dao.business.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 杩愮淮鍑哄叆搴撲俊鎭〃
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+public class YwOutinboundExcelInVO {
+
+    @ApiModelProperty(value = "鍗曟嵁缂栧彿")
+    @ExcelColumn(name="鍏ュ簱鍗曞彿",index = 0,width = 16)
+    private String code;
+
+    @ApiModelProperty(value = "浠撳簱鍚嶇О", example = "1")
+    @ExcelColumn(name="鍏ュ簱浠撳簱",index = 1,width = 16)
+    private String warehouseName;
+
+    @ApiModelProperty(value = "绫诲瀷 0閲囪喘鍏ュ簱 1棰嗙敤閫�鍥� 2璋冩暣鍏ュ簱 3鍏朵粬鍏ュ簱 4鐩樼泩鍏ュ簱 5棰嗙敤鍑哄簱 6浠撳簱鍑哄簱 7璋冩暣鍑哄簱 8閲囪喘鍑哄簱 9鍏朵粬鍑哄簱 10鐩樹簭鍑哄簱", example = "1")
+    @ExcelColumn(name="鍏ュ簱绫诲瀷",index = 2,width = 10,valueMapping = "0=閲囪喘鍏ュ簱;1=棰嗙敤閫�鍥�;2=璋冩暣鍏ュ簱;3=鍏朵粬鍏ュ簱;4=鐩樼泩鍏ュ簱;5=棰嗙敤鍑哄簱;6=浠撳簱鍑哄簱;7=璋冩暣鍑哄簱;8=閲囪喘鍑哄簱;9=鍏朵粬鍑哄簱;10=鐩樹簭鍑哄簱;")
+    private Integer type;
+
+    @ApiModelProperty(value = "鍑哄簱鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelColumn(name="鍏ュ簱鏃ユ湡",index = 3,width = 16,dateFormat = "yyyy-MM-dd")
+    private Date doneDate;
+
+    @ApiModelProperty(value = "鍑哄簱鏁伴噺")
+    @ExcelColumn(name="鍏ュ簱鏁伴噺",index = 4,width = 16)
+    private String outMaterialNum;
+
+    @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
+    @ExcelColumn(name="鎿嶄綔浜�",index = 5,width = 16)
+    private String createUserName;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ExcelColumn(name="鎿嶄綔鏃堕棿",index = 6,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createDate;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java
new file mode 100644
index 0000000..d2c86d6
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java
@@ -0,0 +1,55 @@
+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.YwOutinboundRecord;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 杩愮淮鍑哄叆搴撲俊鎭〃
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+public class YwOutinboundExcelOutVO {
+
+    @ApiModelProperty(value = "鍗曟嵁缂栧彿")
+    @ExcelColumn(name="鍑哄簱鍗曞彿",index = 0,width = 16)
+    private String code;
+
+    @ApiModelProperty(value = "浠撳簱鍚嶇О", example = "1")
+    @ExcelColumn(name="鍑哄簱浠撳簱",index = 1,width = 16)
+    private String warehouseName;
+
+    @ApiModelProperty(value = "绫诲瀷 0閲囪喘鍏ュ簱 1棰嗙敤閫�鍥� 2璋冩暣鍏ュ簱 3鍏朵粬鍏ュ簱 4鐩樼泩鍏ュ簱 5棰嗙敤鍑哄簱 6浠撳簱鍑哄簱 7璋冩暣鍑哄簱 8閲囪喘鍑哄簱 9鍏朵粬鍑哄簱 10鐩樹簭鍑哄簱", example = "1")
+    @ExcelColumn(name="鍑哄簱绫诲瀷",index = 2,width = 10,valueMapping = "0=閲囪喘鍏ュ簱;1=棰嗙敤閫�鍥�;2=璋冩暣鍏ュ簱;3=鍏朵粬鍏ュ簱;4=鐩樼泩鍏ュ簱;5=棰嗙敤鍑哄簱;6=浠撳簱鍑哄簱;7=璋冩暣鍑哄簱;8=閲囪喘鍑哄簱;9=鍏朵粬鍑哄簱;10=鐩樹簭鍑哄簱;")
+    private Integer type;
+
+    @ApiModelProperty(value = "鍑哄簱鏃ユ湡")
+    @ExcelColumn(name="鍑哄簱鏃ユ湡",index = 3,width = 16,dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date doneDate;
+
+    @ApiModelProperty(value = "鍑哄簱鏁伴噺")
+    @ExcelColumn(name="鍑哄簱鏁伴噺",index = 4,width = 16)
+    private String outMaterialNum;
+
+    @ApiModelProperty(value = "棰嗙敤浜�", example = "1")
+    @ExcelColumn(name="棰嗙敤浜�",index = 5,width = 16)
+    private String outUserName;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鎿嶄綔鏃堕棿",index = 6,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createDate;
+
+    @ApiModelProperty(value = "棰嗙敤浜�", example = "1")
+    @ExcelColumn(name="鎿嶄綔浜哄悕绉�",index = 7,width = 16)
+    private String createUserName;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
index 84f74eb..bca5059 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractService.java
@@ -102,5 +102,17 @@
 
     void dealTimeOut();
 
+    /**
+     * 鍒版湡鍚堝悓 鏈彂璧烽��绉熺殑杩涜鏁版嵁璋冩暣 鎶婂悎鍚屼笅鐨勬埧婧愰噴鏀� 瀹氭椂鏃堕棿闇�瑕佸湪姣忓ぉ鏅氫笂12鐐瑰墠
+     */
+    void updRoomLeaseNowStatus();
+
+
+    /**
+     * 閫�绉熶腑/宸查��绉熷悎鍚� 鎶婂埌浜嗛��绉熸棩鏈熸椂闂寸殑鏁版嵁 杩涜鎴挎簮閲婃斁 瀹氭椂鏃堕棿闇�瑕佸湪姣忓ぉ鏅氫笂12鐐瑰墠
+     */
+    void updRentContractStatus();
+
+
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java
index 6da3431..6e0c811 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java
@@ -1,8 +1,11 @@
 package com.doumee.service.business;
 
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.YwMaterial;
+import org.springframework.web.multipart.MultipartFile;
+
 import java.util.List;
 
 /**
@@ -98,4 +101,6 @@
     long count(YwMaterial ywMaterial);
 
     YwMaterial getDetail(Integer id);
+
+    Integer importMaterialBatch(MultipartFile file, LoginUserInfo loginUserInfo);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
index e75dac5..5ae4161 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -7,8 +7,9 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.CategoryMapper;
-import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.CategoryService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -37,6 +38,22 @@
     @Autowired
     private CategoryMapper categoryMapper;
 
+    @Autowired
+    private YwCustomerMapper ywCustomerMapper;
+
+    @Autowired
+    private YwWorkorderMapper ywWorkorderMapper;
+
+    @Autowired
+    private YwPatrolPointMapper ywPatrolPointMapper;
+
+    @Autowired
+    private YwDeviceMapper ywDeviceMapper;
+
+    @Autowired
+    private YwMaterialMapper ywMaterialMapper;
+
+
     @Override
     public Integer create(Category category) {
         checkUnique(category);
@@ -61,8 +78,32 @@
         return insert.getId();
     }
 
+
     @Override
     public void deleteById(Integer id) {
+        Category category = categoryMapper.selectById(id);
+        if(Objects.isNull(category)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+
+        if(categoryMapper.selectCount(new QueryWrapper<Category>().lambda()
+                .eq(Category::getIsdeleted,Constants.ZERO)
+                .eq(Category::getParentId,id)
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪瀛愰泦鏁版嵁,鏃犳硶杩涜鍒犻櫎");
+        }
+        //鏌ヨ鏁版嵁鏄惁宸蹭娇鐢�     3杩愮淮-宸ュ崟鍒嗙被 4杩愮淮-宸℃鍖哄煙 5杩愮淮-璁惧鍒嗙被 6=瀹㈡埛琛屼笟 7=璧勪骇鍒嗙被
+        if(Constants.equalsInteger(category.getType(),Constants.THREE)){
+            if(ywWorkorderMapper.selectCount(new QueryWrapper<YwWorkorder>().lambda().eq(YwWorkorder::getIsdeleted,Constants.ZERO).eq(YwWorkorder::getCateId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }else if (Constants.equalsInteger(category.getType(),Constants.FOUR)){
+            if(ywPatrolPointMapper.selectCount(new QueryWrapper<YwPatrolPoint>().lambda().eq(YwPatrolPoint::getIsdeleted,Constants.ZERO).eq(YwPatrolPoint::getAreaId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }else if (Constants.equalsInteger(category.getType(),Constants.FIVE)){
+            if(ywDeviceMapper.selectCount(new QueryWrapper<YwDevice>().lambda().eq(YwDevice::getIsdeleted,Constants.ZERO).eq(YwDevice::getCateId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }else if (Constants.equalsInteger(category.getType(),Constants.SIX)){
+            if(ywCustomerMapper.selectCount(new QueryWrapper<YwCustomer>().lambda().eq(YwCustomer::getIsdeleted,Constants.ZERO).eq(YwCustomer::getIndustryId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }else if (Constants.equalsInteger(category.getType(),Constants.SEVEN)){
+            if(ywMaterialMapper.selectCount(new QueryWrapper<YwMaterial>().lambda().eq(YwMaterial::getIsdeleted,Constants.ZERO).eq(YwMaterial::getCateId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }
         categoryMapper.update(null,new UpdateWrapper<Category>().lambda().set(Category::getIsdeleted,Constants.ONE)
                 .eq(Category::getId,id)
         );
@@ -195,6 +236,8 @@
         wrapper.lambda()
                 .ne(Objects.nonNull(category.getId()),Category::getId,category.getId())
                 .eq(Category::getIsdeleted,Constants.ZERO)
+                .eq(Objects.nonNull(category.getParentId()),Category::getParentId,category.getParentId())
+                .isNull(Objects.isNull(category.getParentId()),Category::getParentId)
                 .eq(Category::getType,category.getType())
                 .eq(Category::getName,category.getName());
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 12976d2..135c516 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2231,12 +2231,12 @@
                 throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "韬唤璇佸彿銆�"+member.getIdcardNo()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
             }
         }
-        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
-                .ne(Objects.nonNull(member.getId()),Member::getId,member.getId())
-                .eq(Member::getPhone,  member.getPhone())
-                .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
-            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+member.getPhone()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
-        }
+//        if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+//                .ne(Objects.nonNull(member.getId()),Member::getId,member.getId())
+//                .eq(Member::getPhone,  member.getPhone())
+//                .eq(Member::getIsdeleted,Constants.ZERO) ) >0){
+//            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "鎵嬫満鍙枫��"+member.getPhone()+"銆戝凡琚娇鐢紝涓嶈兘閲嶅");
+//        }
     }
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
index 4d4beaf..a50a208 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -106,10 +106,11 @@
         String code = Constants.getRandom6Num();
         SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getObjType,
                 SmsConstants.inventCode).last(" limit 1 "));
+        String comName = systemDictDataBiz.queryByCode(Constants.SMS,Constants.SMS_COMNAME).getCode();
         //寮�鍚煭淇¢�氱煡
         if(Objects.nonNull(smsConfig) || Constants.equalsInteger(smsConfig.getStatus(),Constants.ZERO)){
             if(StringUtils.isNotBlank(smsConfig.getContent())){
-                String content  = smsConfig.getContent().replace("{楠岃瘉鐮亇",code);
+                String content  = comName + smsConfig.getContent().replace("{楠岃瘉鐮亇",code);
                 emayService.sendSingleSms(smsEmail.getPhone(),content);
                 smsEmail.setRemark(code);
                 smsEmail.setIsdeleted(Constants.ZERO);
@@ -594,7 +595,7 @@
         SmsEmail smsEmail = new SmsEmail();
         smsEmail.setIsdeleted(Constants.ZERO);
         smsEmail.setCreateDate(new Date());
-        smsEmail.setStatus(result?Constants.ZERO:Constants.ONE);
+        smsEmail.setStatus(result?Constants.ONE:Constants.TWO);
         smsEmail.setType(Constants.ZERO);
         smsEmail.setRemark(result?"鐭俊鍙戦�佹垚鍔�":"鐭俊鍙戦�佸け璐�");
         smsEmail.setTitle("璐﹀崟鍌垂");
@@ -620,9 +621,10 @@
         SmsEmail smsEmail = new SmsEmail();
         smsEmail.setRemark(result?"閭欢鍙戦�佹垚鍔�":"閭欢鍙戦�佸け璐�");
         smsEmail.setIsdeleted(Constants.ZERO);
+        smsEmail.setTitle("璐﹀崟鍌垂");
         smsEmail.setCreateDate(new Date());
-        smsEmail.setStatus(result?Constants.ZERO:Constants.ONE);
-        smsEmail.setType(Constants.TWO);
+        smsEmail.setStatus(result?Constants.ONE:Constants.TWO);
+        smsEmail.setType(Constants.ONE);
         smsEmail.setObjId(billId);
         smsEmail.setObjType(Constants.TWO+"");
         smsEmail.setContent(content);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
index 436e79a..e456e57 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
@@ -232,6 +232,17 @@
                 ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee())
         );
 
+        if(Constants.equalsInteger(ywContractBill.getStatus(),Constants.ZERO)
+                && (Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.ZERO)
+                || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.TWO)
+                || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.THREE)
+                || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.FOUR))
+                && Utils.Date.getEnd(ywContractBill.getPlanPayDate()).getTime() < System.currentTimeMillis()){
+            ywContractBill.setIsOverdue(Constants.ONE);
+        }else{
+            ywContractBill.setIsOverdue(Constants.ZERO);
+        }
+
         //鎴挎簮鏁版嵁
         ywContractBill.setYwContractRoomList(
                 ywContractRoomMapper.selectJoinList(YwContractRoom.class,new MPJLambdaWrapper<YwContractRoom>()
@@ -239,8 +250,8 @@
                 .selectAs(YwProject::getName,YwRoom::getProjectName)
                 .selectAs(YwFloor::getName,YwRoom::getFloorName)
                 .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
-                .selectAs(YwRoom::getCode,YwContractRoom::getRoomName)
-                .selectAs(YwRoom::getArea,YwContractRoom::getArea)
+                .selectAs(YwRoom::getRoomNum,YwContractRoom::getRoomName)
+                .selectAs(YwRoom::getRentArea,YwContractRoom::getArea)
                 .leftJoin(YwRoom.class,YwRoom::getId,YwContractRoom::getRoomId)
                 .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
                 .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
@@ -345,7 +356,7 @@
                 || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.TWO)
                 || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.THREE)
                 || Constants.equalsInteger(ywContractBill.getPayStatus(),Constants.FOUR))
-            && ywContractBill.getPlanPayDate().getTime() < System.currentTimeMillis()){
+            && Utils.Date.getEnd(ywContractBill.getPlanPayDate()).getTime() < System.currentTimeMillis()){
                 ywContractBill.setIsOverdue(Constants.ONE);
             }else{
                 ywContractBill.setIsOverdue(Constants.ZERO);
@@ -392,6 +403,8 @@
         IPage<YwContractBill> iPage = ywContractBillMapper.selectJoinPage(page,YwContractBill.class,
                 queryWrapper.selectAll(YwContractBill.class)
                         .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when  t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE  when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else  yw.ACT_RECEIVABLE_FEE END),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
+                        .select(" ifnull((select s.status  from sms_email s where s.OBJ_ID = t.id and s.OBJ_TYPE = 2 order by s.CREATE_DATE desc  limit 1 ),0)  ",YwContractBill::getIsSendEmail)
+                        .select(" ifnull((select s.status  from sms_email s where s.OBJ_ID = t.id and s.OBJ_TYPE = 1 order by s.CREATE_DATE desc  limit 1 ),0)  ",YwContractBill::getIsSendSms)
                         .selectAs(YwContract::getCode,YwContractBill::getContractCode)
                         .selectAs(YwCustomer::getName,YwContractBill::getCustomerName)
                         .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
@@ -405,12 +418,12 @@
                                 YwContractBill::getBillType,model.getBillType())
                         .eq(Objects.nonNull(model)&&Objects.nonNull(model.getPayStatus()),
                                 YwContractBill::getPayStatus,model.getPayStatus())
-                        .in(Objects.nonNull(model)&&Objects.nonNull(model.getPayStatus()),
-                                YwContractBill::getPayStatus,Constants.ZERO,Constants.THREE,Constants.TWO,Constants.FOUR)
+                        .in(YwContractBill::getPayStatus,Constants.ZERO,Constants.TWO,Constants.THREE)
                         .eq(Objects.nonNull(model)&&Objects.nonNull(model.getType()),
                                 YwContractBill::getType,model.getType())
                         .le(Objects.nonNull(model)&&Objects.nonNull(model.getIsOverdue())&&Constants.equalsInteger(model.getIsOverdue(),Constants.ONE),
                                 YwContractBill::getPlanPayDate, DateUtil.getCurrDateTime())
+                        .lt(YwContractBill::getPlanPayDate, DateUtil.getDate(new Date(),"yyyy-MM-dd"))
                         .eq(Objects.nonNull(model)&&Objects.nonNull(model.getIsOverdue())&&Constants.equalsInteger(model.getIsOverdue(),Constants.ONE),
                                 YwContractBill::getStatus, Constants.ZERO)
                         .ge(Objects.nonNull(model)&&Objects.nonNull(model.getPlanPayDateStart()),YwContractBill::getPlanPayDate, Utils.Date.getStart(model.getPlanPayDateStart()))
@@ -455,7 +468,7 @@
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBillList)){
             //鑾峰彇鎵�鏈夋暟鎹�
             List<Integer> billIdList = ywContractBillList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).map(i->i.getId()).collect(Collectors.toList());
-            List<Integer> contractIdList = ywContractBillList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).map(i->i.getContractId()).collect(Collectors.toList());
+            List<Integer> contractIdList = ywContractBillList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)||Constants.equalsInteger(i.getType(),Constants.TWO)).map(i->i.getContractId()).collect(Collectors.toList());
             List<YwContractRoom> ywContractRoomList  = new ArrayList<>();
             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(billIdList)){
                 ywContractRoomList.addAll( ywContractRoomMapper.selectJoinList(YwContractRoom.class,new MPJLambdaWrapper<YwContractRoom>()
@@ -463,7 +476,7 @@
                         .selectAs(YwProject::getName,YwRoom::getProjectName)
                         .selectAs(YwFloor::getName,YwRoom::getFloorName)
                         .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
-                        .selectAs(YwRoom::getCode,YwContractRoom::getRoomName)
+                        .selectAs(YwRoom::getRoomNum,YwContractRoom::getRoomName)
                         .leftJoin(YwRoom.class,YwRoom::getId,YwContractRoom::getRoomId)
                         .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
                         .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
@@ -479,7 +492,7 @@
                         .selectAs(YwProject::getName,YwRoom::getProjectName)
                         .selectAs(YwFloor::getName,YwRoom::getFloorName)
                         .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
-                        .selectAs(YwRoom::getCode,YwContractRoom::getRoomName)
+                        .selectAs(YwRoom::getRoomNum,YwContractRoom::getRoomName)
                         .leftJoin(YwRoom.class,YwRoom::getId,YwContractRoom::getRoomId)
                         .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
                         .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
@@ -600,6 +613,7 @@
             .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
             .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
             .eq(YwContractBill::getIsdeleted,Constants.ZERO)
+            .eq(YwContractBill::getStatus,Constants.ZERO)
             .in(YwContractBill::getPayStatus,Constants.ZERO,Constants.TWO,Constants.THREE,Constants.FOUR)
             .eq(YwContractBill::getContractId,contractId)
             .orderByDesc(YwContractBill::getId);
@@ -689,7 +703,8 @@
                     .selectAs(YwContractDetail::getType,YwContractBill::getDetailType)
                     .selectAs(YwContract::getZlPayType,YwContractBill::getZlPayType)
                     .selectAs(YwContract::getWyPayType,YwContractBill::getWyPayType)
-                    .select(" ( select ifnull(sum(y.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 0 and yr.type = 0 )  " , YwContractBill::getTotalArea)
+                    .select(" ( select ifnull(sum(y.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 1 and yr.type = 0 )  " , YwContractBill::getTotalArea)
+                    .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when  t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE  when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else  yw.ACT_RECEIVABLE_FEE END),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                     .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
                     .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
                     .leftJoin(YwContractDetail.class,YwContractDetail::getId,YwContractBill::getDetailId)
@@ -824,7 +839,7 @@
             }else if(y.getTitle().equals("${搴旀敹鏃ユ湡}")&&Objects.nonNull(ywContractBill.getPlanPayDate())){
                 y.setUrl(DateUtil.formatDate(ywContractBill.getPlanPayDate(),"yyyy-MM-dd"));
             }else if(y.getTitle().equals("${搴旀敹閲戦}")&&Objects.nonNull(ywContractBill.getReceivableFee())){
-                y.setUrl(ywContractBill.getReceivableFee().toString());
+                y.setUrl((ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee())).setScale(2).toString());
             }else if(y.getTitle().equals("${璐﹀崟澶囨敞}")){
                 if(StringUtils.isNotBlank(ywContractBill.getRemark())){
                     y.setUrl(ywContractBill.getRemark());
@@ -925,14 +940,19 @@
                     .selectAs(YwContractDetail::getType,YwContractBill::getDetailType)
                     .selectAs(YwContract::getZlPayType,YwContractBill::getZlPayType)
                     .selectAs(YwContract::getWyPayType,YwContractBill::getWyPayType)
-                    .select(" ( select ifnull(sum(r.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 0 and yr.type = 0 )  " , YwContractBill::getTotalArea)
+                    .select(" ( select ifnull(sum(y.rent_area),0) from yw_room y left join yw_contract_room yr on y.id = yr.room_id where yr.contract_id = t.contract_id and y.IS_INVESTMENT = 1 and yr.type = 0 )  " , YwContractBill::getTotalArea)
                     .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
                     .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
                     .leftJoin(YwContractDetail.class,YwContractDetail::getId,YwContractBill::getDetailId)
                     .eq(YwContractBill::getId,ywSmsEmailBillCallDTO.getBillId())
                     .last( "limit 1" )
             );
-            this.dealTempData(tempList,ywContractBill,loginUserInfo);
+
+            List<YwContractBill> ywContractBillList = new ArrayList<>();
+            ywContractBillList.add(ywContractBill);
+            this.dealRoomDetail(ywContractBillList);
+
+//            this.dealTempData(tempList,ywContractBill,loginUserInfo);
             Member member = memberMapper.selectById(ywSmsEmailBillCallDTO.getUserId());
             if(Objects.isNull(member)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀛樺湪鏈煡璇㈠埌鐨勪汉鍛樹俊鎭�");
@@ -946,11 +966,10 @@
                 if(Constants.equalsInteger(ywSmsEmailBillCallDTO.getSendEmail(),Constants.ONE) && StringUtils.isNotBlank(member.getEmail())
                         && emailTempConfigOptional.isPresent()){
                     String content = this.dealTempSmsEmailData(emailTempConfigOptional.get().getTitle(),tempList,ywContractBill,loginUserInfo);
-                    smsEmailService.sendEmail(content,member.getEmail(),ywContractBill.getId());
+                    smsEmailService.sendEmail(member.getEmail(),content,ywContractBill.getId());
                 }
             }
         }
-         
     }
 
 
@@ -962,82 +981,87 @@
         for (YwTempConfig y:ywTempConfigList) {
             if(y.getTitle().equals("${璐圭敤鍚嶇О}")&&Objects.nonNull(ywContractBill.getCostType())){
                 //璐圭敤绫诲瀷锛�0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=绉熻祦鎶奸噾锛�3=鐗╀笟鎶奸噾锛�4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬; 7=淇濊瘉閲�
-                if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.ZERO)){ 
-                    tempStr.replace("${璐圭敤鍚嶇О}","绉熻祦璐�");
+                if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.ZERO)){
+                    tempStr = tempStr.replace("${璐圭敤鍚嶇О}","绉熻祦璐�");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.ONE)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟璐�");
+                    tempStr = tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟璐�");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.TWO)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","绉熻祦鎶奸噾");
+                    tempStr = tempStr.replace("${璐圭敤鍚嶇О}","绉熻祦鎶奸噾");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.THREE)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟鎶奸噾");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟鎶奸噾");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.FOUR)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","姘寸數璐�");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","姘寸數璐�");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.FIVE)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","鏉傞」璐�");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","鏉傞」璐�");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.SIX)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","鍏朵粬");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","鍏朵粬");
                 }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.SEVEN)){
-                    tempStr.replace("${璐圭敤鍚嶇О}","淇濊瘉閲�");
+                  tempStr =   tempStr.replace("${璐圭敤鍚嶇О}","淇濊瘉閲�");
                 }
-            }else if(y.getTitle().equals("${璁¤垂鍛ㄦ湡}")&&Objects.nonNull(ywContractBill.getDetailType())){
-                if(Constants.equalsInteger(ywContractBill.getDetailType(),Constants.ZERO)){
-                    //绉熻祦鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�
-                    if(Objects.nonNull(ywContractBill.getZlPayType())){
-                        if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ZERO)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�娆℃�т粯娆�");
-                        }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ONE)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","姣忎笁涓湀涓�浠�");
-                        }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.TWO)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","鍏釜鏈堜竴浠�");
-                        }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.THREE)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�骞翠竴浠�");
+            }else if(y.getTitle().equals("${璁¤垂鍛ㄦ湡}")){
+                if(Objects.nonNull(ywContractBill.getDetailType())){
+                    if(Constants.equalsInteger(ywContractBill.getDetailType(),Constants.ZERO)){
+                        //绉熻祦鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�
+                        if(Objects.nonNull(ywContractBill.getZlPayType())){
+                            if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ZERO)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�娆℃�т粯娆�");
+                            }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.ONE)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","姣忎笁涓湀涓�浠�");
+                            }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.TWO)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","鍏釜鏈堜竴浠�");
+                            }else if(Constants.equalsInteger(ywContractBill.getZlPayType(),Constants.THREE)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�骞翠竴浠�");
+                            }
+                        }
+                    }else{
+                        //鐗╀笟鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�
+                        if(Objects.nonNull(ywContractBill.getWyPayType())){
+                            if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ZERO)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�娆℃�т粯娆�");
+                            }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ONE)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","姣忎笁涓湀涓�浠�");
+                            }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.TWO)){
+                                tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","鍏釜鏈堜竴浠�");
+                            }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.THREE)){
+                                tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�骞翠竴浠�");
+                            }
                         }
                     }
                 }else{
-                    //鐗╀笟鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�
-                    if(Objects.nonNull(ywContractBill.getWyPayType())){
-                        if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ZERO)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�娆℃�т粯娆�");
-                        }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.ONE)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","姣忎笁涓湀涓�浠�");
-                        }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.TWO)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","鍏釜鏈堜竴浠�");
-                        }else if(Constants.equalsInteger(ywContractBill.getWyPayType(),Constants.THREE)){
-                            tempStr.replace("${璁¤垂鍛ㄦ湡}","涓�骞翠竴浠�");
-                        }
-                    }
+                    tempStr = tempStr.replace("${璁¤垂鍛ㄦ湡}","");
                 }
+
             }else if(y.getTitle().equals("${鍗曚环}")&&Objects.nonNull(ywContractBill.getPrice())){
-                tempStr.replace("${鍗曚环}",ywContractBill.getPrice().toString());
+                tempStr = tempStr.replace("${鍗曚环}",ywContractBill.getPrice().setScale(2).toString());
             }else if(y.getTitle().equals("${鍗曚綅}")&&Objects.nonNull(ywContractBill.getCircleType())){
                 //浠樻鍛ㄦ湡绫诲瀷 0=鍏冩瘡骞崇背澶�;1=鍏冩瘡骞崇背鏈�;2=鍏冩瘡骞崇背骞�;3=鍏冩瘡澶�;4=鍏冩瘡鏈�;5=鍏冩瘡骞�;6=鍏冩瘡鍦�;
                 if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ZERO)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背澶�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背澶�");
                 }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背鏈�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背鏈�");
                 }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.TWO)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背骞�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背骞�");
                 } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.THREE)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡澶�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡澶�");
                 } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FOUR)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡鏈�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡鏈�");
                 } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FIVE)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡骞�");
                 } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.SIX)){
-                    tempStr.replace("${鍗曚綅}","鍏冩瘡鍦�");
+                  tempStr =   tempStr.replace("${鍗曚綅}","鍏冩瘡鍦�");
                 }
             }else if(y.getTitle().equals("${搴旀敹鏃ユ湡}")&&Objects.nonNull(ywContractBill.getPlanPayDate())){
-                tempStr.replace("${搴旀敹鏃ユ湡}",DateUtil.formatDate(ywContractBill.getPlanPayDate(),"yyyy-MM-dd"));
+                tempStr = tempStr.replace("${搴旀敹鏃ユ湡}",DateUtil.formatDate(ywContractBill.getPlanPayDate(),"yyyy-MM-dd"));
             }else if(y.getTitle().equals("${搴旀敹閲戦}")&&Objects.nonNull(ywContractBill.getReceivableFee())){
-                tempStr.replace("${搴旀敹閲戦}",ywContractBill.getReceivableFee().toString());
+                tempStr = tempStr.replace("${搴旀敹閲戦}",(ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee())).setScale(2).toString());
             }else if(y.getTitle().equals("${璐﹀崟澶囨敞}")){
                 if(StringUtils.isNotBlank(ywContractBill.getRemark())){
-                    tempStr.replace("${璐﹀崟澶囨敞}",ywContractBill.getRemark());
+                  tempStr =   tempStr.replace("${璐﹀崟澶囨敞}",ywContractBill.getRemark());
                 }else{
-                    tempStr.replace("${璐﹀崟澶囨敞}","");
+                  tempStr =   tempStr.replace("${璐﹀崟澶囨敞}","");
                 }
             }else if(y.getTitle().equals("${绉熷鍚嶇О}")&&StringUtils.isNotBlank(ywContractBill.getCustomerName())){
-                tempStr.replace("${绉熷鍚嶇О}",ywContractBill.getCustomerName());
+                tempStr = tempStr.replace("${绉熷鍚嶇О}",ywContractBill.getCustomerName());
             }else if(y.getTitle().equals("${鎴块棿淇℃伅}")){
                 if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getYwContractRoomList())){
                     StringBuilder roomPathName = new StringBuilder();
@@ -1058,32 +1082,32 @@
                             roomPathName.append(";");
                         }
                     }
-                    tempStr.replace("${鎴块棿淇℃伅}",roomPathName.toString());
+                    tempStr = tempStr.replace("${鎴块棿淇℃伅}",roomPathName.toString());
                 }
             }else if(y.getTitle().equals("${绉熻祦闈㈢Н}")&&Objects.nonNull(ywContractBill.getTotalArea())){
                 tempStr.replace("${绉熻祦闈㈢Н}",ywContractBill.getTotalArea().toString());
             }else if(y.getTitle().equals("${鎵�灞炲叕鍙歌处鎴峰悕绉皚")){
                 if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
-                    tempStr.replace("${鎵�灞炲叕鍙歌处鎴峰悕绉皚",ywAccount.getName());
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙歌处鎴峰悕绉皚",ywAccount.getName());
                 }else{
-                    tempStr.replace("${鎵�灞炲叕鍙歌处鎴峰悕绉皚","-");
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙歌处鎴峰悕绉皚","-");
                 }
             }else if(y.getTitle().equals("${鎵�灞炲叕鍙搁摱琛岃处鍙穧")){ 
                 if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
-                    tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧",ywAccount.getName());
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧",ywAccount.getName());
                 }else{
-                    tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧","-");
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧","-");
                 }
             }else if(y.getTitle().equals("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎")){
                 if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getBankNo())){
-                    tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎",ywAccount.getBankNo());
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎",ywAccount.getBankNo());
                 }else{
-                    tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎","-");
+                  tempStr =   tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎","-");
                 }
             }else if(y.getTitle().equals("${閫氱煡鍗曠敓鎴愭棩鏈焳")){
-                tempStr.replace("${閫氱煡鍗曠敓鎴愭棩鏈焳",DateUtil.formatDate(new Date(),"yyyy-MM-dd"));
+                tempStr = tempStr.replace("${閫氱煡鍗曠敓鎴愭棩鏈焳",DateUtil.formatDate(new Date(),"yyyy-MM-dd"));
             }else if(y.getTitle().equals("${鍒惰〃浜哄悕绉皚")){
-                tempStr.replace("${鍒惰〃浜哄悕绉皚",loginUserInfo.getRealname());
+                tempStr = tempStr.replace("${鍒惰〃浜哄悕绉皚",loginUserInfo.getRealname());
             } 
         }
         return tempStr;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
index 49ecb0b..383ca4c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java
@@ -84,7 +84,7 @@
         model.setEditor(model.getCreator());
         if(model.getStartDate().getTime() > System.currentTimeMillis()){
             model.setStatus(Constants.ZERO);
-        }else if(model.getStartDate().getTime() <= System.currentTimeMillis() && model.getEndDate().getTime() > System.currentTimeMillis()){
+        }else if(model.getStartDate().getTime() <= System.currentTimeMillis() && Utils.Date.getEnd(model.getEndDate()).getTime() > System.currentTimeMillis()){
             model.setStatus(Constants.ONE);
         }else{
             model.setStatus(Constants.TWO);
@@ -112,6 +112,12 @@
             t.setEditor(model.getCreator());
             t.setType(Constants.ZERO);
             list.add(t);
+        }
+        if(Constants.equalsInteger(model.getStatus(),Constants.ONE)){
+            //鏇存柊鎴挎簮鏁版嵁涓虹璧佷腑
+            roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ONE)
+                    .in(YwRoom::getId,model.getRoomList().stream().map(i->i.getId()).collect(Collectors.toList()))
+            );
         }
         ywContractRoomMapper.insert(list);
     }
@@ -341,6 +347,13 @@
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public  Integer backRent(YwContract param){
         isParamValidBackRent(param);
+        YwContract model = ywContractMapper.selectById(param.getId());
+        if(Objects.isNull(model)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!(model.getStartDate().getTime()<=param.getBtDate().getTime()&&model.getEndDate().getTime()>=param.getBtDate().getTime())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閫�绉熸棩鏈熼敊璇紝璇锋鏌ラ��绉熸棩鏈熼渶鍦ㄥ悎鍚屾棩鏈熷唴锛�");
+        }
         param.setEditDate(new Date());
         param.setEditor(param.getLoginUserInfo().getId());
         //澶勭悊
@@ -364,30 +377,47 @@
         update.setBtRemark(getbackRentRemarkByParam(param));
         ywContractMapper.updateById(update);
         dealLogBiz(param,Constants.YwLogType.CONTRACT_BACK, param.getLoginUserInfo().getRealname(),getbackRentLogByParam(param));
+        //濡傛灉閫�绉熸棩鏈熷皬浜庡綋鍓嶆棩鏈� 鍒欑洿鎺ラ噴鏀炬埧婧愪俊鎭� 鏈璧�
+        if(Utils.Date.getEnd(param.getBtDate()).getTime()<System.currentTimeMillis()){
+            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda()
+                    .eq(YwContractRoom::getContractId, param.getId()));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
+                //鏇存柊鎴挎簮鏁版嵁涓烘湭绉熻祦
+                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ZERO)
+                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
+                );
+            }
+        }
         return param.getId();
     }
 
 
     @Override
     public  void dealTimeOut(){
-        //瀹氭椂澶勭悊鍚堝悓鎵ц涓�
-        ywContractMapper.update(new UpdateWrapper<YwContract>()
-                .lambda()
-                .set(YwContract::getStatus,Constants.ONE)
-                .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
+
+        List<YwContract> listA = ywContractMapper.selectList(new QueryWrapper<YwContract>().lambda()
                 .eq(YwContract::getIsdeleted,Constants.ZERO)
                 .in(YwContract::getStatus,Constants.ZERO)
                 .apply(" START_DATE < NOW()  AND END_DATE > NOW() ")
         );
-        //瀹氭椂澶勭悊鍚堝悓宸茶繃鏈�
-        ywContractMapper.update(new UpdateWrapper<YwContract>()
-                        .lambda()
-                .set(YwContract::getStatus,Constants.TWO)
-                .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
-                .eq(YwContract::getIsdeleted,Constants.ZERO)
-                .in(YwContract::getStatus,Constants.ONE,Constants.ZERO)
-                .apply(" END_DATE < CURRENT_DATE ")
-        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(listA)){
+            //瀹氭椂澶勭悊鍚堝悓鎵ц涓�
+            ywContractMapper.update(new UpdateWrapper<YwContract>()
+                    .lambda()
+                    .set(YwContract::getStatus,Constants.ONE)
+                    .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
+                    .in(YwContract::getId,listA.stream().map(i->i.getId()).collect(Collectors.toList()))
+            );
+
+            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda().in(YwContractRoom::getContractId,
+                    listA.stream().map(i->i.getId()).collect(Collectors.toList())));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
+                //鏇存柊鎴挎簮鏁版嵁涓虹璧佷腑
+                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ONE)
+                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
+                );
+            }
+        }
 
     }
 
@@ -420,7 +450,7 @@
                         ||Constants.equalsInteger(bill.getPayStatus(),Constants.THREE)){
                     if(bill.getStartDate().getTime()<=param.getBtDate().getTime()){
                         canBills.add(bill);
-                        canBillCount = canBillCount ++;
+                        canBillCount = canBillCount + 1 ;
                     }else{
                         //濡傛灉杩樻病寮�濮嬶紝璐﹀崟鐩存帴鍏抽棴
                         closeBills.add(bill);
@@ -432,11 +462,11 @@
                         noBills.add(bill);
                     }else{
                         canBills.add(bill);
-                        canBillCount = canBillCount ++;
+                        canBillCount = canBillCount + 1 ;
                     }
                 }else  if(Constants.equalsInteger(bill.getPayStatus(),Constants.TWO) ){
                      canBills.add(bill);
-                    canBillCount = canBillCount ++;
+                    canBillCount = canBillCount + 1 ;
                 }
             }
         }
@@ -464,12 +494,17 @@
                     if(fee.compareTo(new BigDecimal(0))== 0){
                         //濡傛灉璐圭敤姝eソ锛屽垯淇敼璐﹀崟淇℃伅涓哄凡缁撴竻
                         b.setPayStatus(Constants.ONE);
-                        canBillCount = canBillCount --;
-                    }else if(fee.compareTo(new BigDecimal(0))> 0){
+                        canBillCount = canBillCount - 1 ;
+                    }else if(fee.compareTo(new BigDecimal(0))< 0){
                         //濡傛灉闇�瑕佽繘琛岄��娆撅紝鏇存柊璐﹀崟淇℃伅涓哄緟閫�娆�
                         b.setPayStatus(Constants.FOUR);
-                    }else if(fee.compareTo(new BigDecimal(0)) < 0){
-                        //濡傛灉璐﹀崟杩樻湁娆惧緟鏀讹紝鍒欎繚鎸佺姸鎬佷笉鍙�
+                    }else if(fee.compareTo(new BigDecimal(0)) > 0){
+                        //濡傛灉璐﹀崟杩樻湁娆惧緟鏀讹紝鍒欐洿鏂拌处鍗曚负寰呮敹娆�
+                        if(b.getPayStatus()==Constants.ZERO){
+                            b.setPayStatus(Constants.ZERO);
+                        }else if(b.getPayStatus()!=Constants.TWO){
+                            b.setPayStatus(Constants.TWO);
+                        }
                     }
                     b.setReceivableFee(editBill.getReceivableFee());
                 }
@@ -654,8 +689,8 @@
             //2025-1-23 13:56:53 鍔犲叆 鍓嶇鍏ュ弬璋冩暣鍚庣殑璐﹀崟淇℃伅
             List<YwContractBill> ywContractBillList = new ArrayList<>();
             //鏌ヨ绉熻祦鏉℃
-            if(Constants.equalsInteger(model.getType(),Constants.ZERO )
-                    || Constants.equalsInteger(model.getType(),Constants.TWO)&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details1)){
+            if((Constants.equalsInteger(model.getType(),Constants.ZERO )
+                    || Constants.equalsInteger(model.getType(),Constants.TWO))&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details1)){
                 YwContractDetail ywContractDetail = details1.get(Constants.ZERO);
                 YwContractBill zlBill = new YwContractBill();
                 BeanUtils.copyProperties(model.getZlBillDTO(),zlBill);
@@ -691,8 +726,8 @@
                 }
             }
             //鏌ヨ鐗╀笟璐﹀崟
-            if(Constants.equalsInteger(model.getType(),Constants.ZERO )
-                    || Constants.equalsInteger(model.getType(),Constants.TWO)&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details2)){
+            if((Constants.equalsInteger(model.getType(),Constants.ZERO )
+                    || Constants.equalsInteger(model.getType(),Constants.ONE))&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details2)){
                 YwContractDetail ywContractDetail = details2.get(Constants.ZERO);
                 YwContractBill wyBill = new YwContractBill();
                 BeanUtils.copyProperties(model.getWyBillDTO(),wyBill);
@@ -1396,7 +1431,7 @@
                 .selectAs(YwCustomer::getName, YwContract::getRenterName)
                 .selectAs(YwProject::getName, YwContract::getProjectName)
                 .select("t3.realname", YwContract::getCreatorName)
-                .select("(select sum(r.area) from yw_contract_room cr left join yw_room r on r.id = cr.room_id where r.isdeleted=0 and cr.contract_id =t.id)", YwContract::getTotalArea)
+                .select("(select sum(r.RENT_AREA) from yw_contract_room cr left join yw_room r on r.id = cr.room_id where r.isdeleted=0 and cr.contract_id =t.id)", YwContract::getTotalArea)
                 .leftJoin(Company.class, Company::getId, YwContract::getCompanyId)
                 .leftJoin(SystemUser.class, SystemUser::getId, YwContract::getUserId)
                 .leftJoin(SystemUser.class, SystemUser::getId, YwContract::getCreator)
@@ -1457,14 +1492,12 @@
         //鏌ヨ璐﹀崟闆嗗悎
         model.setBillList(ywContractBillMapper.selectJoinList(YwContractBill.class,new MPJLambdaWrapper<YwContractBill>()
                 .selectAll(YwContractBill.class )
-                //.select(" ( select ifnull(sum(case when yw.REVENUE_TYPE = 0 then yw.ACT_RECEIVABLE_FEE  else  -yw.ACT_RECEIVABLE_FEE end),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                 .select(" ( select ifnull( sum( CASE WHEN t.bill_type = 0 and yw.REVENUE_TYPE = 0 THEN yw.ACT_RECEIVABLE_FEE when  t.bill_type = 0 and yw.REVENUE_TYPE = 1 then -yw.ACT_RECEIVABLE_FEE  when t.bill_type = 1 and yw.REVENUE_TYPE = 0 then -yw.ACT_RECEIVABLE_FEE else  yw.ACT_RECEIVABLE_FEE END),0) from  yw_contract_revenue yw where yw.bill_id = t.id and yw.status = 0 and yw.isdeleted = 0 ) as  actReceivableFee  ")
                 .eq(  YwContractBill::getContractId,model.getId())
                 .eq(YwContractBill::getIsdeleted,Constants.ZERO)
                 .orderByAsc(YwContractBill::getSortnum,YwContractBill::getCreateDate)));
         for (YwContractBill ywContractBill:model.getBillList()) {
             ywContractBill.setNeedReceivableFee(ywContractBill.getReceivableFee());
-//            ywContractBill.setNeedReceivableFee(ywContractBill.getReceivableFee().subtract(ywContractBill.getActReceivableFee()));
         }
         model.setCanBackRentBills(new ArrayList<>());
         long nowStart = Utils.Date.getStart(date).getTime();
@@ -1574,6 +1607,9 @@
         if (pageWrap.getModel().getCreateDate() != null) {
             queryWrapper.ge(YwContract::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
             queryWrapper.le(YwContract::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getStatusList() != null) {
+            queryWrapper.in(YwContract::getStatus, pageWrap.getModel().getStatusList());
         }
         if (pageWrap.getModel().getEditor() != null) {
             queryWrapper.eq(YwContract::getEditor, pageWrap.getModel().getEditor());
@@ -1712,4 +1748,63 @@
         QueryWrapper<YwContract> wrapper = new QueryWrapper<>(ywContract);
         return ywContractMapper.selectCount(wrapper);
     }
+
+
+    /**
+     * 鍒版湡鍚堝悓 鏈彂璧烽��绉熺殑杩涜鏁版嵁璋冩暣 鎶婂悎鍚屼笅鐨勬埧婧愰噴鏀� 瀹氭椂鏃堕棿闇�瑕佸湪姣忓ぉ鏅氫笂12鐐瑰墠
+     */
+    @Override
+    public void updRoomLeaseNowStatus(){
+
+        //瀹氭椂澶勭悊鍚堝悓宸茶繃鏈�
+        List<YwContract> ywContractList = ywContractMapper.selectList(new QueryWrapper<YwContract>().lambda()
+                .eq(YwContract::getIsdeleted,Constants.ZERO)
+                .in(YwContract::getStatus,Constants.ONE,Constants.ZERO)
+                .apply(" DATE(END_DATE) = CURRENT_DATE ")
+        );
+
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractList)){
+            ywContractMapper.update(new UpdateWrapper<YwContract>()
+                    .lambda()
+                    .set(YwContract::getStatus,Constants.TWO)
+                    .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
+                    .in(YwContract::getId,ywContractList.stream().map(i->i.getId()).collect(Collectors.toList()))
+            );
+
+
+            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda().in(YwContractRoom::getContractId,
+                    ywContractList.stream().map(i->i.getId()).collect(Collectors.toList())));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
+                //鏇存柊鎴挎簮鏁版嵁涓虹璧佷腑
+                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ZERO)
+                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
+                );
+            }
+        }
+    }
+
+
+    /**
+     * 閫�绉熶腑/宸查��绉熷悎鍚� 鎶婂埌浜嗛��绉熸棩鏈熸椂闂寸殑鏁版嵁 杩涜鎴挎簮閲婃斁 瀹氭椂鏃堕棿闇�瑕佸湪姣忓ぉ鏅氫笂12鐐瑰墠
+     */
+    @Override
+    public void updRentContractStatus(){
+        List<YwContract> ywContractList = ywContractMapper.selectList(new QueryWrapper<YwContract>().lambda()
+                .eq(YwContract::getIsdeleted,Constants.ZERO)
+                .in(YwContract::getStatus,Constants.THREE,Constants.FOUR)
+                .eq(YwContract::getBtDate,DateUtil.getCurrDate())
+        );
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractList)){
+            List<YwContractRoom> contractRoomList = ywContractRoomMapper.selectList(new QueryWrapper<YwContractRoom>().lambda().in(YwContractRoom::getContractId,
+                    ywContractList.stream().map(i->i.getId()).collect(Collectors.toList())));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(contractRoomList)){
+                //鏇存柊鎴挎簮鏁版嵁涓哄緟绉熻祦
+                roomMapper.update(new UpdateWrapper<YwRoom>().lambda().set(YwRoom::getLeaseNowStatus,Constants.ZERO)
+                        .in(YwRoom::getId,contractRoomList.stream().map(i->i.getRoomId()).collect(Collectors.toList()))
+                );
+            }
+        }
+    }
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java
index dda5508..69ddf41 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java
@@ -430,7 +430,7 @@
         ywDeviceStatusDataVO.setAmount(ywDeviceList.size());
         ywDeviceStatusDataVO.setWorkAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
         ywDeviceStatusDataVO.setExceptionAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.ONE)).collect(Collectors.toList()).size());
-        ywDeviceStatusDataVO.setErrAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.THREE)).collect(Collectors.toList()).size());
+        ywDeviceStatusDataVO.setErrAmount(ywDeviceList.stream().filter(i->Objects.nonNull(i.getStatus())&&Constants.equalsInteger(i.getStatus(),Constants.TWO)).collect(Collectors.toList()).size());
         return ywDeviceStatusDataVO;
 
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
index a434cd2..ea498da 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
@@ -1,6 +1,8 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.annotation.excel.ExcelImporter;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -9,11 +11,14 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CategoryMapper;
 import com.doumee.dao.business.YwMaterialMapper;
 import com.doumee.dao.business.YwOutinboundMapper;
 import com.doumee.dao.business.YwOutinboundRecordMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.MultifileMapper;
+import com.doumee.dao.system.dto.ImportMaterialDTO;
+import com.doumee.dao.system.dto.ImportSystemUserDTO;
 import com.doumee.dao.system.model.Multifile;
 import com.doumee.service.business.YwMaterialService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -22,16 +27,19 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import javafx.scene.paint.Material;
 import org.apache.commons.lang.StringUtils;
-import org.checkerframework.checker.units.qual.A;
+import org.apache.shiro.SecurityUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 杩愮淮璧勪骇淇℃伅琛⊿ervice瀹炵幇
@@ -51,6 +59,9 @@
     private YwOutinboundRecordMapper ywOutinboundRecordMapper;
 
     @Autowired
+    private CategoryMapper categoryMapper;
+
+    @Autowired
     private SystemDictDataBiz systemDictDataBiz;
 
     @Override
@@ -67,8 +78,17 @@
         ywMaterial.setId(null);
         if(StringUtils.isBlank(ywMaterial.getCode())){
             //鑷姩鐢熸垚 TODO 瀛樺湪闂
-            Long countCode = ywMaterialMapper.selectCount(new QueryWrapper<YwMaterial>().lambda().eq(YwMaterial::getAutoCode, Constants.ONE));
-            String nextCode = StringUtils.leftPad(Long.toString(countCode + 1),4,"0");
+            YwMaterial lastAutoMaterial = ywMaterialMapper.selectOne(new QueryWrapper<YwMaterial>().lambda().eq(YwMaterial::getAutoCode,Constants.ONE).last("limit 1 "));
+            Long countCode = 0L;
+            String nextCode = StringUtils.leftPad(Long.toString(countCode + 1 ),4,"0");
+            if(Objects.nonNull(lastAutoMaterial)){
+                Long maxCode = Long.valueOf(lastAutoMaterial.getCode().replace("P",""));
+                nextCode = StringUtils.leftPad(Long.toString(maxCode + 1),4,"0");
+                while (ywMaterialMapper.selectCount(new QueryWrapper<YwMaterial>().lambda().eq(YwMaterial::getCode, "P"+nextCode))>Constants.ZERO){
+                    countCode = countCode + 1 ;
+                    nextCode = StringUtils.leftPad(Long.toString(countCode),4,"0");
+                }
+            }
             ywMaterial.setCode("P"+nextCode);
             ywMaterial.setAutoCode(Constants.ONE);
         }else{
@@ -247,4 +267,67 @@
         QueryWrapper<YwMaterial> wrapper = new QueryWrapper<>(ywMaterial);
         return ywMaterialMapper.selectCount(wrapper);
     }
+
+
+    @Override
+    public Integer importMaterialBatch(MultipartFile file,LoginUserInfo loginUserInfo) {
+        try {
+            ExcelImporter ie = new ExcelImporter(file, 0, 0);
+            List<ImportMaterialDTO> dataList = ie.getDataList(ImportMaterialDTO.class, null);
+            if (CollectionUtils.isEmpty(dataList)) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+            }
+
+            List<Category> allCategory = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+                    .eq(Category::getIsdeleted,Constants.ZERO).eq(Category::getIsdeleted,Constants.ZERO)
+                    .eq(Category::getType,Constants.SEVEN)
+            );
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(allCategory)){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏃犲垎绫诲熀纭�鏁版嵁锛�");
+            }
+            List<Category> categoryList = allCategory.stream().filter(i->Objects.isNull(i.getParentId())).collect(Collectors.toList());
+            for (Category category: categoryList) {
+                category.setChildCategoryList(
+                        allCategory.stream().filter(i->Objects.nonNull(i.getParentId())&&Constants.equalsInteger(i.getParentId(),category.getId())).collect(Collectors.toList())
+                );
+            }
+            List<YwMaterial> ywMaterialList = new ArrayList<>();
+            for (int i = 0; i < dataList.size(); i++) {
+                ImportMaterialDTO importMaterialDTO = dataList.get(i);
+                if(Objects.isNull(importMaterialDTO)
+                    || StringUtils.isBlank(importMaterialDTO.getName())
+                    || StringUtils.isBlank(importMaterialDTO.getCategoryName())
+                    || StringUtils.isBlank(importMaterialDTO.getCategoryChildName())
+                    || StringUtils.isBlank(importMaterialDTO.getQrcode())
+                ){
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�"+(i+1)+"琛屽繀濉」缂哄け锛�");
+                }
+                YwMaterial ywMaterial = new YwMaterial();
+                BeanUtils.copyProperties(importMaterialDTO,ywMaterial);
+                Optional<Category> categoryOptional = categoryList.stream().filter(j->j.getName().equals(importMaterialDTO.getCategoryName())).findAny();
+                if(categoryOptional.isPresent()){
+                    Category category = categoryOptional.get();
+                    ywMaterial.setParentCateId(category.getId());
+                    Optional<Category> childCategoryOptional = category.getChildCategoryList().stream().filter(j->j.getName().equals(importMaterialDTO.getCategoryChildName())).findAny();
+                    if(childCategoryOptional.isPresent()){
+                        ywMaterial.setCateId(childCategoryOptional.get().getId());
+                    }else{
+                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�"+(i+1)+"琛岀墿鏂欏瓙鍒嗙被鏈煡璇㈠埌锛�");
+                    }
+                }else{
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�"+(i+1)+"琛岀墿鏂欏垎绫绘湭鏌ヨ鍒帮紒");
+                }
+                ywMaterialList.add(ywMaterial);
+            }
+
+            for (YwMaterial ywMaterial:ywMaterialList) {
+                ywMaterial.setLoginUserInfo(loginUserInfo);
+                this.create(ywMaterial);
+            }
+        } catch (Exception e) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),e.getMessage());
+
+        }
+        return null;
+    }
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
index 203c692..42437cd 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
@@ -95,7 +95,7 @@
     public List<YwOutinboundRecord> verifyData(YwOutinbound ywOutinbound){
         if(Objects.isNull(ywOutinbound)
                 || Objects.isNull(ywOutinbound.getType())
-//                || (Objects.nonNull(ywOutinbound.getType()) && (!(ywOutinbound.getType() == Constants.ZERO || ywOutinbound.getType() == Constants.ONE)))
+                || ((ywOutinbound.getType() >= 5 && ywOutinbound.getType() <= 9 ) && Objects.isNull(ywOutinbound.getOutUserId()) )
                 || Objects.isNull(ywOutinbound.getWarehouseId())
                 || Objects.isNull(ywOutinbound.getDoneDate())
                 || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywOutinbound.getRecordList())
@@ -158,9 +158,9 @@
                 //鍑哄簱
                 if(Objects.isNull(ywStock) || ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) < Constants.ZERO){
                     throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ywMaterial.getName() + "搴撳瓨涓嶈冻锛岃鍒锋柊閲嶈瘯");
-                }else if(ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) == Constants.ZERO){
+                }/*else if(ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) == Constants.ZERO){
                     ywStockMapper.deleteById(ywStock.getId());
-                }else{
+                }*/else{
                     ywStockMapper.update(new UpdateWrapper<YwStock>().lambda()
                             .setSql(" stock = ( stock - "+ywOutinboundRecord.getStock()+") ")
                             .set(YwStock::getEditDate, DateUtil.getCurrDateTime())
@@ -252,22 +252,29 @@
         }
         List<Integer> typeList  = Constants.ywOutInType.getAllTypeKey(model.getInOut());
         queryWrapper.selectAll(YwOutinbound.class)
-                .selectAs(SystemUser::getRealname,YwOutinbound::getCreateUserName)
+                .select(" s1.realname  ",YwOutinbound::getCreateUserName)
+                .select(" s2.realname  ",YwOutinbound::getOutUserName)
                 .selectAs(YwWarehouse::getName,YwOutinbound::getWarehouseName)
-                .leftJoin(SystemUser.class,SystemUser::getId,YwOutinbound::getCreator)
                 .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwOutinbound::getWarehouseId)
+                .leftJoin("system_user s1 on t.creator = s1.id")
+                .leftJoin("system_user s2 on t.out_user_id = s2.id")
                 .like(StringUtils.isNotBlank(model.getCode()),YwOutinbound::getCode,model.getCode())
                 .eq(Objects.nonNull(model.getType()),YwOutinbound::getType,model.getType())
                 .eq(Objects.nonNull(model.getWarehouseId()),YwOutinbound::getWarehouseId,model.getWarehouseId())
                 .in(Objects.nonNull(model.getInOut()),YwOutinbound::getType,typeList)
         ;
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(pageWrap.getSorts())){
+            for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+                if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                    queryWrapper.orderByDesc(sortData.getProperty());
+                } else {
+                    queryWrapper.orderByAsc(sortData.getProperty());
+                }
             }
+        }else{
+            queryWrapper.orderByDesc(YwOutinbound::getCode);
         }
+
         IPage iPage = ywOutinboundMapper.selectJoinPage(page,YwOutinbound.class,queryWrapper);
         if(Objects.nonNull(iPage.getRecords())){
             iPage.setRecords(this.getDetailData(iPage.getRecords()));
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
index c8c5326..cb32343 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java
@@ -123,7 +123,7 @@
         );
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywPatrolSchemeList)){
             for (YwPatrolScheme ywPatrolScheme:ywPatrolSchemeList) {
-                this.createTask(new Date(),ywPatrolScheme);
+                this.createTask(DateUtil.getXDayAfterDate(new Date(),2),ywPatrolScheme);
             }
         }
     }
@@ -301,6 +301,7 @@
         ywPatrolScheme.setEditDate(new Date());
         ywPatrolScheme.setEditor(loginUserInfo.getId());
         ywPatrolSchemeMapper.updateById(ywPatrolScheme);
+        this.createThreeDaysData(ywPatrolScheme);
     }
 
     @Override
@@ -356,15 +357,9 @@
         YwPatrolScheme model = pageWrap.getModel();
         queryWrapper.selectAll(YwPatrolScheme.class)
                 .select(" t2.realName as createUserName ")
-//                .select(" t1.realName as userName ")
-//                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolScheme::getUserIds)
                 .leftJoin(" system_user t2 on t.creator =  t2.id  ")
                 .eq(YwPatrolScheme::getIsdeleted,Constants.ZERO)
                 .like(StringUtils.isNotBlank(model.getTitle()),YwPatrolScheme::getTitle,model.getTitle())
-                //鏌ヨ鏈夋椂娈典氦闆嗙殑鏁版嵁
-              /*  .apply(Objects.nonNull(model.getStartDate())&&Objects.nonNull(model.getEndDate()),
-                        " t.START_DATE <= '"+pageWrap.getModel().getEndDate()+"' or t.END_DATE >= '"+pageWrap.getModel().getStartDate()+"' "
-                )*/
                 .ge( model.getStartDate()!=null,YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()))
                 .le(Objects.nonNull(model.getEndDate()),YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()))
                 .ge(Objects.nonNull(model.getStartDateSec()),YwPatrolScheme::getEndDate, Utils.Date.getStart(pageWrap.getModel().getStartDateSec()))
@@ -405,21 +400,24 @@
             ywPatrolScheme.setTimeOutTaskNum(Constants.ZERO);
             return;
         }
+
+        //杩囨护鏁版嵁鏄笉鏄叏閮ㄦ湭寮�濮�
+        if(Constants.equalsInteger(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ZERO))
+                .collect(Collectors.toList()).size(),ywPatrolTaskList.size())){
+            ywPatrolScheme.setSchemeStatus(Constants.ZERO);
+            ywPatrolScheme.setTimeOutTaskNum(ywPatrolTaskList.stream().filter(i->i.getEndDate().getTime()>System.currentTimeMillis())
+                    .collect(Collectors.toList()).size());
+            return;
+        }
+
         //杩囨护鏁版嵁鏄惁瀛樺湪杩涜涓殑
-        if(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)).collect(Collectors.toList()).size()>Constants.ZERO){
+        if(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)||Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size()>Constants.ZERO){
             ywPatrolScheme.setSchemeStatus(Constants.ONE);
             ywPatrolScheme.setTimeOutTaskNum(ywPatrolTaskList.stream().filter(i->i.getEndDate().getTime()>System.currentTimeMillis())
                     .collect(Collectors.toList()).size());
             return;
         }
 
-        //杩囨护鏁版嵁鏄笉鏄叏閮ㄦ湭寮�濮�
-        if(Constants.equalsInteger(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size(),ywPatrolTaskList.size())){
-            ywPatrolScheme.setSchemeStatus(Constants.ZERO);
-            ywPatrolScheme.setTimeOutTaskNum(ywPatrolTaskList.stream().filter(i->i.getEndDate().getTime()>System.currentTimeMillis())
-                    .collect(Collectors.toList()).size());
-            return;
-        }
         //杩囨护鏁版嵁鏄笉鏄叏閮ㄥ凡瀹屾垚
         if(Constants.equalsInteger(ywPatrolTaskList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.THREE)).collect(Collectors.toList()).size()
                 ,ywPatrolTaskList.size())){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java
index d556571..963f7b8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java
@@ -28,9 +28,11 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 杩愮淮宸℃浠诲姟 - 宸℃鐐逛俊鎭〃Service瀹炵幇
@@ -134,7 +136,7 @@
                 .selectAs(SystemUser::getRealname,YwPatrolTaskRecord::getRealname)
 
                 .selectAs(YwPatrolScheme::getTitle,YwPatrolTaskRecord::getSchemeTitle)
-                .selectAs(YwPatrolTask::getTitle,YwPatrolTaskRecord::getTaskCode)
+                .selectAs(YwPatrolTask::getCode,YwPatrolTaskRecord::getTaskCode)
                 .selectAs(YwPatrolTask::getStartDate,YwPatrolTaskRecord::getStartDate)
                 .selectAs(YwPatrolTask::getEndDate,YwPatrolTaskRecord::getEndDate)
 
@@ -213,7 +215,8 @@
         if(Objects.isNull(ywPatrolScheme)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌宸℃璁″垝淇℃伅");
         }
-        if(!ywPatrolScheme.getUserIds().equals(loginUserInfo.getId().toString())){
+        List<String>  userIdList = Arrays.asList(ywPatrolScheme.getUserIds().split(","));
+        if(userIdList.stream().filter(i->Constants.equalsInteger(Integer.valueOf(i),loginUserInfo.getId())).collect(Collectors.toList()).size()<=0){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"闈炴偍鐨勫贰妫�浠诲姟鏃犳硶杩涜澶勭悊");
         }
         YwPatrolTask ywPatrolTask = ywPatrolTaskMapper.selectById(model.getTaskId());
@@ -249,19 +252,6 @@
                     .set(YwPatrolTask::getEditor,loginUserInfo.getId())
             );
 
-//            if(ywPatrolTaskMapper.selectCount(new QueryWrapper<YwPatrolTask>().lambda()
-//                    .eq(YwPatrolTask::getSchemeId,ywPatrolTask.getSchemeId())
-//                    .in(YwPatrolTask::getStatus,Constants.ZERO,Constants.ONE)
-//                    .ne(YwPatrolTask::getId,ywPatrolTask.getId())
-//            )==Constants.ZERO){
-//                ywPatrolSchemeMapper.update(null,new UpdateWrapper<YwPatrolScheme>().lambda()
-//                        .eq(YwPatrolScheme::getId,ywPatrolScheme.getId())
-//                        .set(YwPatrolScheme::getStatus,Constants.TWO)
-//                        .set(YwPatrolScheme::getEditDate,DateUtil.getCurrDateTime())
-//                        .set(YwPatrolScheme::getEditor,loginUserInfo.getId())
-//                );
-//            }
-
             //鏍囪寰呭姙宸插鐞�
             noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                     .set(Notices::getStatus,Constants.ONE)
@@ -279,14 +269,6 @@
                         .set(YwPatrolTask::getEditor,loginUserInfo.getId())
                 );
             }
-//            if(Constants.equalsInteger(ywPatrolScheme.getStatus(),Constants.ZERO)){
-//                ywPatrolSchemeMapper.update(null,new UpdateWrapper<YwPatrolScheme>().lambda()
-//                        .eq(YwPatrolScheme::getId,ywPatrolScheme.getId())
-//                        .set(YwPatrolScheme::getStatus,Constants.ONE)
-//                        .set(YwPatrolScheme::getEditDate,DateUtil.getCurrDateTime())
-//                        .set(YwPatrolScheme::getEditor,loginUserInfo.getId())
-//                );
-//            }
             //鏍囪寰呭姙宸插鐞�
             noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                     .set(Notices::getParam3,Constants.ONE)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java
index 104c528..31722e2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java
@@ -85,6 +85,7 @@
                 .selectAll(YwPatrolTask.class)
                 .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode)
                 .selectAs(YwPatrolScheme::getTitle,YwPatrolTask::getPlanTitle)
+                .selectAs(YwPatrolScheme::getUserIds,YwPatrolTask::getUserIds)
                 .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName)
                 .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id  and ytr.ISDELETED = 0  ) ",YwPatrolTask::getPatrolNum)
                 .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id  and ytr.STATUS = 1 and ytr.ISDELETED = 0) ",YwPatrolTask::getFinishNum)
@@ -139,6 +140,7 @@
         queryWrapper.selectAll(YwPatrolTask.class)
                 .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode)
                 .selectAs(YwPatrolScheme::getTitle,YwPatrolTask::getPlanTitle)
+                .selectAs(YwPatrolScheme::getUserIds,YwPatrolTask::getUserIds)
                 .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName)
                 .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id  and ytr.ISDELETED = 0  ) ",YwPatrolTask::getPatrolNum)
                 .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id  and ytr.STATUS = 1 and ytr.ISDELETED = 0) ",YwPatrolTask::getFinishNum)
@@ -146,7 +148,7 @@
                 .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId)
                 .eq(YwPatrolTask::getIsdeleted, Constants.ZERO)
                 .eq(Objects.nonNull(model.getStatus()) && !Constants.equalsInteger(model.getStatus(),Constants.TWO),YwPatrolTask::getStatus, model.getStatus())
-                .eq(Objects.nonNull(model.getDealUserId()),YwPatrolScheme::getUserIds, model.getDealUserId())
+                .apply(Objects.nonNull(model.getDealUserId())," find_in_set("+model.getDealUserId()+",t2.USER_IDS) ")
                 .apply(Objects.nonNull(model.getStatus()) && Constants.equalsInteger(model.getStatus(),Constants.TWO)," t.status = 1 and t.END_DATE > now() ")
                 .apply(StringUtils.isNotBlank(model.getQueryStatus())," find_in_set(t.status ,'"+model.getQueryStatus()+"') ")
                 .like(StringUtils.isNotBlank(model.getPlanTitle()),YwPatrolScheme::getTitle,model.getPlanTitle())
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
index 2c33a6c..1571556 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
@@ -263,7 +263,26 @@
                 .le(Objects.nonNull(model.getDealDateEnd()),YwProblem::getDealDate, Utils.Date.getEnd(model.getDealDateEnd()))
                 .eq(Objects.nonNull(model.getDealStatus()),YwProblem::getDealStatus,model.getDealStatus())
         ;
-        IPage iPage = ywProblemMapper.selectJoinPage(page,YwProblem.class,queryWrapper);
+        IPage<YwProblem> iPage = ywProblemMapper.selectJoinPage(page,YwProblem.class,queryWrapper);
+        for (YwProblem ywProblem:iPage.getRecords()) {
+            List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                    .eq(Multifile::getObjId, ywProblem.getId() )
+                    .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.PROBLEM_FILE.getKey() }))
+                    .eq(Multifile::getIsdeleted,Constants.ZERO));
+            if(multifiles!=null){
+                String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                        +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_WORKORDER_FILE).getCode();
+                for(Multifile f : multifiles){
+                    if(StringUtils.isBlank(f.getFileurl())){
+                        continue;
+                    }
+                    f.setFileurlFull(path+f.getFileurl());
+                }
+                ywProblem.setFileList(multifiles);
+            }
+        }
+
+
         return PageData.from(iPage);
     }
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java
index 36cda9c..ee5fbf6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java
@@ -296,13 +296,7 @@
 
         List<YwRoom>  ywRoomList = ywRoomMapper.selectJoinList(YwRoom.class,new MPJLambdaWrapper<YwRoom>()
                 .selectAll(YwRoom.class)
-//                        .select("  ( SELECT count(1) FROM  yw_contract y1 " +
-//                                " left join yw_contract_room y2 on y1.id = y2.contract_id " +
-//                                " where 1 = 1 and y2.type = 0  and y1.`STATUS` in( 0,1,2) " +
-//                                " and y1.START_DATE <  now() and y1.END_DATE >  now() and y2.ROOM_ID = yw_room.id ) as investmentStatus ")
-                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
-                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
-                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
+                .select(" ifnull( (  case when t.IS_INVESTMENT = 0 then 2 else t.LEASE_NOW_STATUS end  ) ,0) ",YwRoom::getLeaseStatus)
                 .eq(YwRoom::getIsdeleted,Constants.ZERO)
                 .eq(YwRoom::getStatus,Constants.ZERO)
                 .eq(YwRoom::getIsInvestment,Constants.ONE)
@@ -313,7 +307,7 @@
                         "  ) ")
                 .apply(Objects.nonNull(dataDTO)&&Objects.nonNull(dataDTO.getStartDate())&&Objects.nonNull(dataDTO.getEndDate())," id not in  (" +
                         " SELECT y2.room_id FROM  yw_contract y1 left join yw_contract_room y2 on y1.id = y2.contract_id where 1 = 1 and y1.`STATUS` = 3 " +
-                        " and y1.START_DATE < '"+dataDTO.getEndDate()+" 00:00:00' and y1.BT_DATE > '"+ dataDTO.getStartDate() +"  00:00:00' " +
+                        " and y1.START_DATE < '"+dataDTO.getEndDate()+" 00:00:00' and y1.BT_DATE >= '"+ dataDTO.getStartDate() +"  00:00:00' " +
                         "  ) ")
                 .orderByAsc(YwRoom::getRoomNum)
         );
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
index b5c03ed..65e696b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
@@ -67,6 +67,7 @@
         model.setStatus(Constants.ZERO);
         model.setEditDate(model.getCreateDate());
         model.setEditor(model.getCreator());
+        model.setLeaseNowStatus(Constants.ZERO);
         ywRoomMapper.insert(model);
         return model.getId();
     }
@@ -138,6 +139,10 @@
         queryWrapper.selectAll(YwRoom.class )
                 .selectAs(YwProject::getName,YwRoom::getProjectName)
                 .selectAs(YwFloor::getName,YwRoom::getFloorName)
+//                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
+//                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
+//                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
+                .select(" ifnull( (  case when t.IS_INVESTMENT = 0 then 2 else t.LEASE_NOW_STATUS end  ) ,0) ",YwRoom::getLeaseStatus)
                 .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
                 .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
                 .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
@@ -170,9 +175,10 @@
                 .selectAs(YwProject::getName,YwRoom::getProjectName)
                 .selectAs(YwFloor::getName,YwRoom::getFloorName)
                 .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
-                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
-                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
-                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
+//                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
+//                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
+//                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
+                .select(" ifnull( (  case when t.IS_INVESTMENT = 0 then 2 else t.LEASE_NOW_STATUS end  ) ,0) ",YwRoom::getLeaseStatus)
                 .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
                 .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
                 .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor);
@@ -242,11 +248,11 @@
         }
         queryWrapper.orderByAsc(YwRoom::getRoomNum);
         IPage<YwRoom> iPage = ywRoomMapper.selectJoinPage(page,YwRoom.class, queryWrapper);
-        for (YwRoom ywRoom:iPage.getRecords()) {
-            if(Constants.equalsInteger(ywRoom.getIsInvestment(),Constants.ZERO)){
-                ywRoom.setLeaseStatus(Constants.TWO);
-            }
-        }
+//        for (YwRoom ywRoom:iPage.getRecords()) {
+//            if(Constants.equalsInteger(ywRoom.getIsInvestment(),Constants.ZERO)){
+//                ywRoom.setLeaseStatus(Constants.TWO);
+//            }
+//        }
         return PageData.from(iPage);
     }
 
@@ -299,10 +305,34 @@
                         .eq(YwContractRoom::getType,Constants.ZERO)
                         .eq(YwContractRoom::getRoomId,ywRoom.getId())
                         .orderByDesc(YwContract::getStartDate)
+                        .orderByDesc(YwContract::getId)
                 );
                 if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(roomContractList)){
                     roomStatusDataVO.setRoomStatus(Constants.ZERO);
-                    roomStatusDataVO.setFreeDayAmount(Constants.ZERO);
+                    //鏌ヨ鏄惁鏈夊凡閫�绉熷悎鍚�
+                    List<YwContract> roomRentContractList =   ywContractMapper.selectJoinList(YwContract.class,new MPJLambdaWrapper<YwContract>()
+                            .selectAll(YwContract.class)
+                            .selectAs(YwCustomer::getName,YwContract::getRenterName)
+                            .leftJoin(YwContractRoom.class,YwContractRoom::getContractId,YwContract::getId)
+                            .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
+                            .eq(YwContract::getIsdeleted,Constants.ZERO)
+                            .eq(YwContract::getStatus,Constants.FOUR)
+                            .eq(YwContractRoom::getType,Constants.ZERO)
+                            .eq(YwContractRoom::getRoomId,ywRoom.getId())
+                            .orderByDesc(YwContract::getStartDate)
+                            .orderByDesc(YwContract::getId)
+                    );
+                    if(CollectionUtils.isEmpty(roomRentContractList)){
+                        roomStatusDataVO.setFreeDayAmount(Constants.ZERO);
+                    }else{
+                        YwContract ywContract = roomRentContractList.get(Constants.ZERO);
+                        //鏌ヨ閫�绉熸棩鏈熷拰褰撳墠鏃ユ湡鐩稿樊澶╂暟
+                        Integer btDays = DateUtil.daysBetweenDates(new Date(),ywContract.getBtDate());
+                        if(btDays>=Constants.ZERO){
+                            roomStatusDataVO.setFreeDayAmount(btDays);
+                        }
+                    }
+
                 }else{
                     YwContract ywContract = roomContractList.get(Constants.ZERO);
                     //鍚堝悓鐘舵�� 0寰呮墽琛� 1鎵ц涓� 2宸插埌鏈� 3閫�绉熶腑 4宸查��绉�
@@ -394,7 +424,7 @@
                 .select(" ( select  ifnull(sum(yr.RENT_AREA),0)  from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and y.CONTRACT_ID = t.id ) " , YwContract::getTotalArea)
                 .select(" ( select  ifnull(sum(y.TOTLE_FEE),0)  from yw_contract_bill y   where y.CONTRACT_ID = t.id and y.type = 0 and y.COST_TYPE=0 and y.BILL_TYPE = 0  ) " , YwContract::getTotalFee)
                 .eq(YwContract::getIsdeleted,Constants.ZERO)
-                .in(YwContract::getStatus,Constants.ONE,Constants.TWO,Constants.THREE)
+                .in(YwContract::getStatus,Constants.ZERO,Constants.ONE,Constants.TWO,Constants.THREE)
                 .apply(Objects.nonNull(model.getBuildingId()),
                         " t.id in ( select y.CONTRACT_ID from yw_contract_room y left join yw_room yr on y.room_id = yr.id  where y.type = 0 and  yr.BUILDING_ID = "+model.getBuildingId()+" ) ")
                 .apply(Objects.nonNull(model.getProjectId()),
@@ -431,7 +461,8 @@
                 .eq(Objects.nonNull(model.getBuildingId()),YwRoom::getBuildingId,model.getBuildingId())
                 .eq(Objects.nonNull(model.getProjectId()),YwRoom::getProjectId,model.getProjectId())
                 .in(YwContractRoom::getContractId,contractId)
-                .orderByAsc(YwRoom::getSortnum)
+                .last(" group by t.id  " +
+                        "ORDER BY t.sortnum ASC  ")
         );
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywLeaseRoomList)){
             ywRoomContractDataVO.setLeaseArea(
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java
index b04ef29..a1531fe 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java
@@ -195,6 +195,7 @@
                 .set(YwStocktakingRecord::getActStock,ywStocktakingRecord.getActStock())
                 .set(YwStocktakingRecord::getUserId,loginUserInfo.getId())
                 .set(YwStocktakingRecord::getPlanDate, DateUtil.getCurrDateTime())
+                .set(StringUtils.isNotBlank(ywStocktakingRecord.getRemark()),YwStocktakingRecord::getRemark, ywStocktakingRecord.getRemark())
                 .eq(YwStocktakingRecord::getId,ywStocktakingRecord.getId())
         );
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java
index 76ba25d..3ca923e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java
@@ -442,7 +442,7 @@
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(recordList)){
             //鍚堣鐩樼偣鏁版嵁
             ywStocktaking.setFinishAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)).collect(Collectors.toList()).size());
-            ywStocktaking.setUnFinishAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
+            ywStocktaking.setUnFinishAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.TWO)).collect(Collectors.toList()).size());
             ywStocktaking.setEqualAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)&&Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList()).size());
             ywStocktaking.setLossAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)&&Constants.equalsInteger(i.getType(),Constants.ONE)).collect(Collectors.toList()).size());
             ywStocktaking.setProfitAmount(recordList.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ONE)&&Constants.equalsInteger(i.getType(),Constants.TWO)).collect(Collectors.toList()).size());
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java
index 6568f12..c68200e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java
@@ -232,8 +232,6 @@
                 .set(YwTempConfig::getUrl,leasesTemp.getUrl())
                 .eq(YwTempConfig::getId,leasesTemp.getId())
         );
-
-
         YwTempConfig otherTemp = ywCallTempDataDTO.getOtherTemp();
         if(Objects.isNull(otherTemp.getId())
                 || Objects.isNull(otherTemp.getTitle())
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
index cf15928..8e969d7 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
@@ -132,7 +132,7 @@
         if(ywStockMapper.selectCount(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO)
                 .gt(YwStock::getStock,Constants.ZERO)
                 .eq(YwStock::getWarehouseId,ywWarehouse.getId()))>Constants.ZERO){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠浠撳簱鍐呮湁搴撳瓨鐨勭墿鏂欙紝涓嶅彲鍒犻櫎");
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠浠撳簱鍐呮湁搴撳瓨鐨勭墿鏂欙紝涓嶅彲绂佺敤");
         };
         ywWarehouseMapper.update(new UpdateWrapper<YwWarehouse>().lambda().eq(YwWarehouse::getId,ywWarehouse.getId()).set(YwWarehouse::getStatus,ywWarehouse.getStatus()));
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
index 58d10e9..07ad32d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
@@ -503,6 +503,9 @@
         if (pageWrap.getModel().getRoomId() != null) {
             queryWrapper.eq(YwWorkorder::getRoomId, pageWrap.getModel().getRoomId());
         }
+        if (pageWrap.getModel().getFloorId() != null) {
+            queryWrapper.eq(YwWorkorder::getFloorId, pageWrap.getModel().getFloorId());
+        }
         if (pageWrap.getModel().getUserId() != null) {
             queryWrapper.eq(YwWorkorder::getUserId, pageWrap.getModel().getUserId());
         }
diff --git a/server/visits/dmvisit_service/src/main/resources/application-dev.yml b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
index 29d1baf..b3984c7 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-dev.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
@@ -15,7 +15,15 @@
   jackson:
     time-zone: GMT+8
     date-format: yyyy-MM-dd HH:mm:ss
-
+  mail:
+    default-encoding: UTF-8
+    host: smtp.exmail.qq.com
+    username: jp@doumee.com
+    password: p7iKUE8VvQQpY58S
+    properties:
+      mail:
+        smtp:
+          auth: true
 
 debug_model: true
 
@@ -26,6 +34,8 @@
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 
+########################鍘嬬缉鍖呮枃浠朵綅缃�  ########################
+zip_file_path: d://
 # Swagger閰嶇疆
 swagger:
   host: 127.0.0.1
diff --git a/server/visits/dmvisit_service/src/main/resources/application-pro.yml b/server/visits/dmvisit_service/src/main/resources/application-pro.yml
index b27c85b..eeed79a 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-pro.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-pro.yml
@@ -15,10 +15,21 @@
   jackson:
     time-zone: GMT+8
     date-format: yyyy-MM-dd HH:mm:ss
-
+  mail:
+    default-encoding: UTF-8
+    host: smtp.exmail.qq.com
+    username: jp@doumee.com
+    password: p7iKUE8VvQQpY58S
+    properties:
+      mail:
+        smtp:
+          auth: true
 
 debug_model: true
 
+########################鍘嬬缉鍖呮枃浠朵綅缃�  ########################
+zip_file_path: d://
+
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
   org-user-data-origin: 0 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
diff --git a/server/visits/dmvisit_service/src/main/resources/application-test.yml b/server/visits/dmvisit_service/src/main/resources/application-test.yml
index 6bc2caa..5e192c8 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-test.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-test.yml
@@ -15,10 +15,20 @@
   jackson:
     time-zone: GMT+8
     date-format: yyyy-MM-dd HH:mm:ss
-
+  mail:
+    default-encoding: UTF-8
+    host: smtp.exmail.qq.com
+    username: jp@doumee.com
+    password: p7iKUE8VvQQpY58S
+    properties:
+      mail:
+        smtp:
+          auth: true
 
 debug_model: true
 
+########################鍘嬬缉鍖呮枃浠朵綅缃�  ########################
+zip_file_path: /usr/local/static_resources/fn/
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
   org-user-data-origin: 0 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺

--
Gitblit v1.9.3