From c6a96d1162cb60d1bd30c8f5fde7a93985b79276 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 09 十月 2024 16:31:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 h5/static/driver/ic_dangqian.png                                                                              |    0 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CategoryCloudController.java                 |    7 
 server/system_service/src/main/java/com/doumee/core/utils/SmsConstants.java                                   |  141 +++++
 h5/static/driver/ic_mostarted.png                                                                             |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java                 |   97 ++++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsConfig.java                      |   70 ++
 screen/src/views/PlatformCall.vue                                                                             |   46 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CategoryService.java                  |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java          |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java      |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java         |   87 +--
 h5_meeting/pages/index/index.vue                                                                              |  248 +++++----
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java                |   91 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java             |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java    |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java                           |   30 +
 server/system_service/src/main/java/com/doumee/biz/system/impl/SystemPositionBizImpl.java                     |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java |    3 
 h5/pages.json                                                                                                 |    7 
 server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java                         |    1 
 h5/pages/waybill/waybillDetail.vue                                                                            |  207 ++++++++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java         |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsConfigMapper.java                      |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/PlatformLogJoinMapper.java           |   13 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java                       |   11 
 h5/static/driver/wuliuche_bg@2x.png                                                                           |    0 
 server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java                       |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformLog.java                    |   44 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java         |   25 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java        |  142 +++++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java                       |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformLogServiceImpl.java      |   57 +-
 h5_meeting/pages/index/config.vue                                                                             |   10 
 33 files changed, 1,190 insertions(+), 229 deletions(-)

diff --git a/h5/pages.json b/h5/pages.json
index 7a5fc0f..cc71d51 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -447,6 +447,13 @@
         	{
         		"navigationBarTitleText" : "鍏ュ洯椤荤煡"
         	}
+        },
+        {
+        	"path" : "pages/waybill/waybillDetail",
+        	"style" : 
+        	{
+        		"navigationBarTitleText" : "杩愬崟鏌ヨ"
+        	}
         }
     ],
 	"subPackages": [
diff --git a/h5/pages/waybill/waybillDetail.vue b/h5/pages/waybill/waybillDetail.vue
new file mode 100644
index 0000000..da8e896
--- /dev/null
+++ b/h5/pages/waybill/waybillDetail.vue
@@ -0,0 +1,207 @@
+<template>
+	<view class="main_app">
+		<image src="@/static/driver/wuliuche_bg@2x.png" class="main_bg"></image>
+		<view class="form_wrap">
+			<view class="item">
+				<view class="label">鍚堝悓缂栧彿</view>
+				<view class="line">
+					<view class="input_wrap"><input v-model="param.aa" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�" placeholder-class="place" type="text" /></view>
+				</view>
+			</view>
+			<view class="item">
+				<view class="label">闇�鏂圭紪鍙�</view>
+				<view class="line">
+					<view class="input_wrap"><input v-model="param.aa" placeholder="璇疯緭鍏ュ悎鍚屼腑闇�鏂圭紪鍙�" placeholder-class="place" type="text" /></view>
+				</view>
+			</view>
+			<view class="item">
+				<view class="label">楠岃瘉鐮�</view>
+				<view class="line">
+					<view class="input_wrap"><input v-model="param.aa" placeholder="璇疯緭鍏ラ獙璇佺爜" placeholder-class="place" type="text" /></view>
+					<image src="" class="auth_code" mode=""></image>
+				</view>
+			</view>
+			<view class="query">鏌ヨ</view>
+		</view>
+		<view class="title">鏌ヨ缁撴灉</view>
+		<view class="drive_info">
+			<view class="title">鍚堝悓缂栧彿</view>
+			<view class="line">
+				<view class="label">杩愯緭杞﹁締</view>
+				<view class="val">11</view>
+			</view>
+			<view class="line">
+				<view class="label">鍙告満淇℃伅</view>
+				<view class="val">11</view>
+			</view>
+			<view class="line">
+				<view class="label">杞﹁締浣嶇疆</view>
+				<view class="val">11</view>
+			</view>
+		</view>
+		<view class="drive_info">
+			<view class="title">鐗╂祦淇℃伅</view>
+			<view class="item">
+				<view class="h2">
+					<view class="icon_wrap"><image src="@/static/driver/ic_mostarted.png" class="icon"></image></view>
+					<view class="text">鍒拌揪鍗歌揣鍦�</view>
+				</view>
+				<view class="time">202422222222</view>
+				<view class="separate"></view>
+			</view>
+			<view class="item">
+				<view class="h2 h1">
+					<view class="icon_wrap"><image src="@/static/driver/ic_dangqian.png" class="icon"></image></view>
+					<view class="text">鍒拌揪鍗歌揣鍦�</view>
+				</view>
+				<view class="time">202422222222</view>
+				<view class="separate separate_ac"></view>
+			</view>
+			<view class="item">
+				<view class="h2">
+					<view class="icon_wrap"><image src="@/static/driver/ic_mostarted.png" class="icon"></image></view>
+					<view class="text">鍒拌揪鍗歌揣鍦�</view>
+				</view>
+				<view class="time">202422222222</view>
+				<view class="separate"></view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				param: {}
+			};
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.form_wrap {
+		width: 690rpx;
+		height: 646rpx;
+		background: #FFFFFF;
+		box-shadow: 0rpx 4rpx 20rpx 0rpx rgba(39,155,170,0.16);
+		border-radius: 16rpx;
+		padding: 10rpx 30rpx;
+		margin-bottom: 40rpx;
+		.item{
+			height: 154rpx;
+			padding: 30rpx 0 8rpx;
+			border-bottom: 1rpx solid #E5E5E5;
+			.label{}
+			.line{
+				display: flex;
+				.input_wrap{
+					padding: 18rpx 0;
+					flex: 1;
+					.place{
+						color: #999999;
+						font-size: 28rpx;
+					}
+				}
+				.auth_code{
+					width: 160rpx;
+					height: 64rpx;
+					border: 2px solid;
+				}
+			}
+		}
+		.query{
+			width: 630rpx;
+			height: 88rpx;
+			background: $uni-color-primary;
+			border-radius: 44rpx;
+			margin-top: 40rpx;
+			color: #fff;
+			display: flex;
+			justify-content: center;
+			align-items: center;
+			font-size: 30rpx;
+		}
+	}
+	.main_app{
+		padding-top: 218rpx;
+		.title{
+			font-weight: 500;
+			font-size: 32rpx;
+			margin-bottom: 30rpx;
+		}
+		.drive_info{
+			background: #F7F7F7;
+			border-radius: 16rpx;
+			padding: 30rpx;
+			margin-bottom: 20rpx;
+			.line{
+				display: flex;
+				margin-bottom: 24rpx;
+				.label{
+					color: #666666;
+					margin-right: 40rpx;
+				}
+				.val{
+					
+				}
+			}
+			.item{
+				position: relative;
+				color: #999999;
+				margin-bottom: 30rpx;
+				.h2{
+					display: flex;
+					align-items: center;
+					height: 48rpx;
+					.icon_wrap{
+						width: 48rpx;
+						margin-right: 30rpx;
+						display: flex;
+						align-items: center;
+						justify-content: center;
+						.icon{
+							width: 24rpx;
+							height: 24rpx;
+							position: relative;
+							z-index: 2;
+						}
+					}
+				}
+				.h1{
+					.icon_wrap{
+						.icon{
+							width: 48rpx;
+							height: 48rpx;
+						}
+					}
+				}
+				.time{
+					padding-left: 78rpx;
+					font-size: 24rpx;
+					margin-top: 6rpx;
+				}
+				.separate{
+					height: calc( 100% );
+					width: 2rpx;
+					border: 2rpx dashed red;
+					position: absolute;
+					left: 22rpx;
+					top: 24rpx;
+					z-index: 1;
+				}
+				.separate_ac{
+					top: 48rpx;
+				}
+			}
+		}
+	}
+	.main_bg {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 100%;
+		z-index: -1;
+		color: #222222;
+	}
+</style>
\ No newline at end of file
diff --git a/h5/static/driver/ic_dangqian.png b/h5/static/driver/ic_dangqian.png
new file mode 100644
index 0000000..774a4fb
--- /dev/null
+++ b/h5/static/driver/ic_dangqian.png
Binary files differ
diff --git a/h5/static/driver/ic_mostarted.png b/h5/static/driver/ic_mostarted.png
new file mode 100644
index 0000000..e5e966d
--- /dev/null
+++ b/h5/static/driver/ic_mostarted.png
Binary files differ
diff --git a/h5/static/driver/wuliuche_bg@2x.png b/h5/static/driver/wuliuche_bg@2x.png
new file mode 100644
index 0000000..227c21f
--- /dev/null
+++ b/h5/static/driver/wuliuche_bg@2x.png
Binary files differ
diff --git a/h5_meeting/pages/index/config.vue b/h5_meeting/pages/index/config.vue
index b2578aa..58301ed 100644
--- a/h5_meeting/pages/index/config.vue
+++ b/h5_meeting/pages/index/config.vue
@@ -11,7 +11,7 @@
 			<view class="item">
 				<view class="title">鎺ュ彛鍦板潃</view>
 				<view class="line">
-					<input type="text" placeholder="http://10.50.250.178:8088/gateway_interface/" v-model="param.baseUrl" />
+					<input type="text" v-model="param.baseUrl" />
 					<image src="../../static/icon/right.svg" class="icon"></image>
 				</view>
 			</view>
