From 1d064aa5ec2556155bbf116cef1d6d0ac5007acc Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期一, 29 九月 2025 10:23:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/wuhuyancao' into wuhuyancao

---
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/MemberCloudController.java              |   11 
 h5/package-lock.json                                                                                     |   13 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java                 |   16 
 h5/static/loading.gif                                                                                    |    0 
 h5/pages/index/index.vue                                                                                 |    1 
 server/system_service/src/main/java/com/doumee/dao/system/dto/LoginH5DTO.java                            |    3 
 h5/pages/appointment/appointment.vue                                                                     |  678 +++++++++++++++++++++++++++++
 h5/package.json                                                                                          |    1 
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java           |   33 +
 h5/pages/loading/loading.vue                                                                             |   83 +++
 h5/static/ic_fail.png                                                                                    |    0 
 server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java                         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DDAuthorizeVO.java               |   24 +
 h5/pages.json                                                                                            |   14 
 server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java                              |    3 
 h5/utils/config.js                                                                                       |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java      |  108 ++++
 h5/pages/login/login.vue                                                                                 |   56 +-
 h5/pages/driver/notice.vue                                                                               |    6 
 server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java                          |    2 
 h5/utils/service.js                                                                                      |    8 
 h5/utils/http.interceptor.js                                                                             |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java               |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java                 |    2 
 h5/pages/notice/notice.vue                                                                               |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java      |   20 
 h5/App.vue                                                                                               |   27 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java     |    6 
 h5/utils/getCode.js                                                                                      |   23 +
 h5/pages/answer/answer.vue                                                                               |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java                       |  138 ++++++
 32 files changed, 1,223 insertions(+), 98 deletions(-)

diff --git a/h5/App.vue b/h5/App.vue
index 2fb62ad..6d141ba 100644
--- a/h5/App.vue
+++ b/h5/App.vue
@@ -6,20 +6,19 @@
 	} from '@/api'
 	export default {
 		onLaunch: function() {
-			window.addEventListener("popstate", (event) => {
-				const path = this.$route.fullPath
-				// console.log('path', path);
-				if (path == '/pages/login/login' || path == '/') {
-					window.location.href = app_url
-				}
-				if (path == '/pages/wdata/home') {
-					window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/wdata/home'
-				}
-				if (path == '/pages/waybill/home') {
-					window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/waybill/home'
-				}
-			})
-			uni.setStorageSync('transportList', [])
+			// window.addEventListener("popstate", (event) => {
+			// 	const path = this.$route.fullPath
+			// 	if (path == '/pages/login/login' || path == '/') {
+			// 		window.location.href = app_url
+			// 	}
+			// 	if (path == '/pages/wdata/home') {
+			// 		window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/wdata/home'
+			// 	}
+			// 	if (path == '/pages/waybill/home') {
+			// 		window.location.href = 'https://atwl.ahzyssl.com/zhyq_h5/#/pages/waybill/home'
+			// 	}
+			// })
+			// uni.setStorageSync('transportList', [])
 			console.log('onLaunch')
 		},
 		onShow: function() {
diff --git a/h5/package-lock.json b/h5/package-lock.json
index e0ea285..da7f0a2 100644
--- a/h5/package-lock.json
+++ b/h5/package-lock.json
@@ -27,11 +27,24 @@
             "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
             "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
         },
+        "dingtalk-jsapi": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmmirror.com/dingtalk-jsapi/-/dingtalk-jsapi-3.2.0.tgz",
+            "integrity": "sha512-PZhTM1T9ERdaOzjFbyokegVmf/vUVvlg0BKcMiP1bB0e3vBflroPpbW2SjrZEKuvFxFtuFDpvYpk2EhbbKH/6Q==",
+            "requires": {
+                "promise-polyfill": "^7.1.0"
+            }
+        },
         "mutation-observer": {
             "version": "1.0.3",
             "resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
             "integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
         },
+        "promise-polyfill": {
+            "version": "7.1.2",
+            "resolved": "https://registry.npmmirror.com/promise-polyfill/-/promise-polyfill-7.1.2.tgz",
+            "integrity": "sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ=="
+        },
         "regenerator-runtime": {
             "version": "0.14.1",
             "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
diff --git a/h5/package.json b/h5/package.json
index 3f666de..48cc685 100644
--- a/h5/package.json
+++ b/h5/package.json
@@ -14,6 +14,7 @@
     },
     "dependencies": {
         "dayjs": "^1.11.13",
+        "dingtalk-jsapi": "^3.2.0",
         "uniapp-qrcode": "^1.0.2",
         "uview-ui": "^2.0.37",
         "vconsole": "^3.15.1"
diff --git a/h5/pages.json b/h5/pages.json
index 7d64341..4a75021 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -503,6 +503,20 @@
         	{
         		"navigationBarTitleText" : "閫夋嫨琚浜�"
         	}
+        },
+        {
+        	"path" : "pages/appointment/appointment",
+        	"style" : 
+        	{
+        		"navigationBarTitleText" : "棰勭害"
+        	}
+        },
+        {
+        	"path" : "pages/loading/loading",
+        	"style" : 
+        	{
+        		"navigationBarTitleText" : "鎺堟潈"
+        	}
         }
     ],
 	"subPackages": [
diff --git a/h5/pages/answer/answer.vue b/h5/pages/answer/answer.vue
index e9f232e..54723fe 100644
--- a/h5/pages/answer/answer.vue
+++ b/h5/pages/answer/answer.vue
@@ -412,7 +412,7 @@
       }).then(res => {
         this.score = 0
         uni.navigateTo({
-          url: `/pages/userinfo/userinfo?answerId=${res.data}`
+          url: `/pages/appointment/appointment?answerId=${res.data}`
         })
       })
 
