From 364d3221b9a8e6dd3a19701d30c4dc4239ef8abf Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 07 二月 2025 11:48:49 +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          |   21 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java               |    6 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java                     |   16 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java                    |   38 +
 server/visits/dmvisit_service/src/main/resources/application-dev.yml                                            |   12 
 server/visits/dmvisit_service/src/main/resources/application-pro.yml                                            |   13 
 h5/pages/inventory/detail.vue                                                                                   | 1024 ++++++++++++++++++++--------------------
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java |   21 
 h5/pages/workOrder/wait.vue                                                                                     |    6 
 h5/pages/login.vue                                                                                              |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java           |   47 +
 admin/src/views/stock/components/AssetSel.vue                                                                   |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java                          |   32 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java             |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java              |   52 ++
 admin/src/views/stock/components/config.js                                                                      |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MemberExcelVO.java                       |   45 +
 server/visits/dmvisit_service/src/main/resources/application-test.yml                                           |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java           |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                           |    1 
 admin/src/api/store/index.js                                                                                    |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java                   |   12 
 h5/pages/polling/empty.vue                                                                                      |   15 
 admin/src/views/stock/components/OutEdit.vue                                                                    |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelInVO.java               |   50 ++
 admin/src/views/stock/out.vue                                                                                   |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java     |    1 
 server/system_gateway/src/main/resources/application.yml                                                        |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java                   |   25 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java                         |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java        |    3 
 31 files changed, 913 insertions(+), 584 deletions(-)

