diff --git a/cloud-auth/src/main/resources/bootstrap.yml b/cloud-auth/src/main/resources/bootstrap.yml index 527153a..38c7f2a 100644 --- a/cloud-auth/src/main/resources/bootstrap.yml +++ b/cloud-auth/src/main/resources/bootstrap.yml @@ -4,10 +4,10 @@ server: # nacos线上地址 nacos: - addr: 47.116.173.119:8848 + addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: five + namespace: four # Spring spring: application: diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/SecurityConstants.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/SecurityConstants.java index c862929..0e9b22d 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/SecurityConstants.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/SecurityConstants.java @@ -45,4 +45,9 @@ public class SecurityConstants { * 角色权限 */ public static final String ROLE_PERMISSION = "role_permission"; + + /** + * SAAS请求头的key + */ + public static final String SAAS_KEY = "ent-code"; } diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java index bb59b70..c529d7e 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/constant/ServiceNameConstants.java @@ -20,4 +20,9 @@ public class ServiceNameConstants { * 文件服务的serviceid */ public static final String FILE_SERVICE = "cloud-file"; + + /** + * 智能车联服务 + */ + public static final String SMART_SERVICE = "cloud-smart-car"; } diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java index 5039bc0..9c86969 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/exception/ServiceException.java +++ b/cloud-common/cloud-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; /** @@ -21,7 +21,7 @@ public final class ServiceException extends RuntimeException { /** * 错误明细,内部调试错误 *