diff --git a/h5/pages/appointment/appointment.vue b/h5/pages/appointment/appointment.vue
new file mode 100644
index 0000000..a4833a4
--- /dev/null
+++ b/h5/pages/appointment/appointment.vue
@@ -0,0 +1,678 @@
+<template>
+	<view class="container">
+		<view class="visitor-form">
+			<view class="cell">
+				<view class="title"><b>*</b>濮撳悕</view>
+				<view class="content">
+					<input class="input" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						placeholder-style="color: #999999;" maxlength="30" v-model="visitorData.name" placeholder="璇疯緭鍏ユ偍鐨勭湡瀹炲鍚�" />
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>鎵嬫満鍙�</view>
+				<view class="content">
+					<input type="number" @focus="showKeyboard = true" @blur="showKeyboard = false" class="input" maxlength="11"
+						placeholder-style="color: #999999;" v-model="visitorData.phone" placeholder="璇疯緭鍏ユ偍鐨勬墜鏈哄彿" />
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>璇佷欢绫诲瀷</view>
+				<view class="content" @click="show = true">
+					<text
+						:style="{color: visitorData.idcardTypeName ? '#000000' : ''}">{{visitorData.idcardTypeName ? visitorData.idcardTypeName : '璇烽�夋嫨'}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title">璇佷欢鍙风爜</view>
+				<view class="content">
+					<input class="input" maxlength="18" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						placeholder-style="color: #999999;" v-model="visitorData.idcardNo" placeholder="璇疯緭鍏ユ偍鐨勮瘉浠跺彿鐮�" />
+				</view>
+			</view>
+			<view class="empty"></view>
+			<view class="cell">
+				<view class="title"><b>*</b>鍏徃鍚嶇О</view>
+				<view class="content">
+					<input class="input" maxlength="50" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						placeholder-style="color: #999999;" v-model="visitorData.companyName" placeholder="璇疯緭鍏ユ偍鐨勫叕鍙稿悕绉�" />
+				</view>
+			</view>	
+			<view class="cell">
+				<view class="title1">
+					<text class="title1_a"><b>*</b>浜鸿劯鐓х墖</text>
+					<text class="title1_b">1銆佽鎻愪緵浜斿畼娓呮櫚锛屼汉鑴稿眳涓殑姝i潰浜鸿劯鍏嶅啝鐓х墖锛�</text>
+					<text class="title1_b">2銆佺収鐗囨棤閫嗗厜銆佹棤PS銆佹棤杩囧害缇庨澶勭悊</text>
+				</view>
+				<view class="content">
+					<view class="content_uplaod" @click="upload('faceImg')" v-if="!visitorData.faceImgUrl">
+						<u-icon name="plus" color="rgb(153, 153, 153)" size="20"></u-icon>
+					</view>
+					<view class="content_uplaod" @click="upload('faceImg')" v-else>
+						<image :src="visitorData.faceImgUrl" mode="widthFix"></image>
+					</view>
+				</view>
+			</view>
+			<view style="height: 20rpx; background-color: #F7F7F7;"></view>
+			<view class="cell">
+				<view class="title"><b>*</b>琚浜�</view>
+				<view class="content" @click="selName">
+					<text
+						:style="{ color: form1.receptMemberName ? '#000000' : '' }">{{form1.receptMemberName ? form1.receptMemberName : "璇烽�夋嫨"}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>鍏ュ洯鏃堕棿</view>
+				<view class="content" @click="show4 = true">
+					<text
+						:style="{color: form1.starttime ? '#000000' : ''}">{{form1.starttime ? form1.starttime : '璇烽�夋嫨'}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>绂诲洯鏃堕棿</view>
+				<view class="content" @click="openLC">
+					<text
+						:style="{color: form1.endtime ? '#000000' : ''}">{{form1.endtime ? form1.endtime : '璇烽�夋嫨'}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title"><b>*</b>鎷滆浜嬬敱</view>
+				<view class="content" @click="showReason = true">
+					<text
+						:style="{color: form1.reason ? '#000000' : ''}">{{form1.reason ? form1.reason : '璇烽�夋嫨'}}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="16" class="ml6"></u-icon>
+				</view>
+			</view>
+			<view class="cell" v-if="form1.type == 1">
+				<view class="title">鏂藉伐鍐呭</view>
+				<view class="content">
+					<input class="input" @focus="showKeyboard = true" @blur="showKeyboard = false"
+						placeholder-style="color: #999999;" maxlength="30" v-model="form1.constructionReason" placeholder="璇疯緭鍏ユ柦宸ュ唴瀹�" />
+				</view>
+			</view>
+			<view class="cell">
+				<view class="title">闅忚杞﹁締</view>
+				<view class="content" @click="openInput(1)">
+					<text :style="{color: form1.carNos ? '#000000' : ''}">{{form1.carNos ? form1.carNos : '璇疯緭鍏ヨ溅鐗屽彿鐮�'}}</text>
+				</view>
+			</view>
+			<!-- <view class="cell">
+				<view class="title">鍋ュ悍璇�<b v-if="visit === '1'">*</b></view>
+				<view class="content">
+					<view class="content_uplaod" @click="upload('imgurl')" v-if="!visitorData.imgurlUrl">
+						<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
+					</view>
+					<view class="content_uplaod" @click="upload('imgurl')" v-else>
+						<image :src="visitorData.imgurlUrl" mode="widthFix"></image>
+					</view>
+				</view>
+			</view> -->
+		</view>
+		<view style="width: 100%; height: 110rpx;" v-if="!showKeyboard"></view>
+		<view v-if="!showKeyboard" class="footer-box">
+			<view class="submit-button" @click="submit">涓嬩竴姝�</view>
+		</view>
+		<!-- <tly-picture-cut ref="tlyPictureCut" :pictureSrc="photoSrc" @createImg="uploadImg"></tly-picture-cut> -->
+		<u-picker :show="show" :columns="columns" keyName="name" @cancel="show = false" @confirm="confirm"></u-picker>
+		<qf-image-cropper ref="cropper" :width="280" :height="280" :radius="0" fileType="jpg"
+			@crop="uploadImg"></qf-image-cropper>
+		<keyboardInput ref="keyboard" @export="setPlate" @close="closeInput" />
+		<!-- 鍏ュ洯鏃堕棿 -->
+		<u-datetime-picker :show="show4" :minDate="new Date().getTime()" :formatter="formatter" mode="datetime"
+			@cancel="show4 = false" @confirm="setstarttime"></u-datetime-picker>
+		<!-- 绂诲洯鏃堕棿  -->
+		<u-datetime-picker v-if="form1.starttime" :show="show5" :formatter="formatter"
+			:minDate="formatTimeStamp(form1.starttime)" :maxDate="formatTimeStamp(form1.starttime.slice(0,10) + ' 23:59')"
+			mode="datetime" @cancel="show5 = false" @confirm="setendtime"></u-datetime-picker>
+		<u-picker keyName="title" :show="showReason" :columns="VisitReason" @confirm="selectedReason"
+			@cancel="showReason = false"></u-picker>
+	</view>
+</template>
+
+<script>
+	import tlyPictureCut from "@/components/tly-picture-cut/tlyPictureCut.vue";
+	import keyboardInput from "@/components/keyboard-input/keyboard-input.vue"
+	import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue';
+	import {
+		mapState
+	} from 'vuex'
+	import {
+		uploadAvatar
+	} from "@/utils/config"
+	import {
+		getSystemDictData,
+		visitorSub,
+		getVisitedVisitReason,
+		createFk
+	} from '@/api'
+	export default {
+		data() {
+			return {
+				photoSrc: "",
+				inputType: '',
+				show: false,
+				showKeyboard: false,
+				visit: '',
+				type: '',
+				show4: false,
+				show5: false,
+				showReason: false,
+				personnel: [],
+				VisitReason: [],
+				columns: [
+					[{
+						name: '韬唤璇�',
+						id: 0
+					}, {
+						name: '娓境璇佷欢',
+						id: 1
+					}, {
+						name: '鎶ょ収',
+						id: 2
+					}]
+				],
+				fileList: [],
+				visitorData: {
+					userAnswerId: '',
+					name: '',
+					phone: '',
+					idcardType: 0,
+					idcardTypeName: '韬唤璇�',
+					idcardNo: '',
+					faceImg: '',
+					faceImgUrl: '',
+					imgurl: '',
+					imgurlUrl: '',
+					companyName: ''
+				},
+				form1: {
+					phone1: '',
+					receptMemberId: '',
+					receptMemberName: '',
+					starttime: '',
+					endtime: '',
+					doors: '',
+					doorSelectName: '',
+					reason: '',
+					carNos: '',
+					type: 0
+				},
+				withUserList: {
+					name: '',
+					phone: '',
+					idcardType: '',
+					idcardTypeName: '',
+					companyName: '',
+					idcardNo: '',
+					faceImg: '',
+					faceImgUrl: '',
+					imgurl: '',
+					imgurlUrl: ''
+				},
+			}
+		},
+		components: {
+			tlyPictureCut,
+			QfImageCropper,
+			keyboardInput
+		},
+
+		onLoad(option) {
+			this.getUser()
+			const visitorData = uni.getStorageSync('member')
+			if (visitorData.faceImg) {
+				visitorData.faceImgUrl = visitorData.prefixUrl + visitorData.faceImg
+			}
+			if (visitorData && visitorData.name) {
+				this.visitorData = visitorData
+			}
+			this.visitorData.companyName = visitorData.visitCompanyName
+			this.visitorData.idcardNo = visitorData.idcardDecode
+			if (this.visitorData.idcardType === 0) {
+				this.visitorData.idcardTypeName = '韬唤璇�'
+			} else if (this.visitorData.idcardType === 1) {
+				this.visitorData.idcardTypeName = '娓境璇佷欢'
+			} else if (this.visitorData.idcardType === 2) {
+				this.visitorData.idcardTypeName = '鎶ょ収'
+			}
+			if (this.visitorData.imgurl) {
+					this.visitorData.imgurlUrl = this.visitorData.prefixUrl + this.visitorData.imgurl
+				}
+			// if (this.member ) {
+			// 	this.visitorData.name = this.member.name
+			// 	this.visitorData.phone = this.member.phone
+			// 	this.visitorData.idcardNo = this.member.idcardDecode
+			// 	this.visitorData.companyName = this.member.visitCompanyName
+			// 	this.visitorData.faceImg = this.member.faceImg
+			// 	if (this.member.faceImg) {
+			// 		this.visitorData.faceImgUrl = this.member.prefixUrl + this.member.faceImg
+			// 	}
+			// 	this.visitorData.imgurl = this.member.imgurl
+			// 	if (this.member.imgurl) {
+			// 		this.visitorData.imgurlUrl = this.member.prefixUrl + this.member.imgurl
+			// 	}
+			// 	this.visitorData.idcardType = this.member.idcardType
+			// 	if (this.member.idcardType === 0) {
+			// 		this.visitorData.idcardTypeName = '韬唤璇�'
+			// 	} else if (this.member.idcardType === 1) {
+			// 		this.visitorData.idcardTypeName = '娓境璇佷欢'
+			// 	} else if (this.member.idcardType === 2) {
+			// 		this.visitorData.idcardTypeName = '鎶ょ収'
+			// 	}
+			// }
+			this.visitorData.userAnswerId = option.answerId || ''
+			// this.getVisit()
+			// uni.$on('update', (data) => {
+			// 	this.uploadImg(data.tempFilePath)
+			// })
+		},
+		mounted() {
+			this.$eventBus.$on('svisitorAppSel', (option) => {
+				// this.$set(this.param, 'checkUserId', option.id)
+				// this.$set(this.param, 'applyCheckUserId', option.id)
+				// this.$set(this.param, 'checkorName', option.name)
+		
+				this.form1.receptMemberName = option.name
+				this.form1.receptMemberId = option.id
+				this.form1.receptMemberDepartment = option.companyName
+			})
+		},
+		methods: {
+			selectedReason(e) {
+				this.form1.reason = e.value[0].title
+				this.form1.type = e.value[0].constructionType
+				this.showReason = false
+			},
+			// 鏌ヨ鐢ㄦ埛
+			getUser() {
+				getVisitedVisitReason({}).then(res => {
+					this.VisitReason = [res.data || []]
+				})
+			},
+			setendtime(e) {
+				this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
+				this.show5 = false
+			},
+			formatTimeStamp(date) {
+				return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g, '/')}`))
+			},
+			openLC() {
+				if (!this.form1.starttime) return uni.showToast({
+					title: '璇峰厛閫夋嫨鍏ュ洯鏃堕棿',
+					icon: 'none'
+				})
+				this.show5 = true
+			},
+			setstarttime(e) {
+				this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
+				this.maxTime = this.form1.starttime
+				this.show4 = false
+			},
+			formatter(type, value) {
+				if (type === 'year') {
+					return `${value}骞碻
+				}
+				if (type === 'month') {
+					return `${value}鏈坄
+				}
+				if (type === 'day') {
+					return `${value}鏃
+				}
+				if (type === 'hour') {
+					return `${value}鏃禶
+				}
+				if (type === 'minute') {
+					return `${value}鍒哷
+				}
+				return value
+			},
+			closeInput() {
+				this.$refs.keyboard.close()
+			},
+			setPlate(e) {
+				if (this.inputType === 1) {
+					this.form1.carNos = e
+				} else if (this.inputType === 2) {
+					this.withUserList.carNos = e
+				}
+				this.$forceUpdate()
+				this.closeInput()
+			},
+			openInput(type) {
+				this.inputType = type
+				this.$refs.keyboard.open()
+			},
+			selName() {
+				uni.navigateTo({
+					url: '/pages/visitorApplication/memberSel'
+				})
+			},
+			submit() {
+				const {
+					visitorData
+				} = this
+				if (!this.visitorData.name) return uni.showToast({
+					title: '濮撳悕涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.visitorData.phone) return uni.showToast({
+					title: '鎵嬫満鍙蜂笉鑳戒负绌�',
+					icon: 'none'
+				})
+				const regExp = /^1[3456789]\d{9}$/;
+				if (!regExp.test(this.visitorData.phone)) return uni.showToast({
+					title: '鎵嬫満鍙锋牸寮忛敊璇�',
+					icon: 'none'
+				})
+				if (!String(this.visitorData.idcardType)) return uni.showToast({
+					title: '璇佷欢绫诲瀷涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				// if (!this.visitorData.idcardNo) return uni.showToast({
+				// 	title: '璇佷欢鍙风爜涓嶈兘涓虹┖',
+				// 	icon: 'none'
+				// })
+				if (this.visitorData.idcardType === 0 && this.visitorData.idcardNo) {
+					const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dxX]$/;
+					if (!regex.test(this.visitorData.idcardNo)) return uni.showToast({
+						title: '璇佷欢鍙风爜鏍煎紡閿欒',
+						icon: 'none'
+					})
+				}
+				if (!this.visitorData.companyName) return uni.showToast({
+					title: '鍏徃涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.visitorData.faceImg) return uni.showToast({
+					title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				// if (this.visit === '1') {
+				// 	if (!this.visitorData.imgurl) return uni.showToast({
+				// 		title: '鍋ュ悍璇佷笉鑳戒负绌�',
+				// 		icon: 'none'
+				// 	})
+				// }
+				if (!this.form1.receptMemberId) return uni.showToast({
+					title: '璇峰~鍐欐湁鏁堢殑璁块棶浜�',
+					icon: 'none'
+				})
+				if (!this.form1.starttime) return uni.showToast({
+					title: '鍏ュ洯鏃堕棿涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.form1.endtime) return uni.showToast({
+					title: '绂诲洯鏃堕棿涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.form1.doorSelectName && this.accessControl == 1) return uni.showToast({
+					title: '璁块棶闂ㄧ涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				if (!this.form1.reason) return uni.showToast({
+					title: '鎷滆浜嬬敱涓嶈兘涓虹┖',
+					icon: 'none'
+				})
+				let data = JSON.parse(JSON.stringify(this.form1))
+				data.starttime = data.starttime + ':00'
+				data.endtime = data.endtime + ':00'
+				createFk({
+					...this.visitorData,
+					...data,
+					withUserList: this.personnel
+				}).then(res => {
+					if (res.code === 200) {
+						uni.navigateTo({
+							url: `/pages/appointmentDetails/appointmentDetails?id=${res.data}`
+						})
+					}
+				})
+				// uni.setStorageSync('visitorData', this.visitorData)
+				// uni.navigateTo({
+				// 	url: `/pages/visitorApplication/visitorApplication?data=${JSON.stringify(this.visitorData)}`
+				// });
+			},
+			getVisit() {
+				// 鏄惁闇�瑕� 鍋ュ悍璇�
+				getSystemDictData({
+					dictCode: 'SYSTEM',
+					label: 'HEALTH_CARD'
+				}).then(res => {
+					if (res.code === 200) {
+						this.visit = res.data.code
+					}
+				})
+			},
+			uploadImg(file) {
+				var that = this
+				that.$refs.cropper.close()
+				uni.showLoading({
+					title: '涓婁紶涓�',
+					mask: true
+				});
+				uni.uploadFile({
+					url: uploadAvatar,
+					filePath: file.tempFilePath,
+					name: 'file',
+					formData: {
+						folderCode: 'MEMBER_IMG',
+						// isFace: 0
+					},
+					success: (uploadFileRes) => {
+						let res = JSON.parse(uploadFileRes.data)
+						if(res.code !== 200){
+							return this.showToast(res.message)
+						}
+						this.visitorData.faceImg = res.data.halfPath
+						this.visitorData.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
+					},
+					fail: (err) => {
+						// this.showToast(err)
+					},
+					complete() {
+						uni.hideLoading();
+					}
+				});
+			},
+			deleUser(i) {
+				this.personnel.splice(i, 1)
+			},
+			upload(type) {
+				var that = this
+				that.type = type
+				if (type === 'faceImg') {
+					that.$refs.cropper.chooseImage()
+					return
+				}
+				uni.chooseImage({
+					count: 1,
+					success: (chooseImageRes) => {
+						// if (type === 'faceImg') {
+						// 	that.photoSrc = chooseImageRes.tempFilePaths[0];
+						// 	that.$refs.tlyPictureCut.showPop();
+						// }
+						if (type === 'imgurl') {
+							uni.showLoading({
+								title: '涓婁紶涓�',
+								mask: true
+							});
+							uni.uploadFile({
+								url: uploadAvatar,
+								filePath: chooseImageRes.tempFilePaths[0],
+								name: 'file',
+								formData: {
+									folderCode: 'MEMBER_IMG'
+								},
+								timeout: 60000,
+								success: (uploadFileRes) => {
+									let res = JSON.parse(uploadFileRes.data)
+									that.visitorData.imgurl = res.data.halfPath
+									that.visitorData.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
+								},
+								complete() {
+									uni.hideLoading();
+								}
+							});
+						}
+					},
+					fail(err) {
+						alert('api鎶ラ敊')
+					}
+				});
+			},
+			confirm(e) {
+				this.visitorData.idcardType = e.value[0].id
+				this.visitorData.idcardTypeName = e.value[0].name
+				this.show = false
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: #F7F7F7 !important;
+	}
+
+	.u-upload__button {
+		margin: 0 !important;
+	}
+
+	.content_uplaod {
+		width: 120rpx;
+		height: 120rpx;
+		background: #F7F7F7;
+		border-radius: 8rpx;
+		border: 2rpx solid #E5E5E5;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		overflow: hidden;
+	}
+
+	.content_uplaod image {
+		width: 100%;
+		height: 100%;
+	}
+
+	.empty {
+		width: 750rpx;
+		height: 20rpx;
+		margin: 0 -30rpx;
+		background-color: #f7f7f7;
+		;
+	}
+
+	.title {
+		font-size: 30rpx;
+		font-weight: 400;
+		color: #222222;
+		display: flex;
+		align-items: center;
+	}
+
+	.title b {
+		color: #E42D2D;
+		margin-right: 4rpx;
+	}
+
+	.title1 {
+		display: flex;
+		flex-direction: column;
+
+		.title1_a {
+			font-size: 30rpx !important;
+			font-weight: 400;
+			color: #222222;
+			display: flex;
+			align-items: center;
+			margin-bottom: 20rpx;
+
+			b {
+				color: #E42D2D;
+				margin-right: 4rpx;
+
+			}
+		}
+
+		.title1_b {
+			font-size: 24rpx !important;
+			font-weight: 400;
+			color: #999999;
+		}
+	}
+
+	.add-other {
+		border: 1rpx solid #4d99a8;
+		color: #4d99a8;
+		font-size: 11rpx;
+		padding: 0 12rpx;
+		height: 32rpx;
+		line-height: 32rpx;
+		width: 120rpx;
+		text-align: center;
+		border-radius: 24rpx;
+		margin: 20rpx auto;
+	}
+
+	.footer-box {
+		width: 100%;
+		position: fixed;
+		bottom: 30rpx;
+		height: 80rpx;
+		display: flex;
+		justify-content: center;
+		align-items: center;
+	}
+
+	.submit-button {
+		width: calc(100% - 60rpx);
+		height: 88rpx;
+		line-height: 88rpx;
+		background: #4d99a8;
+		border-radius: 4rpx;
+		color: #fff;
+		border-radius: 44rpx;
+		font-size: 32rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+</style>
+
+<style lang="scss" scoped>
+	.popup-content {
+		padding: 20rpx;
+		height: 100%;
+		overflow: hidden;
+		display: flex;
+		flex-flow: column;
+
+		.input {
+			border: 1rpx solid #ccc;
+			border-radius: 4rpx;
+			padding: 4rpx 12rpx;
+			font-size: 28rpx;
+			font-weight: 400;
+			color: #333333;
+		}
+
+		.respondent-item {
+			padding: 10rpx;
+			border-bottom: 1rpx solid #eee;
+			cursor: pointer;
+
+			&:hover {
+				background-color: #eee;
+			}
+		}
+
+		.van-list {
+			flex: 1;
+			overflow: auto;
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/h5/pages/driver/notice.vue b/h5/pages/driver/notice.vue
index 27be0c1..4d4e993 100644
--- a/h5/pages/driver/notice.vue
+++ b/h5/pages/driver/notice.vue
@@ -30,9 +30,9 @@
   },
   onLoad() {
     this.getInfo()
-    if (!this.$store.state.openId) {
-      // this.initToken()
-    }
+    // if (!this.$store.state.openId) {
+    //   this.initToken()
+    // }
   },
   methods: {
     initToken() {
diff --git a/h5/pages/index/index.vue b/h5/pages/index/index.vue
index 6e9fb01..7300f5f 100644
--- a/h5/pages/index/index.vue
+++ b/h5/pages/index/index.vue
@@ -58,6 +58,7 @@
 			jump(type) {
 				switch (type) {
 					case 1:
+						console.log('1')
 						uni.navigateTo({
 							url: '/pages/notice/notice'
 						})
diff --git a/h5/pages/loading/loading.vue b/h5/pages/loading/loading.vue
new file mode 100644
index 0000000..335064a
--- /dev/null
+++ b/h5/pages/loading/loading.vue
@@ -0,0 +1,83 @@
+<template>
+	<view class="box">
+		<!-- 鍔犺浇涓� -->
+		<view class="loading" v-if="loading === 'loading'">
+			<image src="/static/loading.gif" mode="widthFix"></image>
+			<text>韬唤鏍¢獙涓紝璇风◢鍚巭</text>
+		</view>
+		<!-- 澶辫触 -->
+		<view class="error" v-if="loading === 'error'">
+			<image src="/static/ic_fail.png" mode="widthFix"></image>
+			<text class="title">鎺堟潈澶辫触</text>
+			<text class="desc">鎮ㄧ殑璐﹀彿鏆傛湭缁戝畾绯荤粺锛岃鑱旂郴绠$悊鍛�</text>
+			<button>閲嶆柊楠岃瘉</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				loading: 'error'
+			};
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.box {
+		width: 100%;
+		.error {
+			width: 100%;
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			image {
+				width: 180rpx;
+				height: 180rpx;
+				margin-top: 160rpx;
+			}
+			.title {
+				font-weight: 500;
+				font-size: 36rpx;
+				color: #333333;
+				margin-top: 32rpx;
+			}
+			.desc {
+				font-weight: 400;
+				font-size: 26rpx;
+				color: #999999;
+				margin-top: 20rpx;
+			}
+			button {
+				width: 224rpx;
+				height: 76rpx;
+				font-weight: 400;
+				font-size: 28rpx;
+				color: #279BAA;
+				border-radius: 38rpx;
+				border: 1rpx solid #279BAA;
+				margin-top: 68rpx;
+				background-color: #ffffff;
+			}
+		}
+		.loading {
+			width: 100%;
+			display: flex;
+			align-items: center;
+			flex-direction: column;
+			image {
+				width: 200rpx;
+				height: 200rpx;
+				margin-top: 202rpx;
+			}
+			text {
+				font-weight: 500;
+				font-size: 36rpx;
+				color: #333333;
+				margin-top: 40rpx;
+			}
+		}
+	}
+</style>
diff --git a/h5/pages/login/login.vue b/h5/pages/login/login.vue
index d198595..e068cc0 100644
--- a/h5/pages/login/login.vue
+++ b/h5/pages/login/login.vue
@@ -46,37 +46,37 @@
 		},
 		onLoad(option) {
 			console.log('onLoad');
-			if (option.ywid) {
-				uni.setStorageSync('ywinfo', {
-					type: option.type,
-					yw: option.yw,
-					ywid: option.ywid
-				})
-			}
+			// if (option.ywid) {
+			// 	uni.setStorageSync('ywinfo', {
+			// 		type: option.type,
+			// 		yw: option.yw,
+			// 		ywid: option.ywid
+			// 	})
+			// }
 			// https://atwl.ahzyssl.com/zhyq_h5/#/pages/login/login?type=2&yw=5&ywid=b3db2072-a453-470d-8c0d-ba3b8b256530
 		},
 		onShow() {
-			var that = this
-			let url = 'https://atwl.ahzyssl.com/zhyq_h5/#/'
-			let code = ''
-			if (window.location.href.indexOf('code=') !== -1 || this.code) {
-				// if(window.location.href.indexOf('wdata') !== -1){
-				// 	uni.redirectTo({
-				// 		url: '/pages/wdata/home?code=' + 
-				// 	})
-				// }
-				const ywinfo = uni.getStorageSync('ywinfo') || {}
-				if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
-					this.userAuth(ywinfo.type)
-				}
-			} else {
-				// let url = window.location.href
-				const appID = 'wx173e6caf5abc718a'
-				let uri = encodeURIComponent(url)
-				let authURL =
-					`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base#wechat_redirect`
-				window.location.href = authURL
-			}
+			// var that = this
+			// let url = 'https://atwl.ahzyssl.com/zhyq_h5/#/'
+			// let code = ''
+			// if (window.location.href.indexOf('code=') !== -1 || this.code) {
+			// 	// if(window.location.href.indexOf('wdata') !== -1){
+			// 	// 	uni.redirectTo({
+			// 	// 		url: '/pages/wdata/home?code=' + 
+			// 	// 	})
+			// 	// }
+			// 	const ywinfo = uni.getStorageSync('ywinfo') || {}
+			// 	if (ywinfo.ywid && (ywinfo.type || ywinfo.type == 0)) {
+			// 		this.userAuth(ywinfo.type)
+			// 	}
+			// } else {
+			// 	// let url = window.location.href
+			// 	const appID = 'wx173e6caf5abc718a'
+			// 	let uri = encodeURIComponent(url)
+			// 	let authURL =
+			// 		`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base#wechat_redirect`
+			// 	window.location.href = authURL
+			// }
 
 		},
 		methods: {
diff --git a/h5/pages/notice/notice.vue b/h5/pages/notice/notice.vue
index fcbd3ee..ea0c8d5 100644
--- a/h5/pages/notice/notice.vue
+++ b/h5/pages/notice/notice.vue
@@ -16,6 +16,7 @@
 <script>
 let timer
 import { getSystemDictData } from "@/api"
+import { getCode } from "@/utils/getCode.js";
 export default {
   name: 'Index',
   data() {
@@ -27,9 +28,12 @@
   },
   onLoad() {
     this.getInfo()
-    if (!this.$store.state.openId) {
-      // this.initToken()
-    }
+	getCode(code => {
+		console.log('code', code)
+	});
+    // if (!this.$store.state.openId) {
+    //   this.initToken()
+    // }
   },
   methods: {
     initToken() {
diff --git a/h5/static/ic_fail.png b/h5/static/ic_fail.png
new file mode 100644
index 0000000..c54111b
--- /dev/null
+++ b/h5/static/ic_fail.png
Binary files differ
diff --git a/h5/static/loading.gif b/h5/static/loading.gif
new file mode 100644
index 0000000..6ea9db1
--- /dev/null
+++ b/h5/static/loading.gif
Binary files differ
diff --git a/h5/utils/config.js b/h5/utils/config.js
index 05ff784..70b5a4d 100644
--- a/h5/utils/config.js
+++ b/h5/utils/config.js
@@ -1,8 +1,8 @@
 
 // export const baseUrl = 'zhyq_interface/'
-// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
+export const baseUrl = 'http://192.168.1.54:10010/'
 // export const baseUrl = 'http://10.50.250.253:8088/gateway_interface/'
-export const baseUrl = 'https://atwl.ahzyssl.com/zhyq_interface/' 
+// export const baseUrl = 'https://atwl.ahzyssl.com/zhyq_interface/' 
 
 export const app_url = 'https://atwl.ahzyssl.com/zhyq_h5/#/'
 
diff --git a/h5/utils/getCode.js b/h5/utils/getCode.js
new file mode 100644
index 0000000..79b9ec5
--- /dev/null
+++ b/h5/utils/getCode.js
@@ -0,0 +1,23 @@
+import * as dd from 'dingtalk-jsapi';
+export function getCode(callback) {
+	let corpId = 'dingb14b7554444efe0a';
+	console.log(dd.env.platform)
+	if (dd.env.platform !== "notInDingTalk") {
+		dd.ready(() => {
+			//浣跨敤SDK 鑾峰彇鍏嶇櫥鎺堟潈鐮�
+			dd.runtime.permission.requestAuthCode({
+				corpId: corpId,
+				onSuccess: (info) => {
+					// 鏍规嵁閽夐拤鎻愪緵鐨刟pi 鑾峰緱code鍚�,鍐嶆璋冪敤杩欎釜callback鏂规硶
+					// 鐢变簬鏄拤閽夎幏鍙朿ode鏄紓姝ユ搷浣�,涓嶇煡閬撲粈涔堟椂鍊欐墽琛屽畬姣�
+					// callback 鍑芥暟浼氱瓑浠栨墽琛屽畬姣曞悗鍦ㄨ嚜宸辫皟鐢ㄨ嚜宸�
+					callback(info.code)
+				},
+				onFail: (err) => {
+					alert('fail');
+					alert(JSON.stringify(err));
+				},
+			});
+		});
+	}
+}
\ No newline at end of file
diff --git a/h5/utils/http.interceptor.js b/h5/utils/http.interceptor.js
index 6d17428..a136b00 100644
--- a/h5/utils/http.interceptor.js
+++ b/h5/utils/http.interceptor.js
@@ -18,11 +18,11 @@
 	uni.$u.http.interceptors.response.use((response) => {
 		uni.hideLoading();
 		// 鐧诲綍杩囨湡
-		if (response.data.code === 401) {
-			uni.navigateTo({
-				url: '/packageA/loginAgain/loginAgain'
-			});
-		}
+		// if (response.data.code === 401) {
+		// 	uni.navigateTo({
+		// 		url: '/packageA/loginAgain/loginAgain'
+		// 	});
+		// }
 		if (response.data.code !== 200) {
 			uni.showToast({
 				title: response.data.message,
diff --git a/h5/utils/service.js b/h5/utils/service.js
index 55d60a4..4d7a31a 100644
--- a/h5/utils/service.js
+++ b/h5/utils/service.js
@@ -39,10 +39,10 @@
 								'title': '鏈嶅姟鍣ㄥ紓甯�',icon:'none'
 							})
 						}
-						if (data.code === 5112) {
-							uni.clearStorageSync()
-							window.location.href = app_url
-						}
+						// if (data.code === 5112) {
+						// 	uni.clearStorageSync()
+						// 	window.location.href = app_url
+						// }
 						return resolve(data)
 					}
 					resolve(data)
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
index 4e53960..6239c13 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
@@ -22,6 +22,9 @@
     @ApiModelProperty(value = "寰俊openId")
     private String openid;
 
+    @ApiModelProperty(value = "閽夐拤 unionId")
+    private String ddUnionId;
+
     @NotBlank(message = "瀵嗙爜涓嶈兘涓虹┖")
     @ApiModelProperty(value = "瀵嗙爜")
     private String password;
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginH5DTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginH5DTO.java
index 5cda109..9df4bde 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginH5DTO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginH5DTO.java
@@ -22,6 +22,9 @@
     @ApiModelProperty(value = "寰俊openId")
     private String openid;
 
+    @ApiModelProperty(value = "閽夐拤 unionId")
+    private String ddUnionId;
+
     @NotBlank(message = "瀵嗙爜涓嶈兘涓虹┖")
     @ApiModelProperty(value = "瀵嗙爜")
     private String password;
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
index 4f8a018..647c679 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
@@ -23,6 +23,8 @@
     private String code;
     @ApiModelProperty(value = "openid")
     private String openid;
+    @ApiModelProperty(value = "閽夐拤 unionId")
+    private String ddUnionId;
     @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷锛�0=鍙告満锛�1=璁垮锛�2=鍐呴儴鍛樺伐")
     private Integer userType;
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
index ad790af..48f88b9 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -98,6 +98,8 @@
     private String openidHkInfo;
     @ApiModelProperty(value = "寰俊openid鎺ㄩ�佹捣搴锋椂闂�", example = "1", hidden = true)
     private Date openidHkDate;
+    @ApiModelProperty(value = "閽夐拤 unionId", example = "1", hidden = true)
+    private String ddUnionId;
 
     //2024骞�12鏈�6鏃�11:00:30 绫诲瀷 0鍙告満浜哄憳 1鏅�氳瀹�  2鍐呴儴浜哄憳 3tms绠℃帶浜哄憳
     @ApiModelProperty(value = "绫诲瀷 0鍙告満浜哄憳 1鏅�氳瀹�  2鍐呴儴浜哄憳 3tms绠℃帶浜哄憳", example = "0")
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index 0fdc117..5334a12 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -156,7 +156,7 @@
             }
         }
         try {
-            LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,dto.getOpenid(),request);
+            LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,dto.getOpenid(),dto.getDdUnionId(),request);
             systemLoginLogService.create(loginLog);
             return  user;
         }catch (BusinessException e){
@@ -186,7 +186,7 @@
                 throw e;
             }
         }
-        LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,dto.getOpenid(),request);
+        LoginUserInfo user = dealLoginByPwdNewBiz(dto.getUsername(),dto.getPassword(),null,dto.getOpenid(),dto.getDdUnionId(),request);
         systemLoginLogService.create(loginLog);
         return  user;
     }
@@ -213,7 +213,7 @@
         isCaptcheValide(dto.getPhone(),dto.getCode());//妫�鏌ラ獙璇佺爜
         SystemLoginLog loginLog = getInitLoginlog(dto.getPhone(),request);
         try{
-            LoginUserInfo userInfo = dealLoginByPwdNewBiz(null,null,dto.getPhone(),dto.getOpenid(), request );
+            LoginUserInfo userInfo = dealLoginByPwdNewBiz(null,null,dto.getPhone(),dto.getOpenid(),dto.getDdUnionId(), request );
             systemLoginLogService.create(loginLog);
             return userInfo;
         }catch (BusinessException e){
@@ -227,7 +227,7 @@
             throw e;
         }
     }
-    private LoginUserInfo dealLoginByPwdNewBiz(String username,String pwd, String phone, String openid, ServerHttpRequest request) {
+    private LoginUserInfo dealLoginByPwdNewBiz(String username,String pwd, String phone, String openid, String ddUnionId, ServerHttpRequest request) {
         // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
         SystemUser queryDto = new SystemUser();
         queryDto.setMobile(phone);
@@ -248,7 +248,12 @@
                 throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
             }
         }
-        dealOpenIdBiz(user,openid);
+        if(StringUtils.isNotBlank(openid)){
+            dealOpenIdBiz(user,openid);
+        }
+        if(StringUtils.isNotBlank(ddUnionId)){
+            dealDDUnionIdBiz(user,ddUnionId);
+        }
         Company company = new Company();
         if(Objects.nonNull(user.getCompanyId())){
             company = companyMapper.selectById(user.getCompanyId());
@@ -320,6 +325,24 @@
                     .eq(SystemUser::getId,user.getId()));
         }
     }
+
+    private void dealDDUnionIdBiz(SystemUser user, String ddUnionId) {
+        if(StringUtils.isNotBlank(ddUnionId)){
+            //濡傛灉openId涓嶄负绌�,缁戝畾璇ョ敤鎴穙penid
+            systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
+                    .set(SystemUser::getDdUnionId,null)
+                    .set(SystemUser::getOpenidHkStatus,Constants.ZERO)
+                    .ne(SystemUser::getType,Constants.memberType.gkuser)
+                    .eq(SystemUser::getDdUnionId,ddUnionId)
+            );
+            systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda()
+                    .set(SystemUser::getDdUnionId,ddUnionId)
+                    .set(SystemUser::getOpenidHkStatus,Constants.ZERO)
+                    .set(SystemUser::getOpenidHkDate,null)
+                    .set(SystemUser::getOpenidHkInfo,null)
+                    .eq(SystemUser::getId,user.getId()));
+        }
+    }
     private void dealOpenIdBizForGk(SystemUser user, String openid) {
         if(StringUtils.isNotBlank(openid)){
             //濡傛灉openId涓嶄负绌�,缁戝畾璇ョ敤鎴穙penid
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 ee19a81..b8f1acc 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
@@ -21,6 +21,7 @@
 import com.doumee.service.business.ext.ERPSyncService;
 import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromHKServiceImpl;
 import com.doumee.service.business.impl.hksync.fhk.HkSyncOrgUserFromSelfServiceImpl;
+import com.taobao.api.ApiException;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -367,4 +368,14 @@
         return ApiResponse.success(null);
     }
 
+
+    @ApiOperation("鍏ㄩ噺浜哄憳淇℃伅鍚屾 - 閽夐拤")
+    @PostMapping("/syncAllDingding")
+//    @CloudRequiredPermission("business:company:sync")
+    public ApiResponse syncAllDingding() throws ApiException {
+        memberService.syncDDUserInfo();
+        return ApiResponse.success("鍚屾鎴愬姛");
+    }
+
+
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
index 6ec9c82..c8bb46b 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
@@ -3,6 +3,7 @@
 import com.doumee.api.BaseController;
 import com.doumee.config.annotation.LoginNoRequired;
 import com.doumee.core.annotation.trace.Trace;
+import com.doumee.dao.web.response.DDAuthorizeVO;
 import com.doumee.service.business.third.model.ApiResponse;
 import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
@@ -17,6 +18,7 @@
 import com.doumee.service.business.MemberService;
 import com.doumee.service.business.VisitReasonService;
 import com.doumee.service.business.VisitsService;
+import com.taobao.api.ApiException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -65,6 +67,18 @@
         return ApiResponse.success("鏌ヨ鎴愬姛",wxAuthorizeVO);
     }
 
+
+    @ApiOperation(value = "閽夐拤寰俊鎺堟潈", notes = "璁垮寰俊鎺堟潈鑾峰彇openId")
+    @GetMapping("/ddAuthorize")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "鎺堟潈鐮�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "source", value = "鏉ユ簮:0=鍙告満锛�1=璁垮锛�2=鍐呴儴鍛樺伐", required = true)
+    })
+    public ApiResponse<DDAuthorizeVO> ddAuthorize(@RequestParam String code, @RequestParam Integer source) throws ApiException {
+        DDAuthorizeVO ddAuthorizeVO =  memberService.ddAuthorize(code,source);
+        return ApiResponse.success("鏌ヨ鎴愬姛",ddAuthorizeVO);
+    }
+
     @ApiOperation(value = "鏌ヨ琚闂汉淇℃伅", notes = "鏌ヨ琚闂汉淇℃伅")
     @PostMapping("/getVisitedMember")
     public ApiResponse<List<MemberVO>> getVisitedMember(@Valid @RequestBody CheckVisitedDTO checkVisitedDTO) {
@@ -78,6 +92,8 @@
         visits.setSourceType(Constants.ZERO);
         return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits,false,Constants.ZERO));
     }