@@ -31,11 +31,15 @@
 	export default {
 		data() {
 			return {
-				param: {}
+				param: {
+					baseUrl: 'http://192.168.5.13/gateway_interface/'
+				}
 			};
 		},
 		onLoad(){
-			const param = uni.getStorageSync('param') || {}
+			const param = uni.getStorageSync('param') || {
+				baseUrl: 'http://192.168.5.13/gateway_interface/'
+			}
 			this.param = { ...param }
 		},
 		methods: {
diff --git a/h5_meeting/pages/index/index.vue b/h5_meeting/pages/index/index.vue
index 6682e3c..6f01181 100644
--- a/h5_meeting/pages/index/index.vue
+++ b/h5_meeting/pages/index/index.vue
@@ -8,13 +8,18 @@
 				<view class="date">{{date}}</view>
 			</view>
 		</view>
-		<view class="home_status">
-			<text v-if="!info.meetingListResponseList || info.meetingListResponseList.length == 0">绌洪棽涓�</text>
-			<text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 4">鍗冲皢寮�濮�</text>
-			<text class="orange" v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 2">浼氳涓�</text>
-			<text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 1">鏈紑濮�</text>
-			<text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 3">宸茬粨鏉�</text>
-			<text v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 5">宸叉挙閿�</text>
+		<view class="home_status">
+			<text v-if="!info.meetingListResponseList || info.meetingListResponseList.length == 0">绌洪棽涓�</text>
+			<text
+				v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 4">鍗冲皢寮�濮�</text>
+			<text class="orange"
+				v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 2">浼氳涓�</text>
+			<text
+				v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 1">鏈紑濮�</text>
+			<text
+				v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 3">宸茬粨鏉�</text>
+			<text
+				v-if="info.meetingListResponseList && info.meetingListResponseList.length > 0 && info.meetingListResponseList[0].meetingStatus == 5">宸叉挙閿�</text>
 		</view>
 		<view v-if="meetingInfo.meetingName" class="meeting_name">{{meetingInfo.meetingName}}</view>
 		<view v-if="meetingInfo.meetingTime && meetingInfo.bookingUser" class="meeting_con">
@@ -27,13 +32,15 @@
 					<image src="@/static/ic_people@2x.png"></image>
 					<text>棰勭害浜猴細{{meetingInfo.bookingUser }}</text>
 				</view>
-			</view>
-			<view v-if="meetingInfo.meetingTime" class="qrcode_wrap">
-				<canvas id="qrcode" canvas-id="qrcode" class="qrcode"></canvas>
+			</view>
+			<view v-if="showQrbg" class="qrcode_wrap">
+				<canvas id="qrcode" canvas-id="qrcode" class="qrcode"></canvas>
 			</view>
 		</view>
 		<view class="meeting_wrap">
-			<view class="title">浠婃棩浼氳锛坽{ info.meetingListResponseList && info.meetingListResponseList.length > 0 ? info.meetingListResponseList.length : 0 }}锛�</view>
+			<view class="title">
+				浠婃棩浼氳锛坽{ info.meetingListResponseList && info.meetingListResponseList.length > 0 ? info.meetingListResponseList.length : 0 }}锛�
+			</view>
 			<view class="list">
 				<view class="item" v-for="item in info.meetingListResponseList">
 					<view class="name">{{item.meetingName}}</view>
@@ -51,42 +58,46 @@
 		</view>
 
 		<!--  -->
-		<swiper v-if="info.fileType == 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)" class="swiper" circular autoplay indicator-dots>
+		<swiper
+			v-if="info.fileType == 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)"
+			class="swiper" circular autoplay indicator-dots>
 			<swiper-item v-for="item in info.multifileList">
 				<image class="swiper_item" :src="item.fileurlFull" mode="aspectFill"></image>
 			</swiper-item>
-		</swiper>
-		<!--  -->
-		<template v-if="info.fileType == 1 && info.multifileList && info.multifileList.length > 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)">
-			<video  :src="info.multifileList[0].fileurlFull" class="app_video" :autoplay="true" loop :controls="false"></video>
+		</swiper>
+		<!--  -->
+		<template
+			v-if="info.fileType == 1 && info.multifileList && info.multifileList.length > 0 && (info.meetingListResponseList == null || info.meetingListResponseList.length == 0)">
+			<video :src="info.multifileList[0].fileurlFull" class="app_video" :autoplay="true" loop :controls="false"></video>
 		</template>
 	</view>
 </template>
 
 <script>
-	import dayjs from 'dayjs'
-	// import vueQr from 'vue-qr/src/packages/vue-qr.vue'
+	import dayjs from 'dayjs'
+	// import vueQr from 'vue-qr/src/packages/vue-qr.vue'
 	import UQRCode from 'uqrcodejs'
 	import {
 		meetScreenData
 	} from '@/api/index.js'
-	export default {
+	export default {
 		// components: {vueQr},
 		data() {
 			return {
 				time: '',
 				date: '',
+				showQrbg: false,
 				timer: null,
 				touchNum: 0,
-				param: {},
-				info: {},
-				statusMap: {
-					1: '鏈紑濮�',
-					2: '杩涜涓�',
-					3: '宸茬粨鏉�',
-					4: '鍗冲皢寮�濮�',
-					5: '宸叉挙閿�',
-				},
+				param: {},
+				info: {},
+				statusMap: {
+					1: '鏈紑濮�',
+					2: '杩涜涓�',
+					3: '宸茬粨鏉�',
+					4: '鍗冲皢寮�濮�',
+					5: '宸叉挙閿�',
+				},
 				meetingInfo: {}
 			}
 		},
@@ -99,40 +110,47 @@
 				})
 			}
 			this.getData()
-		},
-		onReady() {
 		},
+		onReady() {},
 		methods: {
 			getData() {
+				this.showQrbg = false
 				meetScreenData({
 					roomId: this.param.code
-				}).then(res => {
-					this.info = res.data
-					if(this.info.meetingListResponseList && this.info.meetingListResponseList.length > 0){
-						this.meetingInfo = this.info.meetingListResponseList[0]
-						this.$nextTick(() => {
-							this.qrcodeCreate()
-							this.$forceUpdate()
-						})
-					}
+				}).then(res => {
+					this.info = res.data
+					if (this.info.meetingListResponseList && this.info.meetingListResponseList.length > 0) {
+						this.meetingInfo = this.info.meetingListResponseList[0]
+						this.$nextTick(() => {
+							this.qrcodeCreate()
+							this.$forceUpdate()
+						})
+					} else {
+						this.showQrbg = false
+						this.meetingInfo = {}
+					}
 				})
-			},
-			qrcodeCreate(){
-				 // 鑾峰彇uQRCode瀹炰緥
-				  var qr = new UQRCode();
-				  // 璁剧疆浜岀淮鐮佸唴瀹�
-				  // qr.data = "https://uqrcode.cn/doc";
-				  qr.data = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxac2a80c2144c4ee0&redirect_uri=http://192.168.0.109:8080/redirect.html&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
-				  // 璁剧疆浜岀淮鐮佸ぇ灏忥紝蹇呴』涓巆anvas璁剧疆鐨勫楂樹竴鑷�
-				  qr.size = 83;
-				  // 璋冪敤鍒朵綔浜岀淮鐮佹柟娉�
-				  qr.make();
-				  // 鑾峰彇canvas涓婁笅鏂�
-				  var canvasContext = uni.createCanvasContext('qrcode', this); // 濡傛灉鏄粍浠讹紝this蹇呴』浼犲叆
-				  // 璁剧疆uQRCode瀹炰緥鐨刢anvas涓婁笅鏂�
-				  qr.canvasContext = canvasContext;
-				  // 璋冪敤缁樺埗鏂规硶灏嗕簩缁寸爜鍥炬缁樺埗鍒癱anvas涓�
-				  qr.drawCanvas();
+			},
+			qrcodeCreate() {
+				this.showQrbg = true
+				this.$nextTick(() => {
+					// 鑾峰彇uQRCode瀹炰緥
+					var qr = new UQRCode();
+					// 璁剧疆浜岀淮鐮佸唴瀹�
+					// qr.data = "https://uqrcode.cn/doc";
+					qr.data =
+						"https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxac2a80c2144c4ee0&redirect_uri=http://192.168.0.109:8080/redirect.html&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
+					// 璁剧疆浜岀淮鐮佸ぇ灏忥紝蹇呴』涓巆anvas璁剧疆鐨勫楂樹竴鑷�
+					qr.size = 83;
+					// 璋冪敤鍒朵綔浜岀淮鐮佹柟娉�
+					qr.make();
+					// 鑾峰彇canvas涓婁笅鏂�
+					var canvasContext = uni.createCanvasContext('qrcode', this); // 濡傛灉鏄粍浠讹紝this蹇呴』浼犲叆
+					// 璁剧疆uQRCode瀹炰緥鐨刢anvas涓婁笅鏂�
+					qr.canvasContext = canvasContext;
+					// 璋冪敤缁樺埗鏂规硶灏嗕簩缁寸爜鍥炬缁樺埗鍒癱anvas涓�
+					qr.drawCanvas();
+				})
 			},
 			touchend() {
 				this.touchNum++
@@ -155,44 +173,53 @@
 				this.timer = setInterval(() => {
 					this.time = dayjs().format('HH:mm')
 					this.date = dayjs().format('YYYY-MM-DD') + ' ' + weeks[new Date().getDay()]
-				}, 1000)
-				setInterval(() => {
-					this.getData()
-				},this.param.time ? this.param.time * 1000 : 60 * 1000)
+				}, 1000)
+				setInterval(() => {
+					this.getData()
+				}, this.param.time ? this.param.time * 1000 : 60 * 1000)
 			}
 		}
 	}
 </script>
 
