map = new HashMap();
+ map.put(key, value);
+ return result(ApiErrorCode.FAIL, map);
+ }
+ public Result() {
+ }
+}
diff --git a/src/main/java/com/sczx/car/common/enums/ApiErrorCode.java b/src/main/java/com/sczx/car/common/enums/ApiErrorCode.java
new file mode 100644
index 0000000..0309df9
--- /dev/null
+++ b/src/main/java/com/sczx/car/common/enums/ApiErrorCode.java
@@ -0,0 +1,55 @@
+package com.sczx.car.common.enums;
+
+
+import com.sczx.car.common.IApiCode;
+
+/**
+ * @Author: 张黎
+ * @Date: 2025/07/09/20:22
+ * @Description:
+ */
+public enum ApiErrorCode implements IApiCode {
+ SUCCESS("0", "操作成功"),
+ ARG_ERROR("401000", "参数错误"),
+ NOT_PERMISSION("401001", "没有权限"),
+ HTTP_MEDIA_TYPE_NOT_SUPPORTED_ERROR("401002", "media类型出错"),
+ HTTP_METHOD_NOT_ALLOW_ERROR("401003", "http请求method错误"),
+ BODY_NOT_MATCH("401004", "请求的数据格式不符!"),
+ NOT_FOUND("404000", "你请求的路径不存在"),
+ UNAUTHORIZED("404001", "非法访问"),
+ FAIL("500000", "操作失败"),
+ INNER_ERROR("500001", "服务器内部异常");
+
+ private final String code;
+ private final String msg;
+
+ private ApiErrorCode(String code, String msg) {
+ this.code = code;
+ this.msg = msg;
+ }
+
+ public static ApiErrorCode getApiCode(String code) {
+ ApiErrorCode[] ecs = values();
+ ApiErrorCode[] var2 = ecs;
+ int var3 = ecs.length;
+
+ for(int var4 = 0; var4 < var3; ++var4) {
+ ApiErrorCode ec = var2[var4];
+ if (ec.getCode().equals(code)) {
+ return ec;
+ }
+ }
+
+ return SUCCESS;
+ }
+
+ @Override
+ public String getCode() {
+ return this.code;
+ }
+
+ @Override
+ public String getMsg() {
+ return this.msg;
+ }
+}
diff --git a/src/main/java/com/sczx/car/config/MyBatisPlusConfig.java b/src/main/java/com/sczx/car/config/MyBatisPlusConfig.java
new file mode 100644
index 0000000..b1fc054
--- /dev/null
+++ b/src/main/java/com/sczx/car/config/MyBatisPlusConfig.java
@@ -0,0 +1,18 @@
+package com.sczx.car.config;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MyBatisPlusConfig {
+
+
+ @Bean
+ public MybatisPlusInterceptor mybatisPlusInterceptor() {
+ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+ interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
+ return interceptor;
+ }
+}
diff --git a/src/main/java/com/sczx/car/config/SwaggerConfig.java b/src/main/java/com/sczx/car/config/SwaggerConfig.java
new file mode 100644
index 0000000..2db7b5c
--- /dev/null
+++ b/src/main/java/com/sczx/car/config/SwaggerConfig.java
@@ -0,0 +1,47 @@
+package com.sczx.car.config;
+
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.Arrays;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+ @Bean
+ public Docket createRestApi() {
+ return new Docket(DocumentationType.SWAGGER_2)
+ .apiInfo(apiInfo())
+ .select()
+ .apis(RequestHandlerSelectors.basePackage("com.sczx.store.controller")) // 修改为你的 controller 包路径
+ .paths(PathSelectors.any())
+ .build()
+ .globalOperationParameters(Arrays.asList(
+ new ParameterBuilder()
+ .name("Authorization")
+ .description("Bearer Token")
+ .modelRef(new ModelRef("string"))
+ .parameterType("header")
+ .required(true)
+ .build()
+ ));
+ }
+
+ private ApiInfo apiInfo() {
+ return new ApiInfoBuilder()
+ .title("门店服务接口文档")
+ .description("sczx_store门店服务接口文档文档")
+ .version("1.0")
+ .build();
+ }
+}
diff --git a/src/main/java/com/sczx/car/constant/SystemConstants.java b/src/main/java/com/sczx/car/constant/SystemConstants.java
new file mode 100644
index 0000000..6f2587c
--- /dev/null
+++ b/src/main/java/com/sczx/car/constant/SystemConstants.java
@@ -0,0 +1,23 @@
+package com.sczx.car.constant;
+
+
+/**
+ * 应用模块名称
+ *
+ * 代码描述
+ *
+ * Copyright: Copyright (C) 2022 CD Finance Management Co., Ltd. All rights reserved.
+ *
+ * Company: 中和农信项目管理有限公司
+ *
+ * @author zhonghui
+ * @since 2022/4/1 3:33 PM
+ */
+public interface SystemConstants {
+
+ /***
+ * feign客户端所在包路径
+ */
+ String FEIGN_CLIENT_BASE_PACKAGE = "com.sczx.app.thirdpart.facade";
+
+}
diff --git a/src/main/java/com/sczx/car/exception/BizException.java b/src/main/java/com/sczx/car/exception/BizException.java
new file mode 100644
index 0000000..2379e97
--- /dev/null
+++ b/src/main/java/com/sczx/car/exception/BizException.java
@@ -0,0 +1,85 @@
+package com.sczx.car.exception;
+
+
+import com.sczx.car.common.IApiCode;
+import com.sczx.car.common.enums.ApiErrorCode;
+
+/**
+ *
+ * @author zhangli
+ */
+public class BizException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 错误码
+ */
+ protected String errorCode;
+ /**
+ * 错误信息
+ */
+ protected String errorMsg;
+
+ public BizException() {
+ super();
+ }
+
+ public BizException(IApiCode apiCode) {
+ super(apiCode.getCode());
+ this.errorCode = apiCode.getCode();
+ this.errorMsg = apiCode.getMsg();
+ }
+
+ public BizException(IApiCode apiCode, Throwable cause) {
+ super(apiCode.getCode(), cause);
+ this.errorCode = apiCode.getCode();
+ this.errorMsg = apiCode.getMsg();
+ }
+
+ public BizException(String errorMsg) {
+ super(errorMsg);
+ this.errorCode = ApiErrorCode.FAIL.getCode();
+ this.errorMsg = errorMsg;
+ }
+
+ public BizException(String errorCode, String errorMsg) {
+ super(errorCode);
+ this.errorCode = errorCode;
+ this.errorMsg = errorMsg;
+ }
+
+ public BizException(String errorCode, String errorMsg, Throwable cause) {
+ super(errorCode, cause);
+ this.errorCode = errorCode;
+ this.errorMsg = errorMsg;
+ }
+
+
+ public String getErrorCode() {
+ return errorCode;
+ }
+
+ public void setErrorCode(String errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ public String getErrorMsg() {
+ return errorMsg;
+ }
+
+ public void setErrorMsg(String errorMsg) {
+ this.errorMsg = errorMsg;
+ }
+
+ @Override
+ public String getMessage() {
+ return errorMsg;
+ }
+
+ @Override
+ public Throwable fillInStackTrace() {
+ return this;
+ }
+
+}
diff --git a/src/main/java/com/sczx/car/exception/GlobalExceptionHandler.java b/src/main/java/com/sczx/car/exception/GlobalExceptionHandler.java
new file mode 100644
index 0000000..b0c3409
--- /dev/null
+++ b/src/main/java/com/sczx/car/exception/GlobalExceptionHandler.java
@@ -0,0 +1,49 @@
+package com.sczx.car.exception;
+
+
+import com.sczx.car.common.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * @author zhangli
+ */
+@Slf4j
+@ControllerAdvice
+public class GlobalExceptionHandler {
+
+
+ /**
+ * 处理自定义的业务异常
+ *
+ * @param req
+ * @param e
+ * @return
+ */
+ @ExceptionHandler(value = BizException.class)
+ @ResponseBody
+ public Result bizExceptionHandler(HttpServletRequest req, BizException e) {
+ log.warn("发生业务异常!原因是:{}", e.getErrorMsg(), e);
+ return Result.fail(e.getErrorCode(), e.getErrorMsg());
+ }
+
+ @ExceptionHandler(value = InnerException.class)
+ @ResponseBody
+ public Result innerExceptionHandler(HttpServletRequest req, InnerException e) {
+ log.error("发生服务内部异常!原因是:{}", e.getErrorMsg(), e);
+ return Result.fail(e.getErrorCode(), e.getErrorMsg());
+ }
+
+ @ExceptionHandler(value = Exception.class)
+ @ResponseBody
+ public Result exceptionHandler(HttpServletRequest req, Exception e) {
+ log.error("意料外异常!原因是:{}", e.getMessage(), e);
+ return Result.fail("99999", "系统内部异常");
+ }
+
+}
diff --git a/src/main/java/com/sczx/car/exception/InnerException.java b/src/main/java/com/sczx/car/exception/InnerException.java
new file mode 100644
index 0000000..91ed43d
--- /dev/null
+++ b/src/main/java/com/sczx/car/exception/InnerException.java
@@ -0,0 +1,86 @@
+package com.sczx.car.exception;
+
+
+import com.sczx.car.common.IApiCode;
+import com.sczx.car.common.enums.ApiErrorCode;
+
+/**
+ *
+ * @author zhangli
+
+ */
+public class InnerException extends RuntimeException {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 错误码
+ */
+ protected String errorCode;
+ /**
+ * 错误信息
+ */
+ protected String errorMsg;
+
+ public InnerException() {
+ super();
+ }
+
+ public InnerException(IApiCode apiCode) {
+ super(apiCode.getCode());
+ this.errorCode = apiCode.getCode();
+ this.errorMsg = apiCode.getMsg();
+ }
+
+ public InnerException(IApiCode apiCode, Throwable cause) {
+ super(apiCode.getCode(), cause);
+ this.errorCode = apiCode.getCode();
+ this.errorMsg = apiCode.getMsg();
+ }
+
+ public InnerException(String errorMsg) {
+ super(errorMsg);
+ this.errorCode = ApiErrorCode.INNER_ERROR.getCode();
+ this.errorMsg = errorMsg;
+ }
+
+ public InnerException(String errorCode, String errorMsg) {
+ super(errorCode);
+ this.errorCode = errorCode;
+ this.errorMsg = errorMsg;
+ }
+
+ public InnerException(String errorCode, String errorMsg, Throwable cause) {
+ super(errorCode, cause);
+ this.errorCode = errorCode;
+ this.errorMsg = errorMsg;
+ }
+
+
+ public String getErrorCode() {
+ return errorCode;
+ }
+
+ public void setErrorCode(String errorCode) {
+ this.errorCode = errorCode;
+ }
+
+ public String getErrorMsg() {
+ return errorMsg;
+ }
+
+ public void setErrorMsg(String errorMsg) {
+ this.errorMsg = errorMsg;
+ }
+
+ @Override
+ public String getMessage() {
+ return errorMsg;
+ }
+
+ @Override
+ public Throwable fillInStackTrace() {
+ return this;
+ }
+
+}
diff --git a/src/main/java/com/sczx/car/util/ComputerInfo.java b/src/main/java/com/sczx/car/util/ComputerInfo.java
new file mode 100644
index 0000000..e70ac8c
--- /dev/null
+++ b/src/main/java/com/sczx/car/util/ComputerInfo.java
@@ -0,0 +1,159 @@
+package com.sczx.car.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/*
+ * <取网卡物理地址--
+ * 1.在Windows,Linux系统下均可用;
+ * 2.通过ipconifg,ifconfig获得计算机信息;
+ * 3.再用模式匹配方式查找MAC地址,与操作系统的语言无关>
+ *
+ * //* Description: <取计算机名--从环境变量中取>
+ * abstract 限制继承/创建实例
+ */
+public abstract class ComputerInfo {
+ private static String macAddressStr = null;
+ private static String computerName = System.getenv().get("COMPUTERNAME");
+
+ private static final String[] windowsCommand = { "ipconfig", "/all" };
+ private static final String[] linuxCommand = { "/sbin/ifconfig", "-a" };
+ private static final String[] macCommand = { "ifconfig", "-a" };
+ private static final Pattern macPattern = Pattern.compile(".*((:?[0-9a-f]{2}[-:]){5}[0-9a-f]{2}).*",
+ Pattern.CASE_INSENSITIVE);
+
+ /**
+ * 获取多个网卡地址
+ *
+ * @return
+ * @throws IOException
+ */
+ private final static List getMacAddressList() throws IOException {
+ final ArrayList macAddressList = new ArrayList();
+ final String os = System.getProperty("os.name");
+ final String command[];
+
+ if (os.startsWith("Windows")) {
+ command = windowsCommand;
+ } else if (os.startsWith("Linux")) {
+ command = linuxCommand;
+ } else if (os.startsWith("Mac")){
+ command = macCommand;
+ }
+ else {
+ throw new IOException("Unknow operating system:" + os);
+ }
+ // 执行命令
+ final Process process = Runtime.getRuntime().exec(command);
+
+ BufferedReader bufReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ for (String line = null; (line = bufReader.readLine()) != null;) {
+ Matcher matcher = macPattern.matcher(line);
+ if (matcher.matches()) {
+ macAddressList.add(matcher.group(1));
+ // macAddressList.add(matcher.group(1).replaceAll("[-:]",
+ // ""));//去掉MAC中的“-”
+ }
+ }
+
+ process.destroy();
+ bufReader.close();
+ return macAddressList;
+ }
+
+ /**
+ * 获取一个网卡地址(多个网卡时从中获取一个)
+ *
+ * @return
+ */
+ public static String getMacAddress() {
+ if (macAddressStr == null || macAddressStr.equals("")) {
+ StringBuffer sb = new StringBuffer(); // 存放多个网卡地址用,目前只取一个非0000000000E0隧道的值
+ try {
+ List macList = getMacAddressList();
+ for (Iterator iter = macList.iterator(); iter.hasNext();) {
+ String amac = iter.next();
+ if (!"0000000000E0".equals(amac)) {
+ sb.append(amac);
+ break;
+ }
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ macAddressStr = sb.toString();
+
+ }
+
+ return macAddressStr;
+ }
+
+ /**
+ * 获取电脑名
+ *
+ * @return
+ */
+ public static String getComputerName() {
+ if (computerName == null || computerName.equals("")) {
+ computerName = System.getenv().get("COMPUTERNAME");
+ }
+ return computerName;
+ }
+
+ /**
+ * 获取客户端IP地址
+ *
+ * @return
+ */
+ public static String getIpAddrAndName() throws IOException {
+ return InetAddress.getLocalHost().toString();
+ }
+
+ /**
+ * 获取客户端IP地址
+ *
+ * @return
+ */
+ public static String getIpAddr() throws IOException {
+ return InetAddress.getLocalHost().getHostAddress().toString();
+ }
+
+ /**
+ * 获取电脑唯一标识
+ *
+ * @return
+ */
+ public static String getComputerID() {
+ String id = getMacAddress();
+ if (id == null || id.equals("")) {
+ try {
+ id = getIpAddrAndName();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ return computerName;
+ }
+
+ /**
+ * 限制创建实例
+ */
+ private ComputerInfo() {
+
+ }
+
+ public static void main(String[] args) throws IOException {
+ System.out.println(ComputerInfo.getMacAddress());
+ System.out.println(ComputerInfo.getComputerName());
+ System.out.println(ComputerInfo.getIpAddr());
+ System.out.println(ComputerInfo.getIpAddrAndName());
+ }
+}
diff --git a/src/main/java/com/sczx/car/util/JwtUtil.java b/src/main/java/com/sczx/car/util/JwtUtil.java
new file mode 100644
index 0000000..fca4f0c
--- /dev/null
+++ b/src/main/java/com/sczx/car/util/JwtUtil.java
@@ -0,0 +1,63 @@
+package com.sczx.car.util;
+
+import io.jsonwebtoken.JwtException;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import io.jsonwebtoken.security.Keys;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.crypto.SecretKey;
+import java.util.Date;
+
+/**
+ * @Author: 张黎
+ * @Date: 2025/07/06/14:00
+ * @Description:
+ */
+@Slf4j
+@Component
+public class JwtUtil {
+
+ @Value("${auth.token-expiration}")
+ private long expiration;
+ private final SecretKey key;
+
+ public JwtUtil(@Value("${auth.secret-key}") String secretKey) {
+ this.key = Keys.hmacShaKeyFor(secretKey.getBytes());
+
+// this.key = Keys.secretKeyFor(SignatureAlgorithm.HS512);
+ log.info("JWT 密钥:{}", secretKey);
+ }
+
+ public String generateToken(String username, String role) {
+ return Jwts.builder()
+ .setSubject(username)
+ .claim("role", role)
+ .setExpiration(new Date(System.currentTimeMillis() + expiration))
+ .signWith(key, SignatureAlgorithm.HS512)
+ .compact();
+ }
+
+ public String extractUsername(String token) {
+ return Jwts.parserBuilder()
+ .setSigningKey(key)
+ .build()
+ .parseClaimsJws(token)
+ .getBody()
+ .getSubject();
+ }
+
+ public boolean validateToken(String token) {
+ try {
+ Jwts.parserBuilder()
+ .setSigningKey(key)
+ .build()
+ .parseClaimsJws(token);
+ return true;
+ } catch (JwtException ex) {
+ return false;
+ }
+ }
+}
diff --git a/src/main/java/com/sczx/car/util/RedisUtil.java b/src/main/java/com/sczx/car/util/RedisUtil.java
new file mode 100644
index 0000000..2473807
--- /dev/null
+++ b/src/main/java/com/sczx/car/util/RedisUtil.java
@@ -0,0 +1,33 @@
+package com.sczx.car.util;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Author: 张黎
+ * @Date: 2025/07/06/14:21
+ * @Description:
+ */
+@Component
+public class RedisUtil {
+
+
+ @Autowired
+ private StringRedisTemplate redisTemplate;
+
+ public void set(String key, String value, long timeout, TimeUnit unit) {
+ redisTemplate.opsForValue().set(key, value, timeout, unit);
+ }
+
+ public String get(String key) {
+ return redisTemplate.opsForValue().get(key);
+ }
+
+ public void delete(String key) {
+ redisTemplate.delete(key);
+ }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..d5c57f1
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,86 @@
+
+server:
+ port: 8083
+
+spring:
+ application:
+ name: sczx_car # 微服务名称
+ http:
+ encoding:
+ charset: UTF-8
+ enabled: true
+ force: true
+ mvc:
+ async:
+ request-timeout: -1
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 115.190.8.52:8848 # Nacos 地址
+ group: DEFAULT_GROUP
+ metadata:
+ version: 1.0.0
+ env: dev
+ lifecycle:
+ timeout-per-shutdown-phase: 30s # 设置优雅停机时间
+ datasource:
+ url: jdbc:mysql://115.190.8.52:3306/sczx?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
+ username: sczx_user
+ password: Sczx123@
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ hikari:
+ maximum-pool-size: 10
+ auto-commit: true
+ redis:
+ host: 115.190.8.52
+ port: 6379
+ lettuce:
+ pool:
+ max-active: 8
+ max-wait: 2000ms
+ max-idle: 4
+ min-idle: 1
+ max-life-time: 300000ms
+
+management:
+ endpoints:
+ web:
+ exposure:
+ include: "*" # 暴露所有监控端点
+ endpoint:
+ health:
+ show-details: always
+
+feign:
+ client:
+ config:
+ default:
+ connectTimeout: 5000
+ readTimeout: 5000
+ hystrix:
+ enabled: true # 启用 Feign 的 Hystrix 支持
+
+hystrix:
+ command:
+ default:
+ execution:
+ isolation:
+ thread:
+ timeoutInMilliseconds: 10000 # 默认熔断超时时间
+
+#springdoc:
+# swagger-ui:
+# url: /v3/api-docs
+# path: /doc.html
+# packages-to-scan: com.sczx.store.controller # 替换为你的 controller 包路径
+
+mybatis-plus:
+ mapper-locations: classpath*:mapper/**/*.xml
+ type-aliases-package: com.sczx.car.po # 实体类包路径
+ configuration:
+ mapUnderscoreToCamelCase: true
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台打印 SQL(调试用)
+
+auth:
+ secret-key: his-is-a-very-long-and-secure-secret-key-for-jwt-signing-please-dont-use-short-keys
+ token-expiration: 86400000 # 24小时
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..e594345
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+ ${PATTERN}
+
+
+
+
+
+ ${LOG_FILE_PATH}/${hostname}/info.%d{yyyy-MM-dd}.log
+ 31
+
+
+
+ ${PATTERN}
+
+
+
+ WARN
+ DENY
+ NEUTRAL
+
+
+ ERROR
+ DENY
+ NEUTRAL
+
+
+
+
+
+ WARN
+
+ ${LOG_FILE_PATH}/${hostname}/warn.log
+ true
+
+ ${PATTERN}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/test/java/com/sczx/car/CodeGenerator.java b/src/test/java/com/sczx/car/CodeGenerator.java
new file mode 100644
index 0000000..cab6804
--- /dev/null
+++ b/src/test/java/com/sczx/car/CodeGenerator.java
@@ -0,0 +1,41 @@
+package com.sczx.car;
+
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+import com.baomidou.mybatisplus.generator.config.OutputFile;
+import com.baomidou.mybatisplus.generator.config.rules.DateType;
+import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
+
+import java.util.Collections;
+
+public class CodeGenerator {
+
+ private static final String parentPackage = "com.sczx.store";
+ private static final String jdbcUrl = "jdbc:mysql://115.190.8.52:3306/sczx?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&useSSL=false&serverTimezone=Asia/Shanghai";
+ private static final String username = "sczx_user";
+ private static final String password = "Sczx123@";
+ private static final String author = "zhangli";
+ public static void main(String[] args) {
+ DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig.Builder(jdbcUrl, username, password);
+
+ FastAutoGenerator.create(DATA_SOURCE_CONFIG)
+ // 全局配置
+ .globalConfig(builder -> builder.outputDir(System.getProperty("user.dir") + "/src/main/java")
+ .author(author).disableOpenDir().enableSwagger()
+ .dateType(DateType.TIME_PACK).commentDate("yyyy-MM-dd HH:mm:ss")
+ .fileOverride())
+ // 包配置
+ .packageConfig(builder -> builder.parent(parentPackage).entity("po").service("repository").serviceImpl("repository.impl").xml("")
+ .mapper("mapper").pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper")))
+
+ // 策略配置
+ .strategyConfig((scanner, builder) -> builder.addInclude(scanner.apply("请输入表名:"))
+ .addTablePrefix("zc_"/*,"zd_"*/)//可支持多个,按逗号分隔
+ .entityBuilder().formatFileName("%sPO").enableLombok()
+ .mapperBuilder().formatMapperFileName("%sMapper").formatXmlFileName("%sMapper")
+ .controllerBuilder().formatFileName("%sController").enableRestStyle()
+ .serviceBuilder().formatServiceFileName("%sRepo").formatServiceImplFileName("%sRepoImpl"))
+ .templateEngine(new FreemarkerTemplateEngine())
+ .execute();
+ }
+}