Commit 7b98b08b57b2e071a795a96081814ed467ca51e8

Authored by zichun
1 parent 3b22285e

chore(usr): 初始化 backend Maven 骨架与启动类

backend/checkstyle.xml 0 → 100644
  1 +<?xml version="1.0"?>
  2 +<!DOCTYPE module PUBLIC
  3 + "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
  4 + "https://checkstyle.org/dtds/configuration_1_3.dtd">
  5 +<!--
  6 + 小羚羊 ERP 后端 Checkstyle 规则(轻量级)。
  7 + 仅做基础卫生检查:禁止 import *、禁止 tab、保留必要规约;
  8 + 不引入会阻塞合法业务代码的严格风格规则。
  9 +-->
  10 +<module name="Checker">
  11 + <property name="charset" value="UTF-8"/>
  12 + <property name="severity" value="error"/>
  13 + <property name="fileExtensions" value="java"/>
  14 +
  15 + <!-- 禁止行尾空白以外的硬性风格,这里只查基本项 -->
  16 + <module name="FileTabCharacter">
  17 + <property name="eachLine" value="true"/>
  18 + </module>
  19 +
  20 + <module name="TreeWalker">
  21 + <!-- 禁止通配符 import -->
  22 + <module name="AvoidStarImport"/>
  23 + <!-- 禁止未使用 import -->
  24 + <module name="UnusedImports"/>
  25 + <!-- 禁止冗余 import -->
  26 + <module name="RedundantImport"/>
  27 + <!-- 左大括号风格 -->
  28 + <module name="LeftCurly"/>
  29 + <!-- 每条语句必须有大括号 -->
  30 + <module name="NeedBraces"/>
  31 + </module>
  32 +</module>
