From 098386f316ecaa7122bc979809d8160db81304ed Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期四, 06 二月 2025 18:17:26 +0800
Subject: [PATCH] Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java           |   18 
 server/system_service/pom.xml                                                                                    |   52 +
 h5/pages/polling/detail.vue                                                                                      |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomContractDataVO.java                 |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java                |    4 
 h5/pages/login.vue                                                                                               |   80 +-
 h5/pages/polling/point.vue                                                                                       |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java       |  134 +++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwContractBillCloudController.java              |   24 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java                    |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwTempConfigServiceImpl.java        |   66 ++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkDeskCloutController.java                  |   17 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java                    |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java                         |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WorkbenchesService.java                  |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java                        |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwRoom.java                            |    1 
 h5/pages.json                                                                                                    |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java              |   52 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java          |    5 
 admin/src/views/stock/components/config.js                                                                       |    5 
 h5/utils/service.js                                                                                              |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContract.java                        |   32 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java                     |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/excel/ExcelReplaceCommon.java                        |   65 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java            |   29 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractServiceImpl.java          |  249 ++++++-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java           |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwFloorStatusDataVO.java                  |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java               |    4 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundRecordCloudController.java          |   92 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java          |    1 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java                   |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java             |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwCallTempDataDTO.java                   |   30 
 admin/src/views/stock/out.vue                                                                                    |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java           |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java         |   25 
 admin/src/views/stock/record.vue                                                                                 |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwTempConfigCloudController.java                |   45 
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                         |    1 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java               |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java  |  108 ++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java                        |   15 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundRecordServiceImpl.java  |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwContractBillDTO.java                   |   55 +
 h5/pages/polling/task.vue                                                                                        |    2 
 server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java                                  |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java                |    7 
 server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java                                     |    9 
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java                   |    4 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java                    |   10 
 h5/static/side/default_empty@2x.png                                                                              |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java      |   44 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java                          |   20 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java                    |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomStatusDataVO.java                   |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwSmsEmailBillCallDTO.java               |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java                    |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java        |   15 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java                      |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java                       |    3 
 h5/pages/polling/empty.vue                                                                                       |   49 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwTempConfigService.java                 |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WorkbenchesServiceImpl.java         |   50 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java      |  230 ++++++-
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java                          |   14 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwDeviceServiceImpl.java            |   41 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java         |   52 +
 70 files changed, 1,547 insertions(+), 342 deletions(-)

diff --git a/admin/src/views/stock/components/config.js b/admin/src/views/stock/components/config.js
index f03110b..819a718 100644
--- a/admin/src/views/stock/components/config.js
+++ b/admin/src/views/stock/components/config.js
@@ -3,13 +3,14 @@
   { 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' }],
diff --git a/admin/src/views/stock/out.vue b/admin/src/views/stock/out.vue
index c94aedf..f181d40 100644
--- a/admin/src/views/stock/out.vue
+++ b/admin/src/views/stock/out.vue
@@ -87,7 +87,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/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/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/login.vue b/h5/pages/login.vue
index dc65036..2a7e31a 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"
+										})
+									}
 								})
 							} 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"
+										})
+									}
+								})
+								// })
+							} else {
+								uni.redirectTo({
+									url: "/pages/index"
+								})
 							}
 						})
 					}
diff --git a/h5/pages/polling/detail.vue b/h5/pages/polling/detail.vue
index 2f2620a..202dfeb 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>
@@ -181,7 +181,7 @@
 					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)