-<style lang="scss" scoped>
-	page,body{
-		overflow: hidden;
-	}
-	.swiper{
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 999;
-		width: 100%;
-		height: 100vh;
-		.swiper_item{
-			background-color: #0095AC;
-			width: 100%;
-			height: 100vh;
-		}
-	}
-	.app_video{
-		width: 100%;
-		height: 100vh;
-		position: fixed;
-		top: 0;
-		left: 0;
-		z-index: 999;
+<style lang="scss" scoped>
+	page,
+	body {
+		overflow: hidden;
 	}
+
+	.swiper {
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 999;
+		width: 100%;
+		height: 100vh;
+
+		.swiper_item {
+			background-color: #0095AC;
+			width: 100%;
+			height: 100vh;
+		}
+	}
+
+	.app_video {
+		width: 100%;
+		height: 100vh;
+		position: fixed;
+		top: 0;
+		left: 0;
+		z-index: 999;
+	}
+
 	.main_app {
 		width: 100%;
 		height: 100vh;
-		position: relative;
+		position: fixed;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
 		font-size: 28rpx;
 		display: flex;
 		flex-direction: column;
@@ -230,14 +257,16 @@
 					flex-shrink: 0;
 					flex-direction: column;
 					width: 403rpx;
-					height: 315rpx;
-					background: linear-gradient( 90deg, #0080FF 0%, #00B0FF 100%);
+					height: 315rpx;
+					background: linear-gradient(90deg, #0080FF 0%, #00B0FF 100%);
 					border-radius: 7rpx;
 					margin-right: 28rpx;
 					position: relative;
-					&:nth-of-type(1){
-						background: linear-gradient(90deg, #0095AC 0%, #00B5D1 100%);
+
+					&:nth-of-type(1) {
+						background: linear-gradient(90deg, #0095AC 0%, #00B5D1 100%);
 					}
+
 					.item_bg {
 						position: absolute;
 						width: 178rpx;
@@ -250,13 +279,14 @@
 					.name {
 						flex: 1;
 						font-weight: bold;
-						font-size: 39rpx;
-						width: 100%;
-						word-break: break-all;
-						text-overflow: ellipsis;
-						display: -webkit-box;
-						-webkit-box-orient: vertical;
-						-webkit-line-clamp: 3; /* 瓒呭嚭鍑犺鐪佺暐 */
+						font-size: 39rpx;
+						width: 100%;
+						word-break: break-all;
+						text-overflow: ellipsis;
+						display: -webkit-box;
+						-webkit-box-orient: vertical;
+						-webkit-line-clamp: 3;
+						/* 瓒呭嚭鍑犺鐪佺暐 */
 					}
 
 					.line {
@@ -292,19 +322,21 @@
 					}
 				}
 			}
-			.qrcode_wrap{
-				width: 92px;
-				height: 92px;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				background-color: #fff;
-				.qrcode {
-					width: 84px;
-					height: 84px;
-				}
+
+			.qrcode_wrap {
+				width: 92px;
+				height: 92px;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				background-color: #fff;
+
+				.qrcode {
+					width: 84px;
+					height: 84px;
+				}
 			}
-			
+
 		}
 
 		.meeting_name {
diff --git a/screen/src/views/PlatformCall.vue b/screen/src/views/PlatformCall.vue
index 9d2a827..a3ed50c 100644
--- a/screen/src/views/PlatformCall.vue
+++ b/screen/src/views/PlatformCall.vue
@@ -106,7 +106,7 @@
   var qr = new UQRCode()
   // 璁剧疆浜岀淮鐮佸唴瀹�
   qr.data = qrcode.value
-  qr.size = 254
+  qr.size = 220
   // 璋冪敤鍒朵綔浜岀淮鐮佹柟娉�
   qr.make()
   var canvas = document.getElementById("qrcode")
@@ -174,7 +174,7 @@
           </div>
           <div class="item">{{ item.platformName || '-' }}</div>
           <div class="item">
-            <div class="time_place">棰勮瀹屾垚鏃堕棿</div>
+            <div v-if="item.optTimeTemp" class="time_place">棰勮瀹屾垚鏃堕棿</div>
             <div>{{ item.optTimeTemp || '-' }}</div>
           </div>
         </div>
@@ -203,7 +203,7 @@
         </div>
         <div class="qrcode_wrap">
           <div class="qrcode">
-            <canvas id="qrcode" width="254" height="254"></canvas>
+            <canvas id="qrcode" width="220" height="220"></canvas>
           </div>
           <div class="title">璇锋壂鐮佺鍒�</div>
         </div>
@@ -218,16 +218,23 @@
 </template>
 
 <style lang="scss" scoped>
+div{
+  box-sizing: border-box;
+}
 .main_app {
   color: #fff;
+  position: fixed;
+  top: 0;
+  left: 0;
   width: 100%;
   height: 100vh;
+  overflow: hidden;
   background-color: #092030;
   position: relative;
   z-index: -2;
   display: flex;
   flex-direction: column;
-
+  justify-content: space-between;
   .main_header {
     width: 100%;
     height: 112px;
@@ -281,16 +288,15 @@
     display: flex;
     padding: 30px 20px;
     position: relative;
-
     .list {
       flex: 5;
       margin-right: 20px;
-
+      display: flex;
+      flex-direction: column;
       .line {
         display: flex;
         align-items: center;
-        height: 100px;
-
+        flex: 1;
         &:nth-of-type(2n) {
           background: rgba(255, 255, 255, 0);
         }
@@ -307,13 +313,15 @@
           font-weight: 500;
           font-size: 36px;
           flex: 10;
+          height: 100%;
           .time_place{
             font-weight: 500;
             font-size: 24px;
           }
           .status {
-            width: 174px;
-            height: 76px;
+            /* padding: 0 28px; */
+            width: 170px;
+            height: 72%;
             border-radius: 8px;
             display: flex;
             justify-content: center;
@@ -351,14 +359,13 @@
       flex: 2;
       display: flex;
       flex-direction: column;
-
+      border: 1px solid red;
       .tip_wrap {
         margin-bottom: 20px;
         width: 100%;
         position: relative;
-        flex-shrink: 0;
+        /* flex-shrink: 0; */
         flex: 1;
-
         .current_plat {
           display: flex;
           flex-direction: column;
@@ -369,18 +376,18 @@
 
           .id_card {
             font-weight: bold;
-            font-size: 86px;
+            font-size: 68px;
           }
 
           .no {
             margin: 10px 0;
             font-weight: 500;
-            font-size: 58px;
+            font-size: 52px;
           }
 
           .place {
             font-weight: 500;
-            font-size: 42px;
+            font-size: 36px;
           }
 
           .plat {
@@ -426,23 +433,22 @@
       .qrcode_wrap {
         width: 100%;
         flex: 1;
-        flex-shrink: 0;
+        /* flex-shrink: 0; */
         background-color: #51b2ce;
-        padding: 36px 0;
         display: flex;
         flex-direction: column;
         align-items: center;
         justify-content: center;
 
         .qrcode {
-          padding: 12px;
+          padding: 6px;
           background-color: #fff;
         }
 
         .title {
           margin-top: 20px;
           font-weight: bold;
-          font-size: 38px;
+          font-size: 34px;
           color: #111111;
         }
       }
diff --git a/server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java b/server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java
index f0af8bf..0c257b6 100644
--- a/server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java
+++ b/server/system_service/src/main/java/com/doumee/api/system/SystemPositionController.java
@@ -2,6 +2,7 @@
 
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemPositionBiz;
+import com.doumee.config.annotation.CloudRequiredPermission;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.constants.OperaType;
@@ -17,7 +18,6 @@
 import com.doumee.service.system.SystemUserService;
 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.validation.annotation.Validated;
 
@@ -47,7 +47,7 @@
     @PreventRepeat
     @ApiOperation("鏂板缓")
     @PostMapping("/create")
-    @RequiresPermissions("system:position:create")
+    @CloudRequiredPermission("system:position:create")
     public ApiResponse create(@Validated(OperaType.Create.class) @RequestBody SystemPosition systemPosition, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         systemPosition.setCreateUser(this.getLoginUser(token).getId());
         return ApiResponse.success(systemPositionBiz.create(systemPosition));
@@ -55,7 +55,7 @@
 
     @ApiOperation("鍒犻櫎")
     @GetMapping("/delete/{id}")
-    @RequiresPermissions("system:position:delete")
+    @CloudRequiredPermission("system:position:delete")
     public ApiResponse deleteById(@PathVariable Integer id) {
         systemPositionBiz.deleteById(id);
         return ApiResponse.success(null);
@@ -63,7 +63,7 @@
 
     @ApiOperation("鎵归噺鍒犻櫎")
     @GetMapping("/delete/batch")
-    @RequiresPermissions("system:position:delete")
+    @CloudRequiredPermission("system:position:delete")
     public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
         String [] idArray = ids.split(",");
         List<Integer> idList = new ArrayList<>();
@@ -76,7 +76,7 @@
 
     @ApiOperation("淇敼")
     @PostMapping("/updateById")
-    @RequiresPermissions("system:position:update")
+    @CloudRequiredPermission("system:position:update")
     public ApiResponse updateById(@Validated(OperaType.Update.class) @RequestBody SystemPosition systemPosition, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         systemPosition.setUpdateUser(this.getLoginUser(token).getId());
         systemPositionBiz.updateById(systemPosition);
@@ -85,14 +85,14 @@
 
     @ApiOperation("鏌ヨ宀椾綅鏍戝垪琛�")
     @PostMapping("/tree")
-    @RequiresPermissions("system:position:query")
+    @CloudRequiredPermission("system:position:query")
     public ApiResponse<List<SystemPositionListVO>> findTree () {
         return ApiResponse.success(systemPositionBiz.findTree());
     }
 
     @ApiOperation("鏌ヨ宀椾綅鍒楄〃")
     @PostMapping("/all")
-    @RequiresPermissions("system:position:query")
+    @CloudRequiredPermission("system:position:query")
     public ApiResponse<List<SystemPosition>> findList () {
         SystemPosition systemPosition = new SystemPosition();
         systemPosition.setDeleted(Boolean.FALSE);
@@ -102,7 +102,7 @@
     @Trace(exclude = true)
     @ApiOperation("鏌ヨ宀椾綅浜哄憳")
     @PostMapping("/users")
-    @RequiresPermissions("system:position:queryUsers")
+    @CloudRequiredPermission("system:position:queryUsers")
     public ApiResponse<PageData<SystemUserListVO>> findPage (@RequestBody PageWrap<QuerySystemUserDTO> pageWrap) {
         return ApiResponse.success(systemUserService.findPage(pageWrap));
     }
diff --git a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemPositionBizImpl.java b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemPositionBizImpl.java
index 1ed6e9a..1c136a8 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemPositionBizImpl.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemPositionBizImpl.java
@@ -51,7 +51,7 @@
 
     @Override
     public List<SystemPositionListVO> findTree() {
-        return positionDataPermissionAware.execute();
+        return systemPositionService.findList();
     }
 
     @Override
diff --git a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
index 5b6a153..71edf44 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemUserBizImpl.java
@@ -137,6 +137,7 @@
         // 鐢熸垚瀵嗙爜
         systemUser.setPassword(Utils.Secure.encryptPassword(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.INITIAL_PASSWORD).getCode(), salt));
         systemUser.setSalt(salt);
+        systemUser.setSource(Constants.ZERO);
 
         // 鍒涘缓鐢ㄦ埛璁板綍
         systemUser.setType(Constants.ZERO);
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/SmsConstants.java b/server/system_service/src/main/java/com/doumee/core/utils/SmsConstants.java
new file mode 100644
index 0000000..4a0b2ab
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/utils/SmsConstants.java
@@ -0,0 +1,141 @@
+package com.doumee.core.utils;
+
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.PropertyNamingStrategy;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class SmsConstants {
+
+    public interface SmsObjectType{
+        String inventCode = "0"; //楠岃瘉鐮�
+        String visit= "1"; //璁垮鐢宠
+        String visitReport = "2"; //璁垮鎶ュ
+        String hiddenDanger ="3";//闅愭偅闅忔墜鎷�
+        String carUse ="4";//鐢ㄨ溅鐢宠
+        String meeting ="5";//浼氳棰勭害
+        String platformBook ="6";//鐗╂祦杞﹂绾�
+        String platformJob ="7";//鏈堝彴浣滀笟
+    }
+
+    /**
+     * 璁垮鐢宠
+     */
+    public interface visitContent{
+        //璁垮鐢宠-閫氱煡锛堢粰瀹℃壒浜猴級
+        String visitNotice = "鎮ㄦ湁涓�鏉°�恵璁垮鐢宠}銆戦渶瑕佸鐞嗭紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪嬨��";
+        //璁垮鐢宠-瀹℃壒閫氳繃閫氱煡锛堢粰鐢宠浜猴級锛氥��
+        String visitAuditSuccess = "鎮ㄧ殑銆恵璁垮鐢宠}銆戝凡缁忓鎵归�氳繃锛岃浜巤棰勭害鍏ュ洯寮�濮嬫椂闂磢鍓嶅線闂ㄥ崼瀹よ瀹㈡満绛惧埌鍏ュ洯锛屽鏈夌枒闂紝璇疯仈绯昏璁夸汉";
+        //璁垮鐢宠-瀹℃壒椹冲洖閫氱煡锛堢粰鐢宠浜猴級锛氥��
+        String visitAuditFail = "鎮ㄧ殑銆恵璁垮鐢宠}銆戝凡琚┏鍥烇紝椹冲洖鍘熷洜涓猴細{椹冲洖鍘熷洜}銆傚鏈夌枒闂紝璇疯仈绯昏璁夸汉銆�";
+        //璁垮鐢宠-瓒呮椂鏈绂�-閫氱煡锛堢粰鐢宠浜猴級锛�
+        String visitTimeOutSignOut = "鎮ㄧ殑銆愯瀹㈢敵璇枫�戝凡浜巤鍒版湡鏃堕棿}鍒版湡锛岃鍙婃椂绂诲満骞跺墠寰�闂ㄥ崼瀹よ瀹㈡満绛剧锛屽鏈夌枒闂紝璇疯仈绯昏璁夸汉";
+        //璁垮鐢宠-瓒呮椂鏈绂�-閫氱煡锛堢粰鎸囧畾鎺ユ敹浜猴級
+        String visitTimeOutSignOutNum = "浠婃棩杩樻湁{鏈绂绘暟閲弣涓瀹㈡湭绛剧锛岃鍓嶅線PC绔煡鐪嬭缁嗕俊鎭��";
+
+    }
+
+
+    /**
+     * 璁垮鎶ュ
+     */
+    public interface visitReportingContent{
+        //璁垮鎶ュ-閫氱煡锛堢粰瀹℃壒浜猴級
+        String visitReportingNotice = "鎮ㄦ湁涓�鏉°�恵璁垮鎶ュ}銆戦渶瑕佸鐞嗭紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪嬨��";
+        //璁垮鎶ュ-瀹℃壒閫氳繃閫氱煡锛堢粰鐢宠浜猴級锛氥��
+        String visitReportingAuditSuccess = "鎮ㄧ殑銆恵璁垮鎶ュ}銆戝凡缁忓鎵归�氳繃锛岃閫氱煡璁垮浜巤棰勭害鍏ュ洯寮�濮嬫椂闂磢鍚庝箻鍧恵杞︾墝鍙穧鍏ュ洯锛屽鏈夌枒闂紝璇疯仈绯昏璁夸汉銆�";
+        //璁垮鎶ュ-瀹℃壒椹冲洖閫氱煡锛堢粰鐢宠浜猴級锛氥��
+        String visitReportingAuditFail = "鎮ㄧ殑銆恵璁垮鎶ュ}銆戝凡琚┏鍥烇紝椹冲洖鍘熷洜涓猴細{椹冲洖鍘熷洜}銆傚鏈夌枒闂紝璇疯仈绯诲鎵逛汉銆�";
+        //璁垮鎶ュ-瓒呮椂鏈鍦�-閫氱煡锛堢粰鐢宠浜猴級锛�
+        String visitReportingTimeOutSignOut = "鎮ㄧ殑銆愯瀹㈡姤澶囥�戝凡浜巤棰勭害鍏ュ洯缁撴潫鏃堕棿}鍒版湡锛岃鍙婃椂绂诲満锛屽鏈夌枒闂紝璇疯仈绯昏璁夸汉";
+        //璁垮鎶ュ-瓒呮椂鏈鍦�-閫氱煡锛堢粰鎸囧畾鎺ユ敹浜猴級
+        String visitReporting_time_out_sign_out_num = "浠婃棩杩樻湁{鏈绂绘暟閲弣涓瀹㈡姤澶囪溅杈嗘湭绂诲満锛岃鍓嶅線PC绔煡鐪嬭缁嗕俊鎭��";
+    }
+
+
+    /**
+     * 闅愭偅闅忔墜鎷�
+     */
+    public interface hiddenDangerContent{
+        //闅愭偅闅忔墜鎷�-閫氱煡锛堢粰澶勭悊浜猴級
+        String hiddenDanger_deal_user = "鎮ㄦ湁涓�鏉°�恵闅愭偅闅忔墜鎷�-娑堥槻闅愭偅}銆戦渶瑕佸鐞嗭紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪�";
+        //闅愭偅闅忔墜鎷�-澶勭悊瀹屾垚锛堢粰鐢宠浜猴級锛氥��
+        String hiddenDanger_deal_over = "鎮ㄦ彁浜ょ殑銆恵闅愭偅闅忔墜鎷�-娑堥槻闅愭偅}銆戝凡缁忓鐞嗗畬姣曪紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪嬨��";
+    }
+
+
+    /**
+     * 鐢ㄨ溅鐢宠
+     */
+    public interface carUseBookContent{
+        //鐭俊閫氱煡妯℃澘锛堢粰澶勭悊浜猴級
+        String carUseBook_wait_audit = "鎮ㄦ湁涓�鏉°�恵鐢ㄨ溅鐢宠}銆戦渶瑕佸鐞嗭紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪嬨��";
+        //鐢ㄨ溅鐢宠-瀹℃壒閫氳繃閫氱煡锛堢粰鐢宠浜猴級锛氥��
+        String carUseBook_audit_success = "鎮ㄧ殑銆恵鐢ㄨ溅鐢宠}銆戝凡缁忓鎵归�氳繃锛屽嚭鍙戞椂闂翠负{鎻愪氦鐨勫嚭鍙戞椂闂磢锛岃鎸夋椂鐢ㄨ溅銆傚鐢ㄨ溅璁″垝鏈夊彉锛岃鍙婃椂鑱旂郴娲捐溅鍛樸��";
+        //鐢ㄨ溅鐢宠-瀹℃壒椹冲洖閫氱煡锛堢粰鐢宠浜猴級锛氥��
+        String carUseBook_audit_fail = "鎮ㄧ殑銆恵鐢ㄨ溅鐢宠}銆戝凡琚┏鍥烇紝椹冲洖鍘熷洜涓猴細{椹冲洖鍘熷洜}銆傚鏈夌枒闂紝璇疯仈绯绘淳杞﹀憳銆�";
+        //鐢ㄨ溅鐢宠-瀹℃壒椹冲洖閫氱煡锛堢粰鐢宠浜猴級锛氥��
+        String carUseBook_cancel = "鎮ㄧ殑銆恵鐢ㄨ溅鐢宠}銆戝凡琚彇娑堬紝鍙栨秷鍘熷洜涓猴細{鍙栨秷鍘熷洜}銆傚鏈夌枒闂紝璇疯仈绯绘淳杞﹀憳銆�";
+    }
+
+
+    /**
+     * 鐗╂祦杞﹂绾�
+     */
+    public interface platformBookContent{
+        //鐭俊閫氱煡妯℃澘锛堢粰澶勭悊浜猴級
+        String platformBook_wait_audit = "鎮ㄦ湁涓�鏉°�愯溅杈嗗叆鍥敵璇枫�戦渶瑕佸鐞嗭紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪嬨��";
+        //鐗╂祦杞﹂绾�-瀹℃壒閫氳繃閫氱煡锛堢粰鐢宠浜猴級锛氥��
+        String platformBook_audit_success = "鎮ㄧ殑銆愯溅杈嗗叆鍥敵璇枫�戝凡缁忓鎵归�氳繃锛屽叆鍥椂闂翠负2024-7-19 09:00锛岃鎻愬墠30鍒嗛挓鍓嶅線鐜板満绛惧埌銆傚璁″垝鏈夊彉锛岃鍙婃椂鑱旂郴瀹℃牳浜哄憳銆�";
+        //鐗╂祦杞﹂绾�-瀹℃壒椹冲洖鐭俊閫氱煡妯℃澘锛堢粰鐢宠浜猴級
+        String platformBook_audit_fail = "鎮ㄧ殑銆愯溅杈嗗叆鍥敵璇枫�戝凡琚┏鍥烇紝椹冲洖鍘熷洜涓猴細{椹冲洖鍘熷洜}銆傚鏈夌枒闂紝璇疯仈绯诲鏍镐汉鍛樸��";
+        //鐗╂祦杞﹂绾�-鍏ュ洯棰勭害鍙栨秷鐭俊閫氱煡妯℃澘锛堢粰鐢宠浜猴級
+        String carUseBook_cancel = "鎮ㄧ殑銆愯溅杈嗗叆鍥敵璇枫�戝凡琚彇娑堬紝鍙栨秷鍘熷洜涓猴細{鍙栨秷鍘熷洜}銆傚鏈夌枒闂紝璇疯仈绯诲鏍镐汉鍛樸��";
+    }
+
+
+    /**
+     * 鐗╂祦浣滀笟
+     */
+    public interface platformJobContent{
+        // 杩愯緭浠诲姟涓嬭揪 锛堢粰鍙告満锛�
+        String platformJob_new_job = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝鎮ㄦ湁涓�涓柊鐨勮繍杈撲换鍔★紝璇︾粏淇℃伅璇峰墠寰�寰俊鍏紬鍙锋煡鐪嬨��";
+        //鐗╂祦杞︿綔涓�-杩愯緭浠诲姟涓鎻愰啋锛堢粰鍙告満锛夛細銆�
+        String platformJob_stop_job = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝鎮ㄧ殑杩愯緭浠诲姟宸茶鍙栨秷锛岃缁嗕俊鎭鍓嶅線寰俊鍏紬鍙锋煡鐪嬨��";
+        //鐗╂祦杞﹂绾�-鍙彿鍏ュ洯绛夊緟锛堢粰鍙告満锛�
+        String platformBook_call_in = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝璇峰湪10鍒嗛挓鍐咃紝鍓嶅線鍥尯绛夊緟鍖虹瓑寰呭彨鍙蜂綔涓氥��";
+        //鐗╂祦杞﹂绾�-鏈堝彴鍙彿锛堢粰鍙告満锛�
+        String platformBook_sing_in = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝璇峰湪10鍒嗛挓鍐咃紝鍓嶅線{鏈堝彴鍚嶇О}杩涜浣滀笟銆�";
+        //鐗╂祦杞﹂绾�-鏈堝彴鍙彿杩囧彿锛堢粰鍙告満锛�
+        String platformBook_over_num = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝鎮ㄧ殑浠诲姟宸茶繃鍙凤紝璇烽噸鏂扮鍒版帓闃熺瓑寰呫��";
+        //鐗╂祦杞﹂绾�-浣滀笟寮�濮嬶紙缁欏徃鏈猴級
+        String platformBook_working = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝鎮ㄧ殑杞﹁締宸插湪{鏈堝彴鍚嶇О}寮�濮嬩綔涓氾紝璇烽殢鏃跺叧娉ㄤ綔涓氭儏鍐点��";
+        //鐗╂祦杞﹂绾�-浣滀笟瀹屾垚锛堢粰鍙告満锛�
+        String platformBook_finish = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝鎮ㄧ殑杞﹁締宸插湪{鏈堝彴鍚嶇О}瀹屾垚浣滀笟锛岃鍙婃椂椹剁鏈堝彴銆�";
+        //鐗╂祦杞﹂绾�-浣滀笟寮傚父鎸傝捣锛堢粰鍙告満锛�
+        String platformBook_error = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝鎮ㄥ湪{鏈堝彴鍚嶇О}鐨勪綔涓氫换鍔″凡缁忚寮傚父鎸傝捣锛岃鍙婃椂鍏虫敞鍏蜂綋鎯呭喌";
+        //鐗╂祦杞﹂绾�-鏈堝彴杞Щ锛堢粰鍙告満锛�
+        String platformBook_move = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝鎮ㄥ湪{鏈堝彴鍚嶇О}鐨勪綔涓氫换鍔″凡缁忓凡琚浆绉昏嚦{杞Щ鍚庢湀鍙板悕绉皚锛岃鍙婃椂鍏虫敞鍙彿鎯呭喌銆�";
+        //鐗╂祦杞﹂绾�-鏈堝彴鍋滈潬瓒呮椂锛堢粰鍙告満锛�
+        String platformBook_time_out = "銆愯溅鐗屽彿銆戣溅涓绘偍濂斤紝鎮ㄥ湪{鏈堝彴鍚嶇О}宸插仠闈犺秴鏃讹紝璇峰敖蹇┒绂讳互鍏嶅奖鍝嶅悗缁綔涓氥��";
+
+    }
+
+
+
+
+
+
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CategoryCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CategoryCloudController.java
index f09907f..ce95704 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CategoryCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CategoryCloudController.java
@@ -75,6 +75,13 @@
         return ApiResponse.success(categoryService.findPage(pageWrap));
     }
 
+    @ApiOperation("鍒楄〃鏌ヨ")
+    @PostMapping("/list")
+    @CloudRequiredPermission("business:category:query")
+    public ApiResponse<List<Category>> findList (@RequestBody Category category,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+        return ApiResponse.success(categoryService.queryList(category));
+    }
+
     @ApiOperation("瀵煎嚭Excel")
     @PostMapping("/exportExcel")
     @CloudRequiredPermission("business:category:exportExcel")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java
new file mode 100644
index 0000000..1e05013
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/SmsConfigCloudController.java
@@ -0,0 +1,91 @@
+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.SmsConfig;
+import com.doumee.service.business.SmsConfigService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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 2024/10/09 15:41
+ */
+@Api(tags = "鐭俊涓氬姟閰嶇疆")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/smsConfig")
+public class SmsConfigCloudController extends BaseController {
+
+    @Autowired
+    private SmsConfigService smsConfigService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:smsconfig:create")
+    public ApiResponse create(@RequestBody SmsConfig smsConfig) {
+        return ApiResponse.success(smsConfigService.create(smsConfig));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:smsconfig:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        smsConfigService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:smsconfig:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        smsConfigService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:smsconfig:update")
+    public ApiResponse updateById(@RequestBody SmsConfig smsConfig) {
+        smsConfigService.updateById(smsConfig);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:smsconfig:query")
+    public ApiResponse<PageData<SmsConfig>> findPage (@RequestBody PageWrap<SmsConfig> pageWrap) {
+        return ApiResponse.success(smsConfigService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:smsconfig:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<SmsConfig> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(SmsConfig.class).export(smsConfigService.findPage(pageWrap).getRecords(), "鐭俊涓氬姟閰嶇疆", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:smsconfig:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(smsConfigService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsConfigMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsConfigMapper.java
new file mode 100644
index 0000000..22910c9
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/SmsConfigMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.SmsConfig;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/10/09 15:41
+ */
+public interface SmsConfigMapper extends BaseMapper<SmsConfig> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/PlatformLogJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/PlatformLogJoinMapper.java
new file mode 100644
index 0000000..199937e
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/PlatformLogJoinMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business.join;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.PlatformLog;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/06/28 10:03
+ */
+public interface PlatformLogJoinMapper extends MPJBaseMapper<PlatformLog> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java
index c8b8d0b..766948d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Cars.java
@@ -113,15 +113,17 @@
     private Integer authStatus;
 
 
-    @ApiModelProperty(value = "鎵�灞炲垎缁勭紪鐮侊紙鍏宠仈car_group)", example = "1")
-    @ExcelColumn(name="鎵�灞炲垎缁勭紪鐮侊紙鍏宠仈car_group)")
+    @ApiModelProperty(value = "鎵�灞炵粍缁囦富閿紙鍏宠仈company)", example = "1")
+    @ExcelColumn(name="鎵�灞炵粍缁囦富閿紙鍏宠仈company)")
     private Integer groupId;
 
     @ApiModelProperty(value = "绫诲瀷 0瀹夋嘲鍏姟杞� 1瀹夋嘲鑷湁鐗╂祦杞� 2鍏跺畠", example = "1")
     @ExcelColumn(name="绫诲瀷 0瀹夋嘲鍏姟杞� 1瀹夋嘲鑷湁鐗╂祦杞� 2鍏跺畠")
     private Integer type;
 
-
+    @ApiModelProperty(value = "鎵�灞炲垎绫荤紪鐮�", example = "1")
+    @ExcelColumn(name="鎵�灞炲垎绫荤紪鐮�")
+    private Integer cateId;
 
     @ApiModelProperty(value = "鍋滆溅鍦哄悕绉伴泦鍚�", example = "1")
     @ExcelColumn(name="鍋滆溅鍦哄悕绉伴泦鍚�")
@@ -170,6 +172,28 @@
     @TableField(exist = false)
     private int jobNum;
 
+    @ApiModelProperty(value = "涓�绾у垎绫讳富閿�", example = "1")
+    @TableField(exist = false)
+    private Integer catePId;
+
+    @ApiModelProperty(value = "鍒嗙被鍚嶇О", example = "1")
+    @TableField(exist = false)
+    private String cateName;
+
+    @ApiModelProperty(value = "涓�绾у垎绫诲悕绉�", example = "1")
+    @TableField(exist = false)
+    private String catePName;
+
+    @ApiModelProperty(value = "杞﹁締閮ㄩ棬鍚嶇О", example = "1")
+    @ExcelColumn(name="杞﹁締缁勭粐閮ㄩ棬鍚嶇О")
+    @TableField(exist = false)
+    private String carCompanyName;
+
+    @ApiModelProperty(value = "杞﹁締閮ㄩ棬鍏ㄨ矾寰勫悕绉�", example = "1")
+    @ExcelColumn(name="杞﹁締閮ㄩ棬鍏ㄨ矾寰勫悕绉�")
+    @TableField(exist = false)
+    private String carCompanyNamePath;
+
     @ApiModelProperty(value = "鎺堟潈鍋滆溅鍦虹紪鐮侀泦鍚�", example = "1")
     @TableField(exist = false)
     private List<Integer> parkIdList;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
index a66a19d..b2f5efa 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Category.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.core.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -10,6 +11,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 鍒嗙被淇℃伅琛�
@@ -66,12 +68,17 @@
     @ExcelColumn(name="鍥炬爣")
     private String imgurl;
 
-    @ApiModelProperty(value = "绫诲瀷 0鍏徃绫诲瀷")
-    @ExcelColumn(name="绫诲瀷 0鍏徃绫诲瀷")
+    @ApiModelProperty(value = "绫诲瀷 0鍏徃绫诲瀷 1杞﹁締绫诲瀷")
+    @ExcelColumn(name="绫诲瀷 0鍏徃绫诲瀷 1杞﹁締绫诲瀷")
     private Integer type;
 
     @ApiModelProperty(value = "鐖剁骇缂栫爜锛堣嚜鍏宠仈锛�")
     @ExcelColumn(name="鐖剁骇缂栫爜锛堣嚜鍏宠仈锛�")
     private Integer parentId;
 
+    @ApiModelProperty(value = "瀛愰泦鍒嗙被")
+    @TableField(exist = false)
+    private List<Category> childCategoryList;
+
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformLog.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformLog.java
index 0470f9b..922d579 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformLog.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/PlatformLog.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -95,4 +96,47 @@
     @ExcelColumn(name="鍙傛暟4")
     private String param4;
 
+
+    @ApiModelProperty(value = "鏈堝彴鍚嶇О")
+    @TableField(exist = false)
+    private String platformName;
+
+    @ApiModelProperty(value = "鏈堝彴缁勪富閿�")
+    @TableField(exist = false)
+    private Integer platformGroupId;
+
+    @ApiModelProperty(value = "鏈堝彴缁勫悕绉�")
+    @TableField(exist = false)
+    private String platformGroupName;
+
+    @ApiModelProperty(value = "鍓嶈溅鐗岀収")
+    @TableField(exist = false)
+    private String carCodeFront;
+
+    @ApiModelProperty(value = "鍚庤溅鐗岀収")
+    @TableField(exist = false)
+    private String carCodeBack;
+
+    @ApiModelProperty(value = "寮�濮嬩綔涓氭椂闂磋捣")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date beginWorkDateStart;
+
+    @ApiModelProperty(value = "寮�濮嬩綔涓氭椂闂存")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date beginWorkDateEnd;
+
+    @ApiModelProperty(value = "澶氱姸鎬佹煡璇� 澶氫釜浠�,鍒嗗壊")
+    @TableField(exist = false)
+    private String queryStatus;
+
+    @ApiModelProperty(value = "浣滀笟鍞竴鏍囪瘑(鎵胯繍鍗曞彿锛�")
+    @TableField(exist = false)
+    private String billCode;
+
+    @ApiModelProperty(value = "鍚堝悓鍙�")
+    @TableField(exist = false)
+    private String contractNum;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsConfig.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsConfig.java
new file mode 100644
index 0000000..dbf31cb
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsConfig.java
@@ -0,0 +1,70 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 鐭俊涓氬姟閰嶇疆
+ * @author 姹熻箘韫�
+ * @date 2024/10/09 15:41
+ */
+@Data
+@ApiModel("鐭俊涓氬姟閰嶇疆")
+@TableName("`sms_config`")
+public class SmsConfig {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private String creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private String edirot;
+
+    @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 = "寮�鍚姸鎬侊細0寮�鍚紱1鍏抽棴", example = "1")
+    @ExcelColumn(name="寮�鍚姸鎬侊細0寮�鍚紱1鍏抽棴")
+    private Integer status;
+
+    @ApiModelProperty(value = "鐭俊缂栫爜")
+    @ExcelColumn(name="鐭俊缂栫爜")
+    private String code;
+
+    @ApiModelProperty(value = "鐭俊鍐呭")
+    @ExcelColumn(name="鐭俊鍐呭")
+    private String content;
+
+    @ApiModelProperty(value = "鐭俊绫诲瀷 1=璁垮涓氬姟锛�2=璁垮鎶ュ锛�3=闅愭偅闅忔墜鎷嶏紱4=鐢ㄨ溅鐢宠锛�5=浼氳瀹や俊鎭紱6=鐗╂祦杞﹂绾︼紱7=鐗╂祦杞︿綔涓�")
+    @ExcelColumn(name="鐭俊绫诲瀷 1=璁垮涓氬姟锛�2=璁垮鎶ュ锛�3=闅愭偅闅忔墜鎷嶏紱4=鐢ㄨ溅鐢宠锛�5=浼氳瀹や俊鎭紱6=鐗╂祦杞﹂绾︼紱7=鐗╂祦杞︿綔涓�")
+    private String objType;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
index 68b1c6e..f481b52 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/SmsEmail.java
@@ -86,9 +86,10 @@
     @ExcelColumn(name="鍏宠仈瀵硅薄缂栫爜")
     private Integer objId;
 
-    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷")
-    @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷")
+    @ApiModelProperty(value = "鍏宠仈瀵硅薄绫诲瀷 0=楠岃瘉鐮侊紱1=璁垮涓氬姟锛�2=璁垮鎶ュ锛�3=闅愭偅闅忔墜鎷嶏紱4=鐢ㄨ溅鐢宠锛�5=浼氳瀹や俊鎭紱6=鐗╂祦杞﹂绾︼紱7=鐗╂祦杞︿綔涓�")
+    @ExcelColumn(name="鍏宠仈瀵硅薄绫诲瀷 0=楠岃瘉鐮侊紱1=璁垮涓氬姟锛�2=璁垮鎶ュ锛�3=闅愭偅闅忔墜鎷嶏紱4=鐢ㄨ溅鐢宠锛�5=浼氳瀹や俊鎭紱6=鐗╂祦杞﹂绾︼紱7=鐗╂祦杞︿綔涓�")
     private String objType;
+
     @ApiModelProperty(value = "闄勪欢闆嗗悎")
     @TableField(exist = false)
     private   List<Map<String,Object>> fileList;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CategoryService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CategoryService.java
index c5ee4d9..08a61f8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CategoryService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CategoryService.java
@@ -78,7 +78,14 @@
      * @return List<Category>
      */
     List<Category> findList(Category category);
-  
+
+
+    /**
+     * 鑷畾涔夊垪琛�
+     * @param category
+     * @return
+     */
+    List<Category> queryList(Category category);
     /**
      * 鍒嗛〉鏌ヨ
      *
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java
new file mode 100644
index 0000000..9e137bb
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/SmsConfigService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.SmsConfig;
+import java.util.List;
+
+/**
+ * 鐭俊涓氬姟閰嶇疆Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2024/10/09 15:41
+ */
+public interface SmsConfigService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param smsConfig 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(SmsConfig smsConfig);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param smsConfig 瀹炰綋瀵硅薄
+     */
+    void delete(SmsConfig smsConfig);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param smsConfig 瀹炰綋瀵硅薄
+     */
+    void updateById(SmsConfig smsConfig);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param smsConfigs 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<SmsConfig> smsConfigs);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return SmsConfig
+     */
+    SmsConfig findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param smsConfig 瀹炰綋瀵硅薄
+     * @return SmsConfig
+     */
+    SmsConfig findOne(SmsConfig smsConfig);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param smsConfig 瀹炰綋瀵硅薄
+     * @return List<SmsConfig>
+     */
+    List<SmsConfig> findList(SmsConfig smsConfig);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<SmsConfig>
+     */
+    PageData<SmsConfig> findPage(PageWrap<SmsConfig> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param smsConfig 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(SmsConfig smsConfig);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
index 75c28e9..9f7d3e3 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -1516,6 +1516,7 @@
 
             //鐢熸垚浠诲姟璁板綍
             PlatformJob platformJob = platformBooks.toPlatformJob();
+            platformJob.setId(null);
             platformJob.setPlatformGroupId(platformReason.getGroupId().intValue());
             platformJob.setType(Constants.platformJobType.sgscxh);
             platformJob.setStatus(Constants.PlatformJobStatus.WART_SIGN_IN.getKey());
@@ -1533,7 +1534,6 @@
             platformLog.setObjId(platformJob.getId().toString());
             platformLog.setAfterContent(JSONObject.toJSONString(platformJob));
             platformLogMapper.insert(platformLog);
-
         }else{
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
index 29a5552..2d61cee 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
@@ -58,6 +58,7 @@
         }
         if(StringUtils.isBlank(model.getCode())
             ||model.getType()==null
+            ||model.getCateId()==null
             ||model.getType()<0
             ||model.getType()>3
         ){
@@ -183,6 +184,7 @@
         if(StringUtils.isBlank(model.getCode())
                 ||model.getId()==null
                 ||model.getType()==null
+                ||model.getCateId()==null
                 ||model.getType()<0
                 ||model.getType()>3
         ){
@@ -226,6 +228,8 @@
                 .set(Cars::getAuthStatus,Constants.ZERO)
                 .set(Cars::getType,model.getType())
                 .set(Cars::getCode,model.getCode())
+                .set(Cars::getGroupId,model.getGroupId())
+                .set(Cars::getCateId,model.getCateId())
                 .set(Cars::getEditDate,model.getEditDate())
                 .set(Cars::getEdirot,model.getEdirot())
                 .set(Cars::getMemberId,model.getMemberId())
@@ -248,6 +252,10 @@
     public Cars findById(Integer id) {
         return carsMapper.selectById(id);
     }
+
+
+
+
 
     @Override
     public Cars findOne(Cars cars) {
@@ -272,9 +280,17 @@
         queryWrapper.selectAs(SystemUser::getRealname,Cars::getEditorName);
         queryWrapper.selectAs(Member::getPhone,Cars::getMemberPhone);
         queryWrapper.selectAs(Company::getCompanyNamePath,Cars::getCompanyName);
+        queryWrapper.selectAs(Category::getParentId,Cars::getCatePId);
+        queryWrapper.selectAs(Category::getName,Cars::getCateName);
+        queryWrapper.select(" c.name as catePName");
+        queryWrapper.select(" c1.COMPANY_NAME_PATH as carCompanyNamePath");
+        queryWrapper.select(" c1.name as carCompanyName");
         queryWrapper.leftJoin(Member.class,Member::getId,Cars::getMemberId);
         queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,Cars::getEdirot);
         queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
+        queryWrapper.leftJoin(Category.class,Category::getId,Cars::getCateId);
+        queryWrapper.leftJoin("category c on t4.PARENT_ID = c.id");
+        queryWrapper.leftJoin("company c1 on t.GROUP_ID = c1.id");
         queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
                 .or().like(Member::getPhone,pageWrap.getModel().getMemberName()));
         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCompanyName()),Company::getCompanyNamePath,pageWrap.getModel().getCompanyName());
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 e0601bc..8eaa6f8 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
@@ -21,6 +21,8 @@
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 鍒嗙被淇℃伅琛⊿ervice瀹炵幇
@@ -51,7 +53,7 @@
         insert.setStatus(Constants.ZERO);
         insert.setSortnum(category.getSortnum());
         insert.setImgurl(category.getImgurl());
-        insert.setType(Constants.ZERO);
+        insert.setType(category.getType());
         insert.setParentId(category.getParentId());
         categoryMapper.insert(insert);
         return insert.getId();
@@ -59,7 +61,9 @@
 
     @Override
     public void deleteById(Integer id) {
-        categoryMapper.deleteById(id);
+        categoryMapper.update(null,new UpdateWrapper<Category>().lambda().set(Category::getIsdeleted,Constants.ONE)
+                .eq(Category::getId,id)
+        );
     }
 
     @Override
@@ -73,7 +77,9 @@
         if (CollectionUtils.isEmpty(ids)) {
             return;
         }
-        categoryMapper.deleteBatchIds(ids);
+        categoryMapper.update(null,new UpdateWrapper<Category>().lambda().set(Category::getIsdeleted,Constants.ONE)
+                .in(Category::getId,ids)
+        );
     }
 
     @Override
@@ -110,59 +116,38 @@
     }
 
     @Override
+    public List<Category> queryList(Category category) {
+        List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+                .eq(Objects.nonNull(category)&&Objects.nonNull(category.getType()),Category::getType,category.getType())
+                .isNull(Objects.nonNull(category)&&Objects.isNull(category.getParentId()),Category::getParentId)
+                .eq(Objects.nonNull(category)&&Objects.nonNull(category.getParentId()),Category::getParentId,category.getParentId())
+                .eq(Category::getIsdeleted,Constants.ZERO)
+        );
+        return categoryList;
+    }
+
+    @Override
     public PageData<Category> findPage(PageWrap<Category> pageWrap) {
         IPage<Category> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         QueryWrapper<Category> queryWrapper = new QueryWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        if (pageWrap.getModel().getId() != null) {
-            queryWrapper.lambda().eq(Category::getId, pageWrap.getModel().getId());
+        queryWrapper.lambda().eq(Category::getIsdeleted,Constants.ZERO)
+                .eq(Objects.nonNull(pageWrap.getModel().getType()),Category::getType,pageWrap.getModel().getType())
+                .isNull(Category::getParentId);
+        PageData<Category> categoryPageData = PageData.from(categoryMapper.selectPage(page, queryWrapper));
+        //鏌ヨ鎵�鏈変簩绾ф暟鎹�
+        List<Category> categoryList = categoryMapper.selectList(
+                new QueryWrapper<Category>().lambda()
+                        .eq(Objects.nonNull(pageWrap.getModel().getType()),Category::getType,pageWrap.getModel().getType())
+                        .eq(Category::getIsdeleted,Constants.ZERO).isNotNull(Category::getParentId));
+
+        for (Category category:categoryPageData.getRecords()) {
+            category.setChildCategoryList(
+                    categoryList.stream().filter(i->Constants.equalsInteger(i.getParentId(),category.getId())).collect(Collectors.toList())
+            );
         }
-        if (pageWrap.getModel().getCreator() != null) {
-            queryWrapper.lambda().eq(Category::getCreator, pageWrap.getModel().getCreator());
-        }
-        if (pageWrap.getModel().getCreateDate() != null) {
-            queryWrapper.lambda().ge(Category::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
-            queryWrapper.lambda().le(Category::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
-        }
-        if (pageWrap.getModel().getEditor() != null) {
-            queryWrapper.lambda().eq(Category::getEditor, pageWrap.getModel().getEditor());
-        }
-        if (pageWrap.getModel().getEditDate() != null) {
-            queryWrapper.lambda().ge(Category::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
-            queryWrapper.lambda().le(Category::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
-        }
-        if (pageWrap.getModel().getIsdeleted() != null) {
-            queryWrapper.lambda().eq(Category::getIsdeleted, pageWrap.getModel().getIsdeleted());
-        }
-        if (pageWrap.getModel().getName() != null) {
-            queryWrapper.lambda().eq(Category::getName, pageWrap.getModel().getName());
-        }
-        if (pageWrap.getModel().getRemark() != null) {
-            queryWrapper.lambda().eq(Category::getRemark, pageWrap.getModel().getRemark());
-        }
-        if (pageWrap.getModel().getStatus() != null) {
-            queryWrapper.lambda().eq(Category::getStatus, pageWrap.getModel().getStatus());
-        }
-        if (pageWrap.getModel().getSortnum() != null) {
-            queryWrapper.lambda().eq(Category::getSortnum, pageWrap.getModel().getSortnum());
-        }
-        if (pageWrap.getModel().getImgurl() != null) {
-            queryWrapper.lambda().eq(Category::getImgurl, pageWrap.getModel().getImgurl());
-        }
-        if (pageWrap.getModel().getType() != null) {
-            queryWrapper.lambda().eq(Category::getType, pageWrap.getModel().getType());
-        }
-        if (pageWrap.getModel().getParentId() != null) {
-            queryWrapper.lambda().eq(Category::getParentId, pageWrap.getModel().getParentId());
-        }
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
-            }
-        }
-        return PageData.from(categoryMapper.selectPage(page, queryWrapper));
+
+        return categoryPageData;
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
index c3de7e7..ad482b6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformBooksServiceImpl.java
@@ -60,6 +60,9 @@
     private PlatformReasonMapper platformReasonMapper;
 
     @Autowired
+    private PlatformGroupMapper platformGroupMapper;
+
+    @Autowired
     private SystemDictDataBiz systemDictDataBiz;
 
     @Autowired
@@ -241,6 +244,13 @@
         if(Objects.isNull(platformReason)|| !Constants.equalsInteger(platformReason.getIsdeleted(),Constants.ZERO)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍏ュ洯鍘熷洜淇℃伅寮傚父,璇峰埛鏂伴噸璇�");
         }
+        PlatformGroup platformGroup= platformGroupMapper.selectById(platformReason.getGroupId());
+        if(Objects.isNull(platformGroup)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌缁戝畾鏈堝彴缁勬暟鎹�");
+        }
+        if(!Constants.equalsInteger(platformGroup.getIsdeleted(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"缁戝畾鏈堝彴缁勬暟鎹紓甯革紝璇疯仈绯荤鐞嗗憳");
+        }
         //鏌ヨ杞﹁締鏄惁涓鸿嚜鏈夎溅
         if(carsMapper.selectCount(new QueryWrapper<Cars>().lambda().eq(Cars::getIsdeleted,Constants.ZERO).eq(Cars::getCode,platformBooksApplyDTO.getCarCodeFront()))>Constants.ZERO){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"["+platformBooksApplyDTO.getCarCodeFront()+"]灞炰簬鍐呴儴杞﹁締锛屾棤娉曢绾�");
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
index 191e785..6b1dbb8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -693,6 +693,7 @@
                         .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey(),
                                 Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                 Constants.PlatformJobStatus.CALLED.getKey())
+                        .orderByDesc(PlatformJob::getStatus)
                         .orderByAsc(PlatformJob::getSignDate)
         );
         //鑾峰彇鎵�鏈夋湀鍙扮粍
@@ -720,6 +721,7 @@
                             .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CALL.getKey(),
                                     Constants.PlatformJobStatus.IN_WAIT.getKey(),
                                     Constants.PlatformJobStatus.CALLED.getKey())
+                            .orderByDesc(PlatformJob::getStatus)
                             .orderByDesc(PlatformJob::getSignDate));
             platformGroup.setSignJobList(platformJobSignInList);
             //鏌ヨ褰撳墠鏈堝彴缁勪笅
@@ -1376,7 +1378,8 @@
             }
         }else if(Constants.equalsInteger(objType,Constants.PlatformJobLogType.WORKING.getKey())){
             platformLog.setParam1(DateUtil.dateTypeToString(platformLog.getCreateDate(),"yyyy-MM-dd HH:mm:ss"));
-            platformLog.setParam3("0");
+            platformLog.setParam3("0"); 
+            platformLog.setRemark(platformJobBefor.getPlatformId().toString());
         }else{
             platformLog.setParam3("0");
         }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformLogServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformLogServiceImpl.java
index 5811b1b..17d2a74 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformLogServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformLogServiceImpl.java
@@ -5,7 +5,8 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.PlatformLogMapper;
-import com.doumee.dao.business.model.PlatformLog;
+import com.doumee.dao.business.join.PlatformLogJoinMapper;
+import com.doumee.dao.business.model.*;
 import com.doumee.dao.openapi.request.CarLogsListRequest;
 import com.doumee.dao.openapi.response.CarLogsListResponse;
 import com.doumee.service.business.PlatformLogService;
@@ -13,6 +14,8 @@
 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.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -32,6 +35,9 @@
 
     @Autowired
     private PlatformLogMapper platformLogMapper;
+
+    @Autowired
+    private PlatformLogJoinMapper platformLogJoinMapper;
 
     @Override
     public Integer create(PlatformLog platformLog) {
@@ -93,30 +99,27 @@
     @Override
     public PageData<PlatformLog> findPage(PageWrap<PlatformLog> pageWrap) {
         IPage<PlatformLog> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<PlatformLog> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<PlatformLog> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        queryWrapper.lambda()
-                .eq(pageWrap.getModel().getId() != null, PlatformLog::getId, pageWrap.getModel().getId())
-                .eq(pageWrap.getModel().getCreator() != null, PlatformLog::getCreator, pageWrap.getModel().getCreator())
-                .ge(pageWrap.getModel().getCreateDate() != null, PlatformLog::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()))
-                .le(pageWrap.getModel().getCreateDate() != null, PlatformLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()))
-                .eq(pageWrap.getModel().getEditor() != null, PlatformLog::getEditor, pageWrap.getModel().getEditor())
-                .ge(pageWrap.getModel().getEditDate() != null, PlatformLog::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()))
-                .le(pageWrap.getModel().getEditDate() != null, PlatformLog::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()))
-                .eq(pageWrap.getModel().getIsdeleted() != null, PlatformLog::getIsdeleted, pageWrap.getModel().getIsdeleted())
-                .eq(pageWrap.getModel().getRemark() != null, PlatformLog::getRemark, pageWrap.getModel().getRemark())
-                .eq(pageWrap.getModel().getJobId() != null, PlatformLog::getJobId, pageWrap.getModel().getJobId())
-                .eq(pageWrap.getModel().getTitle() != null, PlatformLog::getTitle, pageWrap.getModel().getTitle())
-                .eq(pageWrap.getModel().getContent() != null, PlatformLog::getContent, pageWrap.getModel().getContent())
-                .eq(pageWrap.getModel().getObjType() != null, PlatformLog::getObjType, pageWrap.getModel().getObjType())
-                .eq(pageWrap.getModel().getObjId() != null, PlatformLog::getObjId, pageWrap.getModel().getObjId())
-                .eq(pageWrap.getModel().getBeforeContent() != null, PlatformLog::getBeforeContent, pageWrap.getModel().getBeforeContent())
-                .eq(pageWrap.getModel().getAfterContent() != null, PlatformLog::getAfterContent, pageWrap.getModel().getAfterContent())
-                .eq(pageWrap.getModel().getParam1() != null, PlatformLog::getParam1, pageWrap.getModel().getParam1())
-                .eq(pageWrap.getModel().getParam2() != null, PlatformLog::getParam2, pageWrap.getModel().getParam2())
-                .eq(pageWrap.getModel().getParam3() != null, PlatformLog::getParam3, pageWrap.getModel().getParam3())
-                .eq(pageWrap.getModel().getParam4() != null, PlatformLog::getParam4, pageWrap.getModel().getParam4())
+
+        queryWrapper.selectAll(PlatformLog.class)
+                .selectAs(Platform::getName,PlatformLog::getPlatformName)
+                .selectAs(PlatformGroup::getName,PlatformLog::getPlatformGroupName)
+                .selectAs(PlatformJob::getCarCodeFront,PlatformLog::getCarCodeFront)
+                .selectAs(PlatformJob::getCarCodeBack,PlatformLog::getCarCodeBack)
+                .selectAs(PlatformJob::getBillCode,PlatformLog::getBillCode)
+                .selectAs(PlatformJob::getContractNum,PlatformLog::getContractNum)
+                .leftJoin(PlatformJob.class,PlatformJob::getId,PlatformLog::getJobId)
+                .leftJoin(Platform.class,Platform::getId,PlatformLog::getRemark)
+                .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId)
+                .like(pageWrap.getModel().getPlatformName() != null, Platform::getName, pageWrap.getModel().getPlatformName())
+                .eq(pageWrap.getModel().getPlatformGroupId() != null, PlatformGroup::getId, pageWrap.getModel().getPlatformGroupId())
+                .like(pageWrap.getModel().getCarCodeFront() != null, PlatformJob::getCarCodeFront, pageWrap.getModel().getCarCodeFront())
+                .ge(pageWrap.getModel().getBeginWorkDateStart() != null, PlatformLog::getParam1, Utils.Date.getStart(pageWrap.getModel().getBeginWorkDateStart()))
+                .le(pageWrap.getModel().getBeginWorkDateEnd() != null, PlatformLog::getParam2, Utils.Date.getEnd(pageWrap.getModel().getBeginWorkDateEnd()))
+                .apply(pageWrap.getModel().getQueryStatus() != null, " find_in_set(t.OBJ_TYPE,'"+pageWrap.getModel().getQueryStatus()+"') and t.remark is not null  ")
         ;
+
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                 queryWrapper.orderByDesc(sortData.getProperty());
@@ -124,7 +127,13 @@
                 queryWrapper.orderByAsc(sortData.getProperty());
             }
         }
-        return PageData.from(platformLogMapper.selectPage(page, queryWrapper));
+        IPage<PlatformLog> platformJobIPage = platformLogJoinMapper.selectJoinPage(page,PlatformLog.class,queryWrapper);
+        for (PlatformLog platformLog:platformJobIPage.getRecords()) {
+            if(StringUtils.isBlank(platformLog.getBillCode())){
+                platformLog.setBillCode(platformLog.getContractNum());
+            }
+        }
+        return PageData.from(platformJobIPage);
     }
 
     @Override
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
index 5bdab14..44a60e9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformServiceImpl.java
@@ -323,6 +323,9 @@
                 .select(" ( select ROUND( ifnull(SUM(pl.PARAM3),0) / 3600 , 2 )   from platform_log pl  where   pl.remark = t.id  " +
                         " and pl.CREATE_DATE > '"+DateUtil.getFomartDate(platform.getQueryDateStart(),"yyyy-MM-dd")+" 00:00:00'  " +
                         "and pl.CREATE_DATE <=  '"+DateUtil.getFomartDate(platform.getQueryDateEnd(),"yyyy-MM-dd")+" 23:59:59'  ) as workCountTime ")
+                .select(" ( select count(1)  from platform_log pl  where   pl.remark = t.id  " +
+                        " and pl.CREATE_DATE > '"+DateUtil.getFomartDate(platform.getQueryDateStart(),"yyyy-MM-dd")+" 00:00:00'  " +
+                        "and pl.CREATE_DATE <=  '"+DateUtil.getFomartDate(platform.getQueryDateEnd(),"yyyy-MM-dd")+" 23:59:59' and pl.OBJ_TYPE = 5  ) as stopCount ")
                 .leftJoin(PlatformGroup.class,PlatformGroup::getId,Platform::getGroupId);
         queryWrapper
                 .eq(platform.getGroupId() != null, Platform::getGroupId, platform.getGroupId())
@@ -349,8 +352,6 @@
             //鏌ヨ2鏃ユ湡鐩稿樊澶╂暟
             Integer sumDays = DateUtil.daysBetweenDates(platform.getQueryDateEnd(),platform.getQueryDateStart())+1;
             for (Platform bean:platformList) {
-                List<PlatformJob> beanJobList = platformJobList.stream().filter(i->Constants.equalsInteger(i.getPlatformId(),bean.getId())).collect(Collectors.toList());
-                bean.setStopCount(beanJobList.size());
                 if(Objects.isNull(bean.getOpenTime())||bean.getOpenTime().compareTo(BigDecimal.ZERO)<=0){
                     bean.setUseRata(BigDecimal.ZERO);
                     continue;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java
index e55c968..a3e2a31 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java
@@ -49,11 +49,12 @@
     public Integer create(PlatformWaterGas platformWaterGas) {
         if(platformWaterGas.getTimeInfo() ==null || platformWaterGas.getNum()==null
         ||(Constants.equalsInteger(platformWaterGas.getType(),Constants.TWO) && StringUtils.isBlank(platformWaterGas.getCarCode()))){
-            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ュ勾鏈堟暟鎹凡瀛樺湪锛岃鍕块噸鏂板綍鍏ワ紝鍙互灏濊瘯鎼滅储鍚庤繘琛屾暟鎹慨鏀癸紒");
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鍙傛暟閿欒锛�");
         }
         if( platformWaterGasMapper.selectCount(new QueryWrapper<PlatformWaterGas>().lambda()
                 .eq(PlatformWaterGas::getIsdeleted, Constants.ZERO)
                 .apply("to_days(time_info) = to_days('"+ DateUtil.getPlusTime2(platformWaterGas.getTimeInfo()) +"')")
+                .eq(PlatformWaterGas::getType,platformWaterGas.getType())
                 .eq(Constants.equalsInteger(platformWaterGas.getType(),Constants.TWO),PlatformWaterGas::getCarCode,platformWaterGas.getCarCode()))>0){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝璇ュ勾鏈堟暟鎹凡瀛樺湪锛岃鍕块噸鏂板綍鍏ワ紝鍙互灏濊瘯鎼滅储鍚庤繘琛屾暟鎹慨鏀癸紒");
         }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java
new file mode 100644
index 0000000..1d2e950
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsConfigServiceImpl.java
@@ -0,0 +1,142 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.SmsConfigMapper;
+import com.doumee.dao.business.model.SmsConfig;
+import com.doumee.service.business.SmsConfigService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 鐭俊涓氬姟閰嶇疆Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2024/10/09 15:41
+ */
+@Service
+public class SmsConfigServiceImpl implements SmsConfigService {
+
+    @Autowired
+    private SmsConfigMapper smsConfigMapper;
+
+    @Override
+    public Integer create(SmsConfig smsConfig) {
+        smsConfigMapper.insert(smsConfig);
+        return smsConfig.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        smsConfigMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(SmsConfig smsConfig) {
+        UpdateWrapper<SmsConfig> deleteWrapper = new UpdateWrapper<>(smsConfig);
+        smsConfigMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        smsConfigMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(SmsConfig smsConfig) {
+        smsConfigMapper.updateById(smsConfig);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<SmsConfig> smsConfigs) {
+        if (CollectionUtils.isEmpty(smsConfigs)) {
+            return;
+        }
+        for (SmsConfig smsConfig: smsConfigs) {
+            this.updateById(smsConfig);
+        }
+    }
+
+    @Override
+    public SmsConfig findById(Integer id) {
+        return smsConfigMapper.selectById(id);
+    }
+
+    @Override
+    public SmsConfig findOne(SmsConfig smsConfig) {
+        QueryWrapper<SmsConfig> wrapper = new QueryWrapper<>(smsConfig);
+        return smsConfigMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<SmsConfig> findList(SmsConfig smsConfig) {
+        QueryWrapper<SmsConfig> wrapper = new QueryWrapper<>(smsConfig);
+        return smsConfigMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<SmsConfig> findPage(PageWrap<SmsConfig> pageWrap) {
+        IPage<SmsConfig> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<SmsConfig> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(SmsConfig::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(SmsConfig::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(SmsConfig::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(SmsConfig::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEdirot() != null) {
+            queryWrapper.lambda().eq(SmsConfig::getEdirot, pageWrap.getModel().getEdirot());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(SmsConfig::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(SmsConfig::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(SmsConfig::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(SmsConfig::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(SmsConfig::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getCode() != null) {
+            queryWrapper.lambda().eq(SmsConfig::getCode, pageWrap.getModel().getCode());
+        }
+        if (pageWrap.getModel().getContent() != null) {
+            queryWrapper.lambda().eq(SmsConfig::getContent, pageWrap.getModel().getContent());
+        }
+        if (pageWrap.getModel().getObjType() != null) {
+            queryWrapper.lambda().eq(SmsConfig::getObjType, pageWrap.getModel().getObjType());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(smsConfigMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(SmsConfig smsConfig) {
+        QueryWrapper<SmsConfig> wrapper = new QueryWrapper<>(smsConfig);
+        return smsConfigMapper.selectCount(wrapper);
+    }
+}
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 fcc1578..66cc56e 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
@@ -109,10 +109,10 @@
         smsEmail.setType(Constants.ZERO);
         smsEmail.setTitle("鐭俊楠岃瘉鐮�");
         smsEmail.setContent(content);
+        smsEmail.setObjType(Constants.ZERO+"");
         smsEmailMapper.insert(smsEmail);
 
         return smsEmail.getId();
-
     }
 
 
@@ -249,4 +249,27 @@
         QueryWrapper<SmsEmail> wrapper = new QueryWrapper<>(smsEmail);
         return smsEmailMapper.selectCount(wrapper);
     }
+
+
+    public static void sendBusiness(EmayService emayService ,SmsEmailMapper smsEmailMapper ,List<String> phoneList,String objType,String content,Integer objId){
+        //TODO 鏄惁鍙戦�佺煭淇�
+
+        for (String phone:phoneList) {
+            boolean result=   emayService.sendSingleSms(phone,content);
+            if(!result){
+                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鐭俊楠岃瘉鐮佸彂閫佸け璐ワ紝璇风◢鍚庨噸璇曪紒");
+            }
+            SmsEmail smsEmail = new SmsEmail();
+            smsEmail.setIsdeleted(Constants.ZERO);
+            smsEmail.setCreateDate(new Date());
+            smsEmail.setStatus(Constants.ONE);
+            smsEmail.setType(Constants.ZERO);
+            smsEmail.setTitle("涓氬姟鐭俊");
+            smsEmail.setContent(content);
+            smsEmail.setObjType(objType);
+            smsEmail.setObjId(objId);
+            smsEmailMapper.insert(smsEmail);
+        }
+    }
+
 }

--
Gitblit v1.9.3