Browse Source

网关过滤器

wangwenju 1 month ago
parent
commit
66804676db
58 changed files with 473 additions and 400 deletions
  1. 385 386
      LiangZhiYUMao/pages/page3/page3.vue
  2. 5 2
      common/src/main/java/com/zhentao/pojo/Users.java
  3. BIN
      common/target/classes/com/zhentao/pojo/Users.class
  4. 2 0
      gateway/src/main/java/com/zhentao/filter/GatewayRoutes.java
  5. 1 10
      gateway/target/classes/application.yml
  6. BIN
      gateway/target/classes/com/zhentao/filter/GatewayRoutes.class
  7. 5 0
      service/Essential/pom.xml
  8. 36 2
      service/Essential/src/main/java/com/zhentao/service/impl/VipServiceImpl.java
  9. BIN
      service/Essential/target/classes/com/zhentao/Essential.class
  10. BIN
      service/Essential/target/classes/com/zhentao/common/Result.class
  11. BIN
      service/Essential/target/classes/com/zhentao/config/RedisConfig.class
  12. BIN
      service/Essential/target/classes/com/zhentao/config/WebConfig.class
  13. BIN
      service/Essential/target/classes/com/zhentao/config/WechatPayProperties.class
  14. BIN
      service/Essential/target/classes/com/zhentao/controller/ActivityRegistrationController.class
  15. BIN
      service/Essential/target/classes/com/zhentao/controller/AvatarTestController.class
  16. BIN
      service/Essential/target/classes/com/zhentao/controller/AvatarUploadController.class
  17. BIN
      service/Essential/target/classes/com/zhentao/controller/BlacklistController.class
  18. BIN
      service/Essential/target/classes/com/zhentao/controller/CheckinController.class
  19. BIN
      service/Essential/target/classes/com/zhentao/controller/UserController.class
  20. BIN
      service/Essential/target/classes/com/zhentao/controller/UserProfileController.class
  21. BIN
      service/Essential/target/classes/com/zhentao/controller/VipController.class
  22. BIN
      service/Essential/target/classes/com/zhentao/dto/VipPayOrderRequest.class
  23. BIN
      service/Essential/target/classes/com/zhentao/entity/ActivityRegistration.class
  24. BIN
      service/Essential/target/classes/com/zhentao/entity/Blacklist.class
  25. BIN
      service/Essential/target/classes/com/zhentao/entity/CheckinRecord.class
  26. BIN
      service/Essential/target/classes/com/zhentao/entity/User.class
  27. BIN
      service/Essential/target/classes/com/zhentao/entity/UserVip.class
  28. BIN
      service/Essential/target/classes/com/zhentao/entity/VipPackage.class
  29. BIN
      service/Essential/target/classes/com/zhentao/entity/VipPayOrder.class
  30. BIN
      service/Essential/target/classes/com/zhentao/mapper/ActivityRegistrationMapper.class
  31. BIN
      service/Essential/target/classes/com/zhentao/mapper/BlacklistMapper.class
  32. BIN
      service/Essential/target/classes/com/zhentao/mapper/CheckinRecordMapper.class
  33. BIN
      service/Essential/target/classes/com/zhentao/mapper/UserMapper.class
  34. BIN
      service/Essential/target/classes/com/zhentao/mapper/UserProfileMapper.class
  35. BIN
      service/Essential/target/classes/com/zhentao/mapper/UserVipMapper.class
  36. BIN
      service/Essential/target/classes/com/zhentao/mapper/VipPackageMapper.class
  37. BIN
      service/Essential/target/classes/com/zhentao/mapper/VipPayOrderMapper.class
  38. BIN
      service/Essential/target/classes/com/zhentao/service/impl/ActivityRegistrationServiceImpl.class
  39. BIN
      service/Essential/target/classes/com/zhentao/service/impl/BlacklistServiceImpl.class
  40. BIN
      service/Essential/target/classes/com/zhentao/service/impl/CheckinServiceImpl.class
  41. BIN
      service/Essential/target/classes/com/zhentao/service/impl/UserProfileServiceImpl.class
  42. BIN
      service/Essential/target/classes/com/zhentao/service/impl/VipServiceImpl$1.class
  43. BIN
      service/Essential/target/classes/com/zhentao/service/impl/VipServiceImpl.class
  44. BIN
      service/Essential/target/classes/com/zhentao/util/IpUtils.class
  45. BIN
      service/Essential/target/classes/com/zhentao/vo/BlacklistVO.class
  46. BIN
      service/Essential/target/classes/com/zhentao/vo/CheckinInfoVO.class
  47. BIN
      service/Essential/target/classes/com/zhentao/vo/CheckinRewardVO.class
  48. BIN
      service/Essential/target/classes/com/zhentao/vo/UserVipInfoVO.class
  49. BIN
      service/Essential/target/classes/com/zhentao/vo/VipPackageVO.class
  50. BIN
      service/Essential/target/classes/com/zhentao/vo/WechatPayOrderVO.class
  51. BIN
      service/Recommend/target/classes/com/zhentao/service/impl/RecommendServiceImpl$1.class
  52. BIN
      service/dynamic/target/classes/com/zhentao/controller/DynamicController.class
  53. BIN
      service/dynamic/target/classes/com/zhentao/entity/DynamicLikes.class
  54. BIN
      service/dynamic/target/classes/com/zhentao/mapper/UserDynamicsMapper.class
  55. BIN
      service/dynamic/target/classes/com/zhentao/service/InteractionService.class
  56. BIN
      service/dynamic/target/classes/com/zhentao/service/impl/InteractionServiceImpl.class
  57. 39 0
      service/dynamic/target/classes/mapper/UserDynamicsMapper.xml
  58. BIN
      service/homePage/target/classes/com/zhentao/service/impl/MatchmakerServiceImpl.class

