diff --git a/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java b/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java index 5039bc0..6b5941b 100644 --- a/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java +++ b/muyu-common/muyu-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java @@ -5,7 +5,7 @@ package com.muyu.common.core.exception; * * @author muyu */ -public final class ServiceException extends RuntimeException { +public class ServiceException extends RuntimeException { private static final long serialVersionUID = 1L; /** diff --git a/muyu-common/muyu-common-saas/pom.xml b/muyu-common/muyu-common-saas/pom.xml new file mode 100644 index 0000000..0f5f375 --- /dev/null +++ b/muyu-common/muyu-common-saas/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + com.muyu + muyu-common + 3.6.3 + + + muyu-common-saas + + SaaS公共依赖 + + + 17 + 17 + UTF-8 + + + + + com.muyu + muyu-common-datasource + + + com.muyu + muyu-common-security + + + diff --git a/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/ManyDataSource.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/ManyDataSource.java new file mode 100644 index 0000000..00da02d --- /dev/null +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/ManyDataSource.java @@ -0,0 +1,85 @@ +package com.muyu.common.many.datasource; + +import com.alibaba.druid.pool.DruidDataSource; +import com.muyu.common.core.utils.SpringUtils; +import com.muyu.common.many.datasource.domain.model.DataSourceInfo; +import com.muyu.common.many.datasource.factory.DruidDataSourceFactory; +import com.muyu.common.saas.domain.model.EnterPriseInfo; +import com.muyu.common.many.datasource.role.DynamicDataSource; +import lombok.AllArgsConstructor; +import lombok.extern.log4j.Log4j2; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 多数据源 ManyDataSource + * + * @author DeKangLiu + * Date 2024/6/3 20:01 + */ +@Component +@Log4j2 +@AllArgsConstructor +public class ManyDataSource { + + @PostConstruct + public void init(){ + new Thread(()->{ + try { + Thread.sleep(10000); + } catch (InterruptedException ignored) {} + DruidDataSourceFactory druidDataSourceFactory= SpringUtils.getBean(DruidDataSourceFactory.class); + DynamicDataSource dynamicDataSource= SpringUtils.getBean(DynamicDataSource.class); + EnterPriseInfo enterPriseInfo = EnterPriseInfo.builder() + .entCode("liu_0603") + .ip("192.168.116.129") + .port(3308) + .build(); + + DataSourceInfo dataSourceInfo = DataSourceInfo.hostAndPortBuild(enterPriseInfo.getEntCode(), enterPriseInfo.getIp(), enterPriseInfo.getPort()); + DruidDataSource druidDataSource = druidDataSourceFactory.create(dataSourceInfo); + dynamicDataSource.put(dataSourceInfo.getKey(), druidDataSource); + }).start(); + } + + + private List dataSourceInfoList(){ + List list = new ArrayList<>(); + list.add( + EnterPriseInfo.builder() + .entCode("liu_0604") + .ip("192.168.116.129") + .port(3307) + .build() + ); + return list; + } + + @Bean + @Primary + public DynamicDataSource dynamicDataSource(DruidDataSourceFactory druidDataSourceFactory) { + + //企业列表 企业CODE 端口 ip + Map dataSourceMap = new HashMap<>(); + dataSourceInfoList() + .stream() + .map(enterPriseInfo -> DataSourceInfo.hostAndPortBuild(enterPriseInfo.getEntCode(), enterPriseInfo.getIp(),enterPriseInfo.getPort())) + .forEach(dataSourceInfo -> { + dataSourceMap.put(dataSourceInfo.getKey(), druidDataSourceFactory.create(dataSourceInfo)); + }); + //设置动态数据源 + DynamicDataSource dynamicDataSource = new DynamicDataSource(); +// dynamicDataSource.setDefaultTargetDataSource(masterDataSource()); + dynamicDataSource.setTargetDataSources(dataSourceMap); + //将数据源信息备份在defineTargetDataSources中 + dynamicDataSource.setDefineTargetDataSources(dataSourceMap); + return dynamicDataSource; + } +} diff --git a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/DatasourceContent.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/constents/DatasourceContent.java similarity index 78% rename from muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/DatasourceContent.java rename to muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/constents/DatasourceContent.java index c5b0a8a..7fee930 100644 --- a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/DatasourceContent.java +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/constents/DatasourceContent.java @@ -1,4 +1,4 @@ -package com.muyu.many.datasource.config; +package com.muyu.common.many.datasource.constents; /** * @author DongZl @@ -11,5 +11,5 @@ public class DatasourceContent { public final static String USER_NAME = "root"; - public final static String PASSWORD = "root"; + public final static String PASSWORD = "L041120D"; } diff --git a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/domain/model/DataSourceInfo.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/domain/model/DataSourceInfo.java similarity index 85% rename from muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/domain/model/DataSourceInfo.java rename to muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/domain/model/DataSourceInfo.java index 8efdb8b..2ae3966 100644 --- a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/domain/model/DataSourceInfo.java +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/domain/model/DataSourceInfo.java @@ -1,4 +1,4 @@ -package com.muyu.many.datasource.config.domain.model; +package com.muyu.common.many.datasource.domain.model; import com.muyu.common.core.utils.StringUtils; @@ -7,7 +7,7 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import static com.muyu.many.datasource.config.DatasourceContent.*; +import static com.muyu.common.many.datasource.constents.DatasourceContent.*; /** @@ -42,7 +42,7 @@ public class DataSourceInfo { private String password; - public static DataSourceInfo hostAndPortBuild(String key,String host, String port){ + public static DataSourceInfo hostAndPortBuild(String key,String host, Integer port){ return DataSourceInfo.builder() .key(key) .url(StringUtils.format(DATASOURCE_URL, host, port,port)) diff --git a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/factory/DruidDataSourceFactory.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/factory/DruidDataSourceFactory.java similarity index 91% rename from muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/factory/DruidDataSourceFactory.java rename to muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/factory/DruidDataSourceFactory.java index 1f5c9eb..6eb038e 100644 --- a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/factory/DruidDataSourceFactory.java +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/factory/DruidDataSourceFactory.java @@ -1,7 +1,7 @@ -package com.muyu.many.datasource.config.factory; +package com.muyu.common.many.datasource.factory; import com.alibaba.druid.pool.DruidDataSource; -import com.muyu.many.datasource.config.domain.model.DataSourceInfo; +import com.muyu.common.many.datasource.domain.model.DataSourceInfo; import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Component; diff --git a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/holder/DynamicDataSourceHolder.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/holder/DynamicDataSourceHolder.java similarity index 95% rename from muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/holder/DynamicDataSourceHolder.java rename to muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/holder/DynamicDataSourceHolder.java index 9d435a8..2bf882d 100644 --- a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/holder/DynamicDataSourceHolder.java +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/holder/DynamicDataSourceHolder.java @@ -1,4 +1,4 @@ -package com.muyu.many.datasource.config.holder; +package com.muyu.common.many.datasource.holder; import lombok.extern.slf4j.Slf4j; import org.springframework.util.Assert; diff --git a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/role/DynamicDataSource.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/role/DynamicDataSource.java similarity index 62% rename from muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/role/DynamicDataSource.java rename to muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/role/DynamicDataSource.java index f338b66..4a22168 100644 --- a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/role/DynamicDataSource.java +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/many/datasource/role/DynamicDataSource.java @@ -1,6 +1,7 @@ -package com.muyu.many.datasource.config.role; +package com.muyu.common.many.datasource.role; -import com.muyu.many.datasource.config.holder.DynamicDataSourceHolder; +import com.alibaba.druid.pool.DruidDataSource; +import com.muyu.common.many.datasource.holder.DynamicDataSourceHolder; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -21,6 +22,26 @@ public class DynamicDataSource extends AbstractRoutingDataSource { //备份所有数据源信息,备份的是个 指针!!! private Map defineTargetDataSources; + /** + * 判定键是否出站了 + * @param key 键 + * @return 存在结束 true 存在 false 不存在 + */ + public boolean hashKye(String key){ + return defineTargetDataSources.containsKey(key); + } + + + /** + * 添加数据库 + * @param key 键 + * @param value 数据值 + */ + public void put(String key, DruidDataSource value){ + defineTargetDataSources.put(key,value); + this.afterPropertiesSet(); + } + /** * 决定当前线程使用哪个数据源 */ diff --git a/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/constents/SaaSConstant.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/constents/SaaSConstant.java new file mode 100644 index 0000000..5ba70fd --- /dev/null +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/constents/SaaSConstant.java @@ -0,0 +1,12 @@ +package com.muyu.common.saas.constents; + +/** + * SaaS常量 SaaSConstant + * + * @author DeKangLiu + * Date 2024/6/4 18:34 + */ +public class SaaSConstant { + + public final static String SAAS_KEY="enterprise-code"; +} diff --git a/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/domain/model/EnterPriseInfo.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/domain/model/EnterPriseInfo.java new file mode 100644 index 0000000..bd13f76 --- /dev/null +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/domain/model/EnterPriseInfo.java @@ -0,0 +1,25 @@ +package com.muyu.common.saas.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 企业信息 EnterPriseInfo + * + * @author DeKangLiu + * Date 2024/6/4 08:53 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EnterPriseInfo { + + private String entCode; + + private String ip; + + private Integer port; +} diff --git a/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/exception/SaaSException.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/exception/SaaSException.java new file mode 100644 index 0000000..31ea60c --- /dev/null +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/exception/SaaSException.java @@ -0,0 +1,26 @@ +package com.muyu.common.saas.exception; + +import com.muyu.common.core.exception.ServiceException; + +/** + * SaaS异常类 SaaSException + * + * @author DeKangLiu + * Date 2024/6/4 18:45 + */ +public class SaaSException extends ServiceException { + + public SaaSException(String message, Integer code) { + super(message, code); + } + + public SaaSException(String message) { + super(message); + } + + + public SaaSException() { + super(); + } + +} diff --git a/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/interceptor/SaaSInterceptor.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/interceptor/SaaSInterceptor.java new file mode 100644 index 0000000..20c3a97 --- /dev/null +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/interceptor/SaaSInterceptor.java @@ -0,0 +1,54 @@ +package com.muyu.common.saas.interceptor; + +import com.muyu.common.core.utils.ServletUtils; +import com.muyu.common.core.utils.SpringUtils; +import com.muyu.common.saas.constents.SaaSConstant; +import com.muyu.common.saas.exception.SaaSException; +import com.muyu.common.many.datasource.holder.DynamicDataSourceHolder; +import com.muyu.common.many.datasource.role.DynamicDataSource; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.AsyncHandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * SaaS拦截器 SaaSInterceptor + * + * @author DeKangLiu + * Date 2024/6/4 14:39 + */ +public class SaaSInterceptor implements AsyncHandlerInterceptor { + + /** + * 之前 + */ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (!(handler instanceof HandlerMethod)){ + return true; + } + + String SaasKey = ServletUtils.getHeader(request, SaaSConstant.SAAS_KEY); + + if (SaasKey==null){ + throw new SaaSException("SaaS非法访问"); + } else { + DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class); + if (!dynamicDataSource.hashKye(SaasKey)){ + throw new SaaSException("SaaS非法访问"); + } + } + DynamicDataSourceHolder.setDynamicDataSourceKey(SaasKey); + return true; + } + + /** + * 之后 + */ + @Override + public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + DynamicDataSourceHolder.removeDynamicDataSourceKey(); + } + +} diff --git a/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/interceptor/WebMvcSaaSConfig.java b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/interceptor/WebMvcSaaSConfig.java new file mode 100644 index 0000000..6642d8f --- /dev/null +++ b/muyu-common/muyu-common-saas/src/main/java/com/muyu/common/saas/interceptor/WebMvcSaaSConfig.java @@ -0,0 +1,31 @@ +package com.muyu.common.saas.interceptor; + +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 拦截器配置 + * + * @author muyu + */ +public class WebMvcSaaSConfig implements WebMvcConfigurer { + /** + * 不需要拦截地址 + */ + public static final String[] excludeUrls = {"/login", "/logout", "/refresh"}; + + @Override + public void addInterceptors (InterceptorRegistry registry) { + registry.addInterceptor(getHeaderInterceptor()) + .addPathPatterns("/**") + .excludePathPatterns(excludeUrls) + .order(-10); + } + + /** + * 自定义请求头拦截器 + */ + public SaaSInterceptor getHeaderInterceptor () { + return new SaaSInterceptor(); + } +} diff --git a/muyu-common/muyu-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-common/muyu-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..de6dd1a --- /dev/null +++ b/muyu-common/muyu-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.muyu.common.saas.interceptor.WebMvcSaaSConfig diff --git a/muyu-common/pom.xml b/muyu-common/pom.xml index 5b58e93..b995e91 100644 --- a/muyu-common/pom.xml +++ b/muyu-common/pom.xml @@ -18,6 +18,7 @@ muyu-common-datascope muyu-common-datasource muyu-common-system + muyu-common-saas muyu-common diff --git a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/ManyDataSource.java b/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/ManyDataSource.java deleted file mode 100644 index 7b551f3..0000000 --- a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/config/ManyDataSource.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.muyu.many.datasource.config; - -import com.muyu.many.datasource.config.factory.DruidDataSourceFactory; -import com.muyu.many.datasource.config.role.DynamicDataSource; -import lombok.extern.log4j.Log4j2; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; - -import java.util.HashMap; -import java.util.Map; - -/** - * 多数据源 ManyDataSource - * - * @author DeKangLiu - * Date 2024/6/3 20:01 - */ -@Configuration -@Log4j2 -public class ManyDataSource { - - @Bean - @Primary - public DynamicDataSource dynamicDataSource(DruidDataSourceFactory druidDataSourceFactory) { - - Map dataSourceMap = new HashMap<>(); - getDataSourceInfoList().forEach(dataSourceInfo -> { - dataSourceMap.put(dataSourceInfo.getKey(), createDataSourceConnection(dataSourceInfo)); - }); - //设置动态数据源 - DynamicDataSource dynamicDataSource = new DynamicDataSource(); -// dynamicDataSource.setDefaultTargetDataSource(masterDataSource()); - dynamicDataSource.setTargetDataSources(dataSourceMap); - //将数据源信息备份在defineTargetDataSources中 - dynamicDataSource.setDefineTargetDataSources(dataSourceMap); - return dynamicDataSource; - } -} diff --git a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/controller/VehicleController.java b/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/controller/VehicleController.java new file mode 100644 index 0000000..fcda1ec --- /dev/null +++ b/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/controller/VehicleController.java @@ -0,0 +1,31 @@ +package com.muyu.many.datasource.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.muyu.common.core.domain.Result; +import com.muyu.many.datasource.config.holder.DynamicDataSourceHolder; +import com.muyu.many.datasource.domain.Vehicle; +import com.muyu.many.datasource.mapper.VehicleMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 车辆控制层 VehicleController + * + * @author DeKangLiu + * Date 2024/6/4 14:08 + */ +@RestController +@RequestMapping("/vehicle") +public class VehicleController { + @Autowired + private VehicleMapper vehicleMapper; + + @GetMapping("/list/all") + public Result> findAll () { + return Result.success(vehicleMapper.selectList(new QueryWrapper<>())); + } +} diff --git a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/domain/Vehicle.java b/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/domain/Vehicle.java new file mode 100644 index 0000000..c2376f7 --- /dev/null +++ b/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/domain/Vehicle.java @@ -0,0 +1,93 @@ +package com.muyu.many.datasource.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.muyu.common.core.annotation.Excel; +import com.muyu.common.core.web.domain.BaseEntity; +import com.muyu.common.security.utils.SecurityUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 车辆录入对象 vehicle + * + * @author muyu + * @date 2024-05-27 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName(value = "vehicle") +public class Vehicle extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 车辆id */ + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + /** 车辆vin */ + private String vin; + + /** 品牌 */ + private String brand; + + /** 型号 */ + private String model; + + /** 生产日期 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private Date productionDate; + + /** 车身类型 */ + private String bodyType; + + /** 车身颜色 */ + private String color; + + /** 发动机排量 */ + private BigDecimal engineCapacity; + + /** 燃油类型 */ + private String fuelType; + + /** 变速器类型 */ + private String transmission; + + /** 驱动方式 */ + private String driveType; + + /** 行驶里程 */ + @Excel(name = "行驶里程") + @ApiModelProperty(name = "行驶里程", value = "行驶里程") + private BigDecimal mileage; + + /** 注册日期 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private Date registrationDate; + + /** 车牌号码 */ + private String licenseNumber; + + /** 持有者 */ + private String holder; + + /** 车辆类型 */ + private String vehicleType; + + +} diff --git a/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/mapper/VehicleMapper.java b/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/mapper/VehicleMapper.java new file mode 100644 index 0000000..250db61 --- /dev/null +++ b/muyu-modules/muyu-many-datasource/src/main/java/com/muyu/many/datasource/mapper/VehicleMapper.java @@ -0,0 +1,14 @@ +package com.muyu.many.datasource.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.many.datasource.domain.Vehicle; + +/** + * 车辆mapper VehicleMapper + * + * @author DeKangLiu + * Date 2024/6/4 14:07 + */ +public interface VehicleMapper extends BaseMapper { + +}