- * 和 {@link CommonResult#getDetailMessage()} 一致的设计 + * 和 {CommonResult#getDetailMessage()} 一致的设计 */ private String detailMessage; diff --git a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/JwtUtils.java b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/JwtUtils.java index 62816cb..c94e051 100644 --- a/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/JwtUtils.java +++ b/cloud-common/cloud-common-core/src/main/java/com/muyu/common/core/utils/JwtUtils.java @@ -162,4 +162,15 @@ public class JwtUtils { public static String getValue (Claims claims, String key) { return Convert.toStr(claims.get(key), ""); } + + /** + * 根据身份信息获取SAASKey + * + * @param claims 身份信息 + * + * @return saas_key + */ + public static String getSaasKey(Claims claims) { + return getValue(claims, SecurityConstants.SAAS_KEY); + } } diff --git a/cloud-common/cloud-common-saas/pom.xml b/cloud-common/cloud-common-saas/pom.xml new file mode 100644 index 0000000..60b4041 --- /dev/null +++ b/cloud-common/cloud-common-saas/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + + com.muyu + cloud-common + 3.6.3 + + + cloud-common-saas + + + 17 + 17 + UTF-8 + + + + + + com.muyu + cloud-common-datasource + + + + + com.muyu + cloud-common-security + + + + diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java new file mode 100644 index 0000000..39f7683 --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/ManyDataSource.java @@ -0,0 +1,118 @@ +package com.muyu.cloud.common.many.datasource; + +import cn.hutool.json.JSONObject; +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import com.muyu.cloud.common.many.datasource.constents.DatasourceContent; +import com.muyu.cloud.common.saas.domain.model.EntInfo; +import com.muyu.cloud.common.many.datasource.factory.DruidDataSourceFactory; +import com.muyu.cloud.common.many.datasource.domain.model.DataSourceInfo; +import com.muyu.cloud.common.many.datasource.role.DynamicDataSource; +import com.muyu.cloud.common.saas.exception.SaaSException; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.SpringUtils; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.system.domain.SysFirmUser; +import com.muyu.common.system.domain.SysUser; +import com.muyu.common.system.remote.RemoteUserService; +import lombok.extern.log4j.Log4j2; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.autoconfigure.AutoConfiguration; +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; + +/** + * @Author: DongZeLiang + * @date: 2024/6/3 + * @Description: 多数据源 + * @Version: 1.0 + */ +@Log4j2 +@Component +@AutoConfiguration(before = MybatisPlusAutoConfiguration.class) +public class ManyDataSource implements ApplicationRunner{ + + + private List dataSourceInfoList(){ + RemoteUserService remoteUserService = SpringUtils.getBean(RemoteUserService.class); + Result> tableDataInfoResult = remoteUserService.companyList(); + if (tableDataInfoResult==null){ + throw new SaaSException("saas远调数据源错误"); + } + List data = tableDataInfoResult.getData(); + if (tableDataInfoResult.getCode() ==Result.SUCCESS && data !=null){ + List list = new ArrayList<>(); + for (SysUser row : data) { + list.add( + EntInfo.builder() + .entCode(row.getDatabaseName()) + .ip(DatasourceContent.IP) + .port(DatasourceContent.PORT) + .build() + ); + } + return list; + }else { + log.error("远调数据源错误,远调数据为:{}", JSON.toJSONString(data)); + return null; + } + } +// private List dataPrimarySourceInfoList(){ +// List list = new ArrayList<>(); +// list.add( +// EntInfo.builder() +// .entCode() +// .ip(DatasourceContent.IP) +// .port(DatasourceContent.PORT) +// .build() +// ); +// return list; +// } + + @Bean + public DynamicDataSource dynamicDataSource(DruidDataSourceFactory druidDataSourceFactory) { + // 企业列表 企业CODE,端口,IP + Map dataSourceMap = new HashMap<>(); + dataSourceInfoList() + .stream() + .map(entInfo -> DataSourceInfo.hostAndPortBuild(entInfo.getEntCode(), entInfo.getIp(), entInfo.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; + } + + @Override + public void run(ApplicationArguments args) { + DruidDataSourceFactory druidDataSourceFactory = SpringUtils.getBean(DruidDataSourceFactory.class); + DynamicDataSource dynamicDataSource = SpringUtils.getBean(DynamicDataSource.class); + for (EntInfo entInfo : dataSourceInfoList()) { + DataSourceInfo dataSourceInfo = DataSourceInfo.hostAndPortBuild( + entInfo.getEntCode(), entInfo.getIp(), entInfo.getPort() + ); + DruidDataSource druidDataSource = druidDataSourceFactory.create(dataSourceInfo); + dynamicDataSource.put(dataSourceInfo.getKey(), druidDataSource); + log.info("存储数据连接池为:key:{}",dataSourceInfo.getKey()); + } + } + +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java new file mode 100644 index 0000000..b69b858 --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/constents/DatasourceContent.java @@ -0,0 +1,19 @@ +package com.muyu.cloud.common.many.datasource.constents; + +/** + * @author DongZl + * @description: 数据源常量 + * @Date 2023-8-1 上午 11:02 + */ +public class DatasourceContent { + + public final static String DATASOURCE_URL = "jdbc:mysql://{}:{}/{}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; + + public final static String USER_NAME = "root"; + + public final static String PASSWORD = "Lw030106"; + + public final static String IP = "47.101.53.251"; + + public final static Integer PORT = 3306; +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java new file mode 100644 index 0000000..73cc26e --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/domain/model/DataSourceInfo.java @@ -0,0 +1,50 @@ +package com.muyu.cloud.common.many.datasource.domain.model; + +import com.muyu.cloud.common.many.datasource.constents.DatasourceContent; +import com.muyu.common.core.utils.StringUtils; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author DongZl + * @description: 数据源实体类 + * @Date 2023-8-1 上午 11:15 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DataSourceInfo { + + /** + * 键 + */ + private String key; + + /** + * 地址 + */ + private String url; + + /** + * 用户名 + */ + private String userName; + + /** + * 密码 + */ + private String password; + + + public static DataSourceInfo hostAndPortBuild(String key, String host, Integer port) { + return DataSourceInfo.builder() + .key(key) + .url(StringUtils.format(DatasourceContent.DATASOURCE_URL, host, port, key)) + .password(DatasourceContent.PASSWORD) + .userName(DatasourceContent.USER_NAME) + .build(); + } +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java new file mode 100644 index 0000000..7ceb782 --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/factory/DruidDataSourceFactory.java @@ -0,0 +1,40 @@ +package com.muyu.cloud.common.many.datasource.factory; + +import com.alibaba.druid.pool.DruidDataSource; +import com.muyu.cloud.common.many.datasource.domain.model.DataSourceInfo; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Component; + +import java.sql.SQLException; + +/** + * @Author: DongZeLiang + * @date: 2024/6/3 + * @Description: Druid工厂 + * @Version: 1.0 + */ +@Log4j2 +@Component +public class DruidDataSourceFactory { + + /** + * @Description: 根据传递的数据源信息测试数据库连接 + * @Author Dongzl + */ + public DruidDataSource create(DataSourceInfo dataSourceInfo) { + DruidDataSource druidDataSource = new DruidDataSource(); + druidDataSource.setUrl(dataSourceInfo.getUrl()); + druidDataSource.setUsername(dataSourceInfo.getUserName()); + druidDataSource.setPassword(dataSourceInfo.getPassword()); + druidDataSource.setBreakAfterAcquireFailure(true); + druidDataSource.setConnectionErrorRetryAttempts(0); + try { + druidDataSource.getConnection(2000); + log.info("{} -> 数据源连接成功", dataSourceInfo.getKey()); + return druidDataSource; + } catch (SQLException throwables) { + log.error("数据源 {} 连接失败,用户名:{},密码 {}",dataSourceInfo.getUrl(),dataSourceInfo.getUserName(),dataSourceInfo.getPassword()); + return null; + } + } +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java new file mode 100644 index 0000000..e53229a --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/holder/DynamicDataSourceHolder.java @@ -0,0 +1,42 @@ +package com.muyu.cloud.common.many.datasource.holder; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.Assert; + +/** + * 数据源切换处理 + * + * @author Dongzl + */ +@Slf4j +public class DynamicDataSourceHolder { + /** + * 保存动态数据源名称 + */ + private static final ThreadLocal DYNAMIC_DATASOURCE_KEY = new ThreadLocal<>(); + + /** + * 设置/切换数据源,决定当前线程使用哪个数据源 + */ + public static void setDynamicDataSourceKey(String key){ + log.info("数据源切换为:{}",key); + DYNAMIC_DATASOURCE_KEY.set(key); + } + + /** + * 获取动态数据源名称,默认使用mater数据源 + */ + public static String getDynamicDataSourceKey(){ + String key = DYNAMIC_DATASOURCE_KEY.get(); + Assert.notNull(key, "请携带数据标识"); + return key; + } + + /** + * 移除当前数据源 + */ + public static void removeDynamicDataSourceKey(){ + log.info("移除数据源:{}",DYNAMIC_DATASOURCE_KEY.get()); + DYNAMIC_DATASOURCE_KEY.remove(); + } +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/role/DynamicDataSource.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/role/DynamicDataSource.java new file mode 100644 index 0000000..6ac17cb --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/many/datasource/role/DynamicDataSource.java @@ -0,0 +1,55 @@ +package com.muyu.cloud.common.many.datasource.role; + +import com.alibaba.druid.pool.DruidDataSource; +import com.muyu.cloud.common.many.datasource.holder.DynamicDataSourceHolder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +import java.util.Map; + +/** + * 动态数据源 + * 调用AddDefineDataSource组件的addDefineDynamicDataSource()方法,获取原来targetdatasources的map,并将新的数据源信息添加到map中,并替换targetdatasources中的map + * 切换数据源时可以使用@DataSource(value = "数据源名称"),或者DynamicDataSourceContextHolder.setContextKey("数据源名称") + * @author Dongzl + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DynamicDataSource extends AbstractRoutingDataSource { + /** + * 备份所有数据源信息 备份的是个 指针 !!! + */ + private Map defineTargetDataSources; + + /** + * 判定键是否出站了 + * @param key 键 + * @return 存在结果 true存在 false不存在 + */ + public boolean hashKey(String key){ + return defineTargetDataSources.containsKey(key); + } + + /** + * 添加数据库 + * @param key 键 + * @param value 数据源 + */ + public void put(String key, DruidDataSource value) { + defineTargetDataSources.put(key, value); + this.afterPropertiesSet(); + } + + /** + * 决定当前线程使用哪个数据源 + */ + @Override + protected Object determineCurrentLookupKey() { + return DynamicDataSourceHolder.getDynamicDataSourceKey(); + } +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java new file mode 100644 index 0000000..241ce32 --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/contents/SaaSConstant.java @@ -0,0 +1,12 @@ +package com.muyu.cloud.common.saas.contents; + +/** + * @Author: DongZeLiang + * @date: 2024/6/3 + * @Description: SAAS常量 + * @Version: 1.0 + */ +public class SaaSConstant { + + public final static String SAAS_KEY = "ent-code"; +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java new file mode 100644 index 0000000..5c1985a --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/domain/model/EntInfo.java @@ -0,0 +1,25 @@ +package com.muyu.cloud.common.saas.domain.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: DongZeLiang + * @date: 2024/6/3 + * @Description: 企业信息 + * @Version: 1.0 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EntInfo { + + private String entCode; + + private String ip; + + private Integer port; +} diff --git a/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java new file mode 100644 index 0000000..b2b4cc7 --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/exception/SaaSException.java @@ -0,0 +1,28 @@ +package com.muyu.cloud.common.saas.exception; + + +import com.muyu.common.core.exception.ServiceException; + +/** + * @Author: DongZeLiang + * @date: 2024/6/3 + * @Description: SaaS异常类 + * @Version: 1.0 + */ +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/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java new file mode 100644 index 0000000..0efef00 --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/SaaSInterceptor.java @@ -0,0 +1,53 @@ +package com.muyu.cloud.common.saas.interceptor; + +import com.alibaba.fastjson2.JSONObject; +import com.muyu.cloud.common.saas.contents.SaaSConstant; +import com.muyu.cloud.common.many.datasource.holder.DynamicDataSourceHolder; +import com.muyu.cloud.common.saas.exception.SaaSException; +import com.muyu.cloud.common.many.datasource.role.DynamicDataSource; +import com.muyu.common.core.utils.ServletUtils; +import com.muyu.common.core.utils.SpringUtils; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.AsyncHandlerInterceptor; + + +/** + * @Author: DongZeLiang + * @date: 2024/6/3 + * @Description: SAAS拦截器 + * @Version: 1.0 + */ +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.hashKey(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/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/WebMvcSaaSConfig.java b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/WebMvcSaaSConfig.java new file mode 100644 index 0000000..4c79417 --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/java/com/muyu/cloud/common/saas/interceptor/WebMvcSaaSConfig.java @@ -0,0 +1,31 @@ +package com.muyu.cloud.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/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..70148cf --- /dev/null +++ b/cloud-common/cloud-common-saas/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,3 @@ +com.muyu.cloud.common.saas.interceptor.WebMvcSaaSConfig +com.muyu.cloud.common.many.datasource.ManyDataSource +com.muyu.cloud.common.many.datasource.factory.DruidDataSourceFactory diff --git a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/service/TokenService.java b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/service/TokenService.java index 3955ddc..cb5c6d0 100644 --- a/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/service/TokenService.java +++ b/cloud-common/cloud-common-security/src/main/java/com/muyu/common/security/service/TokenService.java @@ -55,7 +55,7 @@ public class TokenService { claimsMap.put(SecurityConstants.USER_KEY, token); claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); - + claimsMap.put(SecurityConstants.SAAS_KEY,loginUser.getSysUser().getDatabaseName()); // 接口返回信息 Map rspMap = new HashMap(); rspMap.put("access_token", JwtUtils.createToken(claimsMap)); diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysFirmUser.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysFirmUser.java new file mode 100644 index 0000000..0bba83a --- /dev/null +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysFirmUser.java @@ -0,0 +1,25 @@ +package com.muyu.common.system.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @Author WangXin + * @Data 2024/9/18 + * @Description 企业用户 + * @Version 1.0.0 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +public class SysFirmUser extends SysUser { + /** + * 用户数据库 + */ + private String databaseName; +} diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java index 999b22c..1c8fc9c 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/domain/SysUser.java @@ -135,6 +135,11 @@ public class SysUser extends BaseEntity { */ private Long roleId; + /** + * 数据库名称 + */ + private String databaseName; + public SysUser (Long userId) { this.userId = userId; } diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java index cb968e0..3dc4521 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/RemoteUserService.java @@ -3,12 +3,16 @@ package com.muyu.common.system.remote; import com.muyu.common.core.constant.SecurityConstants; import com.muyu.common.core.constant.ServiceNameConstants; import com.muyu.common.core.domain.Result; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.system.domain.SysFirmUser; import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.remote.factory.RemoteUserFallbackFactory; import com.muyu.common.system.domain.LoginUser; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * 用户服务 * @@ -37,4 +41,7 @@ public interface RemoteUserService { */ @PostMapping("/user/register") public Result registerUserInfo (@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); + + @GetMapping("/user/companyList") + public Result> companyList (); } diff --git a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java index b7f4d60..071490a 100644 --- a/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java +++ b/cloud-common/cloud-common-system/src/main/java/com/muyu/common/system/remote/factory/RemoteUserFallbackFactory.java @@ -1,6 +1,8 @@ package com.muyu.common.system.remote.factory; import com.muyu.common.core.domain.Result; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.system.domain.SysFirmUser; import com.muyu.common.system.remote.RemoteUserService; import com.muyu.common.system.domain.SysUser; import com.muyu.common.system.domain.LoginUser; @@ -9,6 +11,8 @@ import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; +import java.util.List; + /** * 用户服务降级处理 * @@ -31,6 +35,12 @@ public class RemoteUserFallbackFactory implements FallbackFactory registerUserInfo (SysUser sysUser, String source) { return Result.error("注册用户失败:" + throwable.getMessage()); } + + @Override + public Result> companyList() { + return Result.error("获取企业列表失败:" + throwable.getMessage()); + } + }; } } diff --git a/cloud-common/pom.xml b/cloud-common/pom.xml index d00dfc6..a7a40be 100644 --- a/cloud-common/pom.xml +++ b/cloud-common/pom.xml @@ -20,6 +20,7 @@ cloud-common-system cloud-common-xxl cloud-common-rabbit + cloud-common-saas cloud-common diff --git a/cloud-gateway/pom.xml b/cloud-gateway/pom.xml index 106c740..8aa98ed 100644 --- a/cloud-gateway/pom.xml +++ b/cloud-gateway/pom.xml @@ -81,7 +81,6 @@ knife4j-gateway-spring-boot-starter 4.5.0 - diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/filter/AuthFilter.java b/cloud-gateway/src/main/java/com/muyu/gateway/filter/AuthFilter.java index 47e073f..bda6f2f 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/filter/AuthFilter.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/filter/AuthFilter.java @@ -63,6 +63,7 @@ public class AuthFilter implements GlobalFilter, Ordered { } String userid = JwtUtils.getUserId(claims); String username = JwtUtils.getUserName(claims); + String saasKey = JwtUtils.getSaasKey(claims); if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) { return unauthorizedResponse(exchange, "令牌验证失败"); } @@ -71,6 +72,7 @@ public class AuthFilter implements GlobalFilter, Ordered { addHeader(mutate, SecurityConstants.USER_KEY, userkey); addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid); addHeader(mutate, SecurityConstants.DETAILS_USERNAME, username); + addHeader(mutate,SecurityConstants.SAAS_KEY,saasKey); // 内部请求来源参数清除 removeHeader(mutate, SecurityConstants.FROM_SOURCE); return chain.filter(exchange.mutate().request(mutate.build()).build()); diff --git a/cloud-gateway/src/main/java/com/muyu/gateway/utils/WebFrameworkUtils.java b/cloud-gateway/src/main/java/com/muyu/gateway/utils/WebFrameworkUtils.java index 2443e13..68b0a19 100644 --- a/cloud-gateway/src/main/java/com/muyu/gateway/utils/WebFrameworkUtils.java +++ b/cloud-gateway/src/main/java/com/muyu/gateway/utils/WebFrameworkUtils.java @@ -4,8 +4,6 @@ import cn.hutool.core.net.NetUtil; import cn.hutool.core.util.ArrayUtil; import com.alibaba.fastjson2.JSONObject; import lombok.extern.log4j.Log4j2; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.cloud.gateway.route.Route; import org.springframework.cloud.gateway.support.ServerWebExchangeUtils; import org.springframework.core.io.buffer.DataBufferFactory; @@ -18,8 +16,6 @@ import reactor.core.publisher.Mono; /** * Web 工具类 - * - * */ @Log4j2 public class WebFrameworkUtils { @@ -72,8 +68,6 @@ public class WebFrameworkUtils { /** * 获得客户端 IP - * - * * @param exchange 请求 * @param otherHeaderNames 其它 header 名字的数组 * @return 客户端 IP @@ -91,7 +85,6 @@ public class WebFrameworkUtils { return NetUtil.getMultistageReverseProxyIp(ip); } } - // 方式二,通过 remoteAddress 获取 if (exchange.getRequest().getRemoteAddress() == null) { return null; @@ -102,7 +95,6 @@ public class WebFrameworkUtils { /** * 获得请求匹配的 Route 路由 - * * @param exchange 请求 * @return 路由 */ diff --git a/cloud-gateway/src/main/resources/bootstrap.yml b/cloud-gateway/src/main/resources/bootstrap.yml index 3f316fe..cf1cc9f 100644 --- a/cloud-gateway/src/main/resources/bootstrap.yml +++ b/cloud-gateway/src/main/resources/bootstrap.yml @@ -4,10 +4,10 @@ server: # nacos线上地址 nacos: - addr: 47.116.173.119:8848 + addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: five + namespace: four # Spring spring: diff --git a/cloud-modules/cloud-car/pom.xml b/cloud-modules/cloud-car/pom.xml new file mode 100644 index 0000000..35cb0d7 --- /dev/null +++ b/cloud-modules/cloud-car/pom.xml @@ -0,0 +1,99 @@ + + + 4.0.0 + + com.muyu + cloud-modules + 3.6.3 + + + cloud-car + + + 17 + 17 + UTF-8 + + + + + + com.muyu + cloud-common-saas + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + cloud-common-datasource + + + + + com.muyu + cloud-common-datascope + + + + + com.muyu + cloud-common-log + + + + + com.muyu + cloud-common-api-doc + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + diff --git a/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/CarApplication.java b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/CarApplication.java new file mode 100644 index 0000000..0f333df --- /dev/null +++ b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/CarApplication.java @@ -0,0 +1,25 @@ +package com.muyu.cloud.car; + +import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; +import com.muyu.common.security.annotation.EnableCustomConfig; +import com.muyu.common.security.annotation.EnableMyFeignClients; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +@EnableCustomConfig +//@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication( + exclude = { + DataSourceAutoConfiguration.class, + DruidDataSourceAutoConfigure.class, + DynamicDataSourceAutoConfiguration.class + } +) +public class CarApplication { + public static void main(String[] args) { + SpringApplication.run(CarApplication.class, args); + } +} diff --git a/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/controller/CarController.java b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/controller/CarController.java new file mode 100644 index 0000000..941a794 --- /dev/null +++ b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/controller/CarController.java @@ -0,0 +1,30 @@ +package com.muyu.cloud.car.controller; + +import com.muyu.cloud.car.domain.User; +import com.muyu.cloud.car.service.CarService; +import com.muyu.common.core.web.controller.BaseController; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author WangXin + * @Data 2024/9/19 + * @Description 车控制层 + * @Version 1.0.0 + */ +@RestController +@RequestMapping("/test") +public class CarController extends BaseController { + + @Resource + private CarService carService; + + @GetMapping("/sel") + public List sel() { + return carService.list(); + } +} diff --git a/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/domain/User.java b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/domain/User.java new file mode 100644 index 0000000..e8ae3cf --- /dev/null +++ b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/domain/User.java @@ -0,0 +1,28 @@ +package com.muyu.cloud.car.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author WangXin + * @Data 2024/9/19 + * @Description + * @Version 1.0.0 + */ +@TableName("user") +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class User { + + @TableId(type = IdType.AUTO) + private Integer userId; + + private String userName; +} diff --git a/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/mapper/CarMapper.java b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/mapper/CarMapper.java new file mode 100644 index 0000000..15ff31e --- /dev/null +++ b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/mapper/CarMapper.java @@ -0,0 +1,20 @@ +package com.muyu.cloud.car.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.cloud.car.domain.User; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * @Author WangXin + * @Data 2024/9/19 + * @Description + * @Version 1.0.0 + */ +public interface CarMapper extends BaseMapper { + + List selectMyList(); + + +} diff --git a/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/service/CarService.java b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/service/CarService.java new file mode 100644 index 0000000..21f47ce --- /dev/null +++ b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/service/CarService.java @@ -0,0 +1,19 @@ +package com.muyu.cloud.car.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.cloud.car.domain.User; + +import java.util.List; + +/** + * @Author WangXin + * @Data 2024/9/19 + * @Description + * @Version 1.0.0 + */ +public interface CarService extends IService { + + List selectList(); + + +} diff --git a/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/service/impl/CarServiceImpl.java b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/service/impl/CarServiceImpl.java new file mode 100644 index 0000000..3d7446e --- /dev/null +++ b/cloud-modules/cloud-car/src/main/java/com/muyu/cloud/car/service/impl/CarServiceImpl.java @@ -0,0 +1,28 @@ +package com.muyu.cloud.car.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.cloud.car.domain.User; +import com.muyu.cloud.car.mapper.CarMapper; +import com.muyu.cloud.car.service.CarService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @Author WangXin + * @Data 2024/9/19 + * @Description + * @Version 1.0.0 + */ +@Service +public class CarServiceImpl extends ServiceImpl implements CarService { + + @Resource + private CarMapper carMapper; + + @Override + public List selectList() { + return carMapper.selectMyList(); + } +} diff --git a/cloud-modules/cloud-car/src/main/resources/banner.txt b/cloud-modules/cloud-car/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/cloud-modules/cloud-car/src/main/resources/banner.txt @@ -0,0 +1,2 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} diff --git a/cloud-modules/cloud-car/src/main/resources/bootstrap.yml b/cloud-modules/cloud-car/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..e99b9c3 --- /dev/null +++ b/cloud-modules/cloud-car/src/main/resources/bootstrap.yml @@ -0,0 +1,58 @@ +# Tomcat +server: + port: 49701 + +# nacos线上地址 +nacos: + addr: 47.101.53.251:8848 + user-name: nacos + password: nacos + namespace: four +# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all +# Spring +spring: + amqp: + deserialization: + trust: + all: true + main: + allow-bean-definition-overriding: true + application: + # 应用名称 + name: cloud-saas + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + config: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + # 系统共享配置 + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # 系统环境Config共享配置 + - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + + +logging: + level: + com.muyu.cloud.mapper: DEBUG diff --git a/cloud-modules/cloud-car/src/main/resources/logback/dev.xml b/cloud-modules/cloud-car/src/main/resources/logback/dev.xml new file mode 100644 index 0000000..621579c --- /dev/null +++ b/cloud-modules/cloud-car/src/main/resources/logback/dev.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-car/src/main/resources/logback/prod.xml b/cloud-modules/cloud-car/src/main/resources/logback/prod.xml new file mode 100644 index 0000000..2419bf9 --- /dev/null +++ b/cloud-modules/cloud-car/src/main/resources/logback/prod.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-car/src/main/resources/logback/test.xml b/cloud-modules/cloud-car/src/main/resources/logback/test.xml new file mode 100644 index 0000000..2419bf9 --- /dev/null +++ b/cloud-modules/cloud-car/src/main/resources/logback/test.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-car/src/main/resources/mapper/car/CarMapper.xml b/cloud-modules/cloud-car/src/main/resources/mapper/car/CarMapper.xml new file mode 100644 index 0000000..06f84c1 --- /dev/null +++ b/cloud-modules/cloud-car/src/main/resources/mapper/car/CarMapper.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/cloud-modules/cloud-modules-fence/pom.xml b/cloud-modules/cloud-modules-fence/pom.xml new file mode 100644 index 0000000..f79d952 --- /dev/null +++ b/cloud-modules/cloud-modules-fence/pom.xml @@ -0,0 +1,104 @@ + + + + com.muyu + cloud-modules + 3.6.3 + + + 4.0.0 + + cloud-modules-fence + + + cloud-modules-fence + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + cloud-common-datasource + + + + + com.muyu + cloud-common-datascope + + + + + com.muyu + cloud-common-log + + + + + com.muyu + cloud-common-api-doc + + + + + com.muyu + cloud-common-xxl + + + + com.muyu + cloud-common-rabbit + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + diff --git a/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/FenceApplication.java b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/FenceApplication.java new file mode 100644 index 0000000..1f010ec --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/FenceApplication.java @@ -0,0 +1,19 @@ +package com.muyu.fence; + +import com.muyu.common.security.annotation.EnableMyFeignClients; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @Author YuPing + * @Description 电子围栏启动类 + * @Version 1.0 + * @Data 2024-09-18 11:27:38 + */ +@SpringBootApplication +@EnableMyFeignClients +public class FenceApplication { + public static void main(String[] args) { + SpringApplication.run(FenceApplication.class, args); + } +} diff --git a/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/controller/TbFenceController.java b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/controller/TbFenceController.java new file mode 100644 index 0000000..866e962 --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/controller/TbFenceController.java @@ -0,0 +1,112 @@ +package com.muyu.fence.controller; + +import java.util.Arrays; +import java.util.List; +import jakarta.servlet.http.HttpServletResponse; +import javax.annotation.Resource; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.fence.domain.TbFence; +import com.muyu.fence.service.ITbFenceService; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.security.utils.SecurityUtils; +import org.springframework.validation.annotation.Validated; +import com.muyu.common.core.web.page.TableDataInfo; + +/** + * 电子围栏Controller + * + * @author muyu + * @date 2024-09-18 + */ +@RestController +@RequestMapping("/fence") +public class TbFenceController extends BaseController +{ + @Resource + private ITbFenceService tbFenceService; + + /** + * 查询电子围栏列表 + */ + @RequiresPermissions("fence:fence:list") + @GetMapping("/list") + public Result> list(TbFence tbFence) + { + startPage(); + List list = tbFenceService.selectTbFenceList(tbFence); + return getDataTable(list); + } + + /** + * 导出电子围栏列表 + */ + @RequiresPermissions("fence:fence:export") + @PostMapping("/export") + public void export(HttpServletResponse response, TbFence tbFence) + { + List list = tbFenceService.selectTbFenceList(tbFence); + ExcelUtil util = new ExcelUtil(TbFence.class); + util.exportExcel(response, list, "电子围栏数据"); + } + + /** + * 获取电子围栏详细信息 + */ + @RequiresPermissions("fence:fence:query") + @GetMapping(value = "/{fenceId}") + public Result> getInfo(@PathVariable("fenceId") Long fenceId) + { + return success(tbFenceService.selectTbFenceByFenceId(fenceId)); + } + + /** + * 新增电子围栏 + */ + @RequiresPermissions("fence:fence:add") + @PostMapping + public Result add( + @Validated @RequestBody TbFence tbFence) + { + if (tbFenceService.checkIdUnique(tbFence)) { + return error("新增 电子围栏 '" + tbFence + "'失败,电子围栏已存在"); + } + tbFence.setCreateBy(SecurityUtils.getUsername()); + return toAjax(tbFenceService.save(tbFence)); + } + + /** + * 修改电子围栏 + */ + @RequiresPermissions("fence:fence:edit") + @PutMapping + public Result edit( + @Validated @RequestBody TbFence tbFence) + { + if (!tbFenceService.checkIdUnique(tbFence)) { + return error("修改 电子围栏 '" + tbFence + "'失败,电子围栏不存在"); + } + tbFence.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(tbFenceService.updateById(tbFence)); + } + + /** + * 删除电子围栏 + */ + @RequiresPermissions("fence:fence:remove") + @DeleteMapping("/{fenceIds}") + public Result remove(@PathVariable("fenceIds") Long[] fenceIds) + { + tbFenceService.removeBatchByIds(Arrays.asList(fenceIds)); + return success(); + } +} diff --git a/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/domain/TbFence.java b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/domain/TbFence.java new file mode 100644 index 0000000..2153b43 --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/domain/TbFence.java @@ -0,0 +1,72 @@ +package com.muyu.fence.domain; + +import com.muyu.common.core.annotation.Excel; +import com.muyu.common.core.web.domain.BaseEntity; +import lombok.*; +import lombok.experimental.SuperBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; + +/** + * 电子围栏对象 tb_fence + * + * @author muyu + * @date 2024-09-18 + */ + +@Data +@Setter +@Getter +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("tb_fence") +public class TbFence extends BaseEntity{ + private static final long serialVersionUID = 1L; + + /** 围栏编号 */ + @TableId( type = IdType.AUTO) + private Long fenceId; + + /** 围栏名称 */ + @Excel(name = "围栏名称") + private String fenceName; + + /** 围栏类型1.驶入2驶出 */ + @Excel(name = "围栏类型1.驶入2驶出") + private Long fenceType; + + /** 围栏状态1.正常2.停用 */ + @Excel(name = "围栏状态1.正常2.停用") + private Long fenceFlag; + + /** 经纬度信息 */ + @Excel(name = "经纬度信息") + private String longitudeAndLatitudeInformation; + + /** 优先级 */ + @Excel(name = "优先级") + private Long fencePriority; + + + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("fenceId", getFenceId()) + .append("fenceName", getFenceName()) + .append("fenceType", getFenceType()) + .append("fenceFlag", getFenceFlag()) + .append("longitudeAndLatitudeInformation", getLongitudeAndLatitudeInformation()) + .append("fencePriority", getFencePriority()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/mapper/TbFenceMapper.java b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/mapper/TbFenceMapper.java new file mode 100644 index 0000000..09ed802 --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/mapper/TbFenceMapper.java @@ -0,0 +1,17 @@ +package com.muyu.fence.mapper; + +import java.util.List; +import com.muyu.fence.domain.TbFence; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + +/** + * 电子围栏Mapper接口 + * + * @author muyu + * @date 2024-09-18 + */ +@Mapper +public interface TbFenceMapper extends BaseMapper{ + +} diff --git a/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/service/ITbFenceService.java b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/service/ITbFenceService.java new file mode 100644 index 0000000..31ad8ff --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/service/ITbFenceService.java @@ -0,0 +1,37 @@ +package com.muyu.fence.service; + +import java.util.List; +import com.muyu.fence.domain.TbFence; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 电子围栏Service接口 + * + * @author muyu + * @date 2024-09-18 + */ +public interface ITbFenceService extends IService { + /** + * 精确查询电子围栏 + * + * @param fenceId 电子围栏主键 + * @return 电子围栏 + */ + public TbFence selectTbFenceByFenceId(Long fenceId); + + /** + * 查询电子围栏列表 + * + * @param tbFence 电子围栏 + * @return 电子围栏集合 + */ + public List selectTbFenceList(TbFence tbFence); + + /** + * 判断 电子围栏 id是否唯一 + * @param tbFence 电子围栏 + * @return 结果 + */ + Boolean checkIdUnique(TbFence tbFence); + +} diff --git a/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/service/impl/TbFenceServiceImpl.java b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/service/impl/TbFenceServiceImpl.java new file mode 100644 index 0000000..db2042b --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/java/com/muyu/fence/service/impl/TbFenceServiceImpl.java @@ -0,0 +1,80 @@ +package com.muyu.fence.service.impl; + +import java.util.List; +import org.springframework.stereotype.Service; +import com.muyu.fence.mapper.TbFenceMapper; +import com.muyu.fence.domain.TbFence; +import com.muyu.fence.service.ITbFenceService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.utils.StringUtils; +import org.springframework.util.Assert; + +/** + * 电子围栏Service业务层处理 + * + * @author muyu + * @date 2024-09-18 + */ +@Service +public class TbFenceServiceImpl + extends ServiceImpl + implements ITbFenceService { + + /** + * 精确查询电子围栏 + * + * @param fenceId 电子围栏主键 + * @return 电子围栏 + */ + @Override + public TbFence selectTbFenceByFenceId(Long fenceId) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Assert.notNull(fenceId, "fenceId不可为空"); + queryWrapper.eq(TbFence::getFenceId, fenceId); + return this.getOne(queryWrapper); + } + + + /** + * 查询电子围栏列表 + * + * @param tbFence 电子围栏 + * @return 电子围栏 + */ + @Override + public List selectTbFenceList(TbFence tbFence) + { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(tbFence.getFenceName())){ + queryWrapper.like(TbFence::getFenceName, tbFence.getFenceName()); + } + if (tbFence.getFenceType()!=null){ + queryWrapper.eq(TbFence::getFenceType, tbFence.getFenceType()); + } + if (tbFence.getFenceFlag()!=null){ + queryWrapper.eq(TbFence::getFenceFlag, tbFence.getFenceFlag()); + } + if (StringUtils.isNotEmpty(tbFence.getLongitudeAndLatitudeInformation())){ + queryWrapper.eq(TbFence::getLongitudeAndLatitudeInformation, tbFence.getLongitudeAndLatitudeInformation()); + } + if (tbFence.getFencePriority()!=null){ + queryWrapper.eq(TbFence::getFencePriority, tbFence.getFencePriority()); + } + return this.list(queryWrapper); + } + + /** + * 唯一 判断 + * @param tbFence 电子围栏 + * @return 电子围栏 + */ + @Override + public Boolean checkIdUnique(TbFence tbFence) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(TbFence::getFenceId, tbFence.getFenceId()); + return this.count(queryWrapper) > 0; + } + +} diff --git a/cloud-modules/cloud-modules-fence/src/main/resources/banner.txt b/cloud-modules/cloud-modules-fence/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/resources/banner.txt @@ -0,0 +1,2 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} diff --git a/cloud-modules/cloud-modules-fence/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-fence/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..fb6d824 --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/resources/bootstrap.yml @@ -0,0 +1,60 @@ +# Tomcat +server: + port: 10003 + +# nacos线上地址 +nacos: + addr: 47.101.53.251:8848 + user-name: nacos + password: nacos + namespace: four +# SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all +# Spring +spring: + amqp: + deserialization: + trust: + all: true + main: + allow-bean-definition-overriding: true + application: + # 应用名称 + name: cloud-fence + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + config: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + # 命名空间 + namespace: ${nacos.namespace} + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + # 系统共享配置 + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # 系统环境Config共享配置 + - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # xxl-job 配置文件 + - application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # rabbit 配置文件 + - application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.muyu.fence.mapper: DEBUG diff --git a/cloud-modules/cloud-modules-fence/src/main/resources/logback/dev.xml b/cloud-modules/cloud-modules-fence/src/main/resources/logback/dev.xml new file mode 100644 index 0000000..ecc609b --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/resources/logback/dev.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-fence/src/main/resources/logback/prod.xml b/cloud-modules/cloud-modules-fence/src/main/resources/logback/prod.xml new file mode 100644 index 0000000..e38e33c --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/resources/logback/prod.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-fence/src/main/resources/logback/test.xml b/cloud-modules/cloud-modules-fence/src/main/resources/logback/test.xml new file mode 100644 index 0000000..e38e33c --- /dev/null +++ b/cloud-modules/cloud-modules-fence/src/main/resources/logback/test.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml index 83d76b8..cb7e8d5 100644 --- a/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-file/src/main/resources/bootstrap.yml @@ -1,13 +1,13 @@ # Tomcat server: - port: 9300 + port: 9301 # nacos线上地址 nacos: - addr: 47.116.173.119:8848 + addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: five + namespace: four # Spring spring: diff --git a/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml index e235682..0b7bdc1 100644 --- a/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-gen/src/main/resources/bootstrap.yml @@ -4,10 +4,10 @@ server: # nacos线上地址 nacos: - addr: 47.116.173.119:8848 + addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: five + namespace: four # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring spring: diff --git a/cloud-modules/cloud-modules-system/pom.xml b/cloud-modules/cloud-modules-system/pom.xml index 4116679..8849251 100644 --- a/cloud-modules/cloud-modules-system/pom.xml +++ b/cloud-modules/cloud-modules-system/pom.xml @@ -77,10 +77,6 @@ cloud-common-xxl - - com.muyu - cloud-common-rabbit - diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/CloudSystemApplication.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/CloudSystemApplication.java index b01e5db..71f78fc 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/CloudSystemApplication.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/CloudSystemApplication.java @@ -1,9 +1,11 @@ package com.muyu.system; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; import com.muyu.common.security.annotation.EnableCustomConfig; import com.muyu.common.security.annotation.EnableMyFeignClients; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; /** * 系统模块 diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java index bc0b5fe..c42efa6 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/controller/SysUserController.java @@ -67,6 +67,12 @@ public class SysUserController extends BaseController { return getDataTable(list); } + @GetMapping("/companyList") + public Result> companyList () { + List list = userService.selectCompanyList(); + return Result.success(list); + } + @Log(title = "用户管理", businessType = BusinessType.EXPORT) @RequiresPermissions("system:user:export") @PostMapping("/export") diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java index e037b34..6c8b271 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/mapper/SysUserMapper.java @@ -139,4 +139,7 @@ public interface SysUserMapper extends BaseMapper { * @return 结果 */ public SysUser checkEmailUnique (String email); + + List selectCompanyList(); + } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/rabbit/RabbitTest.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/rabbit/RabbitTest.java index 791711f..82c1c25 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/rabbit/RabbitTest.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/rabbit/RabbitTest.java @@ -1,53 +1,53 @@ -package com.muyu.system.rabbit; - -import com.alibaba.fastjson2.JSONObject; -import com.muyu.system.domain.SysConfig; -import jakarta.annotation.PostConstruct; -import lombok.extern.log4j.Log4j2; -import org.springframework.amqp.core.Queue; -import org.springframework.amqp.rabbit.annotation.RabbitHandler; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@Log4j2 -@RestController -@RequestMapping("/rabbit/test") -public class RabbitTest { - - @Autowired - private RabbitTemplate rabbitTemplate; - - @Bean - public Queue initQueue(){ - return new Queue("rabbit.test.init"); - } - - @RabbitListener(queues = "rabbit.test.init") - public void msg(SysConfig sysConfig){ - log.info("消息队列:[{}], 消息内容:[{}]", "rabbit.test.init", JSONObject.toJSONString(sysConfig)); - } - - @PostConstruct - public void init(){ - new Thread(() -> { - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - SysConfig sysConfig = SysConfig.builder() - .configId(1L) - .configKey("ceshi-key") - .configName("测试名称") - .configType("测试类型") - .configValue("测试值") - .build(); - rabbitTemplate.convertAndSend("rabbit.test.init",sysConfig); - }).start(); - } - -} +//package com.muyu.system.rabbit; +// +//import com.alibaba.fastjson2.JSONObject; +//import com.muyu.system.domain.SysConfig; +//import jakarta.annotation.PostConstruct; +//import lombok.extern.log4j.Log4j2; +//import org.springframework.amqp.core.Queue; +//import org.springframework.amqp.rabbit.annotation.RabbitHandler; +//import org.springframework.amqp.rabbit.annotation.RabbitListener; +//import org.springframework.amqp.rabbit.core.RabbitTemplate; +//import org.springframework.beans.factory.annotation.Autowired; +//import org.springframework.context.annotation.Bean; +//import org.springframework.web.bind.annotation.RequestMapping; +//import org.springframework.web.bind.annotation.RestController; +// +//@Log4j2 +//@RestController +//@RequestMapping("/rabbit/test") +//public class RabbitTest { +// +// @Autowired +// private RabbitTemplate rabbitTemplate; +// +// @Bean +// public Queue initQueue(){ +// return new Queue("rabbit.test.init"); +// } +// +// @RabbitListener(queues = "rabbit.test.init") +// public void msg(SysConfig sysConfig){ +// log.info("消息队列:[{}], 消息内容:[{}]", "rabbit.test.init", JSONObject.toJSONString(sysConfig)); +// } +// +// @PostConstruct +// public void init(){ +// new Thread(() -> { +// try { +// Thread.sleep(5000); +// } catch (InterruptedException e) { +// throw new RuntimeException(e); +// } +// SysConfig sysConfig = SysConfig.builder() +// .configId(1L) +// .configKey("ceshi-key") +// .configName("测试名称") +// .configType("测试类型") +// .configValue("测试值") +// .build(); +// rabbitTemplate.convertAndSend("rabbit.test.init",sysConfig); +// }).start(); +// } +// +//} diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java index f4c6167..c4b693c 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/SysUserService.java @@ -225,4 +225,7 @@ public interface SysUserService extends IService { * @return 结果 */ public String importUser (List userList, Boolean isUpdateSupport, String operName); + + List selectCompanyList(); + } diff --git a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java index c1d3f18..7bba2ee 100644 --- a/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java +++ b/cloud-modules/cloud-modules-system/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java @@ -500,4 +500,10 @@ public class SysUserServiceImpl extends ServiceImpl impl return successMsg.toString(); } + @Override + public List selectCompanyList() { + + return userMapper.selectCompanyList(); + } + } diff --git a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml index cd8481a..566c624 100644 --- a/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml +++ b/cloud-modules/cloud-modules-system/src/main/resources/bootstrap.yml @@ -4,10 +4,10 @@ server: # nacos线上地址 nacos: - addr: 47.116.173.119:8848 + addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: five + namespace: four # SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true spring.amqp.deserialization.trust.all # Spring spring: @@ -53,8 +53,7 @@ spring: - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} # xxl-job 配置文件 - application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} - # rabbit 配置文件 - - application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + logging: level: com.muyu.system.mapper: DEBUG diff --git a/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml b/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml index 6f633b7..c23843a 100644 --- a/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/cloud-modules/cloud-modules-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -14,6 +14,7 @@ + @@ -57,6 +58,7 @@ u.password, u.sex, u.status, + u.database_name, u.del_flag, u.login_ip, u.login_date, @@ -84,7 +86,7 @@ + + insert into sys_user( user_id, diff --git a/cloud-modules/pom.xml b/cloud-modules/pom.xml index ba0d555..9ed6247 100644 --- a/cloud-modules/pom.xml +++ b/cloud-modules/pom.xml @@ -12,6 +12,9 @@ cloud-modules-system cloud-modules-gen cloud-modules-file + cloud-modules-template + cloud-modules-fence + cloud-car cloud-modules diff --git a/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml b/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml index fb71d03..9ee8251 100644 --- a/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml +++ b/cloud-visual/cloud-visual-monitor/src/main/resources/bootstrap.yml @@ -4,10 +4,10 @@ server: # nacos线上地址 nacos: - addr: 47.116.173.119:8848 + addr: 47.101.53.251:8848 user-name: nacos password: nacos - namespace: five + namespace: four # Spring spring: diff --git a/pom.xml b/pom.xml index b30f0df..addb590 100644 --- a/pom.xml +++ b/pom.xml @@ -42,11 +42,17 @@ 5.8.27 4.1.0 2.4.1 + 4.2.0 + + com.baomidou + dynamic-datasource-spring-boot-starter + ${dynamic.datasource.version} + org.springframework.boot @@ -266,6 +272,12 @@ cloud-common-rabbit ${muyu.version} + + + com.muyu + cloud-common-saas + ${muyu.version} +