diff --git a/admin/src/api/store/index.js b/admin/src/api/store/index.js
index ae84b86..03aac7a 100644
--- a/admin/src/api/store/index.js
+++ b/admin/src/api/store/index.js
@@ -7,7 +7,8 @@
 }
 export function ywOutinboundEx (data) {
   return request.post('/visitsAdmin/cloudService/business/ywOutinbound/exportExcel', data, {
-    trim: true
+    trim: true,
+    download: true
   })
 }
 export function ywOutinboundDetail (id) {
diff --git a/admin/src/views/stock/components/AssetSel.vue b/admin/src/views/stock/components/AssetSel.vue
index d4bb919..f06fbda 100644
--- a/admin/src/views/stock/components/AssetSel.vue
+++ b/admin/src/views/stock/components/AssetSel.vue
@@ -21,14 +21,14 @@
     </el-form>
     <!--  -->
     <el-table @selection-change="handleSelectionChange" :data="list" stripe>
-      <el-table-column type="selection"  width="55" />
+      <el-table-column type="selection" width="55" />
       <el-table-column prop="code" label="鐗╂枡缂栫爜" min-width="100px"></el-table-column>
       <el-table-column prop="name" label="鐗╂枡鍚嶇О" min-width="80px"></el-table-column>
       <el-table-column prop="qrcode" label="鏉$爜" min-width="100px"></el-table-column>
       <el-table-column prop="brand" label="鍝佺墝" min-width="80px"></el-table-column>
       <el-table-column prop="attr" label="瑙勬牸鍨嬪彿" min-width="80px"></el-table-column>
       <el-table-column prop="unitName" label="鍗曚綅" min-width="80px"></el-table-column>
-      <el-table-column prop="maxStock" label="搴撳瓨" min-width="80px"></el-table-column>
+      <el-table-column v-if="isOut" prop="maxStock" label="搴撳瓨" min-width="80px"></el-table-column>
     </el-table>
     <Pagination class="mt10" @size-change="handleSizeChange" @current-change="getList" :pagination="pagination">
     </Pagination>
@@ -82,19 +82,19 @@
     getList(page) {
       const { pagination, searchForm, isOut, warehouseId } = this
       this.listLoading = true
-      if(page){pagination.page = page}
-      console.log('isOut', isOut);
-      
+      if (page) { pagination.page = page }
+      console.log('isOut', isOut)
+
       let fn = isOut ? ywStockPage : fetchList
       fn({
         capacity: pagination.pageSize,
         page: pagination.page,
-        model: {...searchForm,status: 0, warehouseId}
+        model: { ...searchForm, status: 0, warehouseId }
       }).then((res) => {
         this.listLoading = false
         this.list = res.records
         this.pagination.total = res.total || 0
-        if(isOut){
+        if (isOut) {
           this.list.forEach(item => {
             item.brand = item.materialBrand
             item.attr = item.materialAttr
@@ -123,7 +123,7 @@
       if (e && e.length == 2) {
         this.$set(this.searchForm, 'cateId', e[1])
         this.$set(this.searchForm, 'parentCateId', '')
-      }else if((e && e.length == 1)){
+      } else if ((e && e.length == 1)) {
         this.$set(this.searchForm, 'parentCateId', e[0])
         this.$set(this.searchForm, 'cateId', '')
       } else {
diff --git a/admin/src/views/stock/components/OutEdit.vue b/admin/src/views/stock/components/OutEdit.vue
index 0bad33c..6b6f47b 100644
--- a/admin/src/views/stock/components/OutEdit.vue
+++ b/admin/src/views/stock/components/OutEdit.vue
@@ -82,7 +82,7 @@
       rules,
       storeList: [],
       list: [],
-      StoreTypeOps: StoreTypeOps.filter(i => i.type == 1),
+      StoreTypeOps: StoreTypeOps.filter(i => i.type == 1 && i.id != 10),
 
       dataList: [],
     }
diff --git a/admin/src/views/stock/components/config.js b/admin/src/views/stock/components/config.js
index 819a718..5254e88 100644
--- a/admin/src/views/stock/components/config.js
+++ b/admin/src/views/stock/components/config.js
@@ -4,13 +4,13 @@
   { name: '搴撳瓨璋冩暣', id: 2, type: 0 },
   { name: '鍏跺畠鍏ュ簱', id: 3, 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 f181d40..aee91e5 100644
--- a/admin/src/views/stock/out.vue
+++ b/admin/src/views/stock/out.vue
@@ -40,7 +40,7 @@
 import dayjs from 'dayjs'
 import duration from 'dayjs/plugin/duration'
 dayjs.extend(duration)
-import { ywOutinboundPage } from '@/api'
+import { ywOutinboundPage, ywOutinboundEx } from '@/api'
 import { fetchList as getStoreList } from '@/api/ywWarehouse'
 import { StoreTypeOps, rules } from './components/config'
 export default {
diff --git a/h5/pages/inventory/detail.vue b/h5/pages/inventory/detail.vue
index 29a92e6..268f979 100644
--- a/h5/pages/inventory/detail.vue
+++ b/h5/pages/inventory/detail.vue
@@ -32,7 +32,7 @@
 						<view class="line">瑙勬牸鍨嬪彿锛歿{ item.materialAttr }}</view>
 						<view class="line" v-if="item.status == 0">
 							<view class="">璐﹂潰鏁伴噺锛歿{ item.stock }}{{ item.materialUnitName }}</view>
-							<view @click.stop="openEheck(item)" class="btn">鎵ц鐩樼偣</view>
+							<view v-if="info.status == 1" @click.stop="openEheck(item)" class="btn">鎵ц鐩樼偣</view>
 						</view>
 						<view class="static" v-if="item.status == 1">
 							<view class="ite">
@@ -81,13 +81,15 @@
 						<view class="line">
 							<view class="la">鐩樼偣鏁伴噺锛�</view>
 							<view class="val">
-								<view class="wrap">
-									<template v-if="!modalForm.handleType">
-										<image v-if="!modalForm.actStock" src="@/static/side/btn_jian_grey@2x.png" mode=""></image>
-										<image v-else @click="changeAct(-1)" src="@/static/side/btn_jian@3x.png" mode=""></image>
+								<view class="wrap">
+									<template v-if="!modalForm.handleType">
+										<image v-if="!modalForm.actStock" src="@/static/side/btn_jian_grey@2x.png" mode=""></image>
+										<image v-else @click="changeAct(-1)" src="@/static/side/btn_jian@3x.png" mode=""></image>
 									</template>
-									<input :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" type="digit" v-model="modalForm.actStock"></input>
-									<image v-if="!modalForm.handleType" @click="changeAct(1)" src="@/static/side/btn_jia@3x.png" mode=""></image>
+									<input :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" type="digit"
+										v-model="modalForm.actStock"></input>
+									<image v-if="!modalForm.handleType" @click="changeAct(1)" src="@/static/side/btn_jia@3x.png" mode="">
+									</image>
 								</view>
 								<view class="unit">{{ modalForm.materialUnitName }}</view>
 							</view>
@@ -95,8 +97,9 @@
 					</view>
 					<view class="remark">
 						<view class="la">澶囨敞锛�</view>
-						<textarea v-model="modalForm.remark" :disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" placeholder="璇峰~鍐欏娉�" :maxlength="-1" placeholder-class="placeholder9"
-							cols="30" rows="10"></textarea>
+						<textarea v-model="modalForm.remark"
+							:disabled="Boolean(modalForm.handleType && modalForm.handleType == 'detail')" placeholder="璇峰~鍐欏娉�"
+							:maxlength="-1" placeholder-class="placeholder9" cols="30" rows="10"></textarea>
 					</view>
 					<view v-if="!modalForm.handleType" class="btns">
 						<view class="btn" @click="showModal = false">鍙栨秷</view>
@@ -127,557 +130,574 @@
 </template>
 
 <script>
-import {
-	ywStocktakingDetail,
-	getYwStocktakingRecord,
-	takingDataOpen,
-	ywStocktaFinishById
-} from '@/api'
-import {
-	Html5Qrcode
-} from 'html5-qrcode'
-export default {
-	data() {
-		return {
-			param: {},
-			info: {},
-			id: '',
-			activeTab: 0,
+	import {
+		ywStocktakingDetail,
+		getYwStocktakingRecord,
+		takingDataOpen,
+		ywStocktaFinishById
+	} from '@/api'
+	import {
+		Html5Qrcode
+	} from 'html5-qrcode'
+	export default {
+		data() {
+			return {
+				param: {},
+				info: {},
+				id: '',
+				activeTab: 0,
 
-			list: [],
-			page: 0,
-			total: 0,
+				list: [],
+				page: 0,
+				total: 0,
 
-			showModal: false,
-			showTip: false,
-			modalForm: {},
+				showModal: false,
+				showTip: false,
+				modalForm: {},
 
-			html5Qrcode: null,
-			isScaning: false,
+				html5Qrcode: null,
+				isScaning: false,
 
-		}
-	},
-	onLoad(op) {
-		this.id = op.id
-		this.getDetail()
-		this.getList()
-	},
-	methods: {
-		itemClick(item) {
-			if(item.status == 1){
-				this.showItem(item)
-			}
-		},
-		showItem(item){
-			this.showModal = true
-			this.modalForm = {
-				...item,
-				handleType: this.info.status != 1 ? 'detail' : ''
-			}
-			console.log('modalForm', this.modalForm);
-		},
-		getDetail() {
-			const {
-				id
-			} = this
-			ywStocktakingDetail(id).then(res => {
-				this.info = res.data
-
-			})
-		},
-		handleQuery(str) {
-			this.list = []
-			this.page = 1
-			this.getList(str)
-		},
-		getList(str) {
-			const {
-				page,
-				activeTab,
-				id,
-				param
-			} = this
-			getYwStocktakingRecord({
-				capacity: 20,
-				page,
-				model: {
-					status: str || activeTab,
-					stocktakingId: id,
-					...param
-				}
-			}).then(res => {
-				this.list = [...this.list, ...res.data.records]
-				this.total = res.data.total
-				if (this.param.materialQrcode && this.list.length == 1) {
-					this.openEheck(this.list[0])
-					this.$set(this.param, 'materialQrcode', null)
-				}
-			})
-		},
-		scrolltolower() {
-			const {
-				total,
-				list
-			} = this
-			if (list.length < total) {
-				this.page = this.page + 1
-				this.getList()
-			} else {
-				this.showToast('鏆傛棤鏇村鏁版嵁')
 			}
 		},
-		openEheck(item) {
-			this.modalForm = {
-				...item
-			}
-			this.showModal = true
-		},
-		onSubmit() {
-			const {
-				modalForm
-			} = this
-			if (!modalForm.actStock) return this.showToast('璇疯緭鍏ユ纭殑鐩樼偣鏁伴噺')
-			takingDataOpen({
-				...modalForm
-			}).then(res => {
-				if (res.code == 200) {
-					this.showToast('鎻愪氦鎴愬姛')
-					this.handleQuery()
-					this.getDetail()
-					this.showModal = false
-				}
-			})
-		},
-		changeAct(val) {
-			const actStock = this.modalForm.actStock || 0
-			this.$set(this.modalForm, 'actStock', actStock + val)
-		},
-		tabsClick(val) {
-			this.activeTab = val
-			this.page = 0
-			this.list = []
+		onLoad(op) {
+			this.id = op.id
+			this.getDetail()
 			this.getList()
 		},
-		tipSub() {
-			const { info } = this
-			ywStocktaFinishById(info.id).then(res => {
-				this.showTip = false
-				uni.navigateBack()
-			})
-
-		},
-		openQrcode() {
-			this.isScaning = true
-			Html5Qrcode.getCameras().then((devices) => {
-				if (devices && devices.length) {
-					this.html5Qrcode = new Html5Qrcode('reader')
-					this.html5Qrcode.start({
-						facingMode: 'environment'
-					}, {
-						focusMode: 'continuous', //璁剧疆杩炵画鑱氱劍妯″紡
-						fps: 5, //璁剧疆鎵爜璇嗗埆閫熷害
-						qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
-					},
-						(decodeText, decodeResult) => {
-							if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
-								this.stopScan()
-								this.$set(this.param, 'materialQrcode', decodeText)
-								this.handleQuery('null')
-							}
-						},
-						(err) => {
-							// console.log(err);  //閿欒淇℃伅
-						}
-					)
+		methods: {
+			itemClick(item) {
+				if (item.status == 1) {
+					this.showItem(item)
 				}
-			})
-		},
+			},
+			showItem(item) {
+				this.showModal = true
+				this.modalForm = {
+					...item,
+					handleType: this.info.status != 1 ? 'detail' : ''
+				}
+				console.log('modalForm', this.modalForm);
+			},
+			getDetail() {
+				const {
+					id
+				} = this
+				ywStocktakingDetail(id).then(res => {
+					this.info = res.data
 
-		stopScan() {
-			console.log('鍋滄鎵爜')
-			this.isScaning = false
-			if (this.html5Qrcode) {
-				this.html5Qrcode.stop()
+				})
+			},
+			handleQuery() {
+				this.list = []
+				this.page = 1
+				this.getList()
+			},
+			getList() {
+				const {
+					page,
+					activeTab,
+					id,
+					param
+				} = this
+				getYwStocktakingRecord({
+					capacity: 20,
+					page,
+					model: {
+						status: activeTab,
+						stocktakingId: id,
+						...param
+					}
+				}).then(res => {
+					this.list = [...this.list, ...res.data.records || []]
+					this.total = res.data.total
+					if (this.param.materialQrcode && this.total == 1) {
+						this.openEheck(this.list[0])
+						this.param = {}
+					} else if (this.param.materialQrcode && this.total == 0) {
+						this.param = {}
+						uni.showModal({
+							content: '鏈尮閰嶅埌鐗╂枡锛岃閲嶆柊鎵爜',
+							showCancel: false,
+							success: (res) => {
+								if (res.confirm) {
+									this.getList()
+								}
+							}
+						});
+					}
+
+				})
+			},
+			scrolltolower() {
+				const {
+					total,
+					list
+				} = this
+				if (list.length < total) {
+					this.page = this.page + 1
+					this.getList()
+				} else {
+					this.showToast('鏆傛棤鏇村鏁版嵁')
+				}
+			},
+			openEheck(item) {
+				this.modalForm = {
+					...item
+				}
+				this.showModal = true
+			},
+			onSubmit() {
+				const {
+					modalForm
+				} = this
+				if (!modalForm.actStock) return this.showToast('璇疯緭鍏ユ纭殑鐩樼偣鏁伴噺')
+				takingDataOpen({
+					...modalForm
+				}).then(res => {
+					if (res.code == 200) {
+						this.showToast('鎻愪氦鎴愬姛')
+						this.handleQuery()
+						this.getDetail()
+						this.showModal = false
+					}
+				})
+			},
+			changeAct(val) {
+				const actStock = this.modalForm.actStock || 0
+				this.$set(this.modalForm, 'actStock', actStock + val)
+			},
+			tabsClick(val) {
+				this.activeTab = val
+				this.page = 0
+				this.list = []
+				this.getList()
+			},
+			tipSub() {
+				const {
+					info
+				} = this
+				ywStocktaFinishById(info.id).then(res => {
+					this.showTip = false
+					uni.navigateBack()
+				})
+
+			},
+			openQrcode() {
+				this.isScaning = true
+				Html5Qrcode.getCameras().then((devices) => {
+					if (devices && devices.length) {
+						this.html5Qrcode = new Html5Qrcode('reader')
+						this.html5Qrcode.start({
+								facingMode: 'environment'
+							}, {
+								focusMode: 'continuous', //璁剧疆杩炵画鑱氱劍妯″紡
+								fps: 5, //璁剧疆鎵爜璇嗗埆閫熷害
+								qrbox: 280 //璁剧疆浜岀淮鐮佹壂鎻忔澶у皬
+							},
+							(decodeText, decodeResult) => {
+								if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭
+									this.stopScan()
+									this.$set(this.param, 'materialQrcode', decodeText)
+									this.handleQuery()
+								}
+							},
+							(err) => {
+								// console.log(err);  //閿欒淇℃伅
+							}
+						)
+					}
+				})
+			},
+
+			stopScan() {
+				console.log('鍋滄鎵爜')
+				this.isScaning = false
+				if (this.html5Qrcode) {
+					this.html5Qrcode.stop()
+				}
 			}
 		}
 	}
-}
 </script>
 
 <style lang="scss">
-.main_app {
-	padding: 0 30rpx;
-	overflow: hidden;
-}
+	.main_app {
+		padding: 0 30rpx;
+		overflow: hidden;
+	}
 
-.tabs {
-	display: flex;
-	width: 750rpx;
-	margin: 12rpx -30rpx 20rpx;
-	border-bottom: 1rpx solid #E5E5E5;
-
-	.tab {
-		font-size: 30rpx;
-		color: #666666;
-		flex: 1;
+	.tabs {
 		display: flex;
-		flex-direction: column;
-		align-items: center;
-		justify-content: flex-end;
-		height: 72rpx;
+		width: 750rpx;
+		margin: 12rpx -30rpx 20rpx;
+		border-bottom: 1rpx solid #E5E5E5;
 
-		.name {
+		.tab {
+			font-size: 30rpx;
+			color: #666666;
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: flex-end;
+			height: 72rpx;
+
+			.name {
+				display: flex;
+				align-items: center;
+			}
+
+			.border {
+				width: 54rpx;
+				height: 6rpx;
+				background-color: #fff;
+				border-radius: 3rpx;
+				margin-top: 12rpx;
+			}
+		}
+
+		.active {
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #222222;
+
+			.border {
+				background-color: $primaryColor;
+			}
+
+		}
+
+	}
+
+	.head_wrap {
+		display: flex;
+		align-items: center;
+		margin-bottom: 36rpx;
+
+		.search_wrap {
 			display: flex;
 			align-items: center;
+			width: 100%;
+			height: 76rpx;
+			background: #F7F7F7;
+			border-radius: 38rpx;
+			padding-left: 30rpx;
+
+			input {
+				flex: 1;
+			}
+
+			.search {
+				width: 28rpx;
+				height: 28rpx;
+			}
 		}
 
-		.border {
-			width: 54rpx;
-			height: 6rpx;
+	}
+
+	.scroll_Y {
+		height: calc(100vh - 350rpx);
+	}
+
+	.list {
+
+		.item {
+			border-bottom: 1rpx solid #E5E5E5;
+			padding-bottom: 24rpx;
+			margin-bottom: 16rpx;
+
+			.title {
+				font-weight: 600;
+				font-size: 34rpx;
+				color: #222222;
+				margin-bottom: 10rpx;
+				flex: 1;
+			}
+
+			.head {
+				display: flex;
+				// align-items: center;
+				justify-content: space-between;
+				color: #666666;
+
+				.status {
+					width: 76rpx;
+					text-align: right;
+					padding-top: 3rpx;
+				}
+			}
+
+			.line {
+				height: 60rpx;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				color: #666666;
+
+				.btn {
+					display: flex;
+					align-items: center;
+					justify-content: center;
+					height: 60rpx;
+					padding: 0 20rpx;
+					background: #0068FF;
+					box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
+					border-radius: 30rpx;
+					font-size: 26rpx;
+					color: #FFFFFF;
+				}
+			}
+
+			.static {
+				display: flex;
+				height: 84rpx;
+				background: #F7F7F7;
+				font-size: 30rpx;
+				margin-top: 12rpx;
+				padding: 16rpx 0;
+
+				.spi {
+					border: 1rpx solid #E5E5E5;
+				}
+
+				.ite {
+					flex: 1;
+					display: flex;
+					align-items: center;
+					justify-content: center;
+
+					.val {
+						font-weight: 500;
+					}
+				}
+			}
+		}
+	}
+
+	.footer_btn {
+		padding: 20rpx 40rpx 0;
+		border-top: 1px solid #e5e5e5;
+		width: 750rpx;
+		margin: 0 -30rpx;
+
+		.sweep {
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			font-size: 32rpx;
+			font-weight: 500;
+			width: 670rpx;
+			height: 88rpx;
+			background: #0068FF;
+			box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
+			border-radius: 44rpx;
+			color: #FFFFFF;
+		}
+
+		.sub_result {
 			background-color: #fff;
-			border-radius: 3rpx;
-			margin-top: 12rpx;
+			color: #FF0000;
+			border: 1rpx solid #FF0000;
+			box-shadow: none
+		}
+
+		image {
+			width: 32rpx;
+			height: 32rpx;
+			margin-right: 6rpx;
 		}
 	}
 
-	.active {
-		font-weight: 600;
-		font-size: 32rpx;
-		color: #222222;
+	.modal_wrap {
+		padding: 36rpx 30rpx;
 
-		.border {
-			background-color: $primaryColor;
+		.modal_title {
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #222222;
+			margin-bottom: 40rpx;
+			text-align: center;
 		}
-
-	}
-
-}
-
-.head_wrap {
-	display: flex;
-	align-items: center;
-	margin-bottom: 36rpx;
-
-	.search_wrap {
-		display: flex;
-		align-items: center;
-		width: 100%;
-		height: 76rpx;
-		background: #F7F7F7;
-		border-radius: 38rpx;
-		padding-left: 30rpx;
-
-		input {
-			flex: 1;
-		}
-
-		.search {
-			width: 28rpx;
-			height: 28rpx;
-		}
-	}
-
-}
-
-.scroll_Y {
-	height: calc(100vh - 350rpx);
-}
-
-.list {
-
-	.item {
-		border-bottom: 1rpx solid #E5E5E5;
-		padding-bottom: 24rpx;
-		margin-bottom: 16rpx;
 
 		.title {
 			font-weight: 600;
 			font-size: 34rpx;
 			color: #222222;
-			margin-bottom: 10rpx;
-			flex: 1;
 		}
-		.head{
-			display: flex;
-			// align-items: center;
-			justify-content: space-between;
-			color: #666666;
-			.status{
-				width: 76rpx;
-				text-align: right;
-				padding-top: 3rpx;
-			}
-		}
-		.line {
-			height: 60rpx;
+
+		.item {
+			font-size: 28rpx;
+			color: #666666;
+			height: 56rpx;
 			display: flex;
 			align-items: center;
-			justify-content: space-between;
-			color: #666666;
-			
-			.btn {
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				height: 60rpx;
-				padding: 0 20rpx;
-				background: #0068FF;
-				box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(0, 104, 255, 0.3);
-				border-radius: 30rpx;
-				font-size: 26rpx;
-				color: #FFFFFF;
-			}
 		}
 
-		.static {
-			display: flex;
-			height: 84rpx;
-			background: #F7F7F7;
-			font-size: 30rpx;
-			margin-top: 12rpx;
-			padding: 16rpx 0;
+		.content {
+			border-top: 1rpx solid #E5E5E5;
+			margin-top: 16rpx;
 
-			.spi {
-				border: 1rpx solid #E5E5E5;
-			}
-
-			.ite {
-				flex: 1;
+			.line {
+				height: 84rpx;
 				display: flex;
 				align-items: center;
-				justify-content: center;
+				justify-content: space-between;
+
+				.la {
+					font-weight: 500;
+					font-size: 32rpx;
+					color: #222222;
+				}
 
 				.val {
-					font-weight: 500;
-				}
-			}
-		}
-	}
-}
-
-.footer_btn {
-	padding: 20rpx 40rpx 0;
-	border-top: 1px solid #e5e5e5;
-	width: 750rpx;
-	margin: 0 -30rpx;
-
-	.sweep {
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		font-size: 32rpx;
-		font-weight: 500;
-		width: 670rpx;
-		height: 88rpx;
-		background: #0068FF;
-		box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3);
-		border-radius: 44rpx;
-		color: #FFFFFF;
-	}
-
-	.sub_result {
-		background-color: #fff;
-		color: #FF0000;
-		border: 1rpx solid #FF0000;
-		box-shadow: none
-	}
-
-	image {
-		width: 32rpx;
-		height: 32rpx;
-		margin-right: 6rpx;
-	}
-}
-
-.modal_wrap {
-	padding: 36rpx 30rpx;
-
-	.modal_title {
-		font-weight: 500;
-		font-size: 32rpx;
-		color: #222222;
-		margin-bottom: 40rpx;
-		text-align: center;
-	}
-
-	.title {
-		font-weight: 600;
-		font-size: 34rpx;
-		color: #222222;
-	}
-
-	.item {
-		font-size: 28rpx;
-		color: #666666;
-		height: 56rpx;
-		display: flex;
-		align-items: center;
-	}
-
-	.content {
-		border-top: 1rpx solid #E5E5E5;
-		margin-top: 16rpx;
-
-		.line {
-			height: 84rpx;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-
-			.la {
-				font-weight: 500;
-				font-size: 32rpx;
-				color: #222222;
-			}
-
-			.val {
-				display: flex;
-				justify-content: flex-end;
-				align-items: center;
-				flex: 1;
-
-				.wrap {
 					display: flex;
+					justify-content: flex-end;
 					align-items: center;
+					flex: 1;
 
-					input {
-						width: 120rpx;
-						height: 72rpx;
-						border-radius: 8rpx;
-						border: 2rpx solid #0068FF;
-						margin: 0 16rpx;
-						padding: 0 10rpx;
-						text-align: center;
+					.wrap {
+						display: flex;
+						align-items: center;
+
+						input {
+							width: 120rpx;
+							height: 72rpx;
+							border-radius: 8rpx;
+							border: 2rpx solid #0068FF;
+							margin: 0 16rpx;
+							padding: 0 10rpx;
+							text-align: center;
+						}
+					}
+
+					.unit {
+						font-size: 30rpx;
+						color: #666666;
+						margin-left: 20rpx;
 					}
 				}
 
-				.unit {
-					font-size: 30rpx;
-					color: #666666;
-					margin-left: 20rpx;
+				image {
+					width: 72rpx;
+					height: 72rpx;
+				}
+			}
+		}
+
+		.remark {
+			margin-top: 16rpx;
+
+			.la {
+				font-size: 30rpx;
+				color: #222222;
+				margin-bottom: 16rpx;
+			}
+
+			textarea {
+				width: 690rpx;
+				height: 240rpx;
+				background: #F7F7F7;
+				border-radius: 12rpx;
+				padding: 10rpx 20rpx;
+			}
+		}
+
+		.btns {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			margin-top: 80rpx;
+
+			.btn {
+				width: 336rpx;
+				height: 88rpx;
+				border-radius: 44rpx;
+				border: 2rpx solid $primaryColor;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				font-size: 32rpx;
+				color: $primaryColor;
+			}
+
+			.sub {
+				background-color: $primaryColor;
+				color: #fff;
+			}
+		}
+	}
+
+
+	.modal_t {
+		width: 520rpx;
+		text-align: center;
+		display: flex;
+		flex-direction: column;
+
+		.h1 {
+			height: 86rpx;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #333333;
+			display: flex;
+			align-items: flex-end;
+			justify-content: center;
+		}
+
+		.content {
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			align-items: center;
+			padding: 30rpx 0;
+		}
+
+		.btns {
+			height: 102rpx;
+			display: flex;
+			align-items: center;
+			border-top: 1rpx solid #E5E5E5;
+
+			.btn {
+				height: 102rpx;
+				flex: 1;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				border-right: 1rpx solid #E5E5E5;
+				font-weight: 400;
+				font-size: 32rpx;
+				color: #999999;
+
+				&:nth-last-child(1) {
+					border-right: none;
 				}
 			}
 
-			image {
-				width: 72rpx;
-				height: 72rpx;
+			.sub {
+				color: $primaryColor;
 			}
 		}
 	}
 
-	.remark {
-		margin-top: 16rpx;
-
-		.la {
-			font-size: 30rpx;
-			color: #222222;
-			margin-bottom: 16rpx;
-		}
-
-		textarea {
-			width: 690rpx;
-			height: 240rpx;
-			background: #F7F7F7;
-			border-radius: 12rpx;
-			padding: 10rpx 20rpx;
-		}
+	.reader-box {
+		position: fixed;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		background-color: rgba(0, 0, 0, 0.5);
 	}
 
-	.btns {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		margin-top: 80rpx;
-
-		.btn {
-			width: 336rpx;
-			height: 88rpx;
-			border-radius: 44rpx;
-			border: 2rpx solid $primaryColor;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			font-size: 32rpx;
-			color: $primaryColor;
-		}
-
-		.sub {
-			background-color: $primaryColor;
-			color: #fff;
-		}
+	.reader {
+		width: 100%;
+		// width: 540rpx;
+		// height: 540rpx;
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%, -50%);
 	}
-}
-
-
-.modal_t {
-	width: 520rpx;
-	text-align: center;
-	display: flex;
-	flex-direction: column;
-
-	.h1 {
-		height: 86rpx;
-		font-weight: 500;
-		font-size: 32rpx;
-		color: #333333;
-		display: flex;
-		align-items: flex-end;
-		justify-content: center;
-	}
-
-	.content {
-		flex: 1;
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		padding: 30rpx 0;
-	}
-
-	.btns {
-		height: 102rpx;
-		display: flex;
-		align-items: center;
-		border-top: 1rpx solid #E5E5E5;
-
-		.btn {
-			height: 102rpx;
-			flex: 1;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			border-right: 1rpx solid #E5E5E5;
-			font-weight: 400;
-			font-size: 32rpx;
-			color: #999999;
-
-			&:nth-last-child(1) {
-				border-right: none;
-			}
-		}
-
-		.sub {
-			color: $primaryColor;
-		}
-	}
-}
-
-.reader-box {
-	position: fixed;
-	top: 0;
-	bottom: 0;
-	left: 0;
-	right: 0;
-	background-color: rgba(0, 0, 0, 0.5);
-}
-
-.reader {
-	width: 100%;
-	// width: 540rpx;
-	// height: 540rpx;
-	position: absolute;
-	top: 50%;
-	left: 50%;
-	transform: translate(-50%, -50%);
-}
 </style>
\ No newline at end of file
diff --git a/h5/pages/login.vue b/h5/pages/login.vue
index 2a7e31a..134d69c 100644
--- a/h5/pages/login.vue
+++ b/h5/pages/login.vue
@@ -101,7 +101,7 @@
 										})
 									} else {
 										uni.redirectTo({
-											url: "/pages/polling/empty"
+											url: "/pages/polling/empty?message=" + res.message
 										})
 									}
 								})
@@ -164,7 +164,7 @@
 										})
 									} else {
 										uni.redirectTo({
-											url: "/pages/polling/empty"
+											url: "/pages/polling/empty?message=" + res.message
 										})
 									}
 								})
diff --git a/h5/pages/polling/empty.vue b/h5/pages/polling/empty.vue
index 00181a5..9b78f4f 100644
--- a/h5/pages/polling/empty.vue
+++ b/h5/pages/polling/empty.vue
@@ -1,6 +1,7 @@
 <template>
 	<view class="main_app">
 		<image class="logo" src="@/static/side/default_empty@2x.png" mode=""></image>
+		<view class="message">{{message}}</view>
 		<view class="btn" @click="backHome">杩斿洖涓婚〉</view>
 	</view>
 </template>
@@ -9,8 +10,11 @@
 	export default {
 		data() {
 			return {
-				
-			};
+				message: ''
+			};	
+		},
+		onLoad(op) {
+			this.message = op.message || ''
 		},
 		methods: {
 			backHome(){
@@ -29,6 +33,13 @@
 		height: 228rpx;
 		margin: 60% auto 0;
 	}
+	.message{
+		font-weight: 500;
+		font-size: 30rpx;
+		color: #222222;
+		margin-top: 20rpx;
+		text-align: center;
+	}
 	.btn{
 		position: fixed;
 		bottom: 64rpx;
diff --git a/h5/pages/workOrder/wait.vue b/h5/pages/workOrder/wait.vue
index d3fd3e1..6d0ee7c 100644
--- a/h5/pages/workOrder/wait.vue
+++ b/h5/pages/workOrder/wait.vue
@@ -28,7 +28,7 @@
 							<view v-if="item.status == 0 && item.param3 == 0 && (item.type == 0 || item.type == 1)" class="status">鏈紑濮�
 							</view>
 							<view v-if="item.status == 0 && item.param3 == 1 && (item.type == 0 || item.type == 1)"
-								class="status green">杩涜涓�</view>
+								class="status green">{{ item.type == 0 ? '鐩樼偣涓�' : '杩涜涓�' }}</view>
 							<view v-if="item.status == 1 && item.type == 2" class="status gray">宸插鐞�</view>
 							<view v-if="item.status == 1 && (item.type == 0 || item.type == 1)" class="status gray">宸插畬鎴�</view>
 						</view>
@@ -37,7 +37,7 @@
 							<view class="text">鎵ц鏃堕棿锛歿{item.obj.key3}}</view>
 							<view class="text">
 								<view class="">宸℃璐熻矗浜猴細{{item.obj.key4}}</view>
-								<view class="btn" @click.stop="openSc(item)">
+								<view v-if="queryStatus == 0" class="btn" @click.stop="openSc(item)">
 									<image src="@/static/side/ic_saoma@2x.png" mode=""></image>
 									<view v-if="item.status == 0" class="">鎵爜宸℃</view>
 								</view>
@@ -249,7 +249,7 @@
 		.tabs {
 			display: flex;
 			width: 750rpx;
-			margin: 12rpx 0rpx 0;
+			margin: 0rpx 0rpx 0;
 			border-bottom: 1rpx solid #E5E5E5;
 			background-color: #fff;
 
diff --git a/server/system_gateway/src/main/resources/application.yml b/server/system_gateway/src/main/resources/application.yml
index 6503fa3..8994b05 100644
--- a/server/system_gateway/src/main/resources/application.yml
+++ b/server/system_gateway/src/main/resources/application.yml
@@ -1,6 +1,6 @@
 # 椤圭洰淇℃伅閰嶇疆
 project:
-  name: 瀹夋嘲鐗╂祦璁垮绯荤粺
+  name: 闃滃畞鍦洪杩愮淮
   version: 1.0.0
   env: development
 #  env: production
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
index e5f73cb..6386c16 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java
@@ -20,6 +20,7 @@
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.MemberCard;
 import com.doumee.dao.business.model.MemberRole;
+import com.doumee.dao.business.vo.MemberExcelVO;
 import com.doumee.dao.system.dto.UpdatePwdDto;
 import com.doumee.service.business.MemberService;
 import com.doumee.service.business.ext.ERPSyncService;
@@ -27,6 +28,7 @@
 import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromSelfServiceImpl;
 import io.swagger.annotations.*;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -412,4 +414,18 @@
         return ApiResponse.success(memberService.ywFindPage(pageWrap));
     }
 
+
+    @ApiOperation("闃滃畞 - 瀵煎嚭Excel")
+    @PostMapping("/ywExportExcel")
+    @CloudRequiredPermission("business:member:exportExcel")
+    public void ywExportExcel (@RequestBody PageWrap<Member> pageWrap, HttpServletResponse response, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        List<Member> memberList =  memberService.ywFindPage(pageWrap).getRecords();
+        List<MemberExcelVO> memberExcelVOList = new ArrayList<MemberExcelVO>();
+        for (Member member:memberList) {
+            MemberExcelVO memberExcelVO = new MemberExcelVO();
+            BeanUtils.copyProperties(member,memberExcelVO);
+            memberExcelVOList.add(memberExcelVO);
+        }
+        ExcelExporter.build(MemberExcelVO.class).export(memberExcelVOList, "浜哄憳淇℃伅琛�", response);
+    }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java
index 23eccac..11c08ca 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsEmailColudController.java
@@ -49,11 +49,30 @@
 
     @LoginNoRequired
     @PreventRepeat
-    @ApiOperation("鑷畾涔夌煭淇″唴瀹�")
-    @PostMapping("/testSendSms")
-    public ApiResponse testSendSms(@RequestBody SmsEmail smsEmail) {
+    @ApiOperation("鑷畾涔夌煭淇″唴瀹筯k")
+    @PostMapping("/testSendSmsHk")
+    public ApiResponse testSendSmsHk(@RequestBody SmsEmail smsEmail) {
         emayService.sendSmsByHk(smsEmail.getPhone(),smsEmail.getContent());
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
+
+
+    @LoginNoRequired
+    @PreventRepeat
+    @ApiOperation("鑷畾涔夌煭淇″唴瀹�")
+    @PostMapping("/testSendSms")
+    public ApiResponse testSendSms(@RequestBody SmsEmail smsEmail) {
+        smsEmailService.sendBillSms(smsEmail.getContent(),smsEmail.getPhone(),null);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginNoRequired
+    @PreventRepeat
+    @ApiOperation("鑷畾涔夐偖浠跺唴瀹�")
+    @PostMapping("/testSendEmail")
+    public ApiResponse testSendEmail(@RequestBody SmsEmail smsEmail) {
+        smsEmailService.sendEmail(smsEmail.getEmail(),smsEmail.getContent(),null);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java
index 07544f7..9ac8faf 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java
@@ -1,5 +1,6 @@
 package com.doumee.cloud.admin;
 
+import cn.emay.sdk.util.StringUtil;
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.core.annotation.excel.ExcelExporter;
@@ -9,10 +10,13 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.business.model.YwOutinbound;
+import com.doumee.dao.business.model.YwOutinboundRecord;
+import com.doumee.dao.business.vo.YwOutinboundExcelInVO;
+import com.doumee.dao.business.vo.YwOutinboundExcelOutVO;
 import com.doumee.service.business.YwOutinboundService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
@@ -82,7 +86,37 @@
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywoutinbound:exportExcel")
     public void exportExcel (@RequestBody PageWrap<YwOutinbound> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        ExcelExporter.build(YwOutinbound.class).export(ywOutinboundService.findPage(pageWrap).getRecords(), "杩愮淮鍑哄叆搴撲俊鎭〃", response);
+        List<YwOutinbound> ywOutinboundList = ywOutinboundService.findPage(pageWrap).getRecords();
+        Integer inOut = pageWrap.getModel().getInOut();
+        if(Constants.equalsInteger(inOut,Constants.ZERO)){
+            List<YwOutinboundExcelInVO> inList = new ArrayList<>();
+            for (YwOutinbound ywOutinbound:ywOutinboundList) {
+                YwOutinboundExcelInVO inVO = new YwOutinboundExcelInVO();
+                BeanUtils.copyProperties(ywOutinbound,inVO);
+                List<YwOutinboundRecord> ywOutinboundRecordList = ywOutinbound.getRecordList();
+                StringBuffer stringBuffer = new StringBuffer();
+                for (YwOutinboundRecord ywOutinboundRecord:ywOutinboundRecordList) {
+                    stringBuffer.append(ywOutinboundRecord.getMaterialName()+"["+ywOutinboundRecord.getMaterialCode()+"]*"+ywOutinboundRecord.getStock()+ywOutinboundRecord.getMaterialUnitName()+";");
+                }
+                inVO.setOutMaterialNum(stringBuffer.toString());
+                inList.add(inVO);
+            }
+            ExcelExporter.build(YwOutinboundExcelInVO.class).export(inList, "鍏ュ簱淇℃伅琛�", response);
+        }else{
+            List<YwOutinboundExcelOutVO> outList = new ArrayList<>();
+            for (YwOutinbound ywOutinbound:ywOutinboundList) {
+                YwOutinboundExcelOutVO ywOutinboundExcelOutVO = new YwOutinboundExcelOutVO();
+                BeanUtils.copyProperties(ywOutinbound,ywOutinboundExcelOutVO);
+                List<YwOutinboundRecord> ywOutinboundRecordList = ywOutinbound.getRecordList();
+                StringBuffer stringBuffer = new StringBuffer();
+                for (YwOutinboundRecord ywOutinboundRecord:ywOutinboundRecordList) {
+                    stringBuffer.append(ywOutinboundRecord.getMaterialName()+"["+ywOutinboundRecord.getMaterialCode()+"]*"+ywOutinboundRecord.getStock()+ywOutinboundRecord.getMaterialUnitName()+";");
+                }
+                ywOutinboundExcelOutVO.setOutMaterialNum(stringBuffer.toString());
+                outList.add(ywOutinboundExcelOutVO);
+            }
+            ExcelExporter.build(YwOutinboundExcelOutVO.class).export(outList, "鍑哄簱淇℃伅琛�", response);
+        }
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java
index bfe3148..7676246 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java
@@ -8,7 +8,9 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.model.PageData;
 import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwPatrolTask;
 import com.doumee.dao.business.model.YwStock;
+import com.doumee.dao.business.model.YwWorkorder;
 import com.doumee.service.business.YwStockService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -80,9 +82,10 @@
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:ywstock:exportExcel")
     public void exportExcel (@RequestBody PageWrap<YwStock> pageWrap, HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        ExcelExporter.build(YwStock.class).export(ywStockService.findPage(pageWrap).getRecords(), "杩愮淮搴撳瓨淇℃伅琛�", response);
+        ExcelExporter.build(YwStock.class).export(ywStockService.findPage(pageWrap).getRecords(), "搴撳瓨淇℃伅琛╛"+System.currentTimeMillis(), response);
     }
 
+
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:ywstock:query")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index 399570e..4e1b250 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -222,7 +222,6 @@
     private String email;
 
 
-
     @ApiModelProperty(value = "鏈�鍚庢搷浣滀汉")
     @TableField(exist = false)
     private String editorName;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
index 1ab32e6..7438d92 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwDeviceRecord.java
@@ -32,7 +32,7 @@
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿",index = 5, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @ExcelColumn(name="鍒涘缓鏃堕棿",index = 5, dateFormat = "yyyy-MM-dd HH:mm:ss",width = 16)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createDate;
 
@@ -50,7 +50,7 @@
     private String remark;
 
     @ApiModelProperty(value = "鐘舵�� 0姝e父 1鎹熷潖 2鎶ュ簾", example = "1")
-    @ExcelColumn(name="璁惧鐘舵��",index = 3, valueMapping = "0=姝e父;1=鎹熷潖;2=鎶ュ簾;")
+    @ExcelColumn(name="璁惧鐘舵��",index = 3, valueMapping = "0=姝e父;1=鎹熷潖;2=鎶ュ簾;",width = 10)
     private Integer status;
 
     @ApiModelProperty(value = "璁惧鍨嬪彿", example = "1")
@@ -67,7 +67,7 @@
     private Date company;
 
     @ApiModelProperty(value = "鎯呭喌璇存槑")
-    @ExcelColumn(name="杩愮淮澶囨敞",index = 4)
+    @ExcelColumn(name="杩愮淮澶囨敞",index = 4,width = 30)
     private String content;
 
     @ApiModelProperty(value = "杩愮淮鏃堕棿")
@@ -75,17 +75,17 @@
     private Date dealDate;
 
     @ApiModelProperty(value = "璁惧鍚嶇О")
-    @ExcelColumn(name="璁惧鍚嶇О",index = 2)
+    @ExcelColumn(name="璁惧鍚嶇О",index = 2,width = 20)
     @TableField(exist = false)
     private String deviceName;
 
     @ApiModelProperty(value = "璁惧缂栧彿")
-    @ExcelColumn(name="璁惧缂栧彿",index = 1)
+    @ExcelColumn(name="璁惧缂栧彿",index = 1,width = 10)
     @TableField(exist = false)
     private String deviceCode;
 
     @ApiModelProperty(value = "杩愮淮浜哄悕绉�")
-    @ExcelColumn(name="杩愮淮浜�",index = 0)
+    @ExcelColumn(name="杩愮淮浜�",index = 0,width = 10)
     @TableField(exist = false)
     private String realName;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java
index ef8a041..379c7ff 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java
@@ -75,15 +75,15 @@
 
     @ApiModelProperty(value = "澶勭悊鏃堕棿")
     @ExcelColumn(name="澶勭悊鏃堕棿")
-    @JsonFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date dealDate;
 
     @ApiModelProperty(value = "鏄惁宸℃  0=寰呭紑濮嬶紱1=宸插贰妫�锛�", example = "1")
     @ExcelColumn(name="鏄惁宸℃  0=寰呭紑濮嬶紱1=宸插贰妫�")
     private Integer status;
 
-    @ApiModelProperty(value = "宸℃缁撴灉  0=姝e父锛�1=寮傚父", example = "1")
-    @ExcelColumn(name="宸℃缁撴灉  0=姝e父锛�1=寮傚父")
+    @ApiModelProperty(value = "宸℃缁撴灉  0=姝e父锛�1=寮傚父;2=璺宠繃锛�", example = "1")
+    @ExcelColumn(name="宸℃缁撴灉  0=姝e父锛�1=寮傚父锛�2=璺宠繃锛�")
     private Integer dealStatus;
 
     @ApiModelProperty(value = "澶勭悊澶囨敞")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
index dc2ec33..16a6200 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.core.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -20,65 +21,60 @@
 @Data
 @ApiModel("杩愮淮搴撳瓨淇℃伅琛�")
 @TableName("`yw_stock`")
-public class YwStock {
+public class YwStock  extends LoginUserModel {
 
     @TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "涓婚敭", example = "1")
-    @ExcelColumn(name="涓婚敭")
     private Integer id;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
     private Integer creator;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
-    @ExcelColumn(name="鍒涘缓鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createDate;
 
     @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
-    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
     private Integer editor;
 
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
-    @ExcelColumn(name="鏇存柊鏃堕棿")
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date editDate;
 
     @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
-    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
     private Integer isdeleted;
 
     @ApiModelProperty(value = "澶囨敞")
-    @ExcelColumn(name="澶囨敞")
     private String remark;
 
     @ApiModelProperty(value = "浠撳簱缂栫爜(鍏宠仈yw_warehouse)")
-    @ExcelColumn(name="浠撳簱缂栫爜(鍏宠仈yw_warehouse)")
     private Integer warehouseId;
 
     @ApiModelProperty(value = "鐗╄祫缂栫爜锛堝叧鑱攜w_material)", example = "1")
-    @ExcelColumn(name="鐗╄祫缂栫爜锛堝叧鑱攜w_material)")
     private Integer materialId;
 
     @ApiModelProperty(value = "鏁伴噺", example = "1")
-    @ExcelColumn(name="鏁伴噺")
+    @ExcelColumn(name="鏁伴噺",index = 6,width = 10)
     private BigDecimal stock;
 
 
-    @ApiModelProperty(value = "璧勪骇缂栫爜")
+    @ApiModelProperty(value = "鐗╂枡缂栫爜")
+    @ExcelColumn(name="鐗╂枡缂栫爜",index = 0,width = 10)
     @TableField(exist = false)
     private String materialCode;
 
-    @ApiModelProperty(value = "璧勪骇鍚嶇О")
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    @ExcelColumn(name="鐗╂枡鍚嶇О",index = 1,width = 10)
     @TableField(exist = false)
     private String materialName;
 
-    @ApiModelProperty(value = "璧勪骇鏉″舰鐮�")
+    @ApiModelProperty(value = "鏉$爜")
+    @ExcelColumn(name="鏉$爜",index = 2,width = 10)
     @TableField(exist = false)
     private String materialQrcode;
 
-    @ApiModelProperty(value = "璧勪骇鍝佺墝")
+    @ApiModelProperty(value = "鍝佺墝")
+    @ExcelColumn(name="鍝佺墝",index = 3,width = 10)
     @TableField(exist = false)
     private String materialBrand;
 
@@ -86,11 +82,13 @@
     @TableField(exist = false)
     private String materialUnitName;
 
-    @ApiModelProperty(value = "璧勪骇瑙勬牸鍨嬪彿")
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    @ExcelColumn(name="瑙勬牸鍨嬪彿",index = 4,width = 10)
     @TableField(exist = false)
     private String materialAttr;
 
-    @ApiModelProperty(value = "浠撳簱鍚嶇О")
+    @ApiModelProperty(value = "鎵�鍦ㄤ粨搴�")
+    @ExcelColumn(name="鎵�鍦ㄤ粨搴�",index = 5,width = 10)
     @TableField(exist = false)
     private String warehouseName;
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MemberExcelVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MemberExcelVO.java
new file mode 100644
index 0000000..210cdc9
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/MemberExcelVO.java
@@ -0,0 +1,45 @@
+package com.doumee.dao.business.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.core.model.LoginUserModel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 浜哄憳淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Data
+public class MemberExcelVO {
+
+    @ApiModelProperty(value = "瀹㈡埛鍚嶇О", example = "1")
+    @ExcelColumn(name="瀹㈡埛鍚嶇О",width = 10,index = 1)
+    private String customerName;
+
+    @ApiModelProperty(value = "鑱旂郴浜�", example = "1")
+    @ExcelColumn(name="鑱旂郴浜�",width = 10,index = 2)
+    private String name;
+
+    @ApiModelProperty(value = "鑱旂郴鐢佃瘽", example = "1")
+    @ExcelColumn(name="鑱旂郴鐢佃瘽",width = 10,index = 3)
+    private String phone;
+
+    @ApiModelProperty(value = "韬唤 0鑰佹澘/瓒呯骇绠$悊鍛� 1浜轰簨/绠$悊鍛� 2鍛樺伐/鏅�氬憳宸�", example = "1")
+    @ExcelColumn(name="韬唤",width = 10,index = 4,valueMapping = "0=鑰佹澘/瓒呯骇绠$悊鍛�;1=浜轰簨/绠$悊鍛�;2=鍛樺伐/鏅�氬憳宸�;")
+    private Integer highCheckor;
+
+    @ApiModelProperty(value = "鐘舵�� 0姝e父 1绂佺敤 2鎷夐粦/鍐荤粨", example = "1")
+    @ExcelColumn(name="韬唤",width = 10,index = 5,valueMapping = "0=姝e父;1=绂佺敤;")
+    private Integer status;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelInVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelInVO.java
new file mode 100644
index 0000000..1766d31
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelInVO.java
@@ -0,0 +1,50 @@
+package com.doumee.dao.business.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 杩愮淮鍑哄叆搴撲俊鎭〃
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+public class YwOutinboundExcelInVO {
+
+    @ApiModelProperty(value = "鍗曟嵁缂栧彿")
+    @ExcelColumn(name="鍏ュ簱鍗曞彿",index = 0,width = 16)
+    private String code;
+
+    @ApiModelProperty(value = "浠撳簱鍚嶇О", example = "1")
+    @ExcelColumn(name="鍏ュ簱浠撳簱",index = 1,width = 16)
+    private String warehouseName;
+
+    @ApiModelProperty(value = "绫诲瀷 0閲囪喘鍏ュ簱 1棰嗙敤閫�鍥� 2璋冩暣鍏ュ簱 3鍏朵粬鍏ュ簱 4鐩樼泩鍏ュ簱 5棰嗙敤鍑哄簱 6浠撳簱鍑哄簱 7璋冩暣鍑哄簱 8閲囪喘鍑哄簱 9鍏朵粬鍑哄簱 10鐩樹簭鍑哄簱", example = "1")
+    @ExcelColumn(name="鍏ュ簱绫诲瀷",index = 2,width = 10,valueMapping = "0=閲囪喘鍏ュ簱;1=棰嗙敤閫�鍥�;2=璋冩暣鍏ュ簱;3=鍏朵粬鍏ュ簱;4=鐩樼泩鍏ュ簱;5=棰嗙敤鍑哄簱;6=浠撳簱鍑哄簱;7=璋冩暣鍑哄簱;8=閲囪喘鍑哄簱;9=鍏朵粬鍑哄簱;10=鐩樹簭鍑哄簱;")
+    private Integer type;
+
+    @ApiModelProperty(value = "鍑哄簱鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ExcelColumn(name="鍏ュ簱鏃ユ湡",index = 3,width = 16,dateFormat = "yyyy-MM-dd")
+    private Date doneDate;
+
+    @ApiModelProperty(value = "鍑哄簱鏁伴噺")
+    @ExcelColumn(name="鍏ュ簱鏁伴噺",index = 4,width = 16)
+    private String outMaterialNum;
+
+    @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
+    @ExcelColumn(name="鎿嶄綔浜�",index = 5,width = 16)
+    private String createUserName;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ExcelColumn(name="鎿嶄綔鏃堕棿",index = 6,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createDate;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java
new file mode 100644
index 0000000..23e6818
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/YwOutinboundExcelOutVO.java
@@ -0,0 +1,52 @@
+package com.doumee.dao.business.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.dao.business.model.YwOutinboundRecord;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 杩愮淮鍑哄叆搴撲俊鎭〃
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+public class YwOutinboundExcelOutVO {
+
+    @ApiModelProperty(value = "鍗曟嵁缂栧彿")
+    @ExcelColumn(name="鍑哄簱鍗曞彿",index = 0,width = 16)
+    private String code;
+
+    @ApiModelProperty(value = "浠撳簱鍚嶇О", example = "1")
+    @ExcelColumn(name="鍑哄簱浠撳簱",index = 1,width = 16)
+    private String warehouseName;
+
+    @ApiModelProperty(value = "绫诲瀷 0閲囪喘鍏ュ簱 1棰嗙敤閫�鍥� 2璋冩暣鍏ュ簱 3鍏朵粬鍏ュ簱 4鐩樼泩鍏ュ簱 5棰嗙敤鍑哄簱 6浠撳簱鍑哄簱 7璋冩暣鍑哄簱 8閲囪喘鍑哄簱 9鍏朵粬鍑哄簱 10鐩樹簭鍑哄簱", example = "1")
+    @ExcelColumn(name="鍑哄簱绫诲瀷",index = 2,width = 10,valueMapping = "0=閲囪喘鍏ュ簱;1=棰嗙敤閫�鍥�;2=璋冩暣鍏ュ簱;3=鍏朵粬鍏ュ簱;4=鐩樼泩鍏ュ簱;5=棰嗙敤鍑哄簱;6=浠撳簱鍑哄簱;7=璋冩暣鍑哄簱;8=閲囪喘鍑哄簱;9=鍏朵粬鍑哄簱;10=鐩樹簭鍑哄簱;")
+    private Integer type;
+
+    @ApiModelProperty(value = "鍑哄簱鏃ユ湡")
+    @ExcelColumn(name="鍑哄簱鏃ユ湡",index = 3,width = 16,dateFormat = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date doneDate;
+
+    @ApiModelProperty(value = "鍑哄簱鏁伴噺")
+    @ExcelColumn(name="鍑哄簱鏁伴噺",index = 4,width = 16)
+    private String outMaterialNum;
+
+    @ApiModelProperty(value = "鎿嶄綔浜哄悕绉�", example = "1")
+    @ExcelColumn(name="棰嗙敤浜�",index = 5,width = 16)
+    private String createUserName;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鎿嶄綔鏃堕棿",index = 6,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createDate;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
index e75dac5..5ae4161 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -7,8 +7,9 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.CategoryMapper;
-import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.model.*;
 import com.doumee.service.business.CategoryService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -37,6 +38,22 @@
     @Autowired
     private CategoryMapper categoryMapper;
 
+    @Autowired
+    private YwCustomerMapper ywCustomerMapper;
+
+    @Autowired
+    private YwWorkorderMapper ywWorkorderMapper;
+
+    @Autowired
+    private YwPatrolPointMapper ywPatrolPointMapper;
+
+    @Autowired
+    private YwDeviceMapper ywDeviceMapper;
+
+    @Autowired
+    private YwMaterialMapper ywMaterialMapper;
+
+
     @Override
     public Integer create(Category category) {
         checkUnique(category);
@@ -61,8 +78,32 @@
         return insert.getId();
     }
 
+
     @Override
     public void deleteById(Integer id) {
+        Category category = categoryMapper.selectById(id);
+        if(Objects.isNull(category)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+
+        if(categoryMapper.selectCount(new QueryWrapper<Category>().lambda()
+                .eq(Category::getIsdeleted,Constants.ZERO)
+                .eq(Category::getParentId,id)
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀛樺湪瀛愰泦鏁版嵁,鏃犳硶杩涜鍒犻櫎");
+        }
+        //鏌ヨ鏁版嵁鏄惁宸蹭娇鐢�     3杩愮淮-宸ュ崟鍒嗙被 4杩愮淮-宸℃鍖哄煙 5杩愮淮-璁惧鍒嗙被 6=瀹㈡埛琛屼笟 7=璧勪骇鍒嗙被
+        if(Constants.equalsInteger(category.getType(),Constants.THREE)){
+            if(ywWorkorderMapper.selectCount(new QueryWrapper<YwWorkorder>().lambda().eq(YwWorkorder::getIsdeleted,Constants.ZERO).eq(YwWorkorder::getCateId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }else if (Constants.equalsInteger(category.getType(),Constants.FOUR)){
+            if(ywPatrolPointMapper.selectCount(new QueryWrapper<YwPatrolPoint>().lambda().eq(YwPatrolPoint::getIsdeleted,Constants.ZERO).eq(YwPatrolPoint::getAreaId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }else if (Constants.equalsInteger(category.getType(),Constants.FIVE)){
+            if(ywDeviceMapper.selectCount(new QueryWrapper<YwDevice>().lambda().eq(YwDevice::getIsdeleted,Constants.ZERO).eq(YwDevice::getCateId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }else if (Constants.equalsInteger(category.getType(),Constants.SIX)){
+            if(ywCustomerMapper.selectCount(new QueryWrapper<YwCustomer>().lambda().eq(YwCustomer::getIsdeleted,Constants.ZERO).eq(YwCustomer::getIndustryId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }else if (Constants.equalsInteger(category.getType(),Constants.SEVEN)){
+            if(ywMaterialMapper.selectCount(new QueryWrapper<YwMaterial>().lambda().eq(YwMaterial::getIsdeleted,Constants.ZERO).eq(YwMaterial::getCateId,id))>Constants.ZERO)  throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍒嗙被宸茶浣跨敤,鏃犳硶杩涜鍒犻櫎");
+        }
         categoryMapper.update(null,new UpdateWrapper<Category>().lambda().set(Category::getIsdeleted,Constants.ONE)
                 .eq(Category::getId,id)
         );
@@ -195,6 +236,8 @@
         wrapper.lambda()
                 .ne(Objects.nonNull(category.getId()),Category::getId,category.getId())
                 .eq(Category::getIsdeleted,Constants.ZERO)
+                .eq(Objects.nonNull(category.getParentId()),Category::getParentId,category.getParentId())
+                .isNull(Objects.isNull(category.getParentId()),Category::getParentId)
                 .eq(Category::getType,category.getType())
                 .eq(Category::getName,category.getName());
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
index 4d4beaf..b760dd1 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -106,10 +106,11 @@
         String code = Constants.getRandom6Num();
         SmsConfig smsConfig = smsConfigMapper.selectOne(new QueryWrapper<SmsConfig>().lambda().eq(SmsConfig::getObjType,
                 SmsConstants.inventCode).last(" limit 1 "));
+        String comName = systemDictDataBiz.queryByCode(Constants.SMS,Constants.SMS_COMNAME).getCode();
         //寮�鍚煭淇¢�氱煡
         if(Objects.nonNull(smsConfig) || Constants.equalsInteger(smsConfig.getStatus(),Constants.ZERO)){
             if(StringUtils.isNotBlank(smsConfig.getContent())){
-                String content  = smsConfig.getContent().replace("{楠岃瘉鐮亇",code);
+                String content  = comName + smsConfig.getContent().replace("{楠岃瘉鐮亇",code);
                 emayService.sendSingleSms(smsEmail.getPhone(),content);
                 smsEmail.setRemark(code);
                 smsEmail.setIsdeleted(Constants.ZERO);
@@ -617,6 +618,7 @@
         if(result){
             result=   emailService.sendEmail(email,"璐﹀崟鍌垂",content,null);
         }
+        content = systemDictDataBiz.queryByCode(Constants.SMS,Constants.SMS_COMNAME).getCode() + content;
         SmsEmail smsEmail = new SmsEmail();
         smsEmail.setRemark(result?"閭欢鍙戦�佹垚鍔�":"閭欢鍙戦�佸け璐�");
         smsEmail.setIsdeleted(Constants.ZERO);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwContractBillServiceImpl.java
index 436e79a..5d36fa2 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
@@ -600,6 +600,7 @@
             .leftJoin(YwContract.class,YwContract::getId,YwContractBill::getContractId)
             .leftJoin(YwCustomer.class,YwCustomer::getId,YwContract::getRenterId)
             .eq(YwContractBill::getIsdeleted,Constants.ZERO)
+            .eq(YwContractBill::getStatus,Constants.ZERO)
             .in(YwContractBill::getPayStatus,Constants.ZERO,Constants.TWO,Constants.THREE,Constants.FOUR)
             .eq(YwContractBill::getContractId,contractId)
             .orderByDesc(YwContractBill::getId);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java
index d556571..b1fbb04 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
@@ -249,19 +249,6 @@
                     .set(YwPatrolTask::getEditor,loginUserInfo.getId())
             );
 
-//            if(ywPatrolTaskMapper.selectCount(new QueryWrapper<YwPatrolTask>().lambda()
-//                    .eq(YwPatrolTask::getSchemeId,ywPatrolTask.getSchemeId())
-//                    .in(YwPatrolTask::getStatus,Constants.ZERO,Constants.ONE)
-//                    .ne(YwPatrolTask::getId,ywPatrolTask.getId())
-//            )==Constants.ZERO){
-//                ywPatrolSchemeMapper.update(null,new UpdateWrapper<YwPatrolScheme>().lambda()
-//                        .eq(YwPatrolScheme::getId,ywPatrolScheme.getId())
-//                        .set(YwPatrolScheme::getStatus,Constants.TWO)
-//                        .set(YwPatrolScheme::getEditDate,DateUtil.getCurrDateTime())
-//                        .set(YwPatrolScheme::getEditor,loginUserInfo.getId())
-//                );
-//            }
-
             //鏍囪寰呭姙宸插鐞�
             noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                     .set(Notices::getStatus,Constants.ONE)
@@ -279,14 +266,6 @@
                         .set(YwPatrolTask::getEditor,loginUserInfo.getId())
                 );
             }
-//            if(Constants.equalsInteger(ywPatrolScheme.getStatus(),Constants.ZERO)){
-//                ywPatrolSchemeMapper.update(null,new UpdateWrapper<YwPatrolScheme>().lambda()
-//                        .eq(YwPatrolScheme::getId,ywPatrolScheme.getId())
-//                        .set(YwPatrolScheme::getStatus,Constants.ONE)
-//                        .set(YwPatrolScheme::getEditDate,DateUtil.getCurrDateTime())
-//                        .set(YwPatrolScheme::getEditor,loginUserInfo.getId())
-//                );
-//            }
             //鏍囪寰呭姙宸插鐞�
             noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                     .set(Notices::getParam3,Constants.ONE)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
index 2c33a6c..1571556 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
@@ -263,7 +263,26 @@
                 .le(Objects.nonNull(model.getDealDateEnd()),YwProblem::getDealDate, Utils.Date.getEnd(model.getDealDateEnd()))
                 .eq(Objects.nonNull(model.getDealStatus()),YwProblem::getDealStatus,model.getDealStatus())
         ;
-        IPage iPage = ywProblemMapper.selectJoinPage(page,YwProblem.class,queryWrapper);
+        IPage<YwProblem> iPage = ywProblemMapper.selectJoinPage(page,YwProblem.class,queryWrapper);
+        for (YwProblem ywProblem:iPage.getRecords()) {
+            List<Multifile> multifiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                    .eq(Multifile::getObjId, ywProblem.getId() )
+                    .in(Multifile::getObjType, Arrays.asList(new Integer[]{Constants.MultiFile.PROBLEM_FILE.getKey() }))
+                    .eq(Multifile::getIsdeleted,Constants.ZERO));
+            if(multifiles!=null){
+                String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                        +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_WORKORDER_FILE).getCode();
+                for(Multifile f : multifiles){
+                    if(StringUtils.isBlank(f.getFileurl())){
+                        continue;
+                    }
+                    f.setFileurlFull(path+f.getFileurl());
+                }
+                ywProblem.setFileList(multifiles);
+            }
+        }
+
+
         return PageData.from(iPage);
     }
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwRoomServiceImpl.java
index b5c03ed..1b7a0a9 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
@@ -138,6 +138,9 @@
         queryWrapper.selectAll(YwRoom.class )
                 .selectAs(YwProject::getName,YwRoom::getProjectName)
                 .selectAs(YwFloor::getName,YwRoom::getFloorName)
+                .select(" ifnull( ( select case when y1.status = 3 then now() BETWEEN y1.START_DATE and y1.BT_DATE else now() BETWEEN y1.START_DATE and y1.END_DATE END  " +
+                        "from yw_contract y1 left join yw_contract_room y2 on y1.id = y2.CONTRACT_ID and y2.TYPE = 0  " +
+                        "where y1.`STATUS` <> 4  and y2.room_id = t.id order by y1.create_date desc  limit 1  ) ,0) ",YwRoom::getLeaseStatus)
                 .selectAs(YwBuilding::getName,YwRoom::getBuildingName)
                 .leftJoin(YwProject.class,YwProject::getId,YwRoom::getProjectId)
                 .leftJoin(YwBuilding.class,YwBuilding::getId,YwRoom::getBuildingId)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
index 58d10e9..07ad32d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java
@@ -503,6 +503,9 @@
         if (pageWrap.getModel().getRoomId() != null) {
             queryWrapper.eq(YwWorkorder::getRoomId, pageWrap.getModel().getRoomId());
         }
+        if (pageWrap.getModel().getFloorId() != null) {
+            queryWrapper.eq(YwWorkorder::getFloorId, pageWrap.getModel().getFloorId());
+        }
         if (pageWrap.getModel().getUserId() != null) {
             queryWrapper.eq(YwWorkorder::getUserId, pageWrap.getModel().getUserId());
         }
diff --git a/server/visits/dmvisit_service/src/main/resources/application-dev.yml b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
index 29d1baf..b3984c7 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-dev.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
@@ -15,7 +15,15 @@
   jackson:
     time-zone: GMT+8
     date-format: yyyy-MM-dd HH:mm:ss
-
+  mail:
+    default-encoding: UTF-8
+    host: smtp.exmail.qq.com
+    username: jp@doumee.com
+    password: p7iKUE8VvQQpY58S
+    properties:
+      mail:
+        smtp:
+          auth: true
 
 debug_model: true
 
@@ -26,6 +34,8 @@
   need-deal-img: true #鏄惁闇�瑕佸鐞嗗浘鐗囨暟鎹�
 
 
+########################鍘嬬缉鍖呮枃浠朵綅缃�  ########################
+zip_file_path: d://
 # Swagger閰嶇疆
 swagger:
   host: 127.0.0.1
diff --git a/server/visits/dmvisit_service/src/main/resources/application-pro.yml b/server/visits/dmvisit_service/src/main/resources/application-pro.yml
index b27c85b..eeed79a 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-pro.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-pro.yml
@@ -15,10 +15,21 @@
   jackson:
     time-zone: GMT+8
     date-format: yyyy-MM-dd HH:mm:ss
-
+  mail:
+    default-encoding: UTF-8
+    host: smtp.exmail.qq.com
+    username: jp@doumee.com
+    password: p7iKUE8VvQQpY58S
+    properties:
+      mail:
+        smtp:
+          auth: true
 
 debug_model: true
 
+########################鍘嬬缉鍖呮枃浠朵綅缃�  ########################
+zip_file_path: d://
+
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
   org-user-data-origin: 0 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺
diff --git a/server/visits/dmvisit_service/src/main/resources/application-test.yml b/server/visits/dmvisit_service/src/main/resources/application-test.yml
index 6bc2caa..a8d00a5 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-test.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-test.yml
@@ -15,10 +15,20 @@
   jackson:
     time-zone: GMT+8
     date-format: yyyy-MM-dd HH:mm:ss
-
+  mail:
+    default-encoding: UTF-8
+    host: smtp.exmail.qq.com
+    username: jp@doumee.com
+    password: p7iKUE8VvQQpY58S
+    properties:
+      mail:
+        smtp:
+          auth: true
 
 debug_model: true
 
+########################鍘嬬缉鍖呮枃浠朵綅缃�  ########################
+zip_file_path: d://
 ########################鍚屾鏁版嵁妯″紡  ########################
 data-sync:
   org-user-data-origin: 0 #缁勭粐鏁版嵁 0鑷缓 2浠ユ捣搴蜂负涓� 1鍗庢櫉ERP绯荤粺

--
Gitblit v1.9.3