diff --git a/mt-pay/pom.xml b/mt-pay/pom.xml
index 13a7aa4..295ff68 100644
--- a/mt-pay/pom.xml
+++ b/mt-pay/pom.xml
@@ -5,12 +5,13 @@
org.springframework.boot
spring-boot-starter-parent
- 4.0.0
+ 3.2.0
com.mtkj
mt-pay
0.0.1-SNAPSHOT
+ jar
mt-pay
mt-pay
@@ -30,26 +31,27 @@
17
+
org.springframework.boot
- spring-boot-starter-restclient
-
-
- org.springframework.boot
- spring-boot-starter-webmvc
+ spring-boot-starter-web
+
org.springframework.boot
spring-boot-devtools
runtime
true
+
+
com.mysql
mysql-connector-j
runtime
+
com.baomidou
@@ -63,29 +65,31 @@
aliyun-sdk-oss
3.17.4
+
com.alibaba
druid-spring-boot-3-starter
1.2.20
+
+
org.springframework.boot
spring-boot-starter-validation
+
+
org.projectlombok
lombok
true
+
+
org.springframework.boot
- spring-boot-starter-restclient-test
- test
-
-
- org.springframework.boot
- spring-boot-starter-webmvc-test
+ spring-boot-starter-test
test
@@ -100,6 +104,7 @@
org.projectlombok
lombok
+ ${lombok.version}
@@ -116,6 +121,13 @@
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ true
+
+
diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/MtPayApplication.java b/mt-pay/src/main/java/com/mtkj/mtpay/MtPayApplication.java
index c393579..90a760c 100644
--- a/mt-pay/src/main/java/com/mtkj/mtpay/MtPayApplication.java
+++ b/mt-pay/src/main/java/com/mtkj/mtpay/MtPayApplication.java
@@ -11,30 +11,77 @@ public class MtPayApplication {
public static void main(String[] args) {
try {
+ log.info("""
+
+ ╔══════════════════════════════════════════════════════════╗
+ ║ ║
+ ║ MTKJ PAY 支付系统正在启动... ║
+ ║ ║
+ ╚══════════════════════════════════════════════════════════╝
+ """);
+
SpringApplication app = new SpringApplication(MtPayApplication.class);
Environment env = app.run(args).getEnvironment();
String applicationName = env.getProperty("spring.application.name", "mt-pay");
- String serverPort = env.getProperty("server.port", "8080");
+ String serverPort = env.getProperty("server.port", "8082");
String contextPath = env.getProperty("server.servlet.context-path", "");
String activeProfiles = String.join(",", env.getActiveProfiles());
+ // 构建完整的访问地址
+ String baseUrl = "http://localhost:" + serverPort + contextPath;
+ String apiUrl = baseUrl + "/api";
+ String druidUrl = baseUrl + "/druid";
+
+ // 打印醒目的启动成功标识
log.info("""
- ========================================
- 应用启动成功!
- ========================================
- 应用名称: {}
- 运行环境: {}
- 访问地址: http://localhost:{}{}
- ========================================
+ ╔══════════════════════════════════════════════════════════╗
+ ║ ║
+ ║ ✅ MTKJ PAY 支付系统启动成功! ✅ ║
+ ║ ║
+ ╠══════════════════════════════════════════════════════════╣
+ ║ 应用信息 ║
+ ╠══════════════════════════════════════════════════════════╣
+ ║ 应用名称: {:<45} ║
+ ║ 运行环境: {:<45} ║
+ ║ 服务端口: {:<45} ║
+ ╠══════════════════════════════════════════════════════════╣
+ ║ 访问地址 ║
+ ╠══════════════════════════════════════════════════════════╣
+ ║ 后端服务: {:<45} ║
+ ║ API接口: {:<45} ║
+ ║ Druid监控: {:<45} ║
+ ╠══════════════════════════════════════════════════════════╣
+ ║ 状态: 🟢 服务运行中,可以接收请求 ║
+ ╚══════════════════════════════════════════════════════════╝
""",
- applicationName,
+ applicationName,
activeProfiles.isEmpty() ? "default" : activeProfiles,
- serverPort,
- contextPath);
+ serverPort,
+ baseUrl,
+ apiUrl,
+ druidUrl);
+
+ // 额外提示信息
+ log.info("""
+
+ 📌 提示:
+ - 前端代理地址: http://localhost:3000
+ - 后端API地址: {}
+ - 图片上传接口: {}/product/upload/image
+ - 商品管理接口: {}/product
+ """, apiUrl, apiUrl, apiUrl);
+
} catch (Exception e) {
- log.error("应用启动失败", e);
+ log.error("""
+
+ ╔══════════════════════════════════════════════════════════╗
+ ║ ║
+ ║ ❌ MTKJ PAY 支付系统启动失败! ❌ ║
+ ║ ║
+ ╚══════════════════════════════════════════════════════════╝
+ """, e);
throw e;
}
}
diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CreateProductRequestDTO.java b/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CreateProductRequestDTO.java
index b492640..1c1108c 100644
--- a/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CreateProductRequestDTO.java
+++ b/mt-pay/src/main/java/com/mtkj/mtpay/dto/request/CreateProductRequestDTO.java
@@ -30,11 +30,16 @@ public class CreateProductRequestDTO implements Serializable {
private BigDecimal price;
/**
- * 主图URL
+ * 主图URL(单个URL,兼容旧版本)
*/
@Size(max = 4000, message = "主图URL长度不能超过4000")
private String mainImage;
+ /**
+ * 主图URL列表(支持多张主图,JSON格式存储)
+ */
+ private List mainImages;
+
/**
* 商品状态:ACTIVE-上架,INACTIVE-下架
*/
diff --git a/mt-pay/src/main/java/com/mtkj/mtpay/exception/GlobalExceptionHandler.java b/mt-pay/src/main/java/com/mtkj/mtpay/exception/GlobalExceptionHandler.java
index a47649b..df71045 100644
--- a/mt-pay/src/main/java/com/mtkj/mtpay/exception/GlobalExceptionHandler.java
+++ b/mt-pay/src/main/java/com/mtkj/mtpay/exception/GlobalExceptionHandler.java
@@ -42,8 +42,9 @@ public class GlobalExceptionHandler {
});
log.warn("参数验证失败: {}", errors);
- return ResponseEntity.badRequest()
- .body(Result.fail(ResultCode.VALIDATION_ERROR.getCode(), ResultCode.VALIDATION_ERROR.getMessage(), errors));
+ Result