+					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..00181a5
--- /dev/null
+++ b/h5/pages/polling/empty.vue
@@ -0,0 +1,49 @@
+<template>
+	<view class="main_app">
+		<image class="logo" src="@/static/side/default_empty@2x.png" mode=""></image>
+		<view class="btn" @click="backHome">杩斿洖涓婚〉</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		},
+		methods: {
+			backHome(){
+				uni.redirectTo({
+					url: '/pages/index'
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+.main_app{
+	.logo{
+		width: 272rpx;
+		height: 228rpx;
+		margin: 60% auto 0;
+	}
+	.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..a71efb0 100644
--- a/h5/pages/polling/point.vue
+++ b/h5/pages/polling/point.vue
@@ -8,7 +8,7 @@
 			<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">
@@ -141,10 +141,10 @@
 							id: 1,
 							name: '寮傚父'
 						},
-						{
-							id: '',
-							name: '璺宠繃'
-						},
+						// {
+						// 	id: 2,
+						// 	name: '璺宠繃'
+						// },
 					]
 				],
 				
diff --git a/h5/pages/polling/task.vue b/h5/pages/polling/task.vue
index e76a9cc..0fcaf6b 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>
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_service/pom.xml b/server/system_service/pom.xml
index 22a532c..234c0a4 100644
--- a/server/system_service/pom.xml
+++ b/server/system_service/pom.xml
@@ -311,7 +311,59 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
+            <!-- 澶勭悊word鏂囦欢 -->
+            <dependency>
+                <groupId>org.jxls</groupId>
+                <artifactId>jxls</artifactId>
+                <version>2.6.0</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>ch.qos.logback</groupId>
+                        <artifactId>logback-core</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.jxls</groupId>
+                <artifactId>jxls-poi</artifactId>
+                <version>1.2.0</version>
+            </dependency>
+            <dependency>
+                <groupId>fr.opensagres.xdocreport</groupId>
+                <artifactId>fr.opensagres.xdocreport.core</artifactId>
+                <version>2.0.2</version>
+            </dependency>
+            <dependency>
+                <groupId>fr.opensagres.xdocreport</groupId>
+                <artifactId>fr.opensagres.xdocreport.document</artifactId>
+                <version>2.0.2</version>
+            </dependency>
+            <dependency>
+                <groupId>fr.opensagres.xdocreport</groupId>
+                <artifactId>fr.opensagres.xdocreport.template</artifactId>
+                <version>2.0.2</version>
+            </dependency>
+            <dependency>
+                <groupId>fr.opensagres.xdocreport</groupId>
+                <artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
+                <version>2.0.2</version>
+            </dependency>
+            <dependency>
+                <groupId>fr.opensagres.xdocreport</groupId>
+                <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
+                <version>2.0.2</version>
+            </dependency>
 
+            <dependency>
+                <groupId>org.freemarker</groupId>
+                <artifactId>freemarker</artifactId>
+                <version>2.3.23</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>2.5</version>
+            </dependency>
        <!-- <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-dependencies</artifactId>
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index 820bb4d..29ead0a 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -63,6 +63,7 @@
     public static final String YW_CONTRACT_BILL ="YW_CONTRACT_BILL" ;
     public static final String YW_MATERIAL ="YW_MATERIAL" ;
     public static final String YW_PROBLEM ="YW_PROBLEM" ;
+    public static final String YW_QUICK_MODEL ="YW_QUICK_MODEL" ;
 
     public static final String RESERVATION_TOTAL_NUM ="RESERVATION_TOTAL_NUM" ;
     public static final String SIGN_IN_PLACE_LAT ="SIGN_IN_PLACE_LAT" ;
diff --git a/server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java b/server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
index 0d205a8..f28469d 100644
--- a/server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
+++ b/server/system_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
@@ -74,8 +74,8 @@
     @ExcelColumn(name="閭")
     private String email;
 
-    @ApiModelProperty(value = "鐘舵�� 0鏈娇鐢� 1宸蹭娇鐢� 2绛夊緟鍙戦��")
-    @ExcelColumn(name="鐘舵�� 0鏈娇鐢� 1宸蹭娇鐢� 2绛夊緟鍙戦��")
+    @ApiModelProperty(value = "鐘舵�� 0=鎴愬姛锛�1=澶辫触")
+    @ExcelColumn(name="鐘舵�� 0=鎴愬姛锛�1=澶辫触")
     private Integer status;
 
     @ApiModelProperty(value = "绫诲瀷 0鐭俊 1閭欢")
@@ -86,8 +86,8 @@
     @ExcelColumn(name="鍏宠仈瀵硅薄缂栫爜")
     private Integer objId;
 
-    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0=楠岃瘉鐮侊紱1=璁垮涓氬姟锛�2=璁垮鎶ュ锛�3=闅愭偅闅忔墜鎷嶏紱4=鐢ㄨ溅鐢宠锛�5=浼氳瀹や俊鎭紱6=鐗╂祦杞﹂绾︼紱7=鐗╂祦杞︿綔涓�")
-    @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷 0=楠岃瘉鐮侊紱1=璁垮涓氬姟锛�2=璁垮鎶ュ锛�3=闅愭偅闅忔墜鎷嶏紱4=鐢ㄨ溅鐢宠锛�5=浼氳瀹や俊鎭紱6=鐗╂祦杞﹂绾︼紱7=鐗╂祦杞︿綔涓�;8=浼氳瀹ょ敵璇�")
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0=楠岃瘉鐮侊紱1=鍌垂鐭俊锛�2=鍌垂閭欢")
+    @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷 0=楠岃瘉鐮侊紱1=鍌垂鐭俊锛�2=鍌垂閭欢")
     private String objType;
 
     @ApiModelProperty(value = "闄勪欢闆嗗悎")
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java b/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
index a3a456a..9a51e6f 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
@@ -71,7 +71,7 @@
     @ExcelColumn(name="鍏宠仈瀵硅薄缂栫爜")
     private Integer objId;
 
-    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0=鐩樼偣涓氬姟 1=宸℃浠诲姟")
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0=鐩樼偣涓氬姟 1=宸℃浠诲姟 2=宸ュ崟涓氬姟")
     @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷")
     private Integer objType;
 
@@ -87,16 +87,15 @@
     @TableField(exist = false)
     private String typeDetail;
 
-    @ApiModelProperty(value = "鍏宠仈鍙傛暟1" ,notes = "鍏宠仈鍙傛暟1")
+    @ApiModelProperty(value = "寰呭姙鏃ユ湡" ,notes = "鍏宠仈鍙傛暟1")
     @ExcelColumn(name="鍏宠仈鍙傛暟1")
     private String param1;
 
-    @ApiModelProperty(value = "鍏宠仈鍙傛暟2",notes = "鍏宠仈鍙傛暟2")
+    @ApiModelProperty(value = "jsonH5灞曠ず鏁版嵁",notes = "鍏宠仈鍙傛暟2")
     @ExcelColumn(name="鍏宠仈鍙傛暟2")
     private String param2;
 
-    @ApiModelProperty(value = "鍏宠仈鍙傛暟3",notes = "鍏宠仈鍙傛暟3")
-    @ExcelColumn(name="鍏宠仈鍙傛暟3")
+    @ApiModelProperty(value = "涓氬姟鐘舵�侊細0=寰呭鐞�/鏈紑濮嬶紱1=杩涜涓紱2=宸插畬鎴�/宸插鐞�",notes = "鍏宠仈鍙傛暟3")
     private String param3;
 
     @ApiModelProperty(value = "鍏宠仈鍙傛暟4")
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index 05e1749..e2b5955 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -230,7 +230,7 @@
             throw new BusinessException(ResponseStatus.NO_ALLOW_LOGIN);
         }
 
-        if(isDebug == null  || !isDebug){
+        /*if(isDebug == null  || !isDebug){
             //楠岃瘉 鐭俊鐮�
             SmsEmail model = smsEmailMapper.selectOne(new QueryWrapper<SmsEmail>().lambda()
                     .eq(SmsEmail::getType, Constants.ZERO)
@@ -254,7 +254,7 @@
             model.setStatus(Constants.ONE);
             model.setEditDate(new Date());
             smsEmailMapper.updateById(model);
-        }
+        }*/
 
         Company company = new Company();
         if(Objects.nonNull(user.getCompanyId())){
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 8d6816a..1d6d9d6 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
@@ -9,10 +9,12 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.dto.YwSmsEmailBillCallDTO;
 import com.doumee.dao.business.model.YwContractBill;
 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.impl.SmsEmailServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +35,9 @@
 
     @Autowired
     private YwContractBillService ywContractBillService;
+
+    @Autowired
+    private SmsEmailServiceImpl smsEmailService;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -139,4 +144,23 @@
         return ApiResponse.success(ywContractBillService.getNoticeCustomerData(billIds));
     }
 
+
+    @ApiOperation("涓嬭浇鍌垂鏂囦欢")
+    @PostMapping("/downloadCallFeeDoc")
+    @CloudRequiredPermission("business:ywcontractbill:query")
+    public void downloadCallFeeDoc(@RequestBody List<Integer> billIds,@RequestHeader(Constants.HEADER_USER_TOKEN) String token,HttpServletResponse response) {
+        ywContractBillService.downloadCallFeeDoc(billIds,getLoginUser(token),response);
+    }
+
+    @ApiOperation("鍙戦�佺煭淇′笌閭欢")
+    @PostMapping("/sendSmsEmail")
+    @CloudRequiredPermission("business:ywcontractbill:query")
+    public ApiResponse sendSmsEmail(@RequestBody List<YwSmsEmailBillCallDTO> ywSmsEmailBillCallDTOList, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywContractBillService.sendSmsEmail(ywSmsEmailBillCallDTOList,smsEmailService,getLoginUser(token));
+        return ApiResponse.success(null);
+    }
+
+
+
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java
index 6c3738c..db601da 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwDeviceCloudController.java
@@ -9,6 +9,7 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.YwDevice;
 import com.doumee.dao.business.vo.YwDeviceCateDataVO;
+import com.doumee.dao.business.vo.YwDeviceParentCateDataVO;
 import com.doumee.dao.business.vo.YwDeviceStatusDataVO;
 import com.doumee.service.business.YwDeviceService;
 import io.swagger.annotations.Api;
@@ -106,7 +107,7 @@
     @ApiOperation("璁惧鏁伴噺鍒嗙被缁熻")
     @PostMapping("/getDeviceCateData")
     @CloudRequiredPermission("business:ywdevice:query")
-    public ApiResponse<Set<YwDeviceCateDataVO>> getDeviceCateData (@RequestBody YwDevice ywDevice,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+    public ApiResponse<Set<YwDeviceParentCateDataVO>> getDeviceCateData (@RequestBody YwDevice ywDevice, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywDeviceService.getDeviceCateData(ywDevice));
     }
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundRecordCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundRecordCloudController.java
new file mode 100644
index 0000000..963ecc6
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundRecordCloudController.java
@@ -0,0 +1,92 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwOutinboundRecord;
+import com.doumee.service.business.YwOutinboundRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 14:28
+ */
+@Api(tags = "杩愮淮鍑哄叆搴撲俊鎭槑缁嗚〃")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywOutinboundRecord")
+public class YwOutinboundRecordCloudController extends BaseController {
+
+    @Autowired
+    private YwOutinboundRecordService ywOutinboundRecordService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywoutinboundrecord:create")
+    public ApiResponse create(@RequestBody YwOutinboundRecord ywOutinboundRecord,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success(ywOutinboundRecordService.create(ywOutinboundRecord));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywoutinboundrecord:delete")
+    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywOutinboundRecordService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywoutinboundrecord:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        ywOutinboundRecordService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywoutinboundrecord:update")
+    public ApiResponse updateById(@RequestBody YwOutinboundRecord ywOutinboundRecord,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywOutinboundRecordService.updateById(ywOutinboundRecord);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywoutinboundrecord:query")
+    public ApiResponse<PageData<YwOutinboundRecord>> findPage (@RequestBody PageWrap<YwOutinboundRecord> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success(ywOutinboundRecordService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywoutinboundrecord:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwOutinboundRecord> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ExcelExporter.build(YwOutinboundRecord.class).export(ywOutinboundRecordService.findPage(pageWrap).getRecords(), "杩愮淮鍑哄叆搴撲俊鎭槑缁嗚〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywoutinboundrecord:query")
+    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success(ywOutinboundRecordService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java
index 052f8bd..b798212 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolTaskRecordController.java
@@ -2,6 +2,7 @@
 
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.config.annotation.LoginNoRequired;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.model.ApiResponse;
@@ -102,11 +103,15 @@
 
     @ApiOperation("鎵爜鑾峰彇宸℃鐐逛换鍔′俊鎭�")
     @PostMapping("/getPointRecordByCode")
-    @CloudRequiredPermission("business:ywpatroltaskrecord:update")
     public ApiResponse<YwPatrolTaskRecord> getPointRecordByCode(@RequestBody YwPatrolTaskRecord ywPatrolTaskRecord,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success("鏌ヨ鎴愬姛",ywPatrolTaskRecordService.getPointRecordByCode(ywPatrolTaskRecord));
     }
 
 
+    @ApiOperation("鎵爜鑾峰彇宸℃鐐逛换鍔′俊鎭�")
+    @PostMapping("/getRecordByUserPoint")
+    public ApiResponse<YwPatrolTaskRecord> getRecordByUserPoint(@RequestBody YwPatrolTaskRecord ywPatrolTaskRecord,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",ywPatrolTaskRecordService.getRecordByUserPoint(ywPatrolTaskRecord,getLoginUser(token)));
+    }
 
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java
index 54e6b7d..4e68564 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java
@@ -37,6 +37,7 @@
 
     @Autowired
     private YwWorkorderServiceImpl ywWorkorderService;
+
     @LoginNoRequired
     @PreventRepeat
     @ApiOperation("闂鎻愭姤")
@@ -48,7 +49,7 @@
 
 
 
-    @ApiOperation("鏍规嵁ID淇敼")
+    @ApiOperation("杞伐鍗�")
     @PostMapping("/editProblem")
     @CloudRequiredPermission("business:ywproblem:update")
     public ApiResponse editProblem(@RequestBody YwProblem ywProblem,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
@@ -105,6 +106,16 @@
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywproblem:query")
     public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        return ApiResponse.success(ywProblemService.getDetail(id));
+        return ApiResponse.success(ywProblemService.getDetail(id,null));
     }
+
+
+
+    @ApiOperation("鏍规嵁宸ュ崟鏌ヨ")
+    @GetMapping("/getByWorkorderId")
+    @CloudRequiredPermission("business:ywproblem:query")
+    public ApiResponse getByWorkorderId(@RequestParam Integer workorderId,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success(ywProblemService.getDetail(null,workorderId));
+    }
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java
index 02ec71c..ac43583 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProjectCloudController.java
@@ -95,8 +95,6 @@
         return ApiResponse.success(ywProjectService.projectTree(dataDTO));
     }
 
-
-
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywproject:exportExcel")
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 badb715..bfe3148 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
@@ -36,14 +36,14 @@
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
     @CloudRequiredPermission("business:ywstock:create")
-    public ApiResponse create(@RequestBody YwStock ywStock) {
+    public ApiResponse create(@RequestBody YwStock ywStock,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywStockService.create(ywStock));
     }
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
     @CloudRequiredPermission("business:ywstock:delete")
-    public ApiResponse deleteById(@PathVariable Integer id) {
+    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         ywStockService.deleteById(id);
         return ApiResponse.success(null);
     }
@@ -51,7 +51,7 @@
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
     @CloudRequiredPermission("business:ywstock:delete")
-    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         String [] idArray = ids.split(",");
         List<Integer> idList = new ArrayList<>();
         for (String id : idArray) {
@@ -64,7 +64,7 @@
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
     @CloudRequiredPermission("business:ywstock:update")
-    public ApiResponse updateById(@RequestBody YwStock ywStock) {
+    public ApiResponse updateById(@RequestBody YwStock ywStock,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         ywStockService.updateById(ywStock);
         return ApiResponse.success(null);
     }
@@ -72,21 +72,21 @@
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @CloudRequiredPermission("business:ywstock:query")
-    public ApiResponse<PageData<YwStock>> findPage (@RequestBody PageWrap<YwStock> pageWrap) {
+    public ApiResponse<PageData<YwStock>> findPage (@RequestBody PageWrap<YwStock> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywStockService.findPage(pageWrap));
     }
 
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywstock:exportExcel")
-    public void exportExcel (@RequestBody PageWrap<YwStock> pageWrap, HttpServletResponse response) {
+    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);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywstock:query")
-    public ApiResponse findById(@PathVariable Integer id) {
+    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywStockService.findById(id));
     }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java
index 97e1230..14dfbf1 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java
@@ -8,8 +8,11 @@
 import com.doumee.core.model.PageWrap;
 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.YwStocktaking;
+import com.doumee.service.business.YwOutinboundService;
 import com.doumee.service.business.YwStocktakingService;
+import com.doumee.service.business.impl.YwOutinboundServiceImpl;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;    
@@ -31,6 +34,9 @@
 
     @Autowired
     private YwStocktakingService ywStocktakingService;
+
+    @Autowired
+    private YwOutinboundServiceImpl ywOutinboundService;
 
     @PreventRepeat
     @ApiOperation("鏂板缓")
@@ -87,7 +93,7 @@
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywstocktaking:query")
-    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+    public ApiResponse<YwStocktaking> findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywStocktakingService.getDetail(id));
     }
 
@@ -115,7 +121,7 @@
     @GetMapping("/finishById")
     @CloudRequiredPermission("business:ywstocktaking:delete")
     public ApiResponse finishById(@RequestParam Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        ywStocktakingService.finishById(id,getLoginUser(token));
+        ywStocktakingService.finishById(id,ywOutinboundService,getLoginUser(token));
         return ApiResponse.success(null);
     }
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwTempConfigCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwTempConfigCloudController.java
index 8d9a5d0..2a945b1 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwTempConfigCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwTempConfigCloudController.java
@@ -1,18 +1,19 @@
 package com.doumee.cloud.admin;
 
 import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.dto.YwCallTempDataDTO;
 import com.doumee.dao.business.model.YwTempConfig;
 import com.doumee.dao.business.vo.YwCallTempDataVO;
 import com.doumee.service.business.YwTempConfigService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
@@ -35,23 +36,23 @@
     @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
-    @RequiresPermissions("business:ywtempconfig:create")
-    public ApiResponse create(@RequestBody YwTempConfig ywTempConfig) {
+    @CloudRequiredPermission("business:ywtempconfig:create")
+    public ApiResponse create(@RequestBody YwTempConfig ywTempConfig,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywTempConfigService.create(ywTempConfig));
     }
 
     @ApiOperation("鏍规嵁ID鍒犻櫎")
     @GetMapping("/delete/{id}")
-    @RequiresPermissions("business:ywtempconfig:delete")
-    public ApiResponse deleteById(@PathVariable Integer id) {
+    @CloudRequiredPermission("business:ywtempconfig:delete")
+    public ApiResponse deleteById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         ywTempConfigService.deleteById(id);
         return ApiResponse.success(null);
     }
 
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
-    @RequiresPermissions("business:ywtempconfig:delete")
-    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+    @CloudRequiredPermission("business:ywtempconfig:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         String [] idArray = ids.split(",");
         List<Integer> idList = new ArrayList<>();
         for (String id : idArray) {
@@ -63,41 +64,49 @@
 
     @ApiOperation("鏍规嵁ID淇敼")
     @PostMapping("/updateById")
-    @RequiresPermissions("business:ywtempconfig:update")
-    public ApiResponse updateById(@RequestBody YwTempConfig ywTempConfig) {
+    @CloudRequiredPermission("business:ywtempconfig:update")
+    public ApiResponse updateById(@RequestBody YwTempConfig ywTempConfig,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         ywTempConfigService.updateById(ywTempConfig);
         return ApiResponse.success(null);
     }
 
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
-    @RequiresPermissions("business:ywtempconfig:query")
-    public ApiResponse<PageData<YwTempConfig>> findPage (@RequestBody PageWrap<YwTempConfig> pageWrap) {
+    @CloudRequiredPermission("business:ywtempconfig:query")
+    public ApiResponse<PageData<YwTempConfig>> findPage (@RequestBody PageWrap<YwTempConfig> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywTempConfigService.findPage(pageWrap));
     }
 
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
-    @RequiresPermissions("business:ywtempconfig:exportExcel")
-    public void exportExcel (@RequestBody PageWrap<YwTempConfig> pageWrap, HttpServletResponse response) {
+    @CloudRequiredPermission("business:ywtempconfig:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwTempConfig> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         ExcelExporter.build(YwTempConfig.class).export(ywTempConfigService.findPage(pageWrap).getRecords(), "鍌即淇℃伅閰嶇疆", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
-    @RequiresPermissions("business:ywtempconfig:query")
-    public ApiResponse findById(@PathVariable Integer id) {
+    @CloudRequiredPermission("business:ywtempconfig:query")
+    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywTempConfigService.findById(id));
     }
 
 
-    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @ApiOperation("鑾峰彇閰嶇疆淇℃伅")
     @GetMapping("/getCallTemp")
-    @RequiresPermissions("business:ywtempconfig:query")
-    public ApiResponse<YwCallTempDataVO> getCallTemp() {
+    @CloudRequiredPermission("business:ywtempconfig:query")
+    public ApiResponse<YwCallTempDataVO> getCallTemp(@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         return ApiResponse.success(ywTempConfigService.getCallTemp());
     }
 
 
+    @ApiOperation("鏇存柊閰嶇疆妯℃澘淇℃伅")
+    @PostMapping("/updTempConfig")
+    @CloudRequiredPermission("business:ywtempconfig:update")
+    public ApiResponse updTempConfig (@RequestBody YwCallTempDataDTO ywCallTempDataDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywTempConfigService.updTempConfig(ywCallTempDataDTO);
+        return ApiResponse.success(null);
+    }
+
 
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkDeskCloutController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkDeskCloutController.java
index 008e05e..e7c3479 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkDeskCloutController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWorkDeskCloutController.java
@@ -12,10 +12,12 @@
 import com.doumee.dao.business.model.YwQuickModel;
 import com.doumee.dao.business.vo.MonthDataResponse;
 import com.doumee.dao.business.vo.WorkDeskDataResponse;
+import com.doumee.dao.system.model.Notices;
 import com.doumee.service.business.WorkbenchesService;
 import com.doumee.service.business.YwPatrolTaskRecordService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -41,8 +43,15 @@
         return ApiResponse.success(workbenchesService.getYwQuickList(getLoginUser(token)));
     }
 
+    @ApiOperation("鑾峰彇榛樿蹇嵎鑿滃崟妯″潡淇℃伅")
+    @GetMapping("/getDefaultYwQuickList")
+    public ApiResponse<List<YwQuickModel>> getDefaultYwQuickList() {
+        return ApiResponse.success(workbenchesService.getYwQuickList(null));
+    }
+
+
     @ApiOperation("鏇存柊蹇嵎妯″潡鏁版嵁")
-    @GetMapping("/updMyYwQuickModel")
+    @PostMapping("/updMyYwQuickModel")
     public ApiResponse updMyYwQuickModel(@RequestBody List<Integer> idList,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         workbenchesService.updMyYwQuickModel(idList,getLoginUser(token));
         return ApiResponse.success("鎿嶄綔鎴愬姛");
@@ -60,6 +69,10 @@
         return ApiResponse.success(workbenchesService.workDeskData(getLoginUser(token)));
     }
 
-
+    @ApiOperation("H5-鎴戠殑寰呭姙")
+    @PostMapping("/myNoticesH5")
+    public ApiResponse<PageData<Notices>> myNoticesH5 (@RequestBody PageWrap<Notices> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success(workbenchesService.getMyNotices(pageWrap,getLoginUser(token)));
+    }
 
 }
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 9694405..e0c27a1 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
@@ -4,6 +4,11 @@
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.YwTempConfig;
+import fr.opensagres.xdocreport.document.IXDocReport;
+import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
+import fr.opensagres.xdocreport.template.IContext;
+import fr.opensagres.xdocreport.template.TemplateEngineKind;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.apache.poi.xwpf.usermodel.XWPFRun;
@@ -33,7 +38,7 @@
 
 
 
-    public static String modifyWordTemplate(String templatePath, List<YwTempConfig> ywTempConfigList,String fileName) {
+    public static String modifyWordTemplate_old(String templatePath, List<YwTempConfig> ywTempConfigList,String fileName) {
         try (
              XWPFDocument document = new XWPFDocument(getFileInputStream(templatePath))) {
             // 姝ゅ杩炴帴鍒板悗缁浛鎹㈡楠�
@@ -42,10 +47,15 @@
                 for (XWPFRun run : paragraph.getRuns()) {
                     // 鏇挎崲鍗犱綅绗�
                     String text = run.getText(0);
+                    System.out.println(text);
                     if (text != null) {
-                        for (YwTempConfig ywTempConfig:ywTempConfigList
-                             ) {
-                            text = text.replace(ywTempConfig.getTitle(), ywTempConfig.getUrl());
+                        for (YwTempConfig ywTempConfig:ywTempConfigList) {
+                            if(StringUtils.isNotBlank(ywTempConfig.getUrl())){
+                                text = text.replace(ywTempConfig.getTitle(), ywTempConfig.getUrl());
+                            }else{
+                                text = text.replace(ywTempConfig.getTitle(), "");
+                            }
+
                         }
                         run.setText(text, 0); // 閲嶆柊璁剧疆鏂囨湰
                     }
@@ -67,6 +77,53 @@
         throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏂囦欢杞崲寮傚父!");
     }
 
+
+
+
+    public static String modifyWordTemplate(String templatePath, List<YwTempConfig> ywTempConfigList,String fileName,String zipFilePath) {
+        InputStream ins = null;
+        OutputStream out = null;
+        try{
+            //鑾峰彇Word妯℃澘锛屾ā鏉垮瓨鏀捐矾寰勫湪椤圭洰鐨剅esources鐩綍涓�
+            ins = getFileInputStream(templatePath) ;
+//            ins = new FileInputStream("D:\\3.docx");
+            //娉ㄥ唽xdocreport瀹炰緥骞跺姞杞紽reeMarker妯℃澘寮曟搸
+            IXDocReport report = XDocReportRegistry.getRegistry().loadReport(ins,
+                    TemplateEngineKind.Freemarker);
+            //鍒涘缓xdocreport涓婁笅鏂囧璞�
+            IContext context = report.createContext();
+            for (YwTempConfig ywTempConfig:ywTempConfigList) {
+                if(StringUtils.isBlank(ywTempConfig.getUrl())){
+                    ywTempConfig.setUrl("-");
+                }
+                context.put(ywTempConfig.getTitle().replace("${","").replace("}",""), ywTempConfig.getUrl());
+            }
+            String path = zipFilePath + fileName;
+            out = new FileOutputStream(new File(path));
+            report.process(context, out);
+            return path;
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (null != ins) {
+                try {
+                    ins.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return null;
+    }
+
+
+
+
+
+
+
+
+
     /*璇诲彇缃戠粶鏂囦欢*/
     public static InputStream getFileInputStream(String path) {
         URL url = null;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwCallTempDataDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwCallTempDataDTO.java
new file mode 100644
index 0000000..417ad77
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwCallTempDataDTO.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.business.dto;
+
+import com.doumee.dao.business.model.YwTempConfig;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/1/8 15:32
+ */
+@Data
+public class YwCallTempDataDTO {
+
+    @ApiModelProperty(value = "鐭伅妯℃澘", example = "1")
+    private YwTempConfig smsTemp;
+
+    @ApiModelProperty(value = "閭欢淇℃伅妯℃澘", example = "1")
+    private YwTempConfig emailTemp;
+
+    @ApiModelProperty(value = "绉熻祦閫氱煡鍗曟ā鏉�", example = "1")
+    private YwTempConfig leaseTemp;
+
+    @ApiModelProperty(value = "鍏朵粬閫氱煡鍗曟ā鏉�", example = "1")
+    private YwTempConfig otherTemp;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwContractBillDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwContractBillDTO.java
new file mode 100644
index 0000000..5e969a2
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwContractBillDTO.java
@@ -0,0 +1,55 @@
+package com.doumee.dao.business.dto;
+
+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.doumee.dao.business.model.YwContractBill;
+import com.doumee.dao.business.model.YwContractRevenue;
+import com.doumee.dao.business.model.YwContractRoom;
+import com.doumee.dao.system.model.Multifile;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 杩愮淮鍚堝悓璐﹀崟淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2024/11/19 16:07
+ */
+@Data
+public class YwContractBillDTO {
+
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startDate;
+
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endDate;
+
+    @ApiModelProperty(value = "璁″垝浠樻鏃�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planPayDate;
+
+    @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
+    private Integer sortnum;
+
+    @ApiModelProperty(value = "璐﹀崟閲戦", example = "1")
+    private BigDecimal totleFee;
+
+    @ApiModelProperty(value = "璐圭敤绫诲瀷锛�0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=绉熻祦鎶奸噾锛�3=鐗╀笟鎶奸噾锛�4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬; 7=淇濊瘉閲�", example = "1")
+    private Integer costType;
+
+
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwSmsEmailBillCallDTO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwSmsEmailBillCallDTO.java
index 4d71839..d4f0398 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwSmsEmailBillCallDTO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/dto/YwSmsEmailBillCallDTO.java
@@ -11,7 +11,7 @@
  * @date 2023/02/14 11:14
  */
 @Data
-public class YwSmsEmailBillCallDTO implements Serializable {
+public class YwSmsEmailBillCallDTO{
 
     @ApiModelProperty(value = "鎺ユ敹浜轰富閿�" )
     private Integer userId;
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 4d5198f..de03a54 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
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.core.model.LoginUserModel;
+import com.doumee.dao.business.dto.YwContractBillDTO;
 import com.doumee.dao.system.model.Multifile;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -161,6 +162,7 @@
     @ExcelColumn(name="鐗╀笟绉熻祦鏉℃浠锋牸鍗曚綅")
     private Integer wyFirstCircle;
 
+
     @ApiModelProperty(value = "绉熻祦鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�", example = "1")
     @ExcelColumn(name="绉熻祦鏀粯鏂瑰紡 0=涓�娆℃�т粯娆撅紱1=姣忎笁涓湀涓�浠橈紱2=鍏釜鏈堜竴浠橈紱3=涓�骞翠竴浠�")
     private Integer zlPayType;
@@ -205,6 +207,9 @@
     @ApiModelProperty(value = "鎴块棿涓婚敭 鏌ヨ浣跨敤")
     @TableField(exist = false)
     private Integer roomId;
+    @ApiModelProperty(value = "妤煎畤涓婚敭 鏌ヨ浣跨敤")
+    @TableField(exist = false)
+    private Integer buildingId;
     @ApiModelProperty(value = "闄勪欢闆嗗悎")
     @TableField(exist = false)
     private List<Multifile> fileList;
@@ -273,7 +278,34 @@
     @ApiModelProperty(value = "閫�绉熸椂鏂板鐨勬敹浠樻璐﹀崟")
     @TableField(exist = false)
     private List<YwContractBill> addBillList;
+    @ApiModelProperty(value = "绉熻祦澶╂暟", example = "1")
+    @TableField(exist = false)
+    private Integer leaseDays;
+    @ApiModelProperty(value = "绉熻祦鍗曚环锛堝厓锛�", example = "1")
+    @TableField(exist = false)
+    private BigDecimal leasePrice;
     @ApiModelProperty(value = "褰撳墠鏀寔閫�娆句慨鏀归噾棰濈殑璐﹀崟闆嗗悎")
     @TableField(exist = false)
     private List<YwContractBill> canBackRentBills;
+
+    @ApiModelProperty(value = "鍚堝悓鍒涘缓璐﹀崟淇℃伅")
+    @TableField(exist = false)
+    private List<YwContractBillDTO> ywContractBillDTOList;
+
+
+    @ApiModelProperty(value = "绉熻祦璐硅处鍗�",hidden = true)
+    @TableField(exist = false)
+    private List<YwContractBillDTO> zlBillDTOList;
+    @ApiModelProperty(value = "鐗╀笟璐硅处鍗�",hidden = true)
+    @TableField(exist = false)
+    private List<YwContractBillDTO> wyBillDTOList;
+    @ApiModelProperty(value = "鐗╀笟鎶奸噾璐﹀崟",hidden = true)
+    @TableField(exist = false)
+    private YwContractBillDTO wyBillDTO;
+    @ApiModelProperty(value = "绉熻祦鎶奸噾璐﹀崟",hidden = true)
+    @TableField(exist = false)
+    private YwContractBillDTO zlBillDTO;
+
+
+
 }
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 16238e4..c59d394 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
@@ -143,6 +143,7 @@
     @ApiModelProperty(value = "閫�绉熺粨绠楅噾棰濆悎璁�", example = "1")
     @ExcelColumn(name="閫�绉熺粨绠楅噾棰濆悎璁�")
     private BigDecimal btFee;
+
     @ApiModelProperty(value = "瀹㈡埛鍚嶇О锛堜粯娆炬柟锛�", example = "1")
     @ExcelColumn(name="瀹㈡埛鍚嶇О",index = 0,width = 10)
     @TableField(exist = false)
@@ -156,6 +157,13 @@
     @TableField(exist = false)
     private Integer customerId;
 
+    @ApiModelProperty(value = "鏄惁鍙戦�侀偖浠讹細0=鍚︼紱1=鏄�", example = "1")
+    @TableField(exist = false)
+    private Integer isSendEmail;
+
+    @ApiModelProperty(value = "鏄惁鍙戦�佺煭淇★細0=鍚︼紱1=鏄�", example = "1")
+    @TableField(exist = false)
+    private Integer isSendSms;
 
     @ApiModelProperty(value = "鍏徃鍚嶇О", example = "1")
     @TableField(exist = false)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java
index ef14ea2..2d95c9c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDevice.java
@@ -124,6 +124,10 @@
     @ApiModelProperty(value = "缁翠繚璇存槑")
     private String maintenanceContent;
 
+    @ApiModelProperty(value = "璐叆鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date buyDate;
+
     @ApiModelProperty(value = "鍒嗙被鍚嶇О")
     @TableField(exist = false)
     private String categoryName;
@@ -140,6 +144,10 @@
     @TableField(exist = false)
     private String realName;
 
+    @ApiModelProperty(value = "缁翠繚浜哄憳鍚嶇О")
+    @TableField(exist = false)
+    private String maintenanceUserName;
+
     @ApiModelProperty(value = "鍥剧墖鍦板潃")
     @TableField(exist = false)
     private String fileUrl;
@@ -153,6 +161,18 @@
     private List<Multifile> multifileList;
 
 
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    @TableField(exist = false)
+    private String projectName;
+    @ApiModelProperty(value = "妤煎畤鍚嶇О")
+    @TableField(exist = false)
+    private String buildingName;
+    @ApiModelProperty(value = "妤煎眰鍚嶇О")
+    @TableField(exist = false)
+    private String floorName;
+    @ApiModelProperty(value = "鎴块棿鍚嶇О")
+    @TableField(exist = false)
+    private String roomName;
 
 
 //    @ApiModelProperty(value = "闄勪欢淇℃伅")
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 e84edc2..36e1608 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
@@ -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/YwOutinboundRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinboundRecord.java
index b201cb7..d8a3f12 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
@@ -33,7 +33,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")
@@ -99,6 +99,7 @@
 
     @ApiModelProperty(value = "鍗曟嵁鏃ユ湡")
     @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date doneDate;
 
     @ApiModelProperty(value = "涓�绾у垎绫诲悕绉�")
@@ -117,6 +118,10 @@
     @TableField(exist = false)
     private String code;
 
+    @ApiModelProperty(value = "绫诲瀷 0閲囪喘鍏ュ簱 1棰嗙敤閫�鍥� 2璋冩暣鍏ュ簱 3鍏朵粬鍏ュ簱 4鐩樼泩鍏ュ簱 5棰嗙敤鍑哄簱 6浠撳簱鍑哄簱 7璋冩暣鍑哄簱 8閲囪喘鍑哄簱 9鍏朵粬鍑哄簱 10鐩樹簭鍑哄簱", example = "1")
+    @TableField(exist = false)
+    private Integer type;
+
 
     @ApiModelProperty(value = "鍗曟嵁鏃ユ湡 寮�濮� yyyy-MM-dd", example = "1")
     @TableField(exist = false)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java
index 3b798da..2b673e3 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java
@@ -56,7 +56,7 @@
     @ApiModelProperty(value = "澶囨敞")
     private String remark;
 
-    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
+    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤 ", example = "1")
     @ExcelColumn(name="鐘舵��",index = 8,width = 6,valueMapping = "0=鍚敤;1=鍋滅敤;")
     private Integer status;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java
index 8eae329..9346c4b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java
@@ -77,7 +77,6 @@
 
     @ApiModelProperty(value = "鎻愭姤鏃堕棿")
     @ExcelColumn(name="鎻愭姤鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date submitDate;
 
     @ApiModelProperty(value = "缂栧彿")
@@ -142,6 +141,15 @@
     @TableField(exist = false)
     private Integer workOrderFloorId;
 
+    @ApiModelProperty(value = "鎵�灞為」鐩紪鐮�", example = "1")
+    @TableField(exist = false)
+    private Integer workOrderProjectId;
+
+    @ApiModelProperty(value = "鎵�灞炴ゼ瀹囩紪鐮�", example = "1")
+    @TableField(exist = false)
+    private Integer workOrderBuildId;
+
+
     @ApiModelProperty(value = "宸ュ崟鍒嗙被缂栫爜(鍏宠仈category锛�", example = "1")
     @TableField(exist = false)
     private Integer workOrderCateId;
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 8dee35e..caa8f4a 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
@@ -120,4 +120,5 @@
     @TableField(exist = false)
     private String floorName;
 
+
 }
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 06c1422..6c80566 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
@@ -174,6 +174,9 @@
     @ExcelColumn(name="宸ュ崟鍒嗙被",index = 3,width = 10)
     @TableField(exist = false)
     private String categoryName;
+    @ApiModelProperty(value = "宸ュ崟鐖剁骇鍒嗙被")
+    @TableField(exist = false)
+    private String categoryParentName;
     @ApiModelProperty(value = "鍒嗛厤浜哄鍚�")
     @TableField(exist = false)
     private String dispatchUserName;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java
index ba8b2d3..3d2ed39 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/ProjectDataVO.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.dao.business.model.Approve;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -25,6 +26,10 @@
     @ApiModelProperty(value = "闈㈢Н")
     private BigDecimal area;
 
+    @ApiModelProperty(value = "绉熻祦鐘舵�侊細0=寰呯璧侊紱1=宸茬璧� ;2=鏈紑鍚璧�", example = "1")
+    private Integer leaseStatus;
+
+
     @ApiModelProperty(value = "鐖剁骇涓婚敭")
     private Integer pId;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwFloorStatusDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwFloorStatusDataVO.java
index 1108049..d2e4d98 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwFloorStatusDataVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwFloorStatusDataVO.java
@@ -24,9 +24,6 @@
     @ApiModelProperty(value = "妤煎眰鍚嶇О", example = "1")
     private String floorName;
 
-    @ApiModelProperty(value = "妤煎眰鏁�", example = "1")
-    private Integer floor;
-
     @ApiModelProperty(value = "鎴块棿鐘舵�佹暟鎹�", example = "1")
     private List<YwRoomStatusDataVO> ywRoomStatusDataVOList;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomContractDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomContractDataVO.java
index 46bf123..446627b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomContractDataVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomContractDataVO.java
@@ -27,6 +27,9 @@
     @ApiModelProperty(value = "鍙嫑鍟嗘埧婧愭暟", example = "1")
     private Integer investmentRoomAmount;
 
+    @ApiModelProperty(value = "鍦ㄧ姣忓ぉ閲戦", example = "1" ,hidden = true)
+    private BigDecimal leaseDayPrice;
+
     @ApiModelProperty(value = "鍦ㄧ瀹炴椂鍧囦环", example = "1")
     private BigDecimal leasePrice;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomStatusDataVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomStatusDataVO.java
index 5936073..47b3c90 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomStatusDataVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwRoomStatusDataVO.java
@@ -31,7 +31,7 @@
     @ApiModelProperty(value = "绉熷鍚嶇О", example = "1")
     private String customerName;
 
-    @ApiModelProperty(value = "鎴块棿鐘舵�侊細0=寰呯锛�1=宸茬锛�2=鍗冲皢鍒版湡", example = "1")
+    @ApiModelProperty(value = "鎴块棿鐘舵�侊細0=寰呯锛�1=宸茬锛�2=鍗冲皢鍒版湡锛�", example = "1")
     private Integer roomStatus;
 
     @ApiModelProperty(value = "鍒版湡鏃ユ湡", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WorkbenchesService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WorkbenchesService.java
index 02cbc28..9602e28 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WorkbenchesService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/WorkbenchesService.java
@@ -1,9 +1,12 @@
 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.YwQuickModel;
 import com.doumee.dao.business.vo.MonthDataResponse;
 import com.doumee.dao.business.vo.WorkDeskDataResponse;
+import com.doumee.dao.system.model.Notices;
 
 import java.util.List;
 
@@ -23,4 +26,5 @@
 
     WorkDeskDataResponse workDeskData(LoginUserInfo loginUserInfo);
 
+    PageData<Notices> getMyNotices(PageWrap<Notices> pageWrap, LoginUserInfo loginUserInfo);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java
index bc2952d..ef6208f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwContractBillService.java
@@ -3,9 +3,11 @@
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.dto.YwSmsEmailBillCallDTO;
 import com.doumee.dao.business.model.YwContractBill;
 import com.doumee.dao.business.vo.YwContractBillCallDataVO;
 import com.doumee.dao.business.vo.YwContractBillDataVO;
+import com.doumee.service.business.impl.SmsEmailServiceImpl;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
@@ -122,6 +124,6 @@
 
     void downloadCallFeeDoc(List<Integer> billIds, LoginUserInfo loginUserInfo, HttpServletResponse response);
 
-
+    void sendSmsEmail(List<YwSmsEmailBillCallDTO> ywSmsEmailBillCallDTOList, SmsEmailServiceImpl smsEmailService, LoginUserInfo loginUserInfo);
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java
index b32779c..ef46e18 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwDeviceService.java
@@ -6,6 +6,7 @@
 import com.doumee.dao.business.model.YwDevice;
 import com.doumee.dao.business.vo.YwDeviceCateDataVO;
 import com.doumee.dao.business.vo.YwDeviceDataVO;
+import com.doumee.dao.business.vo.YwDeviceParentCateDataVO;
 import com.doumee.dao.business.vo.YwDeviceStatusDataVO;
 
 import java.util.List;
@@ -108,7 +109,7 @@
 
     YwDevice findByCode(String deviceCode);
 
-    Set<YwDeviceCateDataVO> getDeviceCateData(YwDevice model);
+    Set<YwDeviceParentCateDataVO> getDeviceCateData(YwDevice model);
 
     YwDeviceStatusDataVO getDeviceStatus(YwDevice model);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java
index deae531..26070ef 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolTaskRecordService.java
@@ -1,5 +1,6 @@
 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.YwPatrolTaskRecord;
@@ -101,4 +102,6 @@
     YwPatrolTaskRecord getDetail(Integer id);
 
     YwPatrolTaskRecord getPointRecordByCode(YwPatrolTaskRecord bean);
+
+    YwPatrolTaskRecord getRecordByUserPoint(YwPatrolTaskRecord bean, LoginUserInfo loginUserInfo);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java
index 8b209b6..228310d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java
@@ -65,7 +65,7 @@
      */
     YwProblem findById(Integer id);
 
-    YwProblem getDetail(Integer id);
+    YwProblem getDetail(Integer id,Integer workorderId);
 
 
     /**
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java
index 0df5bf2..aeb5e12 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java
@@ -4,6 +4,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.YwStocktaking;
+import com.doumee.service.business.impl.YwOutinboundServiceImpl;
+
 import java.util.List;
 
 /**
@@ -32,7 +34,7 @@
 
     void beginById(Integer id, LoginUserInfo loginUserInfo);
 
-    void finishById(Integer id, LoginUserInfo loginUserInfo);
+    void finishById(Integer id, YwOutinboundServiceImpl ywOutinboundService,LoginUserInfo loginUserInfo);
     /**
      * 鍒犻櫎
      *
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwTempConfigService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwTempConfigService.java
index 5a967f9..bf6df36 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwTempConfigService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwTempConfigService.java
@@ -2,6 +2,7 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.dto.YwCallTempDataDTO;
 import com.doumee.dao.business.model.YwTempConfig;
 import com.doumee.dao.business.vo.YwCallTempDataVO;
 
@@ -98,4 +99,6 @@
     long count(YwTempConfig ywTempConfig);
 
     YwCallTempDataVO getCallTemp();
+
+    void updTempConfig(YwCallTempDataDTO ywCallTempDataDTO);
 }
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 8a856a8..4d4beaf 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
@@ -584,21 +584,22 @@
 
     @Override
     public Integer sendBillSms(String content,String mobile,Integer billId) {
+        boolean result = true;
         if(StringUtils.isBlank(mobile)){
-            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+            result = false;
         }
-        boolean result=   emayService.sendSingleSms(mobile,content);
-        if(!result){
-            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鐭俊鍙戦�佸け璐ワ紝璇风◢鍚庨噸璇曪紒");
+        if(result){
+            result = emayService.sendSingleSms(mobile,content);
         }
         SmsEmail smsEmail = new SmsEmail();
         smsEmail.setIsdeleted(Constants.ZERO);
         smsEmail.setCreateDate(new Date());
-        smsEmail.setStatus(Constants.ZERO);
+        smsEmail.setStatus(result?Constants.ZERO:Constants.ONE);
         smsEmail.setType(Constants.ZERO);
+        smsEmail.setRemark(result?"鐭俊鍙戦�佹垚鍔�":"鐭俊鍙戦�佸け璐�");
         smsEmail.setTitle("璐﹀崟鍌垂");
         smsEmail.setObjId(billId);
-        smsEmail.setObjType(Constants.ZERO+"");
+        smsEmail.setObjType(Constants.ONE+"");
         smsEmail.setContent(content);
         smsEmailMapper.insert(smsEmail);
         return smsEmail.getId();
@@ -609,21 +610,21 @@
 
     @Override
     public Integer sendEmail(String email,String content,Integer billId) {
+        boolean result = true;
         if(StringUtils.isBlank(email)){
-            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+            result = false;
         }
-        boolean result=   emailService.sendEmail(email,"璐﹀崟鍌垂",content,null);
+        if(result){
+            result=   emailService.sendEmail(email,"璐﹀崟鍌垂",content,null);
+        }
         SmsEmail smsEmail = new SmsEmail();
-        smsEmail.setRemark("閭欢鍙戠敓鎴愬姛");
-        if(!result){
-            smsEmail.setRemark("閭欢鍙戠敓澶辫触");
-        }
+        smsEmail.setRemark(result?"閭欢鍙戦�佹垚鍔�":"閭欢鍙戦�佸け璐�");
         smsEmail.setIsdeleted(Constants.ZERO);
         smsEmail.setCreateDate(new Date());
-        smsEmail.setStatus(Constants.ONE);
+        smsEmail.setStatus(result?Constants.ZERO:Constants.ONE);
         smsEmail.setType(Constants.TWO);
         smsEmail.setObjId(billId);
-        smsEmail.setObjType(Constants.ONE+"");
+        smsEmail.setObjType(Constants.TWO+"");
         smsEmail.setContent(content);
         smsEmailMapper.insert(smsEmail);
         return smsEmail.getId();
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WorkbenchesServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WorkbenchesServiceImpl.java
index ef8aa92..d30cd58 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WorkbenchesServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/WorkbenchesServiceImpl.java
@@ -2,12 +2,18 @@
 
 import com.alibaba.druid.sql.visitor.functions.Concat;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.LoginUserModel;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.MonthDataResponse;
@@ -18,7 +24,6 @@
 import com.doumee.service.business.WorkbenchesService;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import io.jsonwebtoken.lang.Objects;
 import io.swagger.models.auth.In;
 import org.apache.tomcat.util.bcel.classfile.Constant;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +32,7 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -53,21 +59,32 @@
     @Autowired
     private YwStocktakingMapper ywStocktakingMapper;
 
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
 
 
     @Override
     public List<YwQuickModel> getYwQuickList(LoginUserInfo loginUserInfo){
         List<YwQuickModel> ywQuickModelList = ywQuickModelMapper.selectList(new QueryWrapper<YwQuickModel>().lambda()
                 .eq(YwQuickModel::getIsdeleted, Constants.ZERO)
-                .eq(YwQuickModel::getUserId,loginUserInfo.getId())
+                .isNull(YwQuickModel::getUserId)
                 .orderByAsc(YwQuickModel::getSort)
         );
-        if(CollectionUtils.isEmpty(ywQuickModelList)){
-            ywQuickModelList = ywQuickModelMapper.selectList(new QueryWrapper<YwQuickModel>().lambda()
+        if(Objects.nonNull(loginUserInfo)){
+            List<YwQuickModel> userModelList = ywQuickModelMapper.selectList(new QueryWrapper<YwQuickModel>().lambda()
                     .eq(YwQuickModel::getIsdeleted, Constants.ZERO)
-                    .isNull(YwQuickModel::getUserId)
+                    .eq(YwQuickModel::getUserId,loginUserInfo.getId())
                     .orderByAsc(YwQuickModel::getSort)
             );
+            if(CollectionUtils.isNotEmpty(userModelList)){
+                ywQuickModelList = userModelList;
+            }
+        }
+        String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_QUICK_MODEL).getCode();
+        for (YwQuickModel ywQuickModel:ywQuickModelList) {
+            ywQuickModel.setIcoPath(path + ywQuickModel.getIcoPath());
         }
         return ywQuickModelList;
     }
@@ -80,7 +97,7 @@
                 .isNull(YwQuickModel::getUserId)
                 .orderByAsc(YwQuickModel::getSort)
         );
-        if(CollectionUtils.isEmpty(ywQuickModelList) || Constants.equalsInteger(idList.size(),ywQuickModelList.size())){
+        if(CollectionUtils.isEmpty(ywQuickModelList) ){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"蹇嵎妯″潡閰嶇疆寮傚父,璇疯仈绯荤鐞嗗憳");
         }
         ywQuickModelMapper.delete(new QueryWrapper<YwQuickModel>().lambda().eq(YwQuickModel::getUserId,loginUserInfo.getId()));
@@ -111,6 +128,8 @@
                 .eq(Notices::getUserId,loginUserInfo.getId())
                 .eq(Notices::getIsdeleted,Constants.ZERO)
                 .eq(Notices::getStatus,Constants.ZERO)
+                .like(Notices::getParam1,yearMonth)
+                .ne(Notices::getObjType,Constants.TWO)
         );
         for (String str:dataList) {
             MonthDataResponse  monthDataResponse = new MonthDataResponse();
@@ -173,9 +192,22 @@
 
 
 
-
-
-
+    @Override
+    public PageData<Notices> getMyNotices(PageWrap<Notices> pageWrap,LoginUserInfo loginUserInfo) {
+        IPage<Notices> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<Notices> queryWrapper = new MPJLambdaWrapper<>();
+        Notices model = pageWrap.getModel();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        queryWrapper.selectAll(Notices.class)
+                .eq(Notices::getUserId,loginUserInfo.getId())
+                .eq(Notices::getIsdeleted,Constants.ZERO)
+                .eq(Objects.nonNull(model)&&Objects.nonNull(model.getStatus()),Notices::getStatus,model.getStatus())
+                .apply(" param1 <= CURDATE() ")
+                .orderByAsc(Notices::getReaded)
+                .orderByDesc(Notices::getId);
+        PageData<Notices> pageData = PageData.from(noticesJoinMapper.selectJoinPage(page,Notices.class, queryWrapper));
+        return pageData;
+    }
 
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java
index 713148c..2023119 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwBuildingServiceImpl.java
@@ -116,7 +116,6 @@
                 .selectAs(YwProject::getName,YwBuilding::getProjectName)
                 .select(" (select ifnull(sum(y.FEE_AREA),0) from yw_room y where y.ISDELETED = 0 and y.status = 0 and y.IS_INVESTMENT = 1 and y.BUILDING_ID = t.id ) ",YwBuilding::getRoomFeeArea)
                 .select(" (select ifnull(sum(y.RENT_AREA),0) from yw_room y where y.ISDELETED = 0 and y.status = 0 and y.IS_INVESTMENT = 1 and y.BUILDING_ID = t.id ) ",YwBuilding::getRoomRentArea)
-                .select("",YwBuilding::getRoomFeeArea)
                 .leftJoin(YwProject.class,YwProject::getId,YwBuilding::getProjectId)
                 .eq(YwBuilding::getId,id)
                 .last(" limit 1 ")
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 e941edb..436e79a 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
@@ -28,6 +28,7 @@
 import org.apache.commons.lang3.StringUtils;
 import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
@@ -66,11 +67,17 @@
     private YwContractMapper ywContractMapper;
 
     @Autowired
+    private YwAccountMapper ywAccountMapper;
+
+    @Autowired
     private MemberMapper memberMapper;
 
     @Autowired
     private YwTempConfigMapper ywTempConfigMapper;
 
+
+    @Value("${zip_file_path}")
+    private String zipFilePath;
 
     @Override
     public Integer create(YwContractBill ywContractBill) {
@@ -682,12 +689,13 @@
                     .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 = 0 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)
                     .in(YwContractBill::getId,billIds)
             );
+            this.dealRoomDetail(ywContractBillList);
             List<YwTempConfig> ywTempConfigList = ywTempConfigMapper.selectList(new QueryWrapper<YwTempConfig>().lambda().eq(YwTempConfig::getIsdeleted,Constants.ZERO));
             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywTempConfigList)){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌妯℃澘閰嶇疆椤�,璇疯仈绯荤鐞嗗憳");
@@ -700,7 +708,7 @@
             }
             List<File> fileList = new ArrayList<>();
             for (YwContractBill ywContractBill:ywContractBillList) {
-                this.dealTempData(tempList,ywContractBill,loginUserInfo);
+                List<YwTempConfig> dealList = this.dealTempData(tempList,ywContractBill,loginUserInfo);
                 String fileName =  "鍌垂閫氱煡鍗昣" +ywContractBill.getCode() +"_" + System.currentTimeMillis()+".docx";
                 YwTempConfig ywTempConfig = new YwTempConfig();
                 if(Constants.equalsInteger(ywContractBill.getType(),Constants.ZERO)){
@@ -717,7 +725,7 @@
                 if(Objects.isNull(ywTempConfig)){
                     throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"妯℃澘淇℃伅寮傚父,璇疯仈绯荤鐞嗗憳");
                 }
-                String path = ExcelReplaceCommon.modifyWordTemplate(ywTempConfig.getUrl(),tempList,fileName);
+                String path = ExcelReplaceCommon.modifyWordTemplate(ywTempConfig.getUrl(),dealList,fileName,zipFilePath);
                 File f = new File(path);
                 if(f !=null && f.isFile()){
                     fileList.add(f);
@@ -739,9 +747,13 @@
     }
 
 
-    public void dealTempData(List<YwTempConfig> ywTempConfigList , YwContractBill ywContractBill, LoginUserInfo loginUserInfo){
+    public List<YwTempConfig> dealTempData(List<YwTempConfig> ywTempConfigList , YwContractBill ywContractBill, LoginUserInfo loginUserInfo){
         //鏌ヨ鏀舵敮璐﹀彿鏁版嵁
+        YwAccount ywAccount = ywAccountMapper.selectOne(new QueryWrapper<YwAccount>().lambda().eq(YwAccount::getIsdeleted,Constants.ZERO).eq(YwAccount::getStatus,Constants.ZERO).eq(YwAccount::getCompanyId,ywContractBill.getCompanyId())
+                        .orderByDesc(YwAccount::getId)
+                .last(" limit 1 "));
 
+        List<YwTempConfig> dealList = new ArrayList<>();
         for (YwTempConfig y:ywTempConfigList) {
             if(y.getTitle().equals("${璐圭敤鍚嶇О}")&&Objects.nonNull(ywContractBill.getCostType())){
                 //璐圭敤绫诲瀷锛�0=绉熻祦璐癸紱1=鐗╀笟璐癸紱2=绉熻祦鎶奸噾锛�3=鐗╀笟鎶奸噾锛�4=姘寸數璐癸紱5=鏉傞」璐癸紱6=鍏朵粬; 7=淇濊瘉閲�
@@ -798,15 +810,15 @@
                     y.setUrl("鍏冩瘡骞崇背澶�");
                 }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
                     y.setUrl("鍏冩瘡骞崇背鏈�");
-                }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
+                }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.TWO)){
                     y.setUrl("鍏冩瘡骞崇背骞�");
-                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
+                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.THREE)){
                     y.setUrl("鍏冩瘡澶�");
-                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
+                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FOUR)){
                     y.setUrl("鍏冩瘡鏈�");
-                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
+                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FIVE)){
                     y.setUrl("鍏冩瘡骞�");
-                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
+                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.SIX)){
                     y.setUrl("鍏冩瘡鍦�");
                 }
             }else if(y.getTitle().equals("${搴旀敹鏃ユ湡}")&&Objects.nonNull(ywContractBill.getPlanPayDate())){
@@ -821,7 +833,7 @@
                 }
             }else if(y.getTitle().equals("${绉熷鍚嶇О}")&&StringUtils.isNotBlank(ywContractBill.getCustomerName())){
                 y.setUrl(ywContractBill.getCustomerName());
-            }else if(y.getTitle().equals("${妤煎畤/妤煎眰/鎴挎簮}")){
+            }else if(y.getTitle().equals("${鎴块棿淇℃伅}")){
                 if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getYwContractRoomList())){
                     StringBuilder roomPathName = new StringBuilder();
                     for (YwContractRoom ywContractRoom:ywContractBill.getYwContractRoomList()) {
@@ -846,21 +858,37 @@
             }else if(y.getTitle().equals("${绉熻祦闈㈢Н}")&&Objects.nonNull(ywContractBill.getTotalArea())){
                 y.setUrl(ywContractBill.getTotalArea().toString());
             }else if(y.getTitle().equals("${鎵�灞炲叕鍙歌处鎴峰悕绉皚")){
-                y.setUrl("鎵�灞炲叕鍙歌处鎴峰悕绉�");
+                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
+                    y.setUrl(ywAccount.getName());
+                }else{
+                    y.setUrl("-");
+                }
             }else if(y.getTitle().equals("${鎵�灞炲叕鍙搁摱琛岃处鍙穧")){
                 y.setUrl("鎵�灞炲叕鍙搁摱琛岃处鍙�");
+                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
+                    y.setUrl(ywAccount.getName());
+                }else{
+                    y.setUrl("-");
+                }
             }else if(y.getTitle().equals("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎")){
-                y.setUrl("鎵�灞炲叕鍙稿紑鎴烽摱琛�");
+                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getBankNo())){
+                    y.setUrl(ywAccount.getBankNo());
+                }else{
+                    y.setUrl("-");
+                }
             }else if(y.getTitle().equals("${閫氱煡鍗曠敓鎴愭棩鏈焳")){
                 y.setUrl(DateUtil.formatDate(new Date(),"yyyy-MM-dd"));
-            }else if(y.getTitle().equals("${褰撳墠鐢ㄦ埛濮撳悕}")){
+            }else if(y.getTitle().equals("${鍒惰〃浜哄悕绉皚")){
                 y.setUrl(loginUserInfo.getRealname());
             }
+            dealList.add(y);
         }
+        return dealList;
     }
 
 
-    public void sendSmsEmail(List<YwSmsEmailBillCallDTO> ywSmsEmailBillCallDTOList,LoginUserInfo loginUserInfo){
+    @Override
+    public void sendSmsEmail(List<YwSmsEmailBillCallDTO> ywSmsEmailBillCallDTOList,SmsEmailServiceImpl smsEmailService,LoginUserInfo loginUserInfo){
         if(CollectionUtils.isEmpty(ywSmsEmailBillCallDTOList)){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
@@ -874,12 +902,15 @@
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(tempList)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌妯℃澘閰嶇疆椤�,璇疯仈绯荤鐞嗗憳");
         }
+        Optional<YwTempConfig> smsTempConfigOptional = ywTempConfigList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).findAny();
+        Optional<YwTempConfig> emailTempConfigOptional = ywTempConfigList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ONE)).findAny();
         for (YwSmsEmailBillCallDTO ywSmsEmailBillCallDTO:ywSmsEmailBillCallDTOList) {
             if(Objects.isNull(ywSmsEmailBillCallDTO)
-            || Objects.isNull(ywSmsEmailBillCallDTO.getBillId())
+                    || Objects.isNull(ywSmsEmailBillCallDTO.getBillId())
                     || Objects.isNull(ywSmsEmailBillCallDTO.getUserId())
-            ||Objects.isNull(ywSmsEmailBillCallDTO.getSendEmail())
-                    || Objects.isNull(ywSmsEmailBillCallDTO.getSendSms())){
+                    ||Objects.isNull(ywSmsEmailBillCallDTO.getSendEmail())
+                    || Objects.isNull(ywSmsEmailBillCallDTO.getSendSms())
+            ){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST);
             }
 
@@ -906,29 +937,156 @@
             if(Objects.isNull(member)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀛樺湪鏈煡璇㈠埌鐨勪汉鍛樹俊鎭�");
             }
-
-
+            if(Objects.nonNull(member)){
+                if(Constants.equalsInteger(ywSmsEmailBillCallDTO.getSendSms(),Constants.ONE) && StringUtils.isNotBlank(member.getPhone())
+                 && smsTempConfigOptional.isPresent()){
+                    String content = this.dealTempSmsEmailData(smsTempConfigOptional.get().getTitle(),tempList,ywContractBill,loginUserInfo);
+                    smsEmailService.sendBillSms(content,member.getPhone(),ywContractBill.getId());
+                }
+                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());
+                }
+            }
         }
+         
+    }
 
 
-        for (YwSmsEmailBillCallDTO ywSmsEmailBillCallDTO:ywSmsEmailBillCallDTOList) {
-
-
-
-
-
+    public String  dealTempSmsEmailData(String tempStr,List<YwTempConfig> ywTempConfigList , YwContractBill ywContractBill, LoginUserInfo loginUserInfo){
+        //鏌ヨ鏀舵敮璐﹀彿鏁版嵁
+        YwAccount ywAccount = ywAccountMapper.selectOne(new QueryWrapper<YwAccount>().lambda().eq(YwAccount::getIsdeleted,Constants.ZERO).eq(YwAccount::getStatus,Constants.ZERO).eq(YwAccount::getCompanyId,ywContractBill.getCompanyId())
+                .orderByDesc(YwAccount::getId)
+                .last(" limit 1 ")); 
+        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("${璐圭敤鍚嶇О}","绉熻祦璐�");
+                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.ONE)){
+                    tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟璐�");
+                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.TWO)){
+                    tempStr.replace("${璐圭敤鍚嶇О}","绉熻祦鎶奸噾");
+                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.THREE)){
+                    tempStr.replace("${璐圭敤鍚嶇О}","鐗╀笟鎶奸噾");
+                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.FOUR)){
+                    tempStr.replace("${璐圭敤鍚嶇О}","姘寸數璐�");
+                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.FIVE)){
+                    tempStr.replace("${璐圭敤鍚嶇О}","鏉傞」璐�");
+                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.SIX)){
+                    tempStr.replace("${璐圭敤鍚嶇О}","鍏朵粬");
+                }else if(Constants.equalsInteger(ywContractBill.getCostType(),Constants.SEVEN)){
+                    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{
+                    //鐗╀笟鏀粯鏂瑰紡 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("${璁¤垂鍛ㄦ湡}","涓�骞翠竴浠�");
+                        }
+                    }
+                }
+            }else if(y.getTitle().equals("${鍗曚环}")&&Objects.nonNull(ywContractBill.getPrice())){
+                tempStr.replace("${鍗曚环}",ywContractBill.getPrice().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("${鍗曚綅}","鍏冩瘡骞崇背澶�");
+                }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.ONE)){
+                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背鏈�");
+                }else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.TWO)){
+                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞崇背骞�");
+                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.THREE)){
+                    tempStr.replace("${鍗曚綅}","鍏冩瘡澶�");
+                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FOUR)){
+                    tempStr.replace("${鍗曚綅}","鍏冩瘡鏈�");
+                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.FIVE)){
+                    tempStr.replace("${鍗曚綅}","鍏冩瘡骞�");
+                } else if(Constants.equalsInteger(ywContractBill.getCircleType(),Constants.SIX)){
+                    tempStr.replace("${鍗曚綅}","鍏冩瘡鍦�");
+                }
+            }else if(y.getTitle().equals("${搴旀敹鏃ユ湡}")&&Objects.nonNull(ywContractBill.getPlanPayDate())){
+                tempStr.replace("${搴旀敹鏃ユ湡}",DateUtil.formatDate(ywContractBill.getPlanPayDate(),"yyyy-MM-dd"));
+            }else if(y.getTitle().equals("${搴旀敹閲戦}")&&Objects.nonNull(ywContractBill.getReceivableFee())){
+                tempStr.replace("${搴旀敹閲戦}",ywContractBill.getReceivableFee().toString());
+            }else if(y.getTitle().equals("${璐﹀崟澶囨敞}")){
+                if(StringUtils.isNotBlank(ywContractBill.getRemark())){
+                    tempStr.replace("${璐﹀崟澶囨敞}",ywContractBill.getRemark());
+                }else{
+                    tempStr.replace("${璐﹀崟澶囨敞}","");
+                }
+            }else if(y.getTitle().equals("${绉熷鍚嶇О}")&&StringUtils.isNotBlank(ywContractBill.getCustomerName())){
+                tempStr.replace("${绉熷鍚嶇О}",ywContractBill.getCustomerName());
+            }else if(y.getTitle().equals("${鎴块棿淇℃伅}")){
+                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBill.getYwContractRoomList())){
+                    StringBuilder roomPathName = new StringBuilder();
+                    for (YwContractRoom ywContractRoom:ywContractBill.getYwContractRoomList()) {
+                        if(StringUtils.isNotBlank(ywContractRoom.getProjectName())){
+                            roomPathName.append(ywContractRoom.getProjectName()+"/");
+                        }
+                        if(StringUtils.isNotBlank(ywContractRoom.getBuildingName())){
+                            roomPathName.append(ywContractRoom.getBuildingName()+"/");
+                        }
+                        if(StringUtils.isNotBlank(ywContractRoom.getFloorName())){
+                            roomPathName.append(ywContractRoom.getFloorName()+"/");
+                        }
+                        if(StringUtils.isNotBlank(ywContractRoom.getRoomName())){
+                            roomPathName.append(ywContractRoom.getRoomName());
+                        }
+                        if(StringUtils.isNotBlank(roomPathName)){
+                            roomPathName.append(";");
+                        }
+                    }
+                    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());
+                }else{
+                    tempStr.replace("${鎵�灞炲叕鍙歌处鎴峰悕绉皚","-");
+                }
+            }else if(y.getTitle().equals("${鎵�灞炲叕鍙搁摱琛岃处鍙穧")){ 
+                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getName())){
+                    tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧",ywAccount.getName());
+                }else{
+                    tempStr.replace("${鎵�灞炲叕鍙搁摱琛岃处鍙穧","-");
+                }
+            }else if(y.getTitle().equals("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎")){
+                if(Objects.nonNull(ywAccount)&&StringUtils.isNotBlank(ywAccount.getBankNo())){
+                    tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎",ywAccount.getBankNo());
+                }else{
+                    tempStr.replace("${鎵�灞炲叕鍙稿紑鎴烽摱琛寎","-");
+                }
+            }else if(y.getTitle().equals("${閫氱煡鍗曠敓鎴愭棩鏈焳")){
+                tempStr.replace("${閫氱煡鍗曠敓鎴愭棩鏈焳",DateUtil.formatDate(new Date(),"yyyy-MM-dd"));
+            }else if(y.getTitle().equals("${鍒惰〃浜哄悕绉皚")){
+                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 ad8f044..49ecb0b 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
@@ -12,6 +12,7 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.*;
 import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.dto.YwContractBillDTO;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.MultifileMapper;
 import com.doumee.dao.system.SystemUserMapper;
@@ -25,6 +26,7 @@
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.checkerframework.checker.units.qual.C;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -75,8 +77,6 @@
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
     public Integer create(YwContract model) {
         isParamValidCreated(model);
-
-
         model.setCreator(model.getLoginUserInfo().getId());
         model.setIsdeleted(Constants.ZERO);
         model.setCreateDate(new Date());
@@ -91,7 +91,7 @@
         }
         model.setRemark(getRemarlByParam(model));
         ywContractMapper.insert(model);
-        dealDetailListBiz(model);//澶勭悊鏉℃淇℃伅
+        dealDetailListBiz(model,false);//澶勭悊鏉℃淇℃伅
         dealMultifileBiz(model);//澶勭悊闄勪欢淇℃伅
         dealRoomsForContract(model);//澶勭悊鎴挎簮鍏宠仈琛�
         dealLogBiz(model,Constants.YwLogType.CONTRACT_CREATE,model.getLoginUserInfo().getRealname(),"銆�"+model.getRemark().replace("鍚堝悓鎽樿锛�","")+"銆�");//璁板綍鏂板缓鏃ュ織
@@ -162,7 +162,7 @@
         isParamValidForBill(model);
         model.setCreateDate(new Date());
         model.setEditDate(model.getCreateDate());
-        dealDetailListBiz(model);//澶勭悊鏉℃淇℃伅
+        dealDetailListBiz(model,true);//澶勭悊鏉℃淇℃伅
         return model.getBillList();
     }
 
@@ -177,8 +177,7 @@
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜椤甸潰瑕佹眰濉啓鍚堝悓淇℃伅");
         }
-        if(model.getEndDate().getTime()<= model.getStartDate().getTime()){
-
+        if(model.getEndDate().getTime()< model.getStartDate().getTime()){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鍚堝悓鏈夋晥鏈熺粨鏉熸椂闂翠笉寰楁棭浜庡紑濮嬫椂闂达紒");
         }
 
@@ -211,7 +210,7 @@
                 ){
                     throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜椤甸潰瑕佹眰濉啓绉熻祦鏉℃淇℃伅!");
                 }
-                if(d.getEndDate().getTime()<= d.getStartDate().getTime()){
+                if(d.getEndDate().getTime()< d.getStartDate().getTime()){
 
                     throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绉熻祦鏉℃鏈夋晥鏈熺粨鏉熸椂闂翠笉寰楁棭浜庡紑濮嬫椂闂达紒");
                 }
@@ -387,7 +386,7 @@
                 .set(YwContract::getEditDate,DateUtil.getCurrDateTime())
                 .eq(YwContract::getIsdeleted,Constants.ZERO)
                 .in(YwContract::getStatus,Constants.ONE,Constants.ZERO)
-                .apply(" END_DATE < NOW() ")
+                .apply(" END_DATE < CURRENT_DATE ")
         );
 
     }
@@ -605,7 +604,11 @@
         }
     }
 
-    private void dealDetailListBiz(YwContract model) {
+    /**
+     * @param model
+     * @param createBill  鏍规嵁鏉℃鐢熸垚璐﹀崟 false 鍒欐牴鎹墠绔紪杈戝悗鐨勬暟鎹敓鎴�
+     */
+    private void dealDetailListBiz(YwContract model,boolean createBill) {
         List<YwContractDetail> details1 = new ArrayList<>();
         List<YwContractDetail> details2 = new ArrayList<>();
         int num = 0;
@@ -645,7 +648,90 @@
             }
         }
         //澶勭悊璐﹀崟淇℃伅
-        dealBillListBiz(model,details1,details2);
+        if(createBill){
+            dealBillListBiz(model,details1,details2);
+        }else{
+            //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)){
+                YwContractDetail ywContractDetail = details1.get(Constants.ZERO);
+                YwContractBill zlBill = new YwContractBill();
+                BeanUtils.copyProperties(model.getZlBillDTO(),zlBill);
+                zlBill.setCreator(model.getCreator());
+                zlBill.setCreateDate(model.getCreateDate());
+                zlBill.setIsdeleted(Constants.ZERO);
+                zlBill.setStatus(Constants.ZERO);
+                zlBill.setReceivableFee(zlBill.getTotleFee());
+                zlBill.setType(Constants.ZERO);
+                zlBill.setCompanyId(model.getCompanyId());
+                zlBill.setContractId(model.getId());
+                zlBill.setBillType(Constants.ZERO);
+                zlBill.setPayStatus(Constants.ZERO);
+                ywContractBillList.add(zlBill);
+                Integer sortnum = Constants.ONE;
+                for (YwContractBillDTO zlBillDTO:model.getZlBillDTOList()) {
+                    YwContractBill zl = new YwContractBill();
+                    BeanUtils.copyProperties(zlBillDTO,zl);
+                    zl.setCreator(model.getCreator());
+                    zl.setCreateDate(model.getCreateDate());
+                    zl.setIsdeleted(Constants.ZERO);
+                    zl.setStatus(Constants.ZERO);
+                    zl.setReceivableFee(zl.getTotleFee());
+                    zl.setType(Constants.ZERO);
+                    zl.setCompanyId(model.getCompanyId());
+                    zl.setContractId(model.getId());
+                    zl.setBillType(Constants.ZERO);
+                    zl.setPayStatus(Constants.ZERO);
+                    zl.setSortnum(sortnum);
+                    zl.setDetailId(ywContractDetail.getId());
+                    ywContractBillList.add(zl);
+                    sortnum++;
+                }
+            }
+            //鏌ヨ鐗╀笟璐﹀崟
+            if(Constants.equalsInteger(model.getType(),Constants.ZERO )
+                    || Constants.equalsInteger(model.getType(),Constants.TWO)&& com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(details2)){
+                YwContractDetail ywContractDetail = details2.get(Constants.ZERO);
+                YwContractBill wyBill = new YwContractBill();
+                BeanUtils.copyProperties(model.getWyBillDTO(),wyBill);
+                wyBill.setCreator(model.getCreator());
+                wyBill.setCreateDate(model.getCreateDate());
+                wyBill.setIsdeleted(Constants.ZERO);
+                wyBill.setStatus(Constants.ZERO);
+                wyBill.setReceivableFee(wyBill.getTotleFee());
+                wyBill.setType(Constants.ZERO);
+                wyBill.setCompanyId(model.getCompanyId());
+                wyBill.setContractId(model.getId());
+                wyBill.setBillType(Constants.ZERO);
+                wyBill.setPayStatus(Constants.ZERO);
+                ywContractBillList.add(wyBill);
+                Integer sortnum = Constants.ONE;
+                for (YwContractBillDTO wyBillDTO:model.getWyBillDTOList()) {
+                    YwContractBill wy = new YwContractBill();
+                    BeanUtils.copyProperties(wyBillDTO,wy);
+                    wy.setCreator(model.getCreator());
+                    wy.setCreateDate(model.getCreateDate());
+                    wy.setIsdeleted(Constants.ZERO);
+                    wy.setStatus(Constants.ZERO);
+                    wy.setReceivableFee(wy.getTotleFee());
+                    wy.setType(Constants.ZERO);
+                    wy.setCompanyId(model.getCompanyId());
+                    wy.setContractId(model.getId());
+                    wy.setBillType(Constants.ZERO);
+                    wy.setPayStatus(Constants.ZERO);
+                    wy.setSortnum(sortnum);
+                    wy.setDetailId(ywContractDetail.getId());
+                    ywContractBillList.add(wy);
+                    sortnum++;
+                }
+            }
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywContractBillList)){
+                ywContractBillMapper.insert(ywContractBillList);
+            }
+        }
+
     }
 
     /**
@@ -1043,8 +1129,7 @@
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜椤甸潰瑕佹眰濉啓鍚堝悓淇℃伅");
         }
-        if(model.getEndDate().getTime()<= model.getStartDate().getTime()){
-
+        if(model.getEndDate().getTime()< model.getStartDate().getTime()){
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鍚堝悓鏈夋晥鏈熺粨鏉熸椂闂翠笉寰楁棭浜庡紑濮嬫椂闂达紒");
         }
         if(Constants.equalsInteger(model.getType(),Constants.ZERO )
@@ -1080,7 +1165,7 @@
                 ){
                     throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇锋寜椤甸潰瑕佹眰濉啓绉熻祦鏉℃淇℃伅!");
                 }
-                if(d.getEndDate().getTime()<= d.getStartDate().getTime()){
+                if(d.getEndDate().getTime()< d.getStartDate().getTime()){
                     throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绉熻祦鏉℃鏈夋晥鏈熺粨鏉熸椂闂翠笉寰楁棭浜庡紑濮嬫椂闂达紒");
                 }
                 if(d.getEndDate().getTime()>model.getEndDate().getTime() ||d.getStartDate().getTime()<model.getStartDate().getTime()){
@@ -1188,7 +1273,53 @@
         if(user ==null || (user.getDeleted()!=null && user.getDeleted()) ){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝缁忓姙浜轰俊鎭笉瀛樺湪锛岃灏濊瘯鍒锋柊椤甸潰閲嶈瘯锛�");
         }
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(model.getYwContractBillDTOList())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鏃犺处鍗曚俊鎭紝璇峰埛鏂伴噸璇�");
+        }
+        for (YwContractBillDTO billDTO:model.getYwContractBillDTOList()) {
+            if(
+                    Objects.isNull(billDTO.getStartDate())
+                    ||Objects.isNull(billDTO.getEndDate())
+                    ||Objects.isNull(billDTO.getPlanPayDate())
+                    ||Objects.isNull(billDTO.getTotleFee())
+                    ||Objects.isNull(billDTO.getCostType())
+            ){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"璐﹀崟鏄庣粏鍙傛暟閿欒");
+            }
+        }
 
+        List<YwContractBillDTO> ywContractBillDTOList = model.getYwContractBillDTOList();
+        //鏌ヨ绉熻祦鏉℃
+        if(Constants.equalsInteger(model.getType(),Constants.ZERO )
+                || Constants.equalsInteger(model.getType(),Constants.TWO)){
+            List<YwContractBillDTO> leaseBillDTOList = ywContractBillDTOList.stream()
+                    .filter(i->Constants.equalsInteger(i.getCostType(),Constants.ZERO)).collect(Collectors.toList());
+            if(CollectionUtils.isEmpty(leaseBillDTOList)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犵璧佽垂璐﹀崟锛�");
+            }
+            model.setZlBillDTOList(leaseBillDTOList);
+            Optional<YwContractBillDTO> leaseBillOptional = ywContractBillDTOList.stream()
+                    .filter(i->Constants.equalsInteger(i.getCostType(),Constants.TWO)).findAny();
+            if(!leaseBillOptional.isPresent()){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犵璧佹娂閲戣处鍗曪紒");
+            }
+            model.setZlBillDTO(leaseBillOptional.get());
+        }
+        if(Constants.equalsInteger(model.getType(),Constants.ZERO )
+                || Constants.equalsInteger(model.getType(),Constants.ONE)){
+            List<YwContractBillDTO> wyBillDTOList = ywContractBillDTOList.stream()
+                    .filter(i->Constants.equalsInteger(i.getCostType(),Constants.ONE)).collect(Collectors.toList());
+            if(CollectionUtils.isEmpty(wyBillDTOList)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犵墿涓氳垂璐﹀崟锛�");
+            }
+            model.setWyBillDTOList(wyBillDTOList);
+            Optional<YwContractBillDTO> wyBillOptional = ywContractBillDTOList.stream()
+                    .filter(i->Constants.equalsInteger(i.getCostType(),Constants.THREE)).findAny();
+            if(!wyBillOptional.isPresent()){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏃犵墿涓氭娂閲戣处鍗曪紒");
+            }
+            model.setWyBillDTO(wyBillOptional.get());
+        }
     }
 
     @Override
@@ -1276,38 +1407,38 @@
         if (model == null) {
                 throw  new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-            //鍚堝悓闄勪欢
-            initFiles(model);
-            //鏌ヨ鎴挎簮淇℃伅鏁版嵁
-            MPJLambdaWrapper<YwRoom> rw = new MPJLambdaWrapper<>();
-            rw.selectAll(YwRoom.class)
-                    .selectAs(YwProject::getName, YwRoom::getProjectName)
-                    .selectAs(YwFloor::getName, YwRoom::getFloorName)
-                    .selectAs(YwBuilding::getName, YwRoom::getBuildingName)
-                    .leftJoin(YwProject.class, YwProject::getId, YwRoom::getProjectId)
-                    .leftJoin(YwBuilding.class, YwBuilding::getId, YwRoom::getBuildingId)
-                    .leftJoin(YwFloor.class, YwFloor::getId, YwRoom::getFloor)
-                    .eq(YwRoom::getIsdeleted, Constants.ZERO)
-                    .exists("(select a.id from yw_contract_room a where a.isdeleted=0 and a.type=0 and a.room_id=t.id and a.contract_id=" + model.getId() + ")");
-            model.setRoomList(roomMapper.selectJoinList(YwRoom.class, rw));
-            model.setWyFirstCircleStr(Constants.getUnitTypeByNum(model.getWyFirstCircle()));
-            model.setZlFirstCircleStr(Constants.getUnitTypeByNum(model.getZlFirstCircle()));
-            //鏌ヨ绉熻硟鏉℃淇℃伅
-            MPJLambdaWrapper<YwContractDetail> dw = new MPJLambdaWrapper<>();
-            dw.selectAll(YwContractDetail.class)
-                    .eq(YwContractDetail::getIsdeleted, Constants.ZERO)
-                    .eq(YwContractDetail::getContractId, model.getId())
-                    .in(YwContractDetail::getType, Constants.ZERO, Constants.TWO)
-                    .orderByAsc(YwContractDetail::getSortnum);
-            model.setZlDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class, dw));
-            //鏌ヨ鐗╂キ鏉℃淇℃伅
-            dw = new MPJLambdaWrapper<>();
-            dw.selectAll(YwContractDetail.class)
-                    .eq(YwContractDetail::getIsdeleted, Constants.ZERO)
-                    .eq(YwContractDetail::getContractId, model.getId())
-                    .in(YwContractDetail::getType, Constants.ONE, Constants.THREE)
-                    .orderByAsc(YwContractDetail::getSortnum);
-            model.setWyDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class, dw));
+        //鍚堝悓闄勪欢
+        initFiles(model);
+        //鏌ヨ鎴挎簮淇℃伅鏁版嵁
+        MPJLambdaWrapper<YwRoom> rw = new MPJLambdaWrapper<>();
+        rw.selectAll(YwRoom.class)
+                .selectAs(YwProject::getName, YwRoom::getProjectName)
+                .selectAs(YwFloor::getName, YwRoom::getFloorName)
+                .selectAs(YwBuilding::getName, YwRoom::getBuildingName)
+                .leftJoin(YwProject.class, YwProject::getId, YwRoom::getProjectId)
+                .leftJoin(YwBuilding.class, YwBuilding::getId, YwRoom::getBuildingId)
+                .leftJoin(YwFloor.class, YwFloor::getId, YwRoom::getFloor)
+                .eq(YwRoom::getIsdeleted, Constants.ZERO)
+                .exists("(select a.id from yw_contract_room a where a.isdeleted=0 and a.type=0 and a.room_id=t.id and a.contract_id=" + model.getId() + ")");
+        model.setRoomList(roomMapper.selectJoinList(YwRoom.class, rw));
+        model.setWyFirstCircleStr(Constants.getUnitTypeByNum(model.getWyFirstCircle()));
+        model.setZlFirstCircleStr(Constants.getUnitTypeByNum(model.getZlFirstCircle()));
+        //鏌ヨ绉熻硟鏉℃淇℃伅
+        MPJLambdaWrapper<YwContractDetail> dw = new MPJLambdaWrapper<>();
+        dw.selectAll(YwContractDetail.class)
+                .eq(YwContractDetail::getIsdeleted, Constants.ZERO)
+                .eq(YwContractDetail::getContractId, model.getId())
+                .in(YwContractDetail::getType, Constants.ZERO, Constants.TWO)
+                .orderByAsc(YwContractDetail::getSortnum);
+        model.setZlDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class, dw));
+        //鏌ヨ鐗╂キ鏉℃淇℃伅
+        dw = new MPJLambdaWrapper<>();
+        dw.selectAll(YwContractDetail.class)
+                .eq(YwContractDetail::getIsdeleted, Constants.ZERO)
+                .eq(YwContractDetail::getContractId, model.getId())
+                .in(YwContractDetail::getType, Constants.ONE, Constants.THREE)
+                .orderByAsc(YwContractDetail::getSortnum);
+        model.setWyDetailList(ywContractDetailMapper.selectJoinList(YwContractDetail.class, dw));
 
         return model;
     }
@@ -1429,7 +1560,8 @@
         queryWrapper.selectAll(YwContract.class )
                 .selectAs(Company::getName,YwContract::getCompanyName )
                 .selectAs(YwCustomer::getName,YwContract::getRenterName )
-                .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 )
+                .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)
                 .leftJoin(Company.class,Company::getId,YwContract::getCompanyId)
                 .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId);
         Utils.MP.blankToNull(pageWrap.getModel());
@@ -1537,6 +1669,9 @@
         if (pageWrap.getModel().getRoomId() != null) {
             queryWrapper.apply(" t.id in ( select ycr.CONTRACT_ID from yw_contract_room ycr where ycr.type = 0 and  ycr.ROOM_ID = "+pageWrap.getModel().getRoomId()+" )  ");
         }
+        if (pageWrap.getModel().getBuildingId() != null) {
+            queryWrapper.apply(" t.id in ( select ycr.CONTRACT_ID from yw_contract_room ycr left join yw_room yr on ycr.ROOM_ID = yr.id where ycr.type = 0 and  yr.BUILDING_ID = "+pageWrap.getModel().getBuildingId()+" )  ");
+        }
         queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), YwContract::getStartDate, pageWrap.getModel().getQueryStartTime())
                         .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()), YwContract::getEndDate, pageWrap.getModel().getQueryEndTime());
         queryWrapper.orderByDesc(YwContract::getCreateDate );
@@ -1545,6 +1680,28 @@
             for(YwContract model : data.getRecords()){
                 model.setWyFirstCircleStr(Constants.getUnitTypeByNum(model.getWyFirstCircle()));
                 model.setZlFirstCircleStr(Constants.getUnitTypeByNum(model.getZlFirstCircle()));
+                //鏌ヨ鎴挎簮淇℃伅鏁版嵁
+                MPJLambdaWrapper<YwRoom> rw = new MPJLambdaWrapper<>();
+                rw.selectAll(YwRoom.class)
+                        .selectAs(YwProject::getName, YwRoom::getProjectName)
+                        .selectAs(YwFloor::getName, YwRoom::getFloorName)
+                        .selectAs(YwBuilding::getName, YwRoom::getBuildingName)
+                        .leftJoin(YwProject.class, YwProject::getId, YwRoom::getProjectId)
+                        .leftJoin(YwBuilding.class, YwBuilding::getId, YwRoom::getBuildingId)
+                        .leftJoin(YwFloor.class, YwFloor::getId, YwRoom::getFloor)
+                        .eq(YwRoom::getIsdeleted, Constants.ZERO)
+                        .exists("(select a.id from yw_contract_room a where a.isdeleted=0 and a.type=0 and a.room_id=t.id and a.contract_id=" + model.getId() + ")");
+                model.setRoomList(roomMapper.selectJoinList(YwRoom.class, rw));
+                model.setLeaseDays(
+                        DateUtil.daysBetweenDates(model.getEndDate(),model.getStartDate()) + 1
+                );
+                if(Objects.nonNull(model.getLeaseDays())&&Objects.nonNull(model.getTotalArea())&&Objects.nonNull(model.getTotalFee())){
+                    model.setLeasePrice(model.getTotalFee().divide((model.getTotalArea().multiply(new BigDecimal(model.getLeaseDays()))),2,BigDecimal.ROUND_HALF_UP));
+                }else{
+                    model.setLeasePrice(BigDecimal.ZERO);
+                }
+
+
             }
         }
         return data;
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 5aa6aef..dda5508 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
@@ -11,10 +11,7 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.YwDeviceMapper;
 import com.doumee.dao.business.YwDeviceRecordMapper;
-import com.doumee.dao.business.model.Category;
-import com.doumee.dao.business.model.Company;
-import com.doumee.dao.business.model.YwDevice;
-import com.doumee.dao.business.model.YwDeviceRecord;
+import com.doumee.dao.business.model.*;
 import com.doumee.dao.business.vo.YwDeviceCateDataVO;
 import com.doumee.dao.business.vo.YwDeviceDataVO;
 import com.doumee.dao.business.vo.YwDeviceParentCateDataVO;
@@ -103,7 +100,7 @@
                 }
                 multifile.setCreateDate(ywDevice.getCreateDate());
                 multifile.setEditDate(ywDevice.getCreateDate());
-                multifile.setCreator(ywDevice.getEditor());
+                multifile.setCreator(ywDevice.getCreator());
                 multifile.setIsdeleted(Constants.ZERO);
                 multifile.setObjId(ywDevice.getId());
                 multifile.setEditor(ywDevice.getCreator());
@@ -226,7 +223,28 @@
 
     @Override
     public YwDevice getDetail(Integer id) {
-        YwDevice ywDevice = ywDeviceMapper.selectById(id);
+        YwDevice ywDevice = ywDeviceMapper.selectJoinOne(YwDevice.class,
+                new MPJLambdaWrapper<YwDevice>()
+                .selectAll(YwDevice.class)
+                        .select("c.name",YwDevice::getCategoryName)
+                        .select("c1.name",YwDevice::getCategoryParentName)
+                        .select("s.realname",YwDevice::getRealName)
+                        .select("s1.realname",YwDevice::getMaintenanceUserName)
+                        .selectAs(YwProject::getName,YwDevice::getProjectName)
+                        .selectAs(YwFloor::getName,YwDevice::getFloorName)
+                        .selectAs(YwBuilding::getName,YwDevice::getBuildingName)
+                        .selectAs(YwRoom::getCode,YwDevice::getRoomName)
+                        .leftJoin(YwRoom.class,YwRoom::getId,YwDevice::getRoomId)
+                        .leftJoin(YwFloor.class,YwFloor::getId,YwRoom::getFloor)
+                        .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
+                        .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
+                        .leftJoin("category c on t.CATE_ID = c.id")
+                        .leftJoin("category c1 on c.PARENT_ID = c1.id")
+                        .leftJoin("system_user s on t.user_id = s.id")
+                        .leftJoin("system_user s1 on t.MAINTENANCE_USER_ID = s1.id")
+                        .eq(YwDevice::getId,id)
+                        .last(" limit 1 ")
+        );
         Multifile multifile = multifileMapper.selectOne(new QueryWrapper<Multifile>().lambda()
                 .eq(Multifile::getObjId,id).eq(Multifile::getObjType,Constants.MultiFile.FN_DEVICE_FILE.getKey()).last(" limit 1"));
         if(Objects.nonNull(multifile)){
@@ -303,10 +321,12 @@
         queryWrapper.selectAll(YwDevice.class)
                 .select("c.name",YwDevice::getCategoryName)
                 .select("c1.name",YwDevice::getCategoryParentName)
-                .selectAs(SystemUser::getRealname,YwDevice::getRealName)
-                .leftJoin(SystemUser.class,SystemUser::getId,YwDevice::getUserId)
+                .select("s.realname",YwDevice::getRealName)
+                .select("s1.realname",YwDevice::getMaintenanceUserName)
                 .leftJoin("category c on t.CATE_ID = c.id")
                 .leftJoin("category c1 on c.PARENT_ID = c1.id")
+                .leftJoin("system_user s on t.user_id = s.id")
+                .leftJoin("system_user s1 on t.MAINTENANCE_USER_ID = s1.id")
                 .and(Objects.nonNull(model)&&StringUtils.isNotBlank(model.getName()),i->i.like(YwDevice::getName,model.getName()).or().like(YwDevice::getCode,model.getName()))
                 .eq(Objects.nonNull(model.getStatus()),YwDevice::getStatus,model.getStatus())
                 .eq(Objects.nonNull(model.getRoomId()),YwDevice::getRoomId,model.getRoomId())
@@ -343,7 +363,7 @@
     }
 
     @Override
-    public Set<YwDeviceCateDataVO> getDeviceCateData(YwDevice model){
+    public Set<YwDeviceParentCateDataVO> getDeviceCateData(YwDevice model){
         MPJLambdaWrapper<YwDevice> queryWrapper = new MPJLambdaWrapper<YwDevice>();
         queryWrapper.selectAll(YwDevice.class)
                 .select("c.name",YwDevice::getCategoryName)
@@ -370,6 +390,7 @@
             ywDeviceCateDataVO.setCateName(y.getCategoryName());
             ywDeviceCateDataVO.setCateParentId(y.getCateParentId());
             ywDeviceCateDataVOSet.add(ywDeviceCateDataVO);
+
             YwDeviceParentCateDataVO ywDeviceParentCateDataVO = new YwDeviceParentCateDataVO();
             ywDeviceParentCateDataVO.setCateId(y.getCateParentId());
             ywDeviceParentCateDataVO.setCateName(y.getCategoryParentName());
@@ -390,7 +411,7 @@
                     ywDeviceCateDataVOSet.stream().filter(i->Constants.equalsInteger(i.getCateParentId(),ywDeviceParentCateDataVO.getCateId())).collect(Collectors.toList())
             );
         }
-        return ywDeviceCateDataVOSet;
+        return ywDeviceParentCateDataVOSet;
     }
 
 
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 0b48d11..a434cd2 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
@@ -103,7 +103,7 @@
     @Override
     public void deleteById(Integer id) {
         if(ywOutinboundRecordMapper.selectCount(new QueryWrapper<YwOutinboundRecord>().lambda().eq(YwOutinboundRecord::getMaterialId,id))>Constants.ZERO){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠璧勪骇宸叉湁鍑哄叆搴撹褰曪紝涓嶅彲鍒犻櫎");
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐗╂枡宸叉湁鍑哄叆搴撹褰曪紝涓嶅彲鍒犻櫎");
         }
         ywMaterialMapper.update(new UpdateWrapper<YwMaterial>().lambda().set(YwMaterial::getIsdeleted,Constants.ONE).eq(YwMaterial::getId,id));
     }
@@ -219,7 +219,10 @@
                 .and(StringUtils.isNotBlank(model.getCode()),i->i.like(YwMaterial::getCode,model.getCode()).or().like(YwMaterial::getName,model.getCode()))
                 .like(StringUtils.isNotBlank(model.getAttr()),YwMaterial::getAttr,model.getAttr())
                 .eq(Objects.nonNull(model.getProjectId()),YwRoom::getProjectId,model.getProjectId())
+                .eq(Objects.nonNull(model.getStatus()),YwMaterial::getStatus,model.getStatus())
                 .eq(Objects.nonNull(model.getRoomId()),YwMaterial::getRoomId,model.getRoomId())
+                .eq(Objects.nonNull(model.getCateId()),YwMaterial::getCateId,model.getCateId())
+                .eq(Objects.nonNull(model.getParentCateId()),YwMaterial::getParentCateId,model.getParentCateId())
                 .eq(Objects.nonNull(model.getFloorId()),YwRoom::getFloor,model.getFloorId())
                 .eq(Objects.nonNull(model.getBuildingId()),YwRoom::getBuildingId,model.getBuildingId())
                 .eq(YwMaterial::getIsdeleted,Constants.ZERO)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundRecordServiceImpl.java
index b839bc7..7aa22d3 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundRecordServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundRecordServiceImpl.java
@@ -20,6 +20,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -97,13 +98,15 @@
         MPJLambdaWrapper<YwOutinboundRecord> queryWrapper = new MPJLambdaWrapper<YwOutinboundRecord>();
         Utils.MP.blankToNull(pageWrap.getModel());
         YwOutinboundRecord model = pageWrap.getModel();
-        if(Objects.isNull(model)||Objects.isNull(model.getInOut())){
-            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        List<Integer> typeList = new ArrayList<>();
+        if(!(Objects.isNull(model)||Objects.isNull(model.getInOut()))){
+            typeList  = Constants.ywOutInType.getAllTypeKey(model.getInOut());
         }
-        List<Integer> typeList  = Constants.ywOutInType.getAllTypeKey(model.getInOut());
         queryWrapper.selectAll(YwOutinboundRecord.class)
                 .selectAs(SystemUser::getRealname,YwOutinboundRecord::getCreateUserName)
                 .selectAs(YwOutinbound::getCode,YwOutinboundRecord::getCode)
+                .selectAs(YwOutinbound::getType,YwOutinboundRecord::getType)
+                .selectAs(YwOutinbound::getDoneDate,YwOutinboundRecord::getDoneDate)
                 .selectAs(YwWarehouse::getName,YwOutinboundRecord::getWarehouseName)
                 .selectAs(YwMaterial::getCode,YwOutinboundRecord::getMaterialCode)
                 .selectAs(YwMaterial::getName,YwOutinboundRecord::getMaterialName)
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 21d53b2..203c692 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
@@ -80,6 +80,7 @@
         ywOutinbound.setOrigin(Constants.ZERO);
         ywOutinboundMapper.insert(ywOutinbound);
         for (YwOutinboundRecord ywOutinboundRecord:recordList) {
+                ywOutinboundRecord.setOutInBoundId(ywOutinbound.getId());
             ywOutinboundRecord.setCreator(loginUserInfo.getId());
             ywOutinboundRecord.setCreateDate(new Date());
             ywOutinboundRecord.setIsdeleted(Constants.ZERO);
@@ -94,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)))
+//                || (Objects.nonNull(ywOutinbound.getType()) && (!(ywOutinbound.getType() == Constants.ZERO || ywOutinbound.getType() == Constants.ONE)))
                 || Objects.isNull(ywOutinbound.getWarehouseId())
                 || Objects.isNull(ywOutinbound.getDoneDate())
                 || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywOutinbound.getRecordList())
@@ -110,6 +111,7 @@
             ){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST);
             }
+            ywOutinboundRecord.setId(null);
         }
         //鍒ゆ柇褰撳墠鏄惁瀛樺湪杩涜涓殑鐩樼偣鍗�
         if(ywStocktakingMapper.selectCount(new QueryWrapper<YwStocktaking>().lambda().eq(YwStocktaking::getIsdeleted,Constants.ZERO)
@@ -130,10 +132,13 @@
 
     public void dealStockData(YwOutinbound ywOutinbound,List<YwOutinboundRecord> recordList,Integer inOut){
         for (YwOutinboundRecord ywOutinboundRecord:recordList) {
-            YwStock ywStock = ywStockMapper.selectOne(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO).eq(YwStock::getWarehouseId,ywOutinbound.getWarehouseId()).eq(YwStock::getMaterialId,ywOutinboundRecord.getMaterialId()));
+            YwStock ywStock = ywStockMapper.selectOne(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO)
+                    .eq(YwStock::getWarehouseId,ywOutinbound.getWarehouseId()).eq(YwStock::getMaterialId,ywOutinboundRecord.getMaterialId()));
             if(Constants.equalsInteger(inOut,Constants.ZERO)){
                 //鍏ュ簱
                 if(Objects.isNull(ywStock)){
+                    ywStock = new YwStock();
+                    ywStock.setIsdeleted(Constants.ZERO);
                     ywStock.setStock(ywOutinboundRecord.getStock());
                     ywStock.setWarehouseId(ywOutinbound.getWarehouseId());
                     ywStock.setMaterialId(ywOutinboundRecord.getMaterialId());
@@ -142,7 +147,7 @@
                     ywStockMapper.insert(ywStock);
                 }else{
                     ywStockMapper.update(new UpdateWrapper<YwStock>().lambda()
-                            .set(YwStock::getStock," ( stock + " + ywStock.getStock() + " )")
+                                .setSql(" stock = ( stock + "+ywOutinboundRecord.getStock()+") ")
                             .set(YwStock::getEditDate, DateUtil.getCurrDateTime())
                             .set(YwStock::getEditor, ywOutinbound.getCreator())
                             .eq(YwStock::getId,ywStock.getId())
@@ -157,7 +162,7 @@
                     ywStockMapper.deleteById(ywStock.getId());
                 }else{
                     ywStockMapper.update(new UpdateWrapper<YwStock>().lambda()
-                            .set(YwStock::getStock," ( stock  - " + ywStock.getStock() + " )")
+                            .setSql(" stock = ( stock - "+ywOutinboundRecord.getStock()+") ")
                             .set(YwStock::getEditDate, DateUtil.getCurrDateTime())
                             .set(YwStock::getEditor, ywOutinbound.getCreator())
                             .eq(YwStock::getId,ywStock.getId())
@@ -376,7 +381,7 @@
 
 
     public synchronized String  getNextInOutCode(Integer inOut){
-        String prefix =  Constants.equalsInteger(inOut,0)?"RK-":"CK-" + DateUtil.getDate(new Date(),"yyyyMMdd") +"-";
+        String prefix =  (Constants.equalsInteger(inOut,0)?"RK-":"CK-") + DateUtil.getDate(new Date(),"yyyyMMdd") +"-";
         Integer countNum  = RedisUtil.getObject(redisTemplate,
                 Constants.equalsInteger(inOut,0)?Constants.RedisKeys.COM_OUTBOUND_OUT_KEY:Constants.RedisKeys.COM_OUTBOUND_IN_KEY,
                 Integer.class);
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 6c64cf8..c8c5326 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
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -213,22 +214,35 @@
 
         if(StringUtils.isNotBlank(ywPatrolScheme.getUserIds())){
             String [] userIds = ywPatrolScheme.getUserIds().split(",");
-            for (String userId:userIds) {
-                //娣诲姞寰呭姙淇℃伅
-                Notices notices = new Notices();
-                notices.setCreateDate(new Date());
-                notices.setCreator(ywPatrolScheme.getCreator());
-                notices.setIsdeleted(Constants.ZERO);
-                notices.setParam1(DateUtil.formatDate(ywPatrolTask.getStartDate(),"yyyy-MM-dd"));
-                notices.setTitle("宸℃浠诲姟寰呭姙");
-                notices.setContent("["+ywPatrolTask.getCode()+"]灏嗗湪["+notices.getParam1()+"]杩涜宸℃锛岃鎸夋椂鎵ц");
-                notices.setObjId(ywPatrolTask.getId());
-                notices.setObjType(Constants.ONE);
-                notices.setType(notices.getObjType());
-                notices.setUserId(Integer.valueOf(userId));
-                notices.setStatus(Constants.ZERO);
-                noticesJoinMapper.insert(notices);
+            List<SystemUser> systemUserList = systemUserMapper.selectList(new QueryWrapper<SystemUser>().lambda().in(SystemUser::getId,userIds));
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(systemUserList)){
+                List<String> names = systemUserList.stream().filter(i->StringUtils.isNotBlank(i.getRealname())).map(i->i.getRealname()).collect(Collectors.toList());
+                for (SystemUser systemUser:systemUserList) {
+                    //娣诲姞寰呭姙淇℃伅
+                    Notices notices = new Notices();
+                    notices.setCreateDate(new Date());
+                    notices.setCreator(ywPatrolScheme.getCreator());
+                    notices.setIsdeleted(Constants.ZERO);
+                    notices.setParam1(DateUtil.formatDate(ywPatrolTask.getStartDate(),"yyyy-MM-dd"));
+                    notices.setTitle("宸℃浠诲姟寰呭姙");
+                    notices.setContent("["+ywPatrolTask.getCode()+"]灏嗗湪["+notices.getParam1()+"]杩涜宸℃锛岃鎸夋椂鎵ц");
+                    notices.setObjId(ywPatrolTask.getId());
+                    notices.setObjType(Constants.ONE);
+                    notices.setType(notices.getObjType());
+                    notices.setUserId(Integer.valueOf(systemUser.getId()));
+                    notices.setStatus(Constants.ZERO);
+                    //鏁寸悊json鏁版嵁
+                    Map<String,Object> jsonMap = new HashMap<>();
+                    jsonMap.put("key1", ywPatrolScheme.getTitle());
+                    jsonMap.put("key2", DateUtil.getFomartDate(ywPatrolTask.getStartDate(),"yyyy-MM-dd"));
+                    jsonMap.put("key3", DateUtil.getFomartDate(ywPatrolTask.getStartDate(),"HH:mm") + "-" + DateUtil.getFomartDate(ywPatrolTask.getEndDate(),"HH:mm"));
+                    jsonMap.put("key4", StringUtils.join(names , "銆�"));
+                    notices.setParam2(JSONObject.toJSONString(jsonMap));
+                    notices.setParam3(Constants.ZERO+"");
+                    noticesJoinMapper.insert(notices);
+                }
             }
+
         }
     }
 
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 f78013f..d556571 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
@@ -234,13 +234,7 @@
                 .set(YwPatrolTaskRecord::getDealInfo, ywPatrolTaskRecord.getDealInfo())
                 .eq(YwPatrolTaskRecord::getId,ywPatrolTaskRecord.getId()));
 
-        //鏍囪寰呭姙宸插鐞�
-        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
-                .set(Notices::getStatus,Constants.ONE)
-                .eq(Notices::getIsdeleted,Constants.ZERO)
-                .eq(Notices::getObjType,Constants.ONE)
-                .eq(Notices::getObjId,ywPatrolTask.getId())
-        );
+
         if(ywPatrolTaskRecordMapper.selectCount(new QueryWrapper<YwPatrolTaskRecord>().lambda()
                 .eq(YwPatrolTaskRecord::getTaskId,ywPatrolTask.getId())
                 .eq(YwPatrolTaskRecord::getStatus,Constants.ZERO)
@@ -255,18 +249,27 @@
                     .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())
-                );
-            }
+//            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)
+                    .set(Notices::getParam3,Constants.TWO)
+                    .eq(Notices::getIsdeleted,Constants.ZERO)
+                    .eq(Notices::getObjType,Constants.ONE)
+                    .eq(Notices::getObjId,ywPatrolTask.getId())
+            );
         }else{
             if(Constants.equalsInteger(ywPatrolTask.getStatus(),Constants.ZERO)){
                 ywPatrolTaskMapper.update(null,new UpdateWrapper<YwPatrolTask>().lambda()
@@ -276,14 +279,21 @@
                         .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())
-                );
-            }
+//            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)
+                    .eq(Notices::getIsdeleted,Constants.ZERO)
+                    .eq(Notices::getObjType,Constants.ONE)
+                    .eq(Notices::getObjId,ywPatrolTask.getId())
+            );
         }
         //闄勪欢鏁版嵁
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(ywPatrolTaskRecord.getMultifileList())){
@@ -324,7 +334,7 @@
                 .leftJoin(YwPatrolPoint.class,YwPatrolPoint::getId,YwPatrolTaskRecord::getPointId)
                 .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTaskRecord::getDealUserId)
                 .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
-                .eq(YwPatrolScheme::getIsdeleted, Constants.ZERO)
+                .eq(YwPatrolTaskRecord::getIsdeleted, Constants.ZERO)
                 .eq(YwPatrolPoint::getCode,bean.getPointCode())
                 .eq(YwPatrolTaskRecord::getTaskId,bean.getTaskId())
                 .orderByDesc(YwPatrolScheme::getCreateDate)
@@ -339,6 +349,48 @@
 
     }
 
+    /**
+     * 鏍规嵁鐧诲綍浜轰笌宸℃鐐规煡璇换鍔′俊鎭�
+     * @param bean
+     * @return
+     */
+    @Override
+    public YwPatrolTaskRecord getRecordByUserPoint(YwPatrolTaskRecord bean,LoginUserInfo loginUserInfo) {
+        if(Objects.isNull(bean)
+                || StringUtils.isBlank(bean.getPointCode())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(ywPatrolPointMapper.selectCount(new QueryWrapper<YwPatrolPoint>().lambda().eq(YwPatrolPoint::getCode,bean.getPointCode()))==Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈尮閰嶅埌宸℃鐐癸紝璇烽噸鏂版壂鐮�!");
+        }
+        YwPatrolTaskRecord ywPatrolTaskRecord = ywPatrolTaskRecordMapper.selectJoinOne(YwPatrolTaskRecord.class,new MPJLambdaWrapper<YwPatrolTaskRecord>()
+                .selectAll(YwPatrolTaskRecord.class)
+                .selectAs(YwPatrolPoint::getName,YwPatrolTaskRecord::getPointName)
+                .selectAs(YwPatrolPoint::getContent,YwPatrolTaskRecord::getContent)
+                .selectAs(YwPatrolPoint::getDeviceId,YwPatrolTaskRecord::getDeviceId)
+                .selectAs(YwPatrolScheme::getTitle,YwPatrolTaskRecord::getSchemeTitle)
+                .selectAs(SystemUser::getRealname,YwPatrolTaskRecord::getRealname)
+                .selectAs(Company::getName,YwPatrolTaskRecord::getCompanyName)
+                .leftJoin(YwPatrolPoint.class,YwPatrolPoint::getId,YwPatrolTaskRecord::getPointId)
+                .leftJoin(YwPatrolTask.class,YwPatrolTask::getId,YwPatrolTaskRecord::getTaskId)
+                .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId)
+                .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTaskRecord::getDealUserId)
+                .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
+                .eq(YwPatrolTaskRecord::getIsdeleted, Constants.ZERO)
+                .eq(YwPatrolTaskRecord::getStatus, Constants.ZERO)
+                .eq(YwPatrolPoint::getCode,bean.getPointCode())
+                .apply("  DATE(t2.START_DATE) = DATE(NOW()) and find_in_set('"+loginUserInfo.getId()+"', t3.USER_IDS )  ")
+                .orderByDesc(YwPatrolScheme::getCreateDate)
+                .last(" limit 1 ")
+        );
+        if(Objects.isNull(ywPatrolTaskRecord)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浠婃棩鏆傛棤宸℃浠诲姟!");
+        }
+        getFileListByModel(ywPatrolTaskRecord);
+        return ywPatrolTaskRecord;
+
+    }
+
 
 
 
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 67906be..2c33a6c 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
@@ -53,7 +53,6 @@
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public Integer create(YwProblem ywProblem) {
         if(Objects.isNull(ywProblem)
-            || Objects.isNull(ywProblem.getSubmitDate())
             || StringUtils.isBlank(ywProblem.getContent())
             || StringUtils.isBlank(ywProblem.getPhone())
             || StringUtils.isBlank(ywProblem.getName())
@@ -64,6 +63,7 @@
         ywProblem.setIsdeleted(Constants.ZERO);
         ywProblem.setStatus(Constants.ZERO);
         ywProblem.setDealStatus(Constants.ZERO);
+        ywProblem.setSubmitDate(new Date());
         ywProblemMapper.insert(ywProblem);
 
         List<Multifile> fileList = new ArrayList<>();
@@ -130,14 +130,16 @@
 
 
     @Override
-    public YwProblem getDetail(Integer id) {
+    public YwProblem getDetail(Integer id,Integer workorderId) {
         MPJLambdaWrapper<YwProblem> queryWrapper = new MPJLambdaWrapper<YwProblem>();
         queryWrapper.selectAll(YwProblem.class)
                 .selectAs(SystemUser::getRealname,YwProblem::getDealUserName)
                 .selectAs(Company::getName,YwProblem::getDealUserCompanyName)
                 .leftJoin(SystemUser.class,SystemUser::getId,YwProblem::getDealUserId)
                 .leftJoin(Company.class,Company::getId,SystemUser::getCompanyId)
-                .eq(YwProblem::getId,id)
+                .eq(Objects.nonNull(id),YwProblem::getId,id)
+                .eq(Objects.nonNull(workorderId),YwProblem::getWorkorderId,workorderId)
+                .last(" limit 1 ")
         ;
         YwProblem ywProblem = ywProblemMapper.selectJoinOne(YwProblem.class,queryWrapper);
         if(Objects.isNull(ywProblem)){
@@ -149,7 +151,7 @@
                 .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_PROBLEM).getCode();
+                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_WORKORDER_FILE).getCode();
             for(Multifile f : multifiles){
                 if(StringUtils.isBlank(f.getFileurl())){
                     continue;
@@ -160,6 +162,8 @@
         }
         return ywProblem;
     }
+
+
 
 
 
@@ -190,14 +194,16 @@
         }else{
             if(Objects.isNull(ywProblem.getWorkOrderAreaType())
                     ||Objects.isNull(ywProblem.getWorkOrderCateId())
-                    ||StringUtils.isBlank(ywProblem.getWorkOrderContent())
+                    ||StringUtils.isBlank(ywProblem.getDealInfo())
             ){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST);
             }
             YwWorkorder ywWorkorder = new YwWorkorder();
+            ywWorkorder.setProjectId(ywProblem.getWorkOrderProjectId());
+            ywWorkorder.setBuildingId(ywProblem.getWorkOrderBuildId());
             ywWorkorder.setAreaType(ywProblem.getWorkOrderAreaType());
             ywWorkorder.setCateId(ywProblem.getWorkOrderCateId());
-            ywWorkorder.setContent(ywProblem.getWorkOrderContent());
+            ywWorkorder.setContent(ywProblem.getDealInfo());
             ywWorkorder.setRoomId(ywProblem.getWorkOrderRoomId());
             ywWorkorder.setFloorId(ywProblem.getWorkOrderFloorId());
             ywWorkorder.setGetDate(ywProblem.getWorkOrderGetDate());
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 81b1493..36cda9c 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
@@ -23,6 +23,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.BeanUtils;
@@ -293,7 +294,15 @@
             projectDataVOList.add(projectDataVO);
         }
 
-        List<YwRoom>  ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda()
+        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)
                 .eq(YwRoom::getIsdeleted,Constants.ZERO)
                 .eq(YwRoom::getStatus,Constants.ZERO)
                 .eq(YwRoom::getIsInvestment,Constants.ONE)
@@ -316,6 +325,7 @@
             projectDataVO.setArea(data.getRentArea().setScale(2, BigDecimal.ROUND_HALF_UP));
             projectDataVO.setPId(data.getFloor());
             projectDataVO.setLv(Constants.THREE);
+            projectDataVO.setLeaseStatus(data.getLeaseStatus());
             projectDataVOList.add(projectDataVO);
         }
 
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 af4bcbc..b5c03ed 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
@@ -25,10 +25,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -288,7 +285,7 @@
                 YwRoomStatusDataVO roomStatusDataVO = new YwRoomStatusDataVO();
                 roomStatusDataVO.setFloorId(ywRoom.getFloor());
                 roomStatusDataVO.setRoomId(ywRoom.getId());
-                roomStatusDataVO.setRoomCode(ywRoom.getCode());
+                roomStatusDataVO.setRoomCode(ywRoom.getRoomNum());
                 roomStatusDataVO.setRoomRentArea(ywRoom.getRentArea());
 
                 List<YwContract> roomContractList =   ywContractMapper.selectJoinList(YwContract.class,new MPJLambdaWrapper<YwContract>()
@@ -297,10 +294,10 @@
                         .leftJoin(YwContractRoom.class,YwContractRoom::getContractId,YwContract::getId)
                         .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
                         .eq(YwContract::getIsdeleted,Constants.ZERO)
-                        .ge(YwContract::getStartDate, DateUtil.getCurrDateTime())
+                        .le(YwContract::getStartDate, DateUtil.getCurrDateTime())
+                        .ge(YwContract::getEndDate, DateUtil.getCurrDateTime())
                         .eq(YwContractRoom::getType,Constants.ZERO)
                         .eq(YwContractRoom::getRoomId,ywRoom.getId())
-                        .ne(YwContract::getBillStatus,Constants.THREE)
                         .orderByDesc(YwContract::getStartDate)
                 );
                 if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(roomContractList)){
@@ -320,9 +317,24 @@
                                 roomStatusDataVO.setOverData(ywContract.getBtDate());
                             }
                         }else{
-                            if(Objects.nonNull(ywContract.getEndDate()) && DateUtil.getBetweenDays(DateUtil.getFomartDate(ywContract.getEndDate(),"yyyy-MM-dd"),DateUtil.getFomartDate(new Date(),"yyyy-MM-dd"))<=90){
+                            System.out.println(DateUtil.daysBetweenDates(ywContract.getEndDate(),new Date()));
+                            if(Objects.nonNull(ywContract.getEndDate())
+                                    &&
+                                DateUtil.daysBetweenDates(ywContract.getEndDate(),new Date())<=90){
                                 roomStatusDataVO.setRoomStatus(Constants.TWO);
                                 roomStatusDataVO.setOverData(ywContract.getEndDate());
+                            }else{
+                                roomStatusDataVO.setOverData(ywContract.getEndDate());
+                            }
+                        }
+                    }else{
+                        roomStatusDataVO.setRoomStatus(Constants.ZERO);
+                        //宸查��绉� 璁$畻閫�绉熸椂闂�
+                        if(Objects.nonNull(ywContract.getBtDate())){
+                            //鏌ヨ閫�绉熸棩鏈熷拰褰撳墠鏃ユ湡鐩稿樊澶╂暟
+                            Integer btDays = DateUtil.daysBetweenDates(new Date(),ywContract.getBtDate());
+                            if(btDays>=Constants.ZERO){
+                                roomStatusDataVO.setFreeDayAmount(btDays);
                             }
                         }
                     }
@@ -332,12 +344,15 @@
         }
         for (YwFloor ywFloor:ywFloorList) {
             YwFloorStatusDataVO ywFloorStatusDataVO = new YwFloorStatusDataVO();
-            ywFloorStatusDataVO.setFloor(ywFloor.getFloor());
+            ywFloorStatusDataVO.setFloorName(ywFloor.getName());
             ywFloorStatusDataVO.setFloorId(ywFloor.getId());
-            ywFloorStatusDataVO.setFloorArea(ywFloor.getArea());
+            ywFloorStatusDataVO.setFloorArea(BigDecimal.ZERO);
             if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(roomStatusDataList)){
                 List<YwRoomStatusDataVO> floorRoomList = roomStatusDataList.stream().filter(i->Objects.nonNull(i.getFloorId())&&Constants.equalsInteger(i.getFloorId(),ywFloor.getId())).collect(Collectors.toList());
                 ywFloorStatusDataVO.setYwRoomStatusDataVOList(floorRoomList);
+                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(floorRoomList)){
+                    ywFloorStatusDataVO.setFloorArea(floorRoomList.stream().filter(i->Objects.nonNull(i.getRoomRentArea())).map(i->i.getRoomRentArea()).reduce(BigDecimal.ZERO,BigDecimal::add));
+                }
             }
             ywFloorStatusDataVOList.add(ywFloorStatusDataVO);
         }
@@ -358,6 +373,7 @@
         ywRoomContractDataVO.setLeasePrice(BigDecimal.ZERO);
         ywRoomContractDataVO.setLeaseArea(BigDecimal.ZERO);
         ywRoomContractDataVO.setLeaseRoomAmount(Constants.ZERO);
+        ywRoomContractDataVO.setLeaseDayPrice(BigDecimal.ZERO);
 
         List<YwRoom> ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda()
                 .eq(YwRoom::getIsdeleted,Constants.ZERO)
@@ -376,15 +392,13 @@
         List<YwContract> roomContractList =   ywContractMapper.selectJoinList(YwContract.class,new MPJLambdaWrapper<YwContract>()
                 .selectAll(YwContract.class)
                 .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  ) " , YwContract::getTotalFee)
+                .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)
-                .ne(YwContract::getBillStatus,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()),
                         " 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.PROJECT_ID = "+model.getProjectId()+" ) ")
-                .apply(Objects.nonNull(model.getProjectId())," ")
                 .orderByDesc(YwContract::getStartDate)
         );
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(roomContractList)){
@@ -392,17 +406,21 @@
         }
         //澶勭悊绉熻祦鍗曚环 鏍规嵁  鍚堝悓绉熻祦鎬婚 /  锛堢璧佹椂闀� * 绉熻祦闈㈢Н锛�
         for (YwContract ywContract:roomContractList) {
-            long contractDayAmount = DateUtil.getBetweenDays(DateUtil.getFomartDate(ywContract.getEndDate(),"yyyy-MM-dd"),DateUtil.getFomartDate(ywContract.getStartDate(),"yyyy-MM-dd"));
+            long contractDayAmount = DateUtil.daysBetweenDates(ywContract.getEndDate()
+                    ,ywContract.getStartDate());
             if(Objects.nonNull(contractDayAmount) && Objects.nonNull(ywContract.getTotalArea()) && Objects.nonNull(ywContract.getTotalFee())){
-                ywRoomContractDataVO.setLeasePrice(
-                        ywRoomContractDataVO.getLeasePrice().add(
+                ywRoomContractDataVO.setLeaseDayPrice(
+                        ywRoomContractDataVO.getLeaseDayPrice().add(
                             ywContract.getTotalFee().divide((ywContract.getTotalArea().multiply(new BigDecimal(Long.toString(contractDayAmount)))),2,BigDecimal.ROUND_HALF_UP)
                         )
                 );
             }
         }
-
         ywRoomContractDataVO.setLeaseContractAmount(roomContractList.size());
+        if(Objects.nonNull(ywRoomContractDataVO.getLeaseDayPrice())&&ywRoomContractDataVO.getLeaseDayPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+            ywRoomContractDataVO.setLeasePrice(
+                    ywRoomContractDataVO.getLeaseDayPrice().divide(new BigDecimal(Integer.toString(ywRoomContractDataVO.getLeaseContractAmount())),2,BigDecimal.ROUND_HALF_UP));
+        }
         List<Integer> contractId = roomContractList.stream().map(i->i.getId()).collect(Collectors.toList());
         List<YwRoom> ywLeaseRoomList = ywRoomMapper.selectJoinList(YwRoom.class,new MPJLambdaWrapper<YwRoom>()
                 .selectAll(YwRoom.class)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java
index 628057e..f773bba 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java
@@ -105,8 +105,7 @@
                 .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwStock::getWarehouseId)
                 .leftJoin(YwMaterial.class,YwMaterial::getId,YwStock::getMaterialId)
                 .eq(Objects.nonNull(model.getWarehouseId()),YwOutinbound::getWarehouseId,model.getWarehouseId())
-                .and(StringUtils.isNotBlank(model.getMaterialCode()),i->i.like(YwMaterial::getName,model.getMaterialCode()).or().like(YwMaterial::getName,model.getMaterialCode()))
-                .like(StringUtils.isNotBlank(model.getMaterialCode()),YwMaterial::getCode,model.getMaterialCode())
+                .and(StringUtils.isNotBlank(model.getMaterialCode()),i->i.like(YwMaterial::getCode,model.getMaterialCode()).or().like(YwMaterial::getName,model.getMaterialCode()))
                 .like(StringUtils.isNotBlank(model.getMaterialAttr()),YwMaterial::getAttr,model.getMaterialAttr())
                 .orderByAsc(YwMaterial::getCode)
         ;
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 a03a028..b04ef29 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
@@ -145,7 +145,8 @@
                 .eq(Objects.nonNull(model.getStocktakingId()),YwStocktakingRecord::getStocktakingId,model.getStocktakingId())
                 .and(StringUtils.isNotBlank(model.getMaterialCode()),i->i.like(YwMaterial::getCode,model.getMaterialCode()).or().like(YwMaterial::getName,model.getMaterialCode()))
                 .eq(Objects.nonNull(model.getType()),YwStocktakingRecord::getType,model.getType())
-                .eq(Objects.nonNull(model.getStatus()),YwStocktakingRecord::getStatus,model.getStatus());
+                .eq(Objects.nonNull(model.getStatus()),YwStocktakingRecord::getStatus,model.getStatus())
+                .eq(Objects.nonNull(model.getMaterialQrcode()),YwMaterial::getQrcode,model.getMaterialQrcode());
         IPage iPage = ywStocktakingRecordMapper.selectJoinPage(page, YwStocktakingRecord.class,queryWrapper);
         return PageData.from(iPage);
     }
@@ -168,7 +169,7 @@
         }
         LoginUserInfo loginUserInfo = ywStocktakingRecord.getLoginUserInfo();
         YwStocktakingRecord model = ywStocktakingRecordMapper.selectById(ywStocktakingRecord.getId());
-        if(Objects.nonNull(model)){
+        if(Objects.isNull(model)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
         YwStocktaking ywStocktaking = ywStocktakingMapper.selectById(ywStocktakingRecord.getStocktakingId());
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 b905879..76ba25d 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
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
@@ -14,8 +15,10 @@
 import com.doumee.dao.business.YwStocktakingRecordMapper;
 import com.doumee.dao.business.YwWarehouseMapper;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.SystemUserMapper;
 import com.doumee.dao.system.join.NoticesJoinMapper;
 import com.doumee.dao.system.model.Notices;
+import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.YwStocktakingService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -30,10 +33,7 @@
 import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -61,6 +61,9 @@
     private NoticesJoinMapper noticesJoinMapper;
 
     @Autowired
+    private SystemUserMapper systemUserMapper;
+
+    @Autowired
     private RedisTemplate<String, Object> redisTemplate;
     
     @Override
@@ -79,9 +82,16 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌浠撳簱鏁版嵁");
         }
         //鍒ゆ柇褰撳墠浠撳簱褰撳墠鏃ユ湡鏄惁瀛樺湪鐩樼偣鍗�
-        if(ywStocktakingMapper.selectCount(new QueryWrapper<YwStocktaking>().lambda().eq(YwStocktaking::getIsdeleted,Constants.ZERO).eq(YwStocktaking::getStatus,Constants.ZERO)
-                .eq(YwStocktaking::getWarehouseId,ywStocktaking.getWarehouseId()).apply(" DATE(PLAN_DATE) = '" + DateUtil.formatDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd") +"'" ))>0){
+        if(ywStocktakingMapper.selectCount(new QueryWrapper<YwStocktaking>().lambda()
+                .eq(YwStocktaking::getIsdeleted,Constants.ZERO)
+                .in(YwStocktaking::getStatus,Constants.ZERO,Constants.ONE)
+                .eq(YwStocktaking::getWarehouseId,ywStocktaking.getWarehouseId())
+                .apply(" DATE(PLAN_DATE) = '" + DateUtil.formatDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd") +"'" ))>0){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"["+DateUtil.formatDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd")+"]["+ywWarehouse.getName()+"]宸叉湁鐩樼偣鍗曪紝涓嶅彲閲嶅鍙戣捣鐩樼偣");
+        }
+        SystemUser systemUser = systemUserMapper.selectById(ywStocktaking.getUserId());
+        if(Objects.isNull(systemUser)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐩樼偣浜轰俊鎭�");
         }
         LoginUserInfo loginUserInfo = ywStocktaking.getLoginUserInfo();
         ywStocktaking.setCreator(loginUserInfo.getId());
@@ -103,6 +113,14 @@
         notices.setType(notices.getObjType());
         notices.setUserId(ywStocktaking.getUserId());
         notices.setStatus(Constants.ZERO);
+        //鏁寸悊json鏁版嵁
+        Map<String,Object> jsonMap = new HashMap<>();
+        jsonMap.put("key1","鐩樼偣鍗�"+ywStocktaking.getCode());
+        jsonMap.put("key2", DateUtil.getFomartDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd"));
+        jsonMap.put("key3", ywWarehouse.getName());
+        jsonMap.put("key4", systemUser.getRealname());
+        notices.setParam2(JSONObject.toJSONString(jsonMap));
+        notices.setParam3(Constants.ZERO+"");
         noticesJoinMapper.insert(notices);
         return ywStocktaking.getId();
     }
@@ -122,7 +140,8 @@
                     .eq(YwStocktaking::getId,id)
             );
             //鏍囪寰呭姙鍒犻櫎
-            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda().set(Notices::getIsdeleted,Constants.ONE)
+            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
+                    .set(Notices::getIsdeleted,Constants.ONE)
                     .eq(Notices::getIsdeleted,Constants.ZERO)
                     .eq(Notices::getObjType,Constants.ZERO)
                     .eq(Notices::getObjId,id)
@@ -147,7 +166,8 @@
                     .set(YwStocktaking::getEditor,loginUserInfo.getId())
                     .set(YwStocktaking::getStatus,Constants.THREE).eq(YwStocktaking::getId,id));
             //鏍囪寰呭姙鍒犻櫎
-            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda().set(Notices::getIsdeleted,Constants.ONE)
+            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
+                    .set(Notices::getIsdeleted,Constants.ONE)
                     .eq(Notices::getIsdeleted,Constants.ZERO)
                     .eq(Notices::getObjType,Constants.ZERO)
                     .eq(Notices::getObjId,id)
@@ -164,7 +184,7 @@
         if(Objects.isNull(model)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐩樼偣鍗曟暟鎹�");
         }
-        if(model.getPlanDate().getTime()<System.currentTimeMillis()){
+        if(model.getPlanDate().getTime()>System.currentTimeMillis()){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈埌寮�濮嬫椂闂达紝鏃犳硶杩涜璇ユ搷浣�");
         }
         if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)&&Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
@@ -178,7 +198,8 @@
 
             //鏍囪寰呭姙宸插鐞�
             noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
-                    .set(Notices::getStatus,Constants.ONE)
+                    .set(Notices::getParam3,Constants.ONE)
+                    .eq(Notices::getStatus,Constants.ZERO)
                     .eq(Notices::getIsdeleted,Constants.ZERO)
                     .eq(Notices::getObjType,Constants.ZERO)
                     .eq(Notices::getObjId,id)
@@ -195,6 +216,7 @@
                     ywStocktakingRecord.setIsdeleted(Constants.ZERO);
                     ywStocktakingRecord.setStatus(Constants.ZERO);
                     ywStocktakingRecord.setMaterialId(ywStock.getMaterialId());
+                    ywStocktakingRecord.setUserId(model.getUserId()+"");
                     ywStocktakingRecord.setStock(ywStock.getStock());
                     ywStocktakingRecord.setStocktakingId(model.getId());
                     ywStocktakingRecordList.add(ywStocktakingRecord);
@@ -209,7 +231,7 @@
 
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
-    public void finishById(Integer id, LoginUserInfo loginUserInfo) {
+    public void finishById(Integer id, YwOutinboundServiceImpl ywOutinboundService, LoginUserInfo loginUserInfo) {
         YwStocktaking model = ywStocktakingMapper.selectById(id);
         if(Objects.isNull(model)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐩樼偣鍗曟暟鎹�");
@@ -222,6 +244,10 @@
         }
         List<YwStocktakingRecord> recordList = ywStocktakingRecordMapper.selectList(new QueryWrapper<YwStocktakingRecord>().lambda()
                 .eq(YwStocktakingRecord::getStocktakingId,id).eq(YwStocktakingRecord::getIsdeleted,Constants.ZERO));
+        //鐩樼泩鏁版嵁鍒楄〃
+        List<YwOutinboundRecord> inBoundRecordList = new ArrayList<>();
+        //鐩樹簭鏁版嵁鍒楄〃
+        List<YwOutinboundRecord> outBoundRecordList = new ArrayList<>();
         for (YwStocktakingRecord ywStocktakingRecord:recordList) {
             //鎻愪氦鏃� 鏈繘琛岀洏鐐圭殑鏄庣粏鏁版嵁
             if(Constants.equalsInteger(ywStocktakingRecord.getStatus(),Constants.ZERO)){
@@ -230,18 +256,30 @@
                         .set(YwStocktakingRecord::getUserId,loginUserInfo.getId())
                         .eq(YwStocktakingRecord::getId,ywStocktakingRecord.getId())
                 );
+                continue;
             }
             //鏌ヨ搴撳瓨淇℃伅 杩涜搴撳瓨鏇存柊
             YwStock ywStock = ywStockMapper.selectOne(new QueryWrapper<YwStock>().lambda().eq(YwStock::getMaterialId,ywStocktakingRecord.getMaterialId())
                     .eq(YwStock::getWarehouseId,model.getWarehouseId()).eq(YwStock::getStock,ywStocktakingRecord.getStock()));
-            if(Objects.isNull(ywStock)){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"搴撳瓨淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�");
+            if(ywStock.getStock().compareTo(ywStocktakingRecord.getActStock())<Constants.ZERO ){
+                YwOutinboundRecord ywOutinboundRecord = new YwOutinboundRecord();
+                ywOutinboundRecord.setMaterialId(ywStock.getMaterialId());
+                ywOutinboundRecord.setStock(ywStocktakingRecord.getActStock().subtract(ywStock.getStock()));
+                inBoundRecordList.add(ywOutinboundRecord);
+            }else if(ywStock.getStock().compareTo(ywStocktakingRecord.getActStock())>Constants.ZERO ){
+                YwOutinboundRecord ywOutinboundRecord = new YwOutinboundRecord();
+                ywOutinboundRecord.setMaterialId(ywStock.getMaterialId());
+                ywOutinboundRecord.setStock(ywStock.getStock().subtract(ywStocktakingRecord.getActStock()));
+                outBoundRecordList.add(ywOutinboundRecord);
             }
-            if(ywStocktakingRecord.getActStock().compareTo(BigDecimal.ZERO)==Constants.ZERO){
-                ywStockMapper.deleteById(ywStock.getId());
-            }else {
-                ywStockMapper.update(new UpdateWrapper<YwStock>().lambda().set(YwStock::getStock,ywStocktakingRecord.getActStock()).eq(YwStock::getId,ywStock.getId()));
-            }
+//            if(Objects.isNull(ywStock)){
+//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"搴撳瓨淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�");
+//            }
+//            if(ywStocktakingRecord.getActStock().compareTo(BigDecimal.ZERO)==Constants.ZERO){
+//                ywStockMapper.deleteById(ywStock.getId());
+//            }else {
+//                ywStockMapper.update(new UpdateWrapper<YwStock>().lambda().set(YwStock::getStock,ywStocktakingRecord.getActStock()).eq(YwStock::getId,ywStock.getId()));
+//            }
         }
         ywStocktakingMapper.update(new UpdateWrapper<YwStocktaking>().lambda()
                 .set(YwStocktaking::getEditDate,DateUtil.getCurrDateTime())
@@ -250,6 +288,40 @@
                 .set(YwStocktaking::getEditor,loginUserInfo.getId())
                 .set(YwStocktaking::getStatus,Constants.TWO)
                 .eq(YwStocktaking::getId,model.getId()));
+        //鐢熶骇鐩樼泩鐨勫叆搴撳崟
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(inBoundRecordList)){
+            YwOutinbound ywOutinbound = new YwOutinbound();
+            ywOutinbound.setDoneDate(new Date());
+            ywOutinbound.setWarehouseId(model.getWarehouseId());
+            ywOutinbound.setType(4);
+            ywOutinbound.setOrigin(1);
+            ywOutinbound.setContent("鐩樼偣鍗曘��"+model.getCode() +"銆戝鐞嗙敓鎴愮洏鐩堟暟鎹�");
+            ywOutinbound.setStatus(Constants.ZERO);
+            ywOutinbound.setRecordList(inBoundRecordList);
+            ywOutinbound.setLoginUserInfo(loginUserInfo);
+            ywOutinboundService.create(ywOutinbound);
+        }
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(outBoundRecordList)){
+            YwOutinbound ywOutinbound = new YwOutinbound();
+            ywOutinbound.setDoneDate(new Date());
+            ywOutinbound.setWarehouseId(model.getWarehouseId());
+            ywOutinbound.setType(10);
+            ywOutinbound.setOrigin(1);
+            ywOutinbound.setContent("鐩樼偣鍗曘��"+model.getCode() +"銆戝鐞嗙敓鎴愮洏浜忔暟鎹�");
+            ywOutinbound.setStatus(Constants.ZERO);
+            ywOutinbound.setRecordList(outBoundRecordList);
+            ywOutinbound.setLoginUserInfo(loginUserInfo);
+            ywOutinboundService.create(ywOutinbound);
+        }
+
+        //鏍囪寰呭姙宸插畬鎴�
+        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
+                .set(Notices::getStatus,Constants.ONE)
+                .set(Notices::getParam3,Constants.TWO)
+                .eq(Notices::getIsdeleted,Constants.ZERO)
+                .eq(Notices::getObjType,Constants.ZERO)
+                .eq(Notices::getObjId,id)
+        );
 
     }
 
@@ -282,6 +354,12 @@
         if(Objects.isNull(model)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐩樼偣鍗曟暟鎹�");
         }
+
+        SystemUser systemUser = systemUserMapper.selectById(ywStocktaking.getUserId());
+        if(Objects.isNull(systemUser)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐩樼偣浜轰俊鎭�");
+        }
+
         YwWarehouse ywWarehouse = ywWarehouseMapper.selectById(ywStocktaking.getWarehouseId());
         if(Objects.isNull(ywWarehouse)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌浠撳簱鏁版嵁");
@@ -301,7 +379,7 @@
         //鏍囪寰呭姙宸插鐞�
         noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                 .set(Notices::getStatus,Constants.ONE)
-                .eq(Notices::getIsdeleted,Constants.ZERO)
+                .eq(Notices::getIsdeleted,Constants.ONE)
                 .eq(Notices::getObjType,Constants.ZERO)
                 .eq(Notices::getObjId,ywStocktaking.getId())
         );
@@ -319,6 +397,14 @@
         notices.setType(notices.getObjType());
         notices.setUserId(ywStocktaking.getUserId());
         notices.setStatus(Constants.ZERO);
+        //鏁寸悊json鏁版嵁
+        Map<String,Object> jsonMap = new HashMap<>();
+        jsonMap.put("key1","鐩樼偣鍗�"+ywStocktaking.getCode());
+        jsonMap.put("key2", DateUtil.getFomartDate(ywStocktaking.getPlanDate(),"yyyy-MM-dd"));
+        jsonMap.put("key3", ywWarehouse.getName());
+        jsonMap.put("key4", systemUser.getRealname());
+        notices.setParam2(JSONObject.toJSONString(jsonMap));
+        notices.setParam3(Constants.ZERO+"");
         noticesJoinMapper.insert(notices);
 
 
@@ -343,8 +429,8 @@
     public YwStocktaking getDetail(Integer id) {
         MPJLambdaWrapper<YwStocktaking> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper.selectAll(YwStocktaking.class)
-                .select(" s.name ", YwStocktaking::getUserName)
-                .select(" s1.name ",YwStocktaking::getCreateName)
+                .select(" s.realname ", YwStocktaking::getUserName)
+                .select(" s1.realname ",YwStocktaking::getCreateName)
                 .selectAs(YwWarehouse::getName,YwStocktaking::getWarehouseName)
                 .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwStocktaking::getWarehouseId)
                 .leftJoin("system_user s on t.user_id = s.id")
@@ -383,8 +469,8 @@
         Utils.MP.blankToNull(pageWrap.getModel());
         YwStocktaking model = pageWrap.getModel();
         queryWrapper.selectAll(YwStocktaking.class)
-                .select(" s.name ", YwStocktaking::getUserName)
-                .select(" s1.name ",YwStocktaking::getCreateName)
+                .select(" s.realname ", YwStocktaking::getUserName)
+                .select(" s1.realname ",YwStocktaking::getCreateName)
                 .selectAs(YwWarehouse::getName,YwStocktaking::getWarehouseName)
                 .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwStocktaking::getWarehouseId)
                 .leftJoin("system_user s on t.user_id = s.id")
@@ -392,10 +478,10 @@
                 .eq(YwStocktaking::getIsdeleted,Constants.ZERO)
                 .like(StringUtils.isNotBlank(model.getName()),YwStocktaking::getName,model.getName())
                 .eq(Objects.nonNull(model.getStatus()),YwStocktaking::getStatus,model.getStatus())
+                .eq(Objects.nonNull(model.getUserId()),YwStocktaking::getUserId,model.getUserId())
                 .orderByAsc(YwStocktaking::getStatus)
                 .orderByDesc(YwStocktaking::getPlanDate)
         ;
-
         IPage iPage = ywStocktakingMapper.selectJoinPage(page, YwStocktaking.class,queryWrapper);
         return PageData.from(iPage);
     }
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 e3887f4..6568f12 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
@@ -1,10 +1,13 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.YwTempConfigMapper;
+import com.doumee.dao.business.dto.YwCallTempDataDTO;
 import com.doumee.dao.business.model.YwTempConfig;
 import com.doumee.dao.business.vo.YwCallTempDataVO;
 import com.doumee.service.business.YwTempConfigService;
@@ -12,11 +15,14 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -182,6 +188,66 @@
 
 
 
+    @Override
+    @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+    public void updTempConfig(YwCallTempDataDTO ywCallTempDataDTO){
+        if(Objects.isNull(ywCallTempDataDTO)
+            || Objects.isNull(ywCallTempDataDTO.getSmsTemp())
+            || Objects.isNull(ywCallTempDataDTO.getEmailTemp())
+            || Objects.isNull(ywCallTempDataDTO.getLeaseTemp())
+            || Objects.isNull(ywCallTempDataDTO.getOtherTemp())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        YwTempConfig smsTemp = ywCallTempDataDTO.getSmsTemp();
+        if(Objects.isNull(smsTemp.getId())
+            || Objects.isNull(smsTemp.getTitle())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鐭伅妯℃澘鍙傛暟閿欒");
+        }
+        ywTempConfigMapper.update(new UpdateWrapper<YwTempConfig>().lambda()
+                .set(YwTempConfig::getTitle,smsTemp.getTitle())
+                .eq(YwTempConfig::getId,smsTemp.getId())
+        );
+
+
+        YwTempConfig emailTemp = ywCallTempDataDTO.getEmailTemp();
+        if(Objects.isNull(emailTemp.getId())
+                || Objects.isNull(emailTemp.getTitle())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"閭欢妯℃澘鍙傛暟閿欒");
+        }
+        ywTempConfigMapper.update(new UpdateWrapper<YwTempConfig>().lambda()
+                .set(YwTempConfig::getTitle,emailTemp.getTitle())
+                .eq(YwTempConfig::getId,emailTemp.getId())
+        );
+
+        YwTempConfig leasesTemp = ywCallTempDataDTO.getLeaseTemp();
+        if(Objects.isNull(leasesTemp.getId())
+                || Objects.isNull(leasesTemp.getTitle())
+                || StringUtils.isBlank(leasesTemp.getUrl())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"绉熻祦閫氱煡鍗曟ā鏉垮弬鏁伴敊璇�");
+        }
+        ywTempConfigMapper.update(new UpdateWrapper<YwTempConfig>().lambda()
+                .set(YwTempConfig::getTitle,leasesTemp.getTitle())
+                .set(YwTempConfig::getUrl,leasesTemp.getUrl())
+                .eq(YwTempConfig::getId,leasesTemp.getId())
+        );
+
+
+        YwTempConfig otherTemp = ywCallTempDataDTO.getOtherTemp();
+        if(Objects.isNull(otherTemp.getId())
+                || Objects.isNull(otherTemp.getTitle())
+                || StringUtils.isBlank(otherTemp.getUrl())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"鍏朵粬閫氱煡鍗曟ā鏉垮弬鏁伴敊璇�");
+        }
+        ywTempConfigMapper.update(new UpdateWrapper<YwTempConfig>().lambda()
+                .set(YwTempConfig::getTitle,otherTemp.getTitle())
+                .set(YwTempConfig::getUrl,otherTemp.getUrl())
+                .eq(YwTempConfig::getId,otherTemp.getId())
+        );
+
+    }
 
 
 
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 c0281af..cf15928 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
@@ -71,11 +71,11 @@
         if(Objects.isNull(ywWarehouse)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        //鍒ゆ柇鏁版嵁涓嬫槸鍚﹀瓨鍦ㄨ祫浜ф暟鎹�
+        //鍒ゆ柇鏁版嵁涓嬫槸鍚﹀瓨鍦ㄧ墿鏂欐暟鎹�
         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()
                 .set(YwWarehouse::getEditDate, DateUtil.getCurrDateTime())
@@ -128,6 +128,12 @@
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        //鍒ゆ柇鏁版嵁涓嬫槸鍚﹀瓨鍦ㄧ墿鏂欐暟鎹�
+        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(),"褰撳墠浠撳簱鍐呮湁搴撳瓨鐨勭墿鏂欙紝涓嶅彲鍒犻櫎");
+        };
         ywWarehouseMapper.update(new UpdateWrapper<YwWarehouse>().lambda().eq(YwWarehouse::getId,ywWarehouse.getId()).set(YwWarehouse::getStatus,ywWarehouse.getStatus()));
     }
 
@@ -177,13 +183,18 @@
                 .like(StringUtils.isNotBlank(model.getName()),YwWarehouse::getName,model.getName())
                 .eq(YwWarehouse::getIsdeleted,Constants.ZERO)
         ;
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        if(CollectionUtils.isEmpty(pageWrap.getSorts())){
+            queryWrapper.orderByAsc(YwWarehouse::getSortnum);
+        }else{
+            for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+                if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                    queryWrapper.orderByDesc(sortData.getProperty());
+                } else {
+                    queryWrapper.orderByAsc(sortData.getProperty());
+                }
             }
         }