+
+
     @ApiOperation(value = "鏉ヨ浜嬬敱", notes = "鏉ヨ浜嬬敱")
     @PostMapping("/visitReason")
     public ApiResponse<List<VisitReason>> visitReason() {
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
index 05bda56..84ac5f5 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalk.java
@@ -14,16 +14,21 @@
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.dao.business.dao.CompanyMapper;
+import com.doumee.dao.business.model.CarUseBook;
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.Visits;
 import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.service.business.CompanyService;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.taobao.api.ApiException;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.DateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -102,6 +107,19 @@
     public String getToken(){
         String accessToken  =  systemDictDataBiz.queryByCode(Constants.DD_TALK,Constants.ACCESS_TOKEN).getCode();
         return accessToken;
+    }
+
+
+    public OapiV2UserGetuserinfoResponse.UserGetByCodeResponse  getDDUserByCode(String code) throws ApiException {
+        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");
+        OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();
+        req.setCode(code);
+        OapiV2UserGetuserinfoResponse rsp = client.execute(req, getToken());
+        if(rsp.getErrcode().equals(Constants.DD_ERR_CODE)){
+           return  rsp.getResult();
+        }else{
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),rsp.getMessage());
+        }
     }
 
 
@@ -364,6 +382,126 @@
         }
     }
 
