diff --git a/Dockerfile.buildagent b/Dockerfile.buildagent
new file mode 100644
index 0000000..f893f6c
--- /dev/null
+++ b/Dockerfile.buildagent
@@ -0,0 +1,15 @@
+# 使用 JDK 8 作为构建环境
+FROM openjdk:8-jdk
+
+# 使用阿里云的 apt 镜像源(Debian 11 bullseye)
+RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
+ sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
+
+# 更新包列表并安装 Maven 和 Git
+RUN apt update && \
+ apt install -y maven git && \
+ mvn --version && \
+ git --version
+
+# 设置工作目录
+WORKDIR /home/jenkins/workspace
\ No newline at end of file
diff --git a/Jenkinsfile b/Jenkinsfile
index a5dab04..875843c 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,10 +1,10 @@
pipeline {
agent any
- tools {
- maven 'M3' // 必须在 Jenkins → Manage Jenkins → Global Tool Configuration 中配置过
- }
+// tools {
+// maven 'M3' // 必须在 Jenkins → Manage Jenkins → Global Tool Configuration 中配置过
+// }
environment {
- APP_NAME = "sczx-app"
+ APP_NAME = "sczx_order"
DOCKER_IMAGE = "${APP_NAME}:latest"
CONTAINER_NAME = "${APP_NAME}-container"
}
@@ -13,11 +13,16 @@ pipeline {
stage('Checkout') {
steps {
echo "📦 正在拉取代码..."
- git branch: 'main', url: 'http://115.190.8.52:3000/sczx_group/sczx-app.git'
+ git branch: 'main', url: 'http://115.190.8.52:3000/sczx_group/sczx_order.git'
}
}
- stage('Build with Maven') {
+ stage('Build with Maven in JDK 8') {
+ agent {
+ dockerfile {
+ filename "Dockerfile.buildagent"
+ }
+ }
steps {
echo "🛠️ 正在使用 Maven 构建..."
sh 'mvn clean package -s settings.xml'
@@ -31,32 +36,34 @@ pipeline {
}
stage('Build Docker Image') {
+ agent any
steps {
echo "🐋 正在构建 Docker 镜像..."
- sh """
- docker build -t \${DOCKER_IMAGE} .
- """
+ sh 'docker build -t "$DOCKER_IMAGE" .'
}
}
stage('Stop Old Container') {
+ agent any
steps {
echo "🛑 正在停止旧的容器(如果存在)..."
sh '''
- if [ "$(docker ps -f 'name=sczx-app-container' --format '{{.Status}}')" ]; then
- docker stop sczx-app-container
- docker rm sczx-app-container
+ if [ "$(docker ps -f 'name=sczx_order-container' --format '{{.Status}}')" ]; then
+ docker stop sczx_order-container
+ docker rm sczx_order-container
fi
'''
}
}
stage('Run New Container') {
+ agent any
steps {
echo "🟢 正在运行新的容器..."
sh """
docker run -d \
--name \${CONTAINER_NAME} \
+ --network sczx-net \
-p 8088:8088 \
-e JAVA_OPTS="-Xms256m -Xmx512m -Duser.timezone=Asia/Shanghai" \
--restart always \
diff --git a/README.md b/README.md
index 4469b90..dddb645 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-闪充智行后端
+闪充智行订单服务
diff --git a/pom.xml b/pom.xml
index 74685a8..9810601 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,12 +4,12 @@
4.0.0
com.sczx
- sczx-app
+ sczx_order
1.0.0
jar
- sczx-app
- sczx-app service
+ sczx_order
+ sczx_order service
1.8
@@ -146,17 +146,46 @@
8.0.33
-
+
- org.springdoc
- springdoc-openapi-ui
- 1.6.14
+ io.jsonwebtoken
+ jjwt-api
+ 0.11.5
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.11.5
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.11.5
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
- org.webjars
- swagger-ui
- 4.15.5
+ org.apache.commons
+ commons-pool2
+ 2.11.1
+
+
+
+
+ io.springfox
+ springfox-swagger2
+ 2.9.2
+
+
+
+ io.springfox
+ springfox-swagger-ui
+ 2.9.2
@@ -171,11 +200,33 @@
reactor-core
3.2.2.RELEASE
+
+
+
+ org.mapstruct
+ mapstruct
+ 1.5.5.Final
+
+
+
+
+ org.mapstruct
+ mapstruct-processor
+ 1.5.5.Final
+ provided
+
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.83
+
- sczx-app
+ sczx_order
src/main/resources
@@ -214,32 +265,6 @@
-
- org.apache.maven.plugins
- maven-dependency-plugin
- 3.6.0
-
-
- unpack
- process-resources
-
- unpack
-
-
-
-
- org.webjars
- swagger-ui
- 4.15.5
- jar
- ${project.build.outputDirectory}
- META-INF/resources/**
-
-
-
-
-
-
org.apache.maven.plugins
maven-source-plugin
diff --git a/src/main/java/com/sczx/app/config/SpringDocConfig.java b/src/main/java/com/sczx/app/config/SpringDocConfig.java
deleted file mode 100644
index b8d3623..0000000
--- a/src/main/java/com/sczx/app/config/SpringDocConfig.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.sczx.app.config;
-
-
-import org.springdoc.core.GroupedOpenApi;
-import org.springframework.context.annotation.Bean;
-
-//@Configuration
-public class SpringDocConfig {
- @Bean
- public GroupedOpenApi publicApi() {
- return GroupedOpenApi.builder()
- .group("sczx-service")
- .packagesToScan("com.sczx.app.controller")
- .build();
- }
-}
diff --git a/src/main/java/com/sczx/app/config/WebConfig.java b/src/main/java/com/sczx/app/config/WebConfig.java
deleted file mode 100644
index bef3184..0000000
--- a/src/main/java/com/sczx/app/config/WebConfig.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.sczx.app.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.http.MediaType;
-import org.springframework.http.converter.HttpMessageConverter;
-import org.springframework.http.converter.StringHttpMessageConverter;
-import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import org.springframework.web.servlet.config.annotation.EnableWebMvc;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import java.nio.charset.StandardCharsets;
-import java.util.Collections;
-import java.util.List;
-
-@Configuration
-@EnableWebMvc
-public class WebConfig implements WebMvcConfigurer {
-
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- registry.addResourceHandler("/swagger-ui/**")
- .addResourceLocations("classpath:/META-INF/resources/webjars/swagger-ui/4.15.5/");
- registry.addResourceHandler("/swagger-ui.html")
- .addResourceLocations("classpath:/META-INF/resources/swagger-ui.html");
- registry.addResourceHandler("/v3/api-docs/**")
- .addResourceLocations("classpath:/META-INF/resources/swagger-ui/");
- }
-
- @Override
- public void configureMessageConverters(List> converters) {
-
- converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8));
- // 添加支持 application/json;charset=UTF-8 的 Jackson 转换器
- converters.add(new MappingJackson2HttpMessageConverter() {
- @Override
- public List getSupportedMediaTypes() {
- return Collections.singletonList(MediaType.APPLICATION_JSON_UTF8);
- }
- });
-
-
- }
-}
diff --git a/src/main/java/com/sczx/app/controller/DemoController.java b/src/main/java/com/sczx/app/controller/DemoController.java
deleted file mode 100644
index 5b4f286..0000000
--- a/src/main/java/com/sczx/app/controller/DemoController.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.sczx.app.controller;
-
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@Tag(name = "示例接口", description = "用于演示 Springdoc 的接口")
-public class DemoController {
- @GetMapping("/test")
- @Operation(summary = "测试接口", description = "返回一个测试字符串")
- public String test() {
- return "OK";
- }
-}
diff --git a/src/main/java/com/sczx/app/Application.java b/src/main/java/com/sczx/order/Application.java
similarity index 74%
rename from src/main/java/com/sczx/app/Application.java
rename to src/main/java/com/sczx/order/Application.java
index 5a49fc7..f36cc1c 100644
--- a/src/main/java/com/sczx/app/Application.java
+++ b/src/main/java/com/sczx/order/Application.java
@@ -1,7 +1,8 @@
-package com.sczx.app;
+package com.sczx.order;
-import com.sczx.app.common.constant.SystemConstants;
-import com.sczx.app.utils.ComputerInfo;
+import com.sczx.order.common.constant.SystemConstants;
+import com.sczx.order.utils.ComputerInfo;
+import lombok.extern.slf4j.Slf4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -15,19 +16,19 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
import java.io.IOException;
+@Slf4j
@SpringBootApplication
@EnableDiscoveryClient // 启用服务注册与发现
@EnableRetry
@EnableFeignClients(basePackages = SystemConstants.FEIGN_CLIENT_BASE_PACKAGE )
@EnableTransactionManagement
@EnableHystrix
-@MapperScan("com.sczx.app.mapper") // 扫描 Mapper 接口
+@MapperScan("com.sczx.order.mapper") // 扫描 Mapper 接口
public class Application {
public static void main(String[] args) throws IOException {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
Environment environment = context.getBean(Environment.class);
- System.out.println("启动成功,后端服务API地址:http://" + ComputerInfo.getIpAddr() + ":"
- + environment.getProperty("server.port") + "/doc.html");
+ log.info("启动成功,后端服务API地址:http://{}:{}/swagger-ui.html", ComputerInfo.getIpAddr(), environment.getProperty("server.port"));
}
}
diff --git a/src/main/java/com/sczx/order/aspect/FacadeAspect.java b/src/main/java/com/sczx/order/aspect/FacadeAspect.java
new file mode 100644
index 0000000..041f79b
--- /dev/null
+++ b/src/main/java/com/sczx/order/aspect/FacadeAspect.java
@@ -0,0 +1,58 @@
+package com.sczx.order.aspect;
+
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Author Huang Kai
+ * @Date 2023/1/18 17:01
+ * @Version 1.0
+ */
+@Aspect
+@Component
+@Slf4j
+public class FacadeAspect {
+
+
+
+ /** 以 controller 包下定义的所有请求为切入点 */
+ @Pointcut("execution(public * com..facade.*.*(..))")
+ public void facadeLog() {}
+
+ /**
+ * 在切点之前织入
+ * @param joinPoint
+ */
+ @Before("facadeLog()")
+ public void doBefore(JoinPoint joinPoint) {
+ // 打印请求相关参数
+ log.info("=========================remote Start =========================");
+ // 打印 Http method
+ //log.info("HTTP Method : {}", request.getMethod());
+ // 打印调用 controller 的全路径以及执行方法
+ log.info("Class Method:{}.{}", joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName());
+ // 打印请求的 IP
+ //log.info("IP : {}", request.getRemoteAddr());
+ // 打印请求入参
+ log.info("facadeAspect_Request:{}", JSON.toJSONString(joinPoint.getArgs()));
+ }
+
+ @Around("facadeLog()")
+ public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
+ long startTime = System.currentTimeMillis();
+ Object result = proceedingJoinPoint.proceed();
+ // 打印出参
+ log.info("facadeAspect_Response:{}", JSON.toJSONString(result));
+ // 执行耗时
+ log.info("Time-Consuming : {} ms", System.currentTimeMillis() - startTime);
+ log.info("=========================remote End =========================");
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/sczx/order/aspect/WebLogAspect.java b/src/main/java/com/sczx/order/aspect/WebLogAspect.java
new file mode 100644
index 0000000..d098fbf
--- /dev/null
+++ b/src/main/java/com/sczx/order/aspect/WebLogAspect.java
@@ -0,0 +1,97 @@
+package com.sczx.order.aspect;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.*;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @Author Huang Kai
+ * @Date 2023/1/18 17:01
+ * @Version 1.0
+ */
+@Aspect
+@Component
+@Slf4j
+public class WebLogAspect {
+
+
+
+ /** 以 controller 包下定义的所有请求为切入点 */
+ @Pointcut("execution(public * com.sczx.*.controller.*.*(..))")
+ public void webLog() {}
+
+ /**
+ * 在切点之前织入
+ * @param joinPoint
+ */
+ @Before("webLog()")
+ public void doBefore(JoinPoint joinPoint) {
+ String uid = UUID.randomUUID().toString();
+ MDC.put("requestId",uid.substring(24,36));
+ // 开始打印请求日志
+ ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+ HttpServletRequest request = null;
+ if (attributes != null) {
+ request = attributes.getRequest();
+ }
+ // 打印请求相关参数
+ log.info("========================= Start =========================");
+ // 打印请求入参
+ try{
+ Object[] args = joinPoint.getArgs();
+ List