+
         IPage iPage = ywWarehouseMapper.selectJoinPage(page,YwWarehouse.class,queryWrapper);
         return PageData.from(iPage);
     }
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 4346ef6..58d10e9 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
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
@@ -16,7 +17,9 @@
 import com.doumee.dao.business.vo.YwWorkorderDataVO;
 import com.doumee.dao.system.MultifileMapper;
 import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.join.NoticesJoinMapper;
 import com.doumee.dao.system.model.Multifile;
+import com.doumee.dao.system.model.Notices;
 import com.doumee.dao.system.model.SystemUser;
 import com.doumee.service.business.YwWorkorderService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -60,6 +63,9 @@
     private YwBuildingMapper ywBuildingMapper;
     @Autowired
     private YwFloorMapper ywFloorMapper;
+    @Autowired
+    private NoticesJoinMapper noticesJoinMapper;
+
 
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
@@ -194,6 +200,30 @@
         update.setDispatchInfo(ywWorkorder.getDispatchInfo());
         update.setDealUserId(ywWorkorder.getDealUserId());
         ywWorkorderMapper.updateById(update);
+
+        //娣诲姞寰呭姙淇℃伅
+        Notices notices = new Notices();
+        notices.setCreateDate(new Date());
+        notices.setCreator(update.getEditor());
+        notices.setIsdeleted(Constants.ZERO);
+        notices.setParam1(DateUtil.formatDate(model.getCreateDate(),"yyyy-MM-dd"));
+        notices.setTitle("宸ュ崟寰呭姙");
+        notices.setObjId(update.getId());
+        notices.setObjType(Constants.TWO);
+        notices.setType(notices.getObjType());
+        notices.setUserId(ywWorkorder.getDealUserId());
+        notices.setStatus(Constants.ZERO);
+        //鏁寸悊json鏁版嵁
+        Map<String,Object> jsonMap = new HashMap<>();
+        jsonMap.put("key1", model.getBuildingName()+"/"+model.getFloorName());
+        jsonMap.put("key2", DateUtil.getFomartDate(model.getCreateDate(),"yyyy-MM-dd HH:mm:ss"));
+        jsonMap.put("key3", Constants.equalsInteger(model.getAreaType(),Constants.ZERO)?"瀹ゅ唴缁翠慨":"鍏叡鍖哄煙");
+        jsonMap.put("key4", model.getCategoryParentName()+"/"+model.getCategoryName());
+        notices.setParam2(JSONObject.toJSONString(jsonMap));
+        notices.setParam3(Constants.ZERO+"");
+        noticesJoinMapper.insert(notices);
+
+
         dealLogBiz(model,Constants.YwLogType.WORKORDER_DISPATCH,ywWorkorder.getLoginUserInfo().getRealname(),user.getRealname());//璁板綍鏂板缓鏃ュ織
     }
     @Override