+    public void workInfoOANotice(Long agentId,String userIds,OapiMessageCorpconversationAsyncsendV2Request.Msg msg)throws ApiException {
+        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
+        OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
+        request.setAgentId(agentId);
+        request.setUseridList(userIds);
+        request.setToAllUser(false);
 
+        request.setMsg(msg);
+        OapiMessageCorpconversationAsyncsendV2Response rsp = client.execute(request, getToken());
+        if(rsp.getErrcode().equals(Constants.DD_ERR_CODE)){
+
+        }else{
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),rsp.getMessage());
+        }
+    }
+
+
+    /**
+     * 璁垮鐢宠/鎶ュ OA 宸ヤ綔閫氱煡 鍐呭
+     * @param visits
+     * @param title
+     * @return
+     */
+    public OapiMessageCorpconversationAsyncsendV2Request.Msg getVisitNoticeMsg(Visits visits,String title){
+        OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
+        msg.setMsgtype("oa");
+        OapiMessageCorpconversationAsyncsendV2Request.OA oa = new OapiMessageCorpconversationAsyncsendV2Request.OA();
+        oa.setMessageUrl("");
+        OapiMessageCorpconversationAsyncsendV2Request.Head head = new OapiMessageCorpconversationAsyncsendV2Request.Head();
+        head.setText(title);
+        head.setBgcolor("#279BAA");
+        oa.setHead(head);
+
+        OapiMessageCorpconversationAsyncsendV2Request.Body body = new OapiMessageCorpconversationAsyncsendV2Request.Body();
+        body.setTitle(!Constants.equalsInteger(visits.getType(),Constants.TWO)?visits.getName()+"鐨勮瀹㈢敵璇�":"鐨勮瀹㈡姤澶�");
+        List<OapiMessageCorpconversationAsyncsendV2Request.Form> formList = new ArrayList<>();
+
+        OapiMessageCorpconversationAsyncsendV2Request.Form visitUser = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+        visitUser.setKey("鏉ヨ浜�");
+        visitUser.setValue(visits.getName());
+        formList.add(visitUser);
+
+        OapiMessageCorpconversationAsyncsendV2Request.Form inDate = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+        inDate.setKey("鍏ュ洯鏃堕棿");
+        inDate.setValue(DateUtil.formatDate(visits.getStarttime(),"MM-dd HH:mm"));
+        formList.add(inDate);
+
+        OapiMessageCorpconversationAsyncsendV2Request.Form outDate = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+        outDate.setKey("绂诲洯鏃堕棿");
+        outDate.setValue(DateUtil.formatDate(visits.getEndtime(),"MM-dd HH:mm"));
+        formList.add(outDate);
+
+        OapiMessageCorpconversationAsyncsendV2Request.Form inReason = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+        inReason.setKey("鏉ヨ浜嬬敱");
+        inReason.setValue(visits.getReason());
+        formList.add(inReason);
+
+        if(StringUtils.isNotBlank(visits.getCarNos())){
+            OapiMessageCorpconversationAsyncsendV2Request.Form carNos = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+            carNos.setKey("闅忚杞﹁締");
+            carNos.setValue(visits.getCarNos());
+            formList.add(visitUser);
+        }
+
+        body.setForm(formList);
+        oa.setBody(body);
+        msg.setOa(oa);
+
+        return msg;
+    }
+
+
+   /* public OapiMessageCorpconversationAsyncsendV2Request.Msg getCarUseNoticeMsg(CarUseBook carUseBook,String title){
+        OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
+        msg.setMsgtype("oa");
+        OapiMessageCorpconversationAsyncsendV2Request.OA oa = new OapiMessageCorpconversationAsyncsendV2Request.OA();
+        oa.setMessageUrl("");
+        OapiMessageCorpconversationAsyncsendV2Request.Head head = new OapiMessageCorpconversationAsyncsendV2Request.Head();
+        head.setText(title);
+        head.setBgcolor("#279BAA");
+        oa.setHead(head);
+
+        OapiMessageCorpconversationAsyncsendV2Request.Body body = new OapiMessageCorpconversationAsyncsendV2Request.Body();
+        body.setTitle("鍏姟鐢ㄨ溅");
+        List<OapiMessageCorpconversationAsyncsendV2Request.Form> formList = new ArrayList<>();
+
+
+        OapiMessageCorpconversationAsyncsendV2Request.Form startDate = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+        startDate.setKey("寮�濮嬫椂闂�");
+        startDate.setValue(DateUtil.formatDate(carUseBook.getStartTime(),"MM-dd HH:mm"));
+        formList.add(startDate);
+
+        OapiMessageCorpconversationAsyncsendV2Request.Form endDate = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+        endDate.setKey("缁撴潫鏃堕棿");
+        endDate.setValue(DateUtil.formatDate(carUseBook.getEndTime(),"MM-dd HH:mm"));
+        formList.add(endDate);
+
+
+        OapiMessageCorpconversationAsyncsendV2Request.Form userNum = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+        userNum.setKey("涔樿溅浜烘暟");
+        userNum.setValue(DateUtil.formatDate(carUseBook.getEndTime(),"MM-dd HH:mm"));
+        formList.add(userNum);
+
+        OapiMessageCorpconversationAsyncsendV2Request.Form inReason = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+        inReason.setKey("鏉ヨ浜嬬敱");
+        inReason.setValue(visits.getReason());
+        formList.add(inReason);
+
+        if(StringUtils.isNotBlank(visits.getCarNos())){
+            OapiMessageCorpconversationAsyncsendV2Request.Form carNos = new OapiMessageCorpconversationAsyncsendV2Request.Form();
+            carNos.setKey("闅忚杞﹁締");
+            carNos.setValue(visits.getCarNos());
+            formList.add(visitUser);
+        }
+
+        body.setForm(formList);
+        oa.setBody(body);
+        msg.setOa(oa);
+
+        return msg;
+    }*/
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java
index 474b586..5dfd1a8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/core/dingTalk/DingTalkStream.java
@@ -76,7 +76,7 @@
                             if(eventType.startsWith("org")){
                                 companyService.ddPushCompanyInfo(eventType,bizData);
                             }else if(eventType.startsWith("user")){
-
+                                memberService.ddPushMemberInfo(eventType,bizData);
                             }
                             //澶勭悊浜嬩欢
 //                            process(bizData);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DDAuthorizeVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DDAuthorizeVO.java
