From 11e1e5d42bdb923baa6dfef53ab11d0289c87740 Mon Sep 17 00:00:00 2001 From: Doubleyin <953994191@qq.com> Date: Wed, 15 Oct 2025 23:41:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E8=BF=9E=E6=8E=A5=EF=BC=8C?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E6=95=B0=E6=8D=AE=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build-local.bat | 33 +++++++++++ build-with-docker.bat | 38 +++++++++++++ deploy.bat | 18 ++++++ deploy.sh | 41 ++++++++++++++ .../service/impl/UserServiceImpl.java | 55 ++++++++++++++++++- .../resources/application-local.properties | 42 ++++++++++++++ transfer-base-image.bat | 18 ++++++ 7 files changed, 243 insertions(+), 2 deletions(-) create mode 100644 build-local.bat create mode 100644 build-with-docker.bat create mode 100644 deploy.bat create mode 100644 deploy.sh create mode 100644 src/main/resources/application-local.properties create mode 100644 transfer-base-image.bat diff --git a/build-local.bat b/build-local.bat new file mode 100644 index 0000000..b3426a3 --- /dev/null +++ b/build-local.bat @@ -0,0 +1,33 @@ +@echo off +echo Building Light Delivery application with Docker... + +echo Step 1: Compiling the project... +call mvn clean package -DskipTests + +if %errorlevel% neq 0 ( + echo Error: Maven build failed + exit /b %errorlevel% +) + +echo Step 2: Building Docker image... +docker build -t light-delivery-app . + +if %errorlevel% neq 0 ( + echo Error: Docker build failed + exit /b %errorlevel% +) + +echo Step 3: Verifying Docker image... +docker images | findstr light-delivery-app + +echo. +echo Build completed successfully! +echo. +echo To run the container locally: +echo docker run -d --name light-delivery -p 8080:8080 -p 8443:8443 light-delivery-app +echo. +echo To export the image for cloud deployment: +echo docker save light-delivery-app -o light-delivery-app.tar +echo. + +pause \ No newline at end of file diff --git a/build-with-docker.bat b/build-with-docker.bat new file mode 100644 index 0000000..47a4341 --- /dev/null +++ b/build-with-docker.bat @@ -0,0 +1,38 @@ +@echo off +setlocal + +echo Building Light Delivery application with Docker... + +REM 第一步:编译项目 +echo Step 1: Compiling the project... +call mvn clean package -DskipTests + +if %errorlevel% neq 0 ( + echo Error: Maven build failed + exit /b %errorlevel% +) + +REM 第二步:构建 Docker 镜像 +echo Step 2: Building Docker image... +docker build -t light-delivery-app . + +if %errorlevel% neq 0 ( + echo Error: Docker build failed + exit /b %errorlevel% +) + +REM 第三步:验证镜像 +echo Step 3: Verifying Docker image... +docker images | findstr light-delivery-app + +echo. +echo Build completed successfully! +echo. +echo To run the container locally: +echo docker run -d --name light-delivery -p 8080:8080 -p 8443:8443 light-delivery-app +echo. +echo To export the image for cloud deployment: +echo docker save light-delivery-app -o light-delivery-app.tar +echo. + +pause \ No newline at end of file diff --git a/deploy.bat b/deploy.bat new file mode 100644 index 0000000..dcc43e8 --- /dev/null +++ b/deploy.bat @@ -0,0 +1,18 @@ +@echo off +echo Starting deployment of light-delivery-app to cloud server... + +echo Building Docker image... +docker build -t light-delivery-app . + +echo Exporting image to tar file... +docker save light-delivery-app -o light-delivery-app.tar + +echo Uploading image to cloud server... +scp light-delivery-app.tar root@115.190.121.151:/tmp/ + +echo Deploying application on cloud server... +ssh root@115.190.121.151 "docker load -i /tmp/light-delivery-app.tar && docker stop light-delivery 2>nul && docker rm light-delivery 2>nul && docker run -d --name light-delivery -p 8080:8080 -p 8443:8443 light-delivery-app && docker ps | findstr light-delivery" + +echo Deployment completed! + +pause \ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..0e984b4 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# 部署脚本 +echo "开始部署 light-delivery-app 到云服务器..." + +# 重新构建Docker镜像 +echo "构建Docker镜像..." +docker build -t light-delivery-app . + +# 导出镜像为tar文件 +echo "导出镜像为tar文件..." +docker save light-delivery-app -o light-delivery-app.tar + +# 上传到云服务器 +echo "上传镜像到云服务器..." +scp light-delivery-app.tar root@115.190.121.151:/tmp/ + +# 在云服务器上执行部署命令 +echo "在云服务器上部署应用..." +ssh root@115.190.121.151 << 'EOF' + echo "加载Docker镜像..." + docker load -i /tmp/light-delivery-app.tar + + echo "停止并删除旧容器..." + docker stop light-delivery || true + docker rm light-delivery || true + + echo "运行新容器..." + docker run -d \ + --name light-delivery \ + -p 8080:8080 \ + -p 8443:8443 \ + light-delivery-app + + echo "查看容器状态..." + docker ps | grep light-delivery + + echo "部署完成!" +EOF + +echo "部署脚本执行完成。" \ No newline at end of file diff --git a/src/main/java/com/light/delivery/service/impl/UserServiceImpl.java b/src/main/java/com/light/delivery/service/impl/UserServiceImpl.java index da48489..8a1ba84 100644 --- a/src/main/java/com/light/delivery/service/impl/UserServiceImpl.java +++ b/src/main/java/com/light/delivery/service/impl/UserServiceImpl.java @@ -1,5 +1,7 @@ package com.light.delivery.service.impl; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import com.light.delivery.dto.UserInfoResponse; import com.light.delivery.model.Employee; import com.light.delivery.model.LoginResponse; @@ -11,7 +13,9 @@ import com.light.delivery.repository.UserRepository; import com.light.delivery.service.UserService; import com.light.delivery.util.JwtUtil; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; import java.time.Instant; import java.util.List; @@ -43,6 +47,24 @@ public class UserServiceImpl implements UserService { @Autowired private JwtUtil jwtUtil; + /** + * 微信小程序appId + */ + @Value("${wx.appId}") + private String wxAppId; + + /** + * 微信小程序secret + */ + @Value("${wx.secret}") + private String wxSecret; + + /** + * 微信code2session接口URL + */ + @Value("${wx.api.code2session-url}") + private String wxCode2SessionUrl; + /** * 根据JWT令牌获取用户信息。 * 从token中解析出用户的openid,然后查询数据库获取完整的用户信息。 @@ -99,8 +121,8 @@ public class UserServiceImpl implements UserService { throw new IllegalArgumentException("登录code不能为空"); } - // 模拟微信登录,实际应该调用微信API获取 openid - String openid = "openid_" + code; // 模拟 openid + // 调用微信API获取真实的openid + String openid = getOpenIdFromWeChat(code); User user = userRepository.findByOpenid(openid); if (user == null) { @@ -133,6 +155,35 @@ public class UserServiceImpl implements UserService { return response; } + /** + * 调用微信API获取用户openid + * @param code 微信登录凭证 + * @return 用户的openid + */ + private String getOpenIdFromWeChat(String code) { + try { + RestTemplate restTemplate = new RestTemplate(); + String url = wxCode2SessionUrl + "?appid=" + wxAppId + "&secret=" + wxSecret + "&js_code=" + code + "&grant_type=authorization_code"; + + String response = restTemplate.getForObject(url, String.class); + + // 解析微信返回的JSON数据 + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode = objectMapper.readTree(response); + + if (jsonNode.has("errcode")) { + // 微信返回错误 + String errMsg = jsonNode.has("errmsg") ? jsonNode.get("errmsg").asText() : "未知错误"; + throw new RuntimeException("微信登录失败: " + errMsg); + } + + // 返回真实的openid + return jsonNode.get("openid").asText(); + } catch (Exception e) { + throw new RuntimeException("调用微信API获取openid失败: " + e.getMessage()); + } + } + /** * 用户签到功能。 * 更新指定用户的信息,模拟签到过程。 diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties new file mode 100644 index 0000000..a332b6d --- /dev/null +++ b/src/main/resources/application-local.properties @@ -0,0 +1,42 @@ +spring.application.name=Light-Local +server.port=8080 + +# 使用远程数据库(与生产环境相同) +spring.datasource.url=jdbc:mysql://115.190.121.151:3306/light_delivery?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true +spring.datasource.username=double +spring.datasource.password=Hu@ng1998! +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + +# 数据库连接池配置 +spring.datasource.hikari.maximum-pool-size=5 +spring.datasource.hikari.minimum-idle=1 +spring.datasource.hikari.connection-timeout=20000 +spring.datasource.hikari.idle-timeout=300000 +spring.datasource.hikari.max-lifetime=600000 + +# JPA配置 +spring.jpa.hibernate.ddl-auto=none +spring.jpa.show-sql=true +spring.jpa.properties.hibernate.format_sql=true +spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect + +# 禁用SSL以便于本地测试 +server.ssl.enabled=false +# 移除所有SSL相关配置以防止Spring Boot 3.x尝试加载它们 + +# 微信小程序配置(本地环境与生产环境使用相同配置) +wx.appId=wx1b790fd953ac27bf +wx.secret=b38c40c89cc4954472fb45d1e7cc27a4 +wx.token=huang1998 +wx.aesKey=lwararkj1BgurX8Qown6yjGNsqd8dEIEddDnYN3iLgc + +wx.api.access-token-url=https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential +wx.api.code2session-url=https://api.weixin.qq.com/sns/jscode2session + +jwt.secret=CRMO1KEF/YP07zoV8+X1F3/DfkvksgPUs6tdLRR8urWCEBPMEO+5nt50xRkRl8JBJursSnvv++qylsaz5zryuA== +jwt.expiration=86400 + +logging.level.com.light.delivery=DEBUG + +management.endpoints.web.exposure.include=health,info +management.endpoint.health.show-details=always \ No newline at end of file diff --git a/transfer-base-image.bat b/transfer-base-image.bat new file mode 100644 index 0000000..aec34db --- /dev/null +++ b/transfer-base-image.bat @@ -0,0 +1,18 @@ +@echo off +echo Transferring base OpenJDK image to cloud server... + +echo Exporting openjdk:17-jdk-slim image to tar file... +docker save openjdk:17-jdk-slim -o openjdk-17-jdk-slim.tar + +echo Uploading openjdk image to cloud server... +scp openjdk-17-jdk-slim.tar root@115.190.121.151:/tmp/ + +echo Loading image on cloud server... +ssh root@115.190.121.151 "docker load -i /tmp/openjdk-17-jdk-slim.tar" + +echo Verifying image on cloud server... +ssh root@115.190.121.151 "docker images | grep openjdk" + +echo Base image transfer completed! + +pause \ No newline at end of file