@@ -220,6 +250,17 @@
         update.setDealDate(update.getEditDate());
         update.setDealInfo(ywWorkorder.getDealInfo());
         ywWorkorderMapper.updateById(update);
+
+
+        //鏍囪寰呭姙宸插鐞�
+        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
+                .set(Notices::getStatus,Constants.ONE)
+                .set(Notices::getParam3,Constants.TWO)
+                .eq(Notices::getIsdeleted,Constants.ZERO)
+                .eq(Notices::getObjType,Constants.TWO)
+                .eq(Notices::getObjId,update.getId())
+        );
+
 
         List<Multifile> fileList = new ArrayList<>();
         if(ywWorkorder.getDealFileList()!=null && ywWorkorder.getDealFileList().size()>0){
@@ -330,8 +371,9 @@
                 .selectAs(Company::getName,YwWorkorder::getDealUserCompany)
                 .select("t3.realname",YwWorkorder::getCreatorName)
                 .select("t3.mobile",YwWorkorder::getCreatorMobile)
-                .select("t9.name",YwWorkorder::getCreatorCompany)
-                .selectAs(Category::getName,YwWorkorder::getCategoryName)
+                .select("c.name",YwWorkorder::getCreatorCompany)
+                .select("ct.name",YwWorkorder::getCategoryName)
+                .select("ct1.name",YwWorkorder::getCategoryParentName)
                 .selectAs(YwRoom::getName,YwWorkorder::getRoomName)
                 .selectAs(YwRoom::getRoomNum,YwWorkorder::getRoomNum)
                 .selectAs(YwFloor::getName,YwWorkorder::getFloorName)
@@ -345,7 +387,9 @@
                 .leftJoin(YwFloor.class,YwFloor::getId,YwWorkorder::getFloorId)
                 .leftJoin(YwBuilding.class,YwBuilding::getId,YwWorkorder::getBuildingId)
                 .leftJoin(YwProject.class,YwProject::getId,YwWorkorder::getProjectId)
-                .leftJoin(" company t9 on t9.id = t1.company_id  ")
+                .leftJoin(" company c on c.id = t1.company_id  ")
+                .leftJoin(" category ct on ct.id = t.cate_id  ")
+                .leftJoin(" category ct1 on ct1.id = ct.PARENT_ID  ")
                 .eq(YwWorkorder::getId,id);
         YwWorkorder model = ywWorkorderMapper.selectJoinOne(YwWorkorder.class,queryWrapper);
         initFiles(model);//璇诲彇闄勪欢淇℃伅
@@ -551,7 +595,7 @@
                 .eq(Constants.equalsInteger(dto.getQueryType(),Constants.THREE),YwWorkorder::getRoomId,dto.getQueryId()));
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){
             ywWorkorderDataVO.setAmount(list.size());
-            ywWorkorderDataVO.setMonthAmount(list.stream().filter(i-> DateUtil.formatDate(i.getSubmitDate(),"yyyy-MM").equals(DateUtil.formatDate(new Date(),"yyyy-MM"))).collect(Collectors.toList()).size());
+            ywWorkorderDataVO.setMonthAmount(list.stream().filter(i-> DateUtil.formatDate(i.getCreateDate(),"yyyy-MM").equals(DateUtil.formatDate(new Date(),"yyyy-MM"))).collect(Collectors.toList()).size());
             ywWorkorderDataVO.setWaitDealAmount(list.stream().filter(i-> Constants.equalsInteger(i.getDealStatus(),Constants.ONE)).collect(Collectors.toList()).size());
             ywWorkorderDataVO.setWaitAssignAmount(list.stream().filter(i-> Constants.equalsInteger(i.getDealStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
         }

--
Gitblit v1.9.3