+ 385 - 386
LiangZhiYUMao/pages/page3/page3.vue

@@ -1,413 +1,412 @@
 <template>
-	<view class="content">
-		<!-- 背景图片 -->
-		<image class="bg-image" src="/static/login-bg.png" mode="aspectFill"></image>
-		
-		
-		<!-- 顶部标题区域 -->
-		<view class="header-section">
-			<!-- <view class="app-logo">🪶🪶</view> -->
-			<image class="app-logo" src="/static/logo.png" mode="widthFix"></image>
-			<!-- <view class="app-name">青鸾之恋</view> -->
-			<view class="app-slogan">真诚相遇 · 携手一生</view>
-		</view>
-		
-		<!-- 登录框 -->
-		<view class="login-box">
-			<!-- 微信一键登录 -->
-			<button class="wechat-login-btn" @click="login_zheshow">
-				<image class="wechat-icon" src="/static/wechat-icon.png" mode="aspectFit"></image>
-				<text>微信一键登录</text>
-			</button>
-		
-		</view>
-		
-		<!-- 底部提示 -->
-		<view class="footer-tip">
-			<text class="tip-icon">💗</text>
-			<text class="tip-text">遇见对的人,不再孤单</text>
-		</view>
-		
-		<btnlogin :zheshow='zheshow' />
-	</view>
+  <view class="content">
+    <!-- 背景图片 -->
+    <image class="bg-image" src="/static/login-bg.png" mode="aspectFill"></image>
+
+
+    <!-- 顶部标题区域 -->
+    <view class="header-section">
+      <!-- <view class="app-logo">🪶🪶</view> -->
+      <image class="app-logo" src="/static/logo.png" mode="widthFix"></image>
+      <!-- <view class="app-name">青鸾之恋</view> -->
+      <view class="app-slogan">真诚相遇 · 携手一生</view>
+    </view>
+
+    <!-- 登录框 -->
+    <view class="login-box">
+      <!-- 微信一键登录 -->
+      <button class="wechat-login-btn" @click="login_zheshow">
+        <image class="wechat-icon" src="/static/wechat-icon.png" mode="aspectFit"></image>
+        <text>微信一键登录</text>
+      </button>
+
+    </view>
+
+    <!-- 底部提示 -->
+    <view class="footer-tip">
+      <text class="tip-icon">💗</text>
+      <text class="tip-text">遇见对的人,不再孤单</text>
+    </view>
+
+    <btnlogin :zheshow='zheshow'/>
+  </view>
 </template>
 
 <script>