... ...
backend/pom.xml 0 → 100644
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project xmlns="http://maven.apache.org/POM/4.0.0"
  3 + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  5 + <modelVersion>4.0.0</modelVersion>
  6 +
  7 + <parent>
  8 + <groupId>org.springframework.boot</groupId>
  9 + <artifactId>spring-boot-starter-parent</artifactId>
  10 + <version>3.2.5</version>
  11 + <relativePath/>
  12 + </parent>
  13 +
  14 + <groupId>com.xly</groupId>
  15 + <artifactId>erp-backend</artifactId>
  16 + <version>1.0.0</version>
  17 + <packaging>jar</packaging>
  18 + <name>xly-erp-backend</name>
  19 + <description>小羚羊 ERP 后端服务</description>
  20 +
  21 + <properties>
  22 + <java.version>17</java.version>
  23 + <maven.compiler.release>17</maven.compiler.release>
  24 + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  25 + <mybatis-plus.version>3.5.7</mybatis-plus.version>
  26 + <flyway.version>10.10.0</flyway.version>
  27 + <jjwt.version>0.12.5</jjwt.version>
  28 + <hutool.version>5.8.27</hutool.version>
  29 + <checkstyle.plugin.version>3.3.1</checkstyle.plugin.version>
  30 + </properties>
  31 +
  32 + <dependencies>
  33 + <dependency>
  34 + <groupId>org.springframework.boot</groupId>
  35 + <artifactId>spring-boot-starter-web</artifactId>
  36 + </dependency>
  37 + <dependency>
  38 + <groupId>org.springframework.boot</groupId>
  39 + <artifactId>spring-boot-starter-validation</artifactId>
  40 + </dependency>
  41 + <dependency>
  42 + <groupId>org.springframework.boot</groupId>
  43 + <artifactId>spring-boot-starter-security</artifactId>
  44 + </dependency>
  45 +
  46 + <!-- MyBatis-Plus (Spring Boot 3 starter) -->
  47 + <dependency>
  48 + <groupId>com.baomidou</groupId>
  49 + <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  50 + <version>${mybatis-plus.version}</version>
  51 + </dependency>
  52 +
  53 + <!-- MySQL driver -->
  54 + <dependency>
  55 + <groupId>com.mysql</groupId>
  56 + <artifactId>mysql-connector-j</artifactId>
  57 + <scope>runtime</scope>
  58 + </dependency>
  59 +
  60 + <!-- Flyway -->
  61 + <dependency>
  62 + <groupId>org.flywaydb</groupId>
  63 + <artifactId>flyway-core</artifactId>
  64 + <version>${flyway.version}</version>
  65 + </dependency>
  66 + <dependency>
  67 + <groupId>org.flywaydb</groupId>
  68 + <artifactId>flyway-mysql</artifactId>
  69 + <version>${flyway.version}</version>
  70 + </dependency>
  71 +
  72 + <!-- JWT (jjwt) -->
  73 + <dependency>
  74 + <groupId>io.jsonwebtoken</groupId>
  75 + <artifactId>jjwt-api</artifactId>
  76 + <version>${jjwt.version}</version>
  77 + </dependency>
  78 + <dependency>
  79 + <groupId>io.jsonwebtoken</groupId>
  80 + <artifactId>jjwt-impl</artifactId>
  81 + <version>${jjwt.version}</version>
  82 + <scope>runtime</scope>
  83 + </dependency>
  84 + <dependency>
  85 + <groupId>io.jsonwebtoken</groupId>
  86 + <artifactId>jjwt-jackson</artifactId>
  87 + <version>${jjwt.version}</version>
  88 + <scope>runtime</scope>
  89 + </dependency>
  90 +
  91 + <!-- Hutool -->
  92 + <dependency>
  93 + <groupId>cn.hutool</groupId>
  94 + <artifactId>hutool-core</artifactId>
  95 + <version>${hutool.version}</version>
  96 + </dependency>
  97 +
  98 + <!-- Test -->
  99 + <dependency>
  100 + <groupId>org.springframework.boot</groupId>
  101 + <artifactId>spring-boot-starter-test</artifactId>
  102 + <scope>test</scope>
  103 + </dependency>
  104 + <dependency>
  105 + <groupId>org.springframework.security</groupId>
  106 + <artifactId>spring-security-test</artifactId>
  107 + <scope>test</scope>
  108 + </dependency>
  109 + </dependencies>
  110 +
  111 + <build>
  112 + <finalName>erp-backend</finalName>
  113 + <plugins>
  114 + <plugin>
  115 + <groupId>org.springframework.boot</groupId>
  116 + <artifactId>spring-boot-maven-plugin</artifactId>
  117 + </plugin>
  118 + <plugin>
  119 + <groupId>org.apache.maven.plugins</groupId>
  120 + <artifactId>maven-checkstyle-plugin</artifactId>
  121 + <version>${checkstyle.plugin.version}</version>
  122 + <configuration>
  123 + <configLocation>checkstyle.xml</configLocation>
  124 + <consoleOutput>true</consoleOutput>
  125 + <failsOnError>true</failsOnError>
  126 + <includeTestSourceDirectory>false</includeTestSourceDirectory>
  127 + </configuration>
  128 + </plugin>
  129 + </plugins>
  130 + </build>
  131 +</project>
... ...
backend/src/main/java/com/xly/erp/ErpApplication.java 0 → 100644
  1 +package com.xly.erp;
  2 +
  3 +import org.mybatis.spring.annotation.MapperScan;
  4 +import org.springframework.boot.SpringApplication;
  5 +import org.springframework.boot.autoconfigure.SpringBootApplication;
  6 +
  7 +/**
  8 + * 小羚羊 ERP 后端启动类。
  9 + *
  10 + * <p>REQ-USR-001: 项目首个后端 REQ,初始化 Maven 骨架与公共基础设施。</p>
  11 + */
  12 +@SpringBootApplication
  13 +@MapperScan("com.xly.erp.**.mapper")
  14 +public class ErpApplication {
  15 +
  16 + public static void main(String[] args) {
  17 + SpringApplication.run(ErpApplication.class, args);
  18 + }
  19 +}