new file mode 100644
index 0000000..8ad2562
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/DDAuthorizeVO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.web.response;
+
+import com.doumee.dao.business.model.Member;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 11:19
+ */
+@Data
+public class DDAuthorizeVO {
+
+    @ApiModelProperty(value = "鎺堟潈 unionId ")
+    private String unionId;
+
+    @ApiModelProperty(value = "鐢ㄦ埛token")
+    private String token;
+
+    @ApiModelProperty(value = "鐢ㄦ埛淇℃伅")
+    private Member member;
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index d425932..024145c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -1,5 +1,6 @@
 package com.doumee.service.business;
 
+import com.doumee.dao.web.response.DDAuthorizeVO;
 import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
 import com.doumee.service.business.third.model.PageWrap;
@@ -13,6 +14,7 @@
 import com.doumee.dao.web.reqeust.VisitMemberDTO;
 import com.doumee.dao.web.response.MemberVO;
 import com.doumee.dao.web.response.WxAuthorizeVO;
+import com.taobao.api.ApiException;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -172,6 +174,7 @@
      */
     WxAuthorizeVO wxAuthorize(String code,Integer source);
 
+    DDAuthorizeVO ddAuthorize(String code, Integer source) throws ApiException;
 
 
     List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO);
@@ -208,4 +211,8 @@
     List<Member>  findDriveList(Member model);
 
     void initPinyinTool();
+
+    void syncDDUserInfo() throws ApiException;
+
+    void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
index 7336cb7..575f5a3 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java
@@ -961,7 +961,7 @@
         company.setCompanyNamePath(company.getName());//鍚嶇О璺緞
         company.setHkParentId(rootOrgId);
         String idPath = "";
-        if(StringUtils.isNotBlank(company.getErpParentId()) && !StringUtils.equals(company.getErpParentId(),Constants.ONE+"")){
+        if(StringUtils.isNotBlank(company.getErpParentId())){
             Company parent = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,company.getErpParentId())
                     .eq(Company::getIsdeleted,Constants.ZERO).last(" limit 1 "));
             if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)){
@@ -981,6 +981,7 @@
             company.setHkParentId(parent.getHkId());
             company.setCompanyPath(parent.getCompanyPath()+company.getId()+"/");
             company.setCompanyNamePath(parent.getCompanyNamePath()+"/"+company.getName());
+            company.setParentId(parent.getId());
         }
         company.setHkCompanyPath(company.getCompanyNamePath());
         company.setCreateDate(new Date());
@@ -1009,7 +1010,7 @@
     public Company syncDDEditCompanyModel(OapiV2DepartmentGetResponse.DeptGetResponse deptGetResponse,Company company){
         company.setErpParentId(deptGetResponse.getParentId().toString());
         String idPath = "";
-        if(StringUtils.isNotBlank(company.getErpParentId()) && !StringUtils.equals(company.getErpParentId(),Constants.ONE+"")){
+        if(StringUtils.isNotBlank(company.getErpParentId())){
             Company parent = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getErpId,company.getErpParentId())
                     .eq(Company::getIsdeleted,Constants.ZERO).last("limit 1 "));
             if(parent == null || Constants.equalsInteger(parent.getIsdeleted(),Constants.ONE)){
@@ -1026,6 +1027,7 @@
             company.setHkParentId(parent.getHkId());
             company.setCompanyPath(parent.getCompanyPath()+company.getId()+"/");
             company.setCompanyNamePath(parent.getCompanyNamePath()+"/"+company.getName());
+            company.setParentId(parent.getId());
         }
 
         company.setName(deptGetResponse.getName());
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 43c2c6f..b30488b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -9,6 +9,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dingtalk.api.response.OapiV2DepartmentGetResponse;
 import com.dingtalk.api.response.OapiV2UserGetResponse;
+import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.config.DataSyncConfig;
 import com.doumee.core.annotation.excel.ExcelImporter;
@@ -22,6 +23,7 @@
 import com.doumee.core.haikang.model.param.respose.UserAddResponse;
 import com.doumee.core.haikang.model.param.respose.UserDelResponse;
 import com.doumee.core.haikang.service.HKService;
+import com.doumee.dao.web.response.DDAuthorizeVO;
 import com.doumee.service.business.third.TmsService;
 import com.doumee.service.business.third.model.LoginUserInfo;
 import com.doumee.service.business.third.model.PageData;
@@ -219,9 +221,9 @@
 
     private Member initAddMemberModel(Member member, LoginUserInfo loginUserInfo) {
         Member insert=  new Member();
-        insert.setCreator(Objects.nonNull(loginUserInfo.getId())?loginUserInfo.getId():null);
+        insert.setCreator(Objects.nonNull(loginUserInfo)?loginUserInfo.getId():null);
         insert.setCreateDate(new Date());
-        insert.setEditor(Objects.nonNull(loginUserInfo.getId())?loginUserInfo.getId():null);
+        insert.setEditor(Objects.nonNull(loginUserInfo)?loginUserInfo.getId():null);
         insert.setEditDate(new Date());
         insert.setHkOrgId(member.getHkOrgId());
         insert.setIsdeleted(Constants.ZERO);
@@ -231,6 +233,7 @@
         insert.setCode(member.getCode());
         insert.setType(Constants.TWO);
         insert.setHkDate(new Date());
+        insert.setErpId(member.getErpId());
         insert.setWorkStatus(Constants.ZERO);//榛樿鍦ㄨ亴
         insert.setCanVisit(Constants.ZERO);//榛樿涓嶅彲璁块棶
         insert.setAuthStatus(Constants.ZERO);
@@ -1845,6 +1848,12 @@
         return wxAuthorizeVO;
     }
 
+    /**
+     * 寰俊鎺堟潈 鍐呴儴浜哄憳鐧诲綍
+     * @param wxAuthorizeVO
+     * @param openId
+     * @param source
+     */
     private void dealSystemUserAuthBiz(WxAuthorizeVO wxAuthorizeVO, String openId, Integer source) {
         SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda()
                 .eq(SystemUser::getOpenid,openId)
@@ -1874,6 +1883,44 @@
             wxAuthorizeVO.setToken(token);
         }
     }
+
+    /**
+     * 閽夐拤鎺堟潈鑾峰彇鍐呴儴浜哄憳鐧诲綍淇℃伅
+     * @param ddAuthorizeVO
+     * @param unionId
+     * @param source
+     */
+    private void dealSystemUserAuthBizByDD(DDAuthorizeVO ddAuthorizeVO, String unionId, Integer source) {
+        SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda()
+                .eq(SystemUser::getDdUnionId,unionId)
+                .in(SystemUser::getType,Constants.memberType.internal)
+                .eq(SystemUser::getDeleted,Constants.ZERO)
+                .last(" limit 1 "));
+        //闈炶瀹㈢敤鎴� 杩涜鍒ゆ柇鏄惁瀛樺湪鐢ㄦ埛
+        if(!Objects.isNull(user)){
+            Member member = memberMapper.selectById(user.getMemberId());
+            if(member == null || member.getIsdeleted() == Constants.ONE){
+                return;
+//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
+            }
+            if(member.getStatus() != Constants.ZERO){
+                return;
+//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
+            }
+            if(StringUtils.isNotBlank(member.getIdcardNo())){
+                member.setIdcardDecode(DESUtil.decrypt(Constants.EDS_PWD, member.getIdcardNo()));
+            }
+            String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
+                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+            member.setPrefixUrl(prefixUrl);
+            ddAuthorizeVO.setMember(member);
+            //鍙告満 涓� 鍐呴儴浜哄憳 鎻愪緵token
+            String token = systemLoginService.loginByUserId(user.getId());
+            ddAuthorizeVO.setToken(token);
+        }
+    }
+
+
     private void dealDriverUserAuthBiz(WxAuthorizeVO wxAuthorizeVO, String openId, Integer source) {
         SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda()
                 .eq(SystemUser::getOpenid,openId)
@@ -2345,6 +2392,7 @@
     /**
      * 鍚屾閽夐拤鍐呴儴鍛樺伐淇℃伅
      */
+    @Override
     public void syncDDUserInfo() throws ApiException {
         List<OapiV2UserGetResponse.UserGetResponse>  list = dingTalk.syncAllUserInfo();
         if(CollectionUtils.isEmpty(list)){
@@ -2410,7 +2458,7 @@
 
     private Member syncDDAddMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member member) {
         member.setCreateDate(new Date());
-        member.setErpId(deptGetResponse.getUserid());
+        member.setErpId(deptGetResponse.getUnionid());
         member.setPhone(deptGetResponse.getMobile());
         member.setName(deptGetResponse.getName());
         member.setCode(deptGetResponse.getJobNumber());
@@ -2440,7 +2488,7 @@
         if(Objects.nonNull(deptIdList)){
             List<Company> companyList = companyMapper.selectList(new QueryWrapper<Company>().lambda().in(Company::getErpId,deptIdList)
                     .eq(Company::getType,Constants.ONE).eq(Company::getIsdeleted,Constants.ZERO)
-                    .isNotNull(Company::getHkId)
+//                    .isNotNull(Company::getHkId) 鏆傛椂鏃犳硶鍚屾寮�鑸� 鍏堟敞閲�
             );
             if(CollectionUtils.isNotEmpty(companyList)){
                 member.setHkOrgId(companyList.get(Constants.ZERO).getHkId());
@@ -2469,7 +2517,7 @@
     
     public Member syncDDEditMemberModel(OapiV2UserGetResponse.UserGetResponse deptGetResponse,Member updateMember) { 
         updateMember.setEditDate(new Date());
-        updateMember.setErpId(deptGetResponse.getUserid());
+        updateMember.setErpId(deptGetResponse.getUnionid());
         updateMember.setPhone(deptGetResponse.getMobile());
         updateMember.setName(deptGetResponse.getName());
         updateMember.setCode(deptGetResponse.getJobNumber());
@@ -2536,6 +2584,7 @@
     }
 
 
+    @Override
     public void ddPushMemberInfo(String eventType, shade.com.alibaba.fastjson2.JSONObject eventData) throws ApiException {
         JSONArray jsonArray = eventData.getJSONArray("userId");
         if(jsonArray.isEmpty()){
@@ -2553,20 +2602,61 @@
             }
         }else if(eventType.equals("user_add_org")||eventType.equals("user_modify_org")){
             for (int i = 0; i < jsonArray.size(); i++) {
+                OapiV2UserGetResponse.UserGetResponse userGetResponse =  dingTalk.syncUserInfo(jsonArray.getString(i));
                 Member member  = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
                         .eq(Member::getIsdeleted,Constants.ZERO)
-                        .eq(Member::getErpId,jsonArray.getLong(i))
+                        .eq(Member::getErpId,userGetResponse.getUnionid())
                         .last(" limit 1")
                 );
-                OapiV2UserGetResponse.UserGetResponse deptGetResponse = dingTalk.syncUserInfo(jsonArray.getString(i));
                 if(Objects.isNull(member)){
-                    getAddMemberModel(deptGetResponse,member);
+                    member = new Member();
+                    getAddMemberModel(userGetResponse,member);
                 }else{
-                    getUpdateMemberModel(deptGetResponse,member);
+                    getUpdateMemberModel(userGetResponse,member);
                 }
             }
         }
     }
 
+    /**
+     * 閽夐拤鎺堟潈鐧诲綍
+     * @param code
+     * @param source
+     * @return
+     * @throws ApiException
+     */
+    @Override
+    public DDAuthorizeVO ddAuthorize(String code, Integer source) throws ApiException {
+        if(StringUtils.isBlank(code)||Objects.isNull(source)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        OapiV2UserGetuserinfoResponse.UserGetByCodeResponse userGetByCodeResponse = dingTalk.getDDUserByCode(code);
+        if(Objects.isNull(userGetByCodeResponse)
+                || StringUtils.isBlank(userGetByCodeResponse.getUnionid())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"閽夐拤鎺堟潈澶辫触");
+        }
+        String unionId = userGetByCodeResponse.getUnionid();
+
+        DDAuthorizeVO ddAuthorizeVO = new DDAuthorizeVO();
+        if(StringUtils.isBlank(unionId)){
+            return ddAuthorizeVO;
+        }
+        ddAuthorizeVO.setUnionId(unionId);
+//        if(source==1){
+//            //澶勭悊鏅�氳瀹汉鍛樿嚜鍔ㄦ巿鏉冮�昏緫
+//            dealVisitUserAuthBiz(wxAuthorizeVO,openId,source);
+//        }else if(source == 3){
+//            //澶勭悊tms绠℃帶浜哄憳鑷姩鎺堟潈閫昏緫
+//            dealGkUserAuthBiz(wxAuthorizeVO,openId,source);
+//        }else if(source == 0){
+//            //濡傛灉鏄徃鏈猴紝鍒欎粠system_user鏌ヨ
+//            dealDriverUserAuthBiz(wxAuthorizeVO,openId,source);
+//        }else{
+            //濡傛灉鏄唴閮ㄤ汉鍛橈紝鍒欎粠system_user鏌ヨ
+            dealSystemUserAuthBizByDD(ddAuthorizeVO,unionId,source);
+//        }
+        return ddAuthorizeVO;
+    }
+
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index d9ab31f..4ad2587 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -239,7 +239,7 @@
         //妫�鏌ユ槸鍚﹀繀椤荤瓟棰橈紝骞朵笖绗﹀悎绛旈瑕佹眰
         ProblemLog problemLog = isValidProblemLog(visits,source);
         //鑾峰彇鐢宠鐨勬捣搴疯闂棬绂佺粍淇℃伅
-        getHkDeviceRoles(visits,isERP);
+//        getHkDeviceRoles(visits,isERP);
         //妫�楠屾嫓璁夸汉鏄惁鍚堟硶
         Member visitMember = isValideVisitedUser(visits.getReceptMemberId());
         if(StringUtils.isNotBlank(visits.getIdcardNo()) && Constants.equalsInteger(Constants.ZERO, visits.getIdcardType())
@@ -258,24 +258,6 @@
         //鍒濆鍖栬瀹俊鎭�
         initVisitInfo(visits,date);
 
-//        if(StringUtils.isNotBlank(visits.getFaceImg())&&(Constants.equalsInteger(visits.getType(),Constants.ZERO)|| Constants.equalsInteger(visits.getType(),Constants.TWO))){
-//            //浜鸿劯璇勫垎
-//            FacePictureCheckRequest param = new FacePictureCheckRequest();
-//            String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_LOCAL_RESOURCE_PATH).getCode() +
-//                    systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
-//            param.setFacePicUrl(prefixUrl + visits.getFaceImg());
-//            BaseResponse<FacePictureCheckResponse> response = HKService.facePictureCheck(param);
-//            if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){
-//                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝浜鸿劯璇勫垎鑾峰彇鏁版嵁澶辫触~");
-//            }
-//            FacePictureCheckResponse facePictureCheckResponse = response.getData();
-//            if(Objects.isNull(facePictureCheckResponse) || Objects.isNull(facePictureCheckResponse.getCheckResult())){
-//                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵逛笉璧凤紝浜鸿劯璇勫垎鑾峰彇鏁版嵁澶辫触~");
-//            }
-//            if(!facePictureCheckResponse.getCheckResult()){
-//                throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), facePictureCheckResponse.getStatusMessage());
-//            }
-//        }
         visits.setSendTimeOutNotice(Constants.ZERO);
         visitsMapper.insert(visits);
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
index c525f0e..552d487 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/thrid/BoardServiceImpl.java
@@ -1360,12 +1360,18 @@
         List<Long> startTimeList = platformLogList.stream().filter(i->Objects.nonNull(i.getParam1()))
                 .filter(i->Objects.nonNull(i.getParam1())&&i.getParam1().indexOf(today)>=0)
                 .map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam1()).getTime()).collect(Collectors.toList());
-        Long startTime  = Collections.min(startTimeList);
+        Long startTime  = null ;
+        if(CollectionUtils.isNotEmpty(startTimeList)){
+            startTime = Collections.min(startTimeList);
+        }
         //鑾峰彇缁撴潫鏃堕棿
         List<Long> endTimeList = platformLogList.stream()
                 .filter(i->Objects.nonNull(i.getParam2())&&i.getParam2().indexOf(today)>=0)
                 .map(i->DateUtil.fromStringToDate("yyyy-MM-dd HH:mm:ss",i.getParam2()).getTime()).collect(Collectors.toList());
-        Long endTime = Collections.max(endTimeList);
+        Long endTime = null ;
+        if(CollectionUtils.isNotEmpty(endTimeList)){
+            endTime = Collections.max(endTimeList);
+        }
         if(Objects.isNull(startTime)
             || Objects.isNull(endTime) || (startTime>=endTime)){
             return BigDecimal.ZERO;

--
Gitblit v1.9.3