-    import btnlogin from '@/components/butlogin';
-    import api from '@/utils/api.js'
-    import userAuth from '@/utils/userAuth.js'
-    export default {
-        components:{
-            btnlogin
-        },
-        data() {
-            return {
-                zheshow: false, // 控制弹窗显示隐藏
-                redirectUrl: '' // 登录成功后跳转地址(可选)
+import btnlogin from '@/components/butlogin';
+import api from '@/utils/api.js'
+import userAuth from '@/utils/userAuth.js'
+
+export default {
+  components: {
+    btnlogin
+  },
+  data() {
+    return {
+      zheshow: false, // 控制弹窗显示隐藏
+      redirectUrl: '' // 登录成功后跳转地址(可选)
+    }
+  },
+
+  onLoad(options) {
+    // 处理跳转参数
+    this.redirectUrl = options && options.redirect ? decodeURIComponent(options.redirect) : ''
+  },
+
+  methods: {
+    login_zheshow() {
+      this.zheshow = !this.zheshow
+    },
+    loset(Logon_Credentials) {
+      console.log('=== 开始微信登录流程 ===')
+      console.log('用户输入信息:', Logon_Credentials)
+
+      // 获取微信登录code
+      uni.login({
+        provider: 'weixin',
+        success: async (loginRes) => {
+          const loginParams = {
+            code: loginRes.code.trim(), // 必需:微信登录code
+            nickname: Logon_Credentials.nickname?.trim() || '', // 可选:用户昵称(从Logon_Credentials获取)
+            avatarUrl: Logon_Credentials.active?.trim() || '',  // 可选:用户头像(注意:后端字段是avatarUrl,前端若存的是active,需对应)
+            phoneCode: Logon_Credentials.code?.trim() || ''     // 可选:手机号授权code(从Logon_Credentials获取)
+          };
+          uni.showLoading({title: '登录中...'})
+          try {
+            // 1. 微信授权登录
+            // const wechatLoginResult = await api.auth.wechatLogin(loginParams)
+            // ✅ 获取手机号code
+            const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim())
+                ? String(Logon_Credentials.code).trim()
+                : null;
+
+            console.log('微信登录code:', loginRes.code)
+            console.log('用户昵称:', Logon_Credentials.nickname)
+            console.log('用户头像:', Logon_Credentials.active ? '已提供' : '未提供')
+            console.log('手机号code:', phoneCode || '未提供')
+
+            // ✅ 一次性调用微信登录接口,传入所有信息
+            const wechatLoginResult = await api.auth.wechatLogin({
+              code: loginRes.code,
+              nickname: Logon_Credentials.nickname || '微信用户',
+              avatarUrl: Logon_Credentials.active || null,
+              phoneCode: phoneCode
+            });
+
+            const token = wechatLoginResult?.token || wechatLoginResult?.data?.token
+            const user = wechatLoginResult?.user || wechatLoginResult?.data?.user
+
+            if (!token || !user) {
+              throw new Error('微信登录返回数据异常')
             }
+
+            console.log('✅ 微信登录成功,用户ID:', user.userId)
+            uni.setStorageSync("userId", user.userId);
+
+            // 2. 获取手机号
+            // const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim()) ? String(Logon_Credentials.code).trim() : 'mock_dev_code'
+            console.log('📱 使用phoneCode:', phoneCode)
+            console.log('✅ 微信登录成功')
+            console.log('用户ID:', user.userId)
+            console.log('昵称:', user.nickname)
+            console.log('头像:', user.avatarUrl ? '已设置' : '未设置')
+            console.log('手机号:', user.phone || '未设置')
+
+            // ✅ 保存登录信息(后端已返回完整信息,直接保存)
+            userAuth.saveLoginInfo(token, user)
+
+            uni.hideLoading()
+            uni.showToast({title: '登录成功', icon: 'success'})
+
+            // ✅ 跳转首页
+            setTimeout(() => {
+              const target = this.redirectUrl || '/pages/index/index'
+              uni.reLaunch({url: target})
+            }, 500)
+          } catch (error) {
+            console.error('❌ 微信登录失败:', error)
+            uni.hideLoading()
+            uni.showToast({
+              title: error?.message || '登录失败,请重试',
+              icon: 'none',
+              duration: 2000
+            })
+          }
         },
-        
-        onLoad(options) {
-            // 处理跳转参数
-            this.redirectUrl = options && options.redirect ? decodeURIComponent(options.redirect) : ''
-        },
-		
-		methods: {
-			login_zheshow(){
-				this.zheshow = !this.zheshow
-			},
-		loset(Logon_Credentials){
-			console.log('=== 开始微信登录流程 ===')
-			console.log('用户输入信息:', Logon_Credentials)
-
-			// 获取微信登录code
-			uni.login({
-				provider: 'weixin',
-				success: async (loginRes) => {
-					 const loginParams = {
-					        code: loginRes.code.trim(), // 必需:微信登录code
-					        nickname: Logon_Credentials.nickname?.trim() || '', // 可选:用户昵称(从Logon_Credentials获取)
-					        avatarUrl: Logon_Credentials.active?.trim() || '',  // 可选:用户头像(注意:后端字段是avatarUrl,前端若存的是active,需对应)
-					        phoneCode: Logon_Credentials.code?.trim() || ''     // 可选:手机号授权code(从Logon_Credentials获取)
-					      };
-					uni.showLoading({ title: '登录中...' })
-					try {
-						// 1. 微信授权登录
-						// const wechatLoginResult = await api.auth.wechatLogin(loginParams)
-						// ✅ 获取手机号code
-						const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim())
-							? String(Logon_Credentials.code).trim()
-							: null;
-
-						console.log('微信登录code:', loginRes.code)
-						console.log('用户昵称:', Logon_Credentials.nickname)
-						console.log('用户头像:', Logon_Credentials.active ? '已提供' : '未提供')
-						console.log('手机号code:', phoneCode || '未提供')
-
-						// ✅ 一次性调用微信登录接口,传入所有信息
-						const wechatLoginResult = await api.auth.wechatLogin({
-							code: loginRes.code,
-							nickname: Logon_Credentials.nickname || '微信用户',
-							avatarUrl: Logon_Credentials.active || null,
-							phoneCode: phoneCode
-						});
-
-						const token = wechatLoginResult?.token || wechatLoginResult?.data?.token
-						const user = wechatLoginResult?.user || wechatLoginResult?.data?.user
-						
-						if (!token || !user) {
-							throw new Error('微信登录返回数据异常')
-						}
-						
-						console.log('✅ 微信登录成功,用户ID:', user.userId)
-						uni.setStorageSync("userId", user.userId);
-
-						// 2. 获取手机号
-						// const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim()) ? String(Logon_Credentials.code).trim() : 'mock_dev_code'
-						console.log('📱 使用phoneCode:', phoneCode)
-						console.log('✅ 微信登录成功')
-						console.log('用户ID:', user.userId)
-						console.log('昵称:', user.nickname)
-						console.log('头像:', user.avatarUrl ? '已设置' : '未设置')
-						console.log('手机号:', user.phone || '未设置')
-
-						// ✅ 保存登录信息(后端已返回完整信息,直接保存)
-						userAuth.saveLoginInfo(token, user)
-						
-						uni.hideLoading()
-						uni.showToast({ title: '登录成功', icon: 'success' })
-						
-						// ✅ 跳转首页
-						setTimeout(() => {
-							const target = this.redirectUrl || '/pages/index/index'
-							uni.reLaunch({ url: target })
-						}, 500)
-					} catch (error) {
-						console.error('❌ 微信登录失败:', error)
-						uni.hideLoading()
-						uni.showToast({
-							title: error?.message || '登录失败,请重试',
-							icon: 'none',
-							duration: 2000
-						})
-					}
-				}
-			})
-			},
-			loset(Logon_Credentials){
-				console.log(Logon_Credentials,'登录信息')
-				// 获取微信登录code
-				uni.login({
-					provider: 'weixin',
-					success: async (loginRes) => {
-						uni.showLoading({ title: '登录中...' })
-						try {
-							// 1. 微信授权登录
-							const wechatLoginResult = await api.auth.wechatLogin(loginRes.code)
-							const token = wechatLoginResult?.token || wechatLoginResult?.data?.token
-							const user = wechatLoginResult?.user || wechatLoginResult?.data?.user
-							
-							if (!token || !user) {
-								throw new Error('微信登录返回数据异常')
-							}
-							
-							console.log('✅ 微信登录成功,用户ID:', user.userId)
-							
-							// 2. 获取手机号
-							const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim()) ? String(Logon_Credentials.code).trim() : 'mock_dev_code'
-							console.log('📱 使用phoneCode:', phoneCode)
-							
-							try {
-								const phoneResult = await api.auth.wechatPhone(phoneCode)
-								const phone = phoneResult?.phone || phoneResult?.data?.phone
-								
-								if (phone) {
-									console.log('✅ 成功获取手机号')
-									user.phone = phone
-								} else {
-									console.warn('⚠️ 手机号为空,使用默认值(开发环境)')
-									// 开发环境:如果后端返回了mock手机号,也可能在user对象中
-									user.phone = user.phone || '13800138000'
-								}
-							} catch (phoneError) {
-								console.error('❌ 获取手机号接口失败:', phoneError)
-								// 开发环境容错:继续登录,使用默认手机号
-								user.phone = user.phone || '13800138000'
-								console.warn('⚠️ 使用默认手机号继续登录(开发环境)')
-							}
-							
-							// 3. 更新用户信息(昵称和头像)
-							user.nickname = Logon_Credentials.nickname || user.nickname
-							user.avatar = Logon_Credentials.active || user.avatar
-							
-							console.log('💾 保存用户信息:', { userId: user.userId, phone: user.phone, nickname: user.nickname })
-							
-							// 4. 如果用户输入了昵称或头像,更新到后端
-							if (Logon_Credentials.nickname || Logon_Credentials.active) {
-								try {
-									await api.user.updateInfo({
-										userId: user.userId,
-										nickname: user.nickname,
-										avatarUrl: user.avatar
-									})
-									console.log('✅ 用户信息已更新到后端')
-								} catch (updateError) {
-									console.warn('⚠️ 更新用户信息失败:', updateError)
-									// 不影响登录流程,继续
-								}
-							}
-							
-							// 5. 保存登录信息
-							userAuth.saveLoginInfo(token, user)
-							
-							uni.hideLoading()
-							uni.showToast({ title: '登录成功', icon: 'success' })
-							
-							// 5. 跳转首页
-							setTimeout(() => {
-								const target = this.redirectUrl || '/pages/index/index'
-								uni.reLaunch({ url: target })
-							}, 500)
-						} catch (error) {
-							console.error('❌ 微信登录失败:', error)
-							uni.hideLoading()
-							uni.showToast({ 
-								title: error?.message || '登录失败,请重试', 
-								icon: 'none',
-								duration: 2000
-							})
-						}
-					},
-					fail: (err) => {
-						console.error('获取微信code失败:', err)
-						uni.showToast({ title: '微信登录失败', icon: 'none' })
-					}
-				})
-			}
-		}
-	}
+        loset(Logon_Credentials) {
+          console.log(Logon_Credentials, '登录信息')
+          // 获取微信登录code
+          uni.login({
+            provider: 'weixin',
+            success: async (loginRes) => {
+              uni.showLoading({title: '登录中...'})
+              try {
+                // 1. 微信授权登录
+                const wechatLoginResult = await api.auth.wechatLogin(loginRes.code)
+                const token = wechatLoginResult?.token || wechatLoginResult?.data?.token
+                const user = wechatLoginResult?.user || wechatLoginResult?.data?.user
+
+                if (!token || !user) {
+                  throw new Error('微信登录返回数据异常')
+                }
+
+                console.log('✅ 微信登录成功,用户ID:', user.userId)
+
+                // 2. 获取手机号
+                const phoneCode = (Logon_Credentials && Logon_Credentials.code && String(Logon_Credentials.code).trim()) ? String(Logon_Credentials.code).trim() : 'mock_dev_code'
+                console.log('📱 使用phoneCode:', phoneCode)
+
+                try {
+                  const phoneResult = await api.auth.wechatPhone(phoneCode)
+                  const phone = phoneResult?.phone || phoneResult?.data?.phone
+
+                  if (phone) {
+                    console.log('✅ 成功获取手机号')
+                    user.phone = phone
+                  } else {
+                    console.warn('⚠️ 手机号为空,使用默认值(开发环境)')
+                    // 开发环境:如果后端返回了mock手机号,也可能在user对象中
+                    user.phone = user.phone || '13800138000'
+                  }
+                } catch (phoneError) {
+                  console.error('❌ 获取手机号接口失败:', phoneError)
+                  // 开发环境容错:继续登录,使用默认手机号
+                  user.phone = user.phone || '13800138000'
+                  console.warn('⚠️ 使用默认手机号继续登录(开发环境)')
+                }
+
+                // 3. 更新用户信息(昵称和头像)
+                user.nickname = Logon_Credentials.nickname || user.nickname
+                user.avatar = Logon_Credentials.active || user.avatar
+
+                console.log('💾 保存用户信息:', {userId: user.userId, phone: user.phone, nickname: user.nickname})
+
+                // 4. 如果用户输入了昵称或头像,更新到后端
+                if (Logon_Credentials.nickname || Logon_Credentials.active) {
+                  try {
+                    await api.user.updateInfo({
+                      userId: user.userId,
+                      nickname: user.nickname,
+                      avatarUrl: user.avatar
+                    })
+                    console.log('✅ 用户信息已更新到后端')
+                  } catch (updateError) {
+                    console.warn('⚠️ 更新用户信息失败:', updateError)
+                    // 不影响登录流程,继续
+                  }
+                }
+
+                // 5. 保存登录信息
+                userAuth.saveLoginInfo(token, user)
+
+                uni.hideLoading()
+                uni.showToast({title: '登录成功', icon: 'success'})
+
+                // 5. 跳转首页
+                setTimeout(() => {
+                  const target = this.redirectUrl || '/pages/index/index'
+                  uni.reLaunch({url: target})
+                }, 500)
+              } catch (error) {
+                console.error('❌ 微信登录失败:', error)
+                uni.hideLoading()
+                uni.showToast({
+                  title: error?.message || '登录失败,请重试',
+                  icon: 'none',
+                  duration: 2000
+                })
+              }
+            },
+            fail: (err) => {
+              console.error('获取微信code失败:', err)
+              uni.showToast({title: '微信登录失败', icon: 'none'})
+            }
+          })
+        }
+      })
+    }
+  }
+}
 </script>
 
 <style lang="scss" scoped>
 .content {
-	padding: 40rpx;
-	min-height: 100vh;
-	position: relative;
-	overflow: hidden;
-	
-	.bg-image {
-		position: fixed;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		z-index: 0;
-		pointer-events: none;
-	}
-	
-	// 添加装饰性元素
-	&::before {
-		content: '❤️';
-		position: absolute;
-		top: 100rpx;
-		right: 60rpx;
-		font-size: 60rpx;
-		opacity: 0.2;
-		animation: heartbeat 2s infinite;
-	}
-	
-	&::after {
-		content: '💕';
-		position: absolute;
-		bottom: 200rpx;
-		left: 40rpx;
-		font-size: 50rpx;
-		opacity: 0.2;
-		animation: heartbeat 2s infinite 0.5s;
-	}
+  padding: 40rpx;
+  min-height: 100vh;
+  position: relative;
+  overflow: hidden;
+
+  .bg-image {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    z-index: 0;
+    pointer-events: none;
+  }
+
+  // 添加装饰性元素
+  &::before {
+    content: '❤️';
+    position: absolute;
+    top: 100rpx;
+    right: 60rpx;
+    font-size: 60rpx;
+    opacity: 0.2;
+    animation: heartbeat 2s infinite;
+  }
+
+  &::after {
+    content: '💕';
+    position: absolute;
+    bottom: 200rpx;
+    left: 40rpx;
+    font-size: 50rpx;
+    opacity: 0.2;
+    animation: heartbeat 2s infinite 0.5s;
+  }
 }
 
 @keyframes heartbeat {
-	0%, 100% {
-		transform: scale(1);
-	}
-	50% {
-		transform: scale(1.1);
-	}
+  0%, 100% {
+    transform: scale(1);
+  }
+  50% {
+    transform: scale(1.1);
+  }
 }
 
 .header-section {
-	text-align: center;
-	margin-bottom: 60rpx;
-	position: relative;
-	z-index: 1;
-	
-	.app-logo {
-		font-size: 120rpx;
-		margin-bottom: 20rpx;
-		// animation: heartbeat 1s infinite;
-	}
-	
-	.app-name {
-		font-size: 48rpx;
-		font-weight: bold;
-		background: linear-gradient(135deg, #ff6b9d 0%, #ff8fab 100%);
-		-webkit-background-clip: text;
-		-webkit-text-fill-color: transparent;
-		margin-bottom: 15rpx;
-	}
-	
-	.app-slogan {
-		font-size: 26rpx;
-		color: #333333;
-		opacity: 0.8;
-	}
+  text-align: center;
+  margin-bottom: 60rpx;
+  position: relative;
+  z-index: 1;
+
+  .app-logo {
+    font-size: 120rpx;
+    margin-bottom: 20rpx;
+    // animation: heartbeat 1s infinite;
+  }
+
+  .app-name {
+    font-size: 48rpx;
+    font-weight: bold;
+    background: linear-gradient(135deg, #ff6b9d 0%, #ff8fab 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+    margin-bottom: 15rpx;
+  }
+
+  .app-slogan {
+    font-size: 26rpx;
+    color: #333333;
+    opacity: 0.8;
+  }
 }
 
 .login-box {
-	background: rgba(211, 127, 140, 0);
-	border-radius: 30rpx;
-	padding: 80rpx 40rpx;
-	margin-bottom: 30rpx;
-	box-shadow: 0 8rpx 24rpx rgba(255, 107, 157, 0.15);
-	border: 2rpx solid rgba(255, 107, 157, 0.1);
-	display: flex;
-	justify-content: center;
-	align-items: center;
-	position: relative;
-	z-index: 1;
-	
-	// 	.wechat-login-btn {
-	// 	width: 100%;
-	// 	height: 90rpx;
-	// 		background: #FFFFFF;
-	// 		color: #ff6b9d;
-	// 	border-radius: 50rpx;
-	// 	font-size: 30rpx;
-	// 	font-weight: bold;
-	// 	display: flex;
-	// 	align-items: center;
-	// 	justify-content: center;
-	// 		border: 2rpx solid #ff6b9d;
-	// 		box-shadow: 0 8rpx 20rpx rgba(255, 107, 157, 0.2);
-		
-	// 	.wechat-icon {
-	// 		width: 40rpx;
-	// 		height: 40rpx;
-	// 		margin-right: 10rpx;
-	// 	}
-		
-	// 	&:active {
-	// 		opacity: 0.9;
-	// 		transform: translateY(2rpx);
-	// 	}
-	// }
-	.wechat-login-btn {
-	  width: 100%;
-	  height: 96rpx;
-	  // 渐变背景+光泽叠加
-	  background: linear-gradient(90deg, #9d40e9 0%, #5a35f7 100%),
-	              radial-gradient(circle at 30% 30%, rgba(255,255,255,0.15), transparent 50%);
-	  background-blend-mode: overlay;
-	  color: #ffffff;
-	  border-radius: 60rpx;
-	  font-size: 32rpx;
-	  font-weight: bold;
-	  display: flex;
-	  align-items: center;
-	  justify-content: center;
-	  border: none;
-	  // 多层光影:外层投影+内高光+内阴影
-	  box-shadow: 
-	    0 6rpx 16rpx rgba(90, 53, 247, 0.4), 
-	    0 3rpx 8rpx rgba(90, 53, 247, 0.2),
-	    inset 0 2rpx 3rpx rgba(255, 255, 255, 0.25),
-	    inset 0 -2rpx 3rpx rgba(0, 0, 0, 0.15);
-	  transition: all 0.2s ease; // 动画过渡,更自然
-	}
-	
-	.wechat-login-btn:active {
-	  transform: translateY(2rpx);
-	  box-shadow: 
-	    0 3rpx 8rpx rgba(90, 53, 247, 0.3), 
-	    0 1rpx 4rpx rgba(90, 53, 247, 0.2),
-	    inset 0 1rpx 2rpx rgba(255, 255, 255, 0.15),
-	    inset 0 -2rpx 3rpx rgba(0, 0, 0, 0.2);
-	}
-	
-	.wechat-icon {
-	  width: 45rpx;
-	  height: 45rpx;
-	  margin-right: 15rpx;
-	  filter: drop-shadow(0 1rpx 2rpx rgba(0,0,0,0.1)); // 给图标加轻微阴影,更立体
-	}
+  background: rgba(211, 127, 140, 0);
+  border-radius: 30rpx;
+  padding: 80rpx 40rpx;
+  margin-bottom: 30rpx;
+  box-shadow: 0 8rpx 24rpx rgba(255, 107, 157, 0.15);
+  border: 2rpx solid rgba(255, 107, 157, 0.1);
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  position: relative;
+  z-index: 1;
+
+  // 	.wechat-login-btn {
+  // 	width: 100%;
+  // 	height: 90rpx;
+  // 		background: #FFFFFF;
+  // 		color: #ff6b9d;
+  // 	border-radius: 50rpx;
+  // 	font-size: 30rpx;
+  // 	font-weight: bold;
+  // 	display: flex;
+  // 	align-items: center;
+  // 	justify-content: center;
+  // 		border: 2rpx solid #ff6b9d;
+  // 		box-shadow: 0 8rpx 20rpx rgba(255, 107, 157, 0.2);
+
+  // 	.wechat-icon {
+  // 		width: 40rpx;
+  // 		height: 40rpx;
+  // 		margin-right: 10rpx;
+  // 	}
+
+  // 	&:active {
+  // 		opacity: 0.9;
+  // 		transform: translateY(2rpx);
+  // 	}
+  // }
+  .wechat-login-btn {
+    width: 100%;
+    height: 96rpx;
+    // 渐变背景+光泽叠加
+    background: linear-gradient(90deg, #9d40e9 0%, #5a35f7 100%),
+    radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.15), transparent 50%);
+    background-blend-mode: overlay;
+    color: #ffffff;
+    border-radius: 60rpx;
+    font-size: 32rpx;
+    font-weight: bold;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    border: none;
+    // 多层光影:外层投影+内高光+内阴影
+    box-shadow: 0 6rpx 16rpx rgba(90, 53, 247, 0.4),
+    0 3rpx 8rpx rgba(90, 53, 247, 0.2),
+    inset 0 2rpx 3rpx rgba(255, 255, 255, 0.25),
+    inset 0 -2rpx 3rpx rgba(0, 0, 0, 0.15);
+    transition: all 0.2s ease; // 动画过渡,更自然
+  }
+
+  .wechat-login-btn:active {
+    transform: translateY(2rpx);
+    box-shadow: 0 3rpx 8rpx rgba(90, 53, 247, 0.3),
+    0 1rpx 4rpx rgba(90, 53, 247, 0.2),
+    inset 0 1rpx 2rpx rgba(255, 255, 255, 0.15),
+    inset 0 -2rpx 3rpx rgba(0, 0, 0, 0.2);
+  }
+
+  .wechat-icon {
+    width: 45rpx;
+    height: 45rpx;
+    margin-right: 15rpx;
+    filter: drop-shadow(0 1rpx 2rpx rgba(0, 0, 0, 0.1)); // 给图标加轻微阴影,更立体
+  }
 }
 
 .footer-tip {
-	text-align: center;
-	margin-top: 60rpx;
-	padding: 30rpx;
-	position: relative;
-	z-index: 1;
-	
-	.tip-icon {
-		font-size: 50rpx;
-		display: block;
-		margin-bottom: 15rpx;
-		animation: heartbeat 2s infinite;
-	}
-	
-	.tip-text {
-		font-size: 26rpx;
-		color: #333333;
-		font-weight: 500;
-		letter-spacing: 2rpx;
-	}
+  text-align: center;
+  margin-top: 60rpx;
+  padding: 30rpx;
+  position: relative;
+  z-index: 1;
+
+  .tip-icon {
+    font-size: 50rpx;
+    display: block;
+    margin-bottom: 15rpx;
+    animation: heartbeat 2s infinite;
+  }
+
+  .tip-text {
+    font-size: 26rpx;
+    color: #333333;
+    font-weight: 500;
+    letter-spacing: 2rpx;
+  }
 }
 
 button {
-	&::after {
-		border: none;
-	}
+  &::after {
+    border: none;
+  }
 }
 </style>

+ 5 - 2
common/src/main/java/com/zhentao/pojo/Users.java

@@ -1,12 +1,12 @@
 package com.zhentao.pojo;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.util.Date;
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * 普通用户主表(用户小程序)
  * @TableName users
@@ -99,4 +99,7 @@ public class Users {
      * 是否使用过微信登录
      */
     private Integer hasWechatLogin;
+
+    private String wechatOpenId;
+
 }

BIN
common/target/classes/com/zhentao/pojo/Users.class


+ 2 - 0
gateway/src/main/java/com/zhentao/filter/GatewayRoutes.java

@@ -39,6 +39,8 @@ public class GatewayRoutes {
                 // 首页服务路由 - 课程接口(端口8081)
                 .route("homepage_course_route", r -> r.path("/api/course/**")
                         .uri("http://localhost:8081"))
+                .route("homepage_course_route", r -> r.path("/api/chatfriend/**")
+                        .uri("http://localhost:1004"))
                 
                 // 登录服务路由(验证码、微信登录等)
                 .route("login_route", r -> r.path("/api/login/**")

+ 1 - 10
gateway/target/classes/application.yml

@@ -103,14 +103,6 @@ spring:
           filters:
             - StripPrefix=0
 
-        # 聊天REST API路由
-        - id: chat-api-routev
-          uri: http://localhost:1004
-          predicates:
-            - Path=/api/chatfriend/**
-          filters:
-            - StripPrefix=0
-
         # 首页服务路由(兜底路由)
         - id: homepage-route
           uri: http://localhost:8081
@@ -118,8 +110,7 @@ spring:
             - Path=/api/**
           filters:
             - StripPrefix=0
-
-
+      
       # WebSocket支持配置
       websocket:
         enabled: true

BIN
gateway/target/classes/com/zhentao/filter/GatewayRoutes.class


+ 5 - 0
service/Essential/pom.xml

@@ -68,5 +68,10 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-pay</artifactId>
+            <version>4.5.7.B</version> <!-- 使用最新稳定版本 -->
+        </dependency>
     </dependencies>
 </project>

+ 36 - 2
service/Essential/src/main/java/com/zhentao/service/impl/VipServiceImpl.java

@@ -2,11 +2,17 @@ package com.zhentao.service.impl;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
+import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
 import com.zhentao.entity.UserVip;
 import com.zhentao.entity.VipPackage;
+import com.zhentao.entity.Wx;
 import com.zhentao.mapper.UserVipMapper;
 import com.zhentao.mapper.VipPackageMapper;
+import com.zhentao.pojo.Users;
+import com.zhentao.service.UsersService;
 import com.zhentao.service.VipService;
+import com.zhentao.service.WxService;
 import com.zhentao.vo.UserVipInfoVO;
 import com.zhentao.vo.VipPackageVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,6 +20,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
@@ -31,6 +38,11 @@ public class VipServiceImpl implements VipService {
     
     @Autowired
     private UserVipMapper userVipMapper;
+
+    @Autowired
+    private WxService wxService;
+    @Autowired
+    private UsersService usersService;
     
     private final ObjectMapper objectMapper = new ObjectMapper();
     
@@ -105,10 +117,31 @@ public class VipServiceImpl implements VipService {
         
         // 生成订单号
         String orderNo = generateOrderNo();
-        
+        String timeExpire = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis());
+        Wx wx = wxService.list().get(0);
+        WxPayUnifiedOrderV3Request wxPayUnifiedOrderV3Request = new WxPayUnifiedOrderV3Request();
+        wxPayUnifiedOrderV3Request.setOutTradeNo(orderNo);
+        wxPayUnifiedOrderV3Request.setDescription(pkg.getPackageName());
+        wxPayUnifiedOrderV3Request.setTimeExpire(timeExpire);
+        wxPayUnifiedOrderV3Request.setNotifyUrl("https://mini.workervip.com/pay/notify");
+        //订单金额
+        WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount();
+        amount.setTotal(pkg.getCurrentPrice().intValue());
+        amount.setCurrency("CNY");
+        wxPayUnifiedOrderV3Request.setAmount(amount);
+
+        Users byId = usersService.getById(userId);
+        //付款人员
+        WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer();
+        payer.setOpenid(byId.getWechatOpenId());
+        TradeTypeEnum tradeTypeEnum =TradeTypeEnum.JSAPI;
+
+
+
         LocalDateTime now = LocalDateTime.now();
         LocalDateTime startTime = now;
         LocalDateTime endTime;
+
         
         // 查询用户当前VIP状态
         UserVip currentVip = userVipMapper.selectActiveVipByUserId(userId);
@@ -119,7 +152,8 @@ public class VipServiceImpl implements VipService {
         
         // 计算结束时间
         endTime = startTime.plusDays(pkg.getDurationDays());
-        
+
+
         // 创建VIP记录
         UserVip userVip = new UserVip();
         userVip.setUserId(userId);

BIN
service/Essential/target/classes/com/zhentao/Essential.class


BIN
service/Essential/target/classes/com/zhentao/common/Result.class


BIN
service/Essential/target/classes/com/zhentao/config/RedisConfig.class


BIN
service/Essential/target/classes/com/zhentao/config/WebConfig.class


BIN
service/Essential/target/classes/com/zhentao/config/WechatPayProperties.class


BIN
service/Essential/target/classes/com/zhentao/controller/ActivityRegistrationController.class


BIN
service/Essential/target/classes/com/zhentao/controller/AvatarTestController.class


BIN
service/Essential/target/classes/com/zhentao/controller/AvatarUploadController.class


BIN
service/Essential/target/classes/com/zhentao/controller/BlacklistController.class


BIN
service/Essential/target/classes/com/zhentao/controller/CheckinController.class


BIN
service/Essential/target/classes/com/zhentao/controller/UserController.class


BIN
service/Essential/target/classes/com/zhentao/controller/UserProfileController.class


BIN
service/Essential/target/classes/com/zhentao/controller/VipController.class


BIN
service/Essential/target/classes/com/zhentao/dto/VipPayOrderRequest.class


BIN
service/Essential/target/classes/com/zhentao/entity/ActivityRegistration.class


BIN
service/Essential/target/classes/com/zhentao/entity/Blacklist.class


BIN
service/Essential/target/classes/com/zhentao/entity/CheckinRecord.class


BIN
service/Essential/target/classes/com/zhentao/entity/User.class


BIN
service/Essential/target/classes/com/zhentao/entity/UserVip.class


BIN
service/Essential/target/classes/com/zhentao/entity/VipPackage.class


BIN
service/Essential/target/classes/com/zhentao/entity/VipPayOrder.class


BIN
service/Essential/target/classes/com/zhentao/mapper/ActivityRegistrationMapper.class


BIN
service/Essential/target/classes/com/zhentao/mapper/BlacklistMapper.class


BIN
service/Essential/target/classes/com/zhentao/mapper/CheckinRecordMapper.class


BIN
service/Essential/target/classes/com/zhentao/mapper/UserMapper.class


BIN
service/Essential/target/classes/com/zhentao/mapper/UserProfileMapper.class


BIN
service/Essential/target/classes/com/zhentao/mapper/UserVipMapper.class


BIN
service/Essential/target/classes/com/zhentao/mapper/VipPackageMapper.class


BIN
service/Essential/target/classes/com/zhentao/mapper/VipPayOrderMapper.class


BIN
service/Essential/target/classes/com/zhentao/service/impl/ActivityRegistrationServiceImpl.class


BIN
service/Essential/target/classes/com/zhentao/service/impl/BlacklistServiceImpl.class


BIN
service/Essential/target/classes/com/zhentao/service/impl/CheckinServiceImpl.class


BIN
service/Essential/target/classes/com/zhentao/service/impl/UserProfileServiceImpl.class


BIN
service/Essential/target/classes/com/zhentao/service/impl/VipServiceImpl$1.class


BIN
service/Essential/target/classes/com/zhentao/service/impl/VipServiceImpl.class


BIN
service/Essential/target/classes/com/zhentao/util/IpUtils.class


BIN
service/Essential/target/classes/com/zhentao/vo/BlacklistVO.class


BIN
service/Essential/target/classes/com/zhentao/vo/CheckinInfoVO.class


BIN
service/Essential/target/classes/com/zhentao/vo/CheckinRewardVO.class


BIN
service/Essential/target/classes/com/zhentao/vo/UserVipInfoVO.class


BIN
service/Essential/target/classes/com/zhentao/vo/VipPackageVO.class


BIN
service/Essential/target/classes/com/zhentao/vo/WechatPayOrderVO.class


BIN
service/Recommend/target/classes/com/zhentao/service/impl/RecommendServiceImpl$1.class


BIN
service/dynamic/target/classes/com/zhentao/controller/DynamicController.class


BIN
service/dynamic/target/classes/com/zhentao/entity/DynamicLikes.class


BIN
service/dynamic/target/classes/com/zhentao/mapper/UserDynamicsMapper.class


BIN
service/dynamic/target/classes/com/zhentao/service/InteractionService.class


BIN
service/dynamic/target/classes/com/zhentao/service/impl/InteractionServiceImpl.class


+ 39 - 0
service/dynamic/target/classes/mapper/UserDynamicsMapper.xml

@@ -151,6 +151,45 @@
     WHERE dynamic_id = #{dynamicId}
   </update>
 
+  <!-- 根据动态ID列表查询动态详情(关联用户信息) -->
+  <select id="selectDynamicsByIds" resultMap="DynamicWithUserMap">
+    SELECT 
+        d.dynamic_id,
+        d.user_id,
+        d.content,
+        CAST(d.media_urls AS CHAR) as media_urls,
+        d.media_type,
+        d.audit_status,
+        d.audit_remark,
+        d.audit_time,
+        d.audit_admin_id,
+        d.like_count,
+        d.comment_count,
+        d.favorite_count,
+        d.share_count,
+        d.view_count,
+        d.status,
+        d.visibility,
+        d.created_at,
+        d.updated_at,
+        u.nickname,
+        u.avatar_url,
+        u.gender,
+        CASE WHEN dl.id IS NOT NULL THEN 1 ELSE 0 END as is_liked,
+        CASE WHEN df.id IS NOT NULL THEN 1 ELSE 0 END as is_favorited
+    FROM user_dynamics d
+    LEFT JOIN users u ON d.user_id = u.user_id
+    LEFT JOIN dynamic_likes dl ON d.dynamic_id = dl.dynamic_id AND dl.user_id = #{userId}
+    LEFT JOIN dynamic_favorites df ON d.dynamic_id = df.dynamic_id AND df.user_id = #{userId}
+    WHERE d.dynamic_id IN
+        <foreach collection="dynamicIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    AND d.status = 1
+    AND d.audit_status = 1
+    ORDER BY d.created_at DESC
+  </select>
+
 </mapper>
 
 

BIN
service/homePage/target/classes/com/zhentao/service/impl/MatchmakerServiceImpl.class