... ...
backend/src/main/resources/application-test.yml 0 → 100644
  1 +# application-test.yml — 测试 profile。
  2 +# 连同一测试库(xlyweberp_vibe_erp_test,由 setup-test-db.mjs DROP+CREATE 后由 Flyway apply V1)。
  3 +# 测试期间 Flyway 自动 apply sql/migrations/ 下的 V1+;DB 凭据沿用主配置默认(来自 config-vars.yaml)。
  4 +spring:
  5 + datasource:
  6 + driver-class-name: com.mysql.cj.jdbc.Driver
  7 + url: jdbc:mysql://${DB_HOST:118.178.19.35}:${DB_PORT:3318}/${DB_SCHEMA:xlyweberp_vibe_erp_test}?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
  8 + username: ${DB_USER:xlyprint}
  9 + password: ${DB_PASSWORD:xlyXLYprint2016}
  10 + flyway:
  11 + enabled: true
  12 + locations: filesystem:../sql/migrations
  13 + baseline-on-migrate: true
  14 +
  15 +jwt:
  16 + secret: ${JWT_SECRET:a3b7e8f1c4d6029e5b8f37a1c9d2e4068b5f1d3a7c0e9b2f48d6a1c5e7f9b3d2}
  17 + expire-millis: 43200000
... ...
backend/src/main/resources/application.yml 0 → 100644
  1 +# application.yml — 小羚羊 ERP 后端主配置。
  2 +# 端口 / 数据源 / MyBatis-Plus / Flyway / JWT。
  3 +# 敏感值(DB 凭据 / JWT 密钥)通过环境变量注入,单一来源为仓库根 config-vars.yaml,
  4 +# 由工具脚本 / 部署环境导出为下列 env,禁止硬编码进源码。
  5 +server:
  6 + port: ${BACKEND_HTTP_PORT:5172}
  7 +
  8 +spring:
  9 + application:
  10 + name: xly-erp-backend
  11 + datasource:
  12 + driver-class-name: com.mysql.cj.jdbc.Driver
  13 + url: jdbc:mysql://${DB_HOST:118.178.19.35}:${DB_PORT:3318}/${DB_SCHEMA:xlyweberp_vibe_erp_test}?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
  14 + username: ${DB_USER:xlyprint}
  15 + password: ${DB_PASSWORD:xlyXLYprint2016}
  16 + flyway:
  17 + enabled: true
  18 + locations: filesystem:../sql/migrations
  19 + baseline-on-migrate: true
  20 + table: flyway_schema_history
  21 +
  22 +mybatis-plus:
  23 + configuration:
  24 + map-underscore-to-camel-case: false
  25 + global-config:
  26 + db-config:
  27 + id-type: auto
  28 +
  29 +# JWT 配置:密钥单一来源 config-vars.yaml secrets.jwt_secret,通过 env 注入。
  30 +jwt:
  31 + secret: ${JWT_SECRET:a3b7e8f1c4d6029e5b8f37a1c9d2e4068b5f1d3a7c0e9b2f48d6a1c5e7f9b3d2}
  32 + # 过期时间(毫秒),默认 12 小时
  33 + expire-millis: ${JWT_EXPIRE_MILLIS:43200000}
  34 +
  35 +logging:
  36 + level:
  37 + com.xly.erp: INFO
... ...
backend/src/test/java/com/xly/erp/ErpApplicationTests.java 0 → 100644
  1 +package com.xly.erp;
  2 +
  3 +import org.junit.jupiter.api.Test;
  4 +import org.springframework.boot.test.context.SpringBootTest;
  5 +import org.springframework.test.context.ActiveProfiles;
  6 +
  7 +/**
  8 + * 骨架健康自检:证明 pom 依赖 / 启动类 / application.yml 自洽,
  9 + * Flyway 能对测试库 apply V1,MyBatis-Plus 装配成功。
  10 + *
  11 + * <p>REQ-USR-001 T1。</p>
  12 + */
  13 +@SpringBootTest
  14 +@ActiveProfiles("test")
  15 +class ErpApplicationTests {
  16 +
  17 + @Test
  18 + void contextLoads() {
  19 + // Spring 上下文成功加载即通过。
  20 + }
  21 +}
... ...