Commit 8a670ccb by fengshuonan

更新企业版3.2 升级核心包版本,修复多数据源切换bug

parent 84844ac5
# Guns最新企业版(单体)
\ No newline at end of file
# Guns最新企业版(单体版)
\ No newline at end of file
目前只有单体增强企业版(1599)才有oracle,sql server,pgsql的数据库支持,其他版本不提供!
目前只有单体增强企业版(1599)才有oracle,sql server,pgsql的数据库支持,其他版本不提供!
目前只有单体增强企业版(1599)才有oracle,sql server,pgsql的数据库支持,其他版本不提供!
目前只有单体增强企业版(1599)才有oracle,sql server,pgsql的数据库支持,其他版本不提供!
\ No newline at end of file
......@@ -28,18 +28,6 @@
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>net.sourceforge.jtds</groupId>-->
<!-- <artifactId>jtds</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.oracle</groupId>-->
<!-- <artifactId>ojdbc6</artifactId>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.postgresql</groupId>-->
<!-- <artifactId>postgresql</artifactId>-->
<!-- </dependency>-->
<!--spring boot依赖-->
<dependency>
......
package cn.stylefeng.guns.base.db.collector;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer;
import com.baomidou.mybatisplus.autoconfigure.SpringBootVFS;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.scripting.LanguageDriver;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.TypeHandler;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
......@@ -23,9 +31,15 @@ import org.springframework.util.StringUtils;
import javax.sql.DataSource;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.function.Consumer;
/**
* mybatis的一些配置收集
* <p>
* 本类copy自com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration,改了sqlSessionFactory()
* 主要是为了让多个SqlSessionFactory初始化的过程中使用各自的配置类,因为mapper在加载的时候有缓存
*
* @author fengshuonan
* @date 2019-06-15-18:30
......@@ -39,33 +53,63 @@ public class SqlSessionFactoryCreator {
private final Interceptor[] interceptors;
private final DatabaseIdProvider databaseIdProvider;
private final TypeHandler[] typeHandlers;
private final ApplicationContext applicationContext;
private final LanguageDriver[] languageDrivers;
private final ResourceLoader resourceLoader;
private final DatabaseIdProvider databaseIdProvider;
private final List<ConfigurationCustomizer> configurationCustomizers;
private final List<MybatisPlusPropertiesCustomizer> mybatisPlusPropertiesCustomizers;
private final ApplicationContext applicationContext;
public SqlSessionFactoryCreator(MybatisPlusProperties properties,
ResourceLoader resourceLoader,
ObjectProvider<Interceptor[]> interceptorsProvider,
ObjectProvider<TypeHandler[]> typeHandlersProvider,
ObjectProvider<LanguageDriver[]> languageDriversProvider,
ResourceLoader resourceLoader,
ObjectProvider<DatabaseIdProvider> databaseIdProvider,
ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider,
ObjectProvider<List<MybatisPlusPropertiesCustomizer>> mybatisPlusPropertiesCustomizerProvider,
ApplicationContext applicationContext) {
this.properties = properties;
this.interceptors = interceptorsProvider.getIfAvailable();
this.databaseIdProvider = databaseIdProvider.getIfAvailable();
this.applicationContext = applicationContext;
this.typeHandlers = typeHandlersProvider.getIfAvailable();
this.languageDrivers = languageDriversProvider.getIfAvailable();
this.resourceLoader = resourceLoader;
this.databaseIdProvider = databaseIdProvider.getIfAvailable();
this.configurationCustomizers = configurationCustomizersProvider.getIfAvailable();
this.mybatisPlusPropertiesCustomizers = mybatisPlusPropertiesCustomizerProvider.getIfAvailable();
this.applicationContext = applicationContext;
}
/**
* 创建SqlSessionFactory
*/
public synchronized SqlSessionFactory createSqlSessionFactory(DataSource dataSource) {
try {
//初始化本MybatisSqlSessionFactoryBean需要的配置,如果不初始化,则所有MybatisSqlSessionFactoryBean都用一套配置,会出现mapper语句差不不进去(因为mp的缓存)
MybatisConfiguration originConfiguration = properties.getConfiguration();
GlobalConfig originGlobalConfig = properties.getGlobalConfig();
//清空mapper的缓存
originGlobalConfig.setMapperRegistryCache(new ConcurrentSkipListSet<>());
//创建新的配置
MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
GlobalConfig globalConfig = GlobalConfigUtils.defaults();
//执行拷贝操作
BeanUtil.copyProperties(originConfiguration, mybatisConfiguration, CopyOptions.create().ignoreError());
BeanUtil.copyProperties(originGlobalConfig, globalConfig, CopyOptions.create().ignoreError());
mybatisConfiguration.setGlobalConfig(globalConfig);
// TODO 使用 MybatisSqlSessionFactoryBean 而不是 SqlSessionFactoryBean
MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
factory.setDataSource(dataSource);
factory.setVfs(SpringBootVFS.class);
......@@ -84,45 +128,42 @@ public class SqlSessionFactoryCreator {
if (StringUtils.hasLength(this.properties.getTypeAliasesPackage())) {
factory.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());
}
// TODO 自定义枚举包
if (StringUtils.hasLength(this.properties.getTypeEnumsPackage())) {
factory.setTypeEnumsPackage(this.properties.getTypeEnumsPackage());
}
if (this.properties.getTypeAliasesSuperType() != null) {
factory.setTypeAliasesSuperType(this.properties.getTypeAliasesSuperType());
}
if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) {
factory.setTypeHandlersPackage(this.properties.getTypeHandlersPackage());
}
if (!ObjectUtils.isEmpty(this.typeHandlers)) {
factory.setTypeHandlers(this.typeHandlers);
}
if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) {
factory.setMapperLocations(this.properties.resolveMapperLocations());
}
// TODO 此处必为非 NULL
GlobalConfig globalConfig = this.properties.getGlobalConfig();
//注入填充器
if (this.applicationContext.getBeanNamesForType(MetaObjectHandler.class,
false, false).length > 0) {
MetaObjectHandler metaObjectHandler = this.applicationContext.getBean(MetaObjectHandler.class);
globalConfig.setMetaObjectHandler(metaObjectHandler);
}
//注入主键生成器
if (this.applicationContext.getBeanNamesForType(IKeyGenerator.class, false,
false).length > 0) {
IKeyGenerator keyGenerator = this.applicationContext.getBean(IKeyGenerator.class);
globalConfig.getDbConfig().setKeyGenerator(keyGenerator);
}
//注入sql注入器
if (this.applicationContext.getBeanNamesForType(ISqlInjector.class, false,
false).length > 0) {
ISqlInjector iSqlInjector = this.applicationContext.getBean(ISqlInjector.class);
globalConfig.setSqlInjector(iSqlInjector);
}
//globalConfig中有缓存sqlSessionFactory,目前还没别的办法
SqlSessionFactory sqlSessionFactory = factory.getObject();
globalConfig.signGlobalConfig(sqlSessionFactory);
// TODO 对源码做了一定的修改(因为源码适配了老旧的mybatis版本,但我们不需要适配)
Class<? extends LanguageDriver> defaultLanguageDriver = this.properties.getDefaultScriptingLanguageDriver();
if (!ObjectUtils.isEmpty(this.languageDrivers)) {
factory.setScriptingLanguageDrivers(this.languageDrivers);
}
Optional.ofNullable(defaultLanguageDriver).ifPresent(factory::setDefaultScriptingLanguageDriver);
// TODO 自定义枚举包
if (StringUtils.hasLength(this.properties.getTypeEnumsPackage())) {
factory.setTypeEnumsPackage(this.properties.getTypeEnumsPackage());
}
// TODO 注入填充器
this.getBeanThen(MetaObjectHandler.class, globalConfig::setMetaObjectHandler);
// TODO 注入主键生成器
this.getBeanThen(IKeyGenerator.class, i -> globalConfig.getDbConfig().setKeyGenerator(i));
// TODO 注入sql注入器
this.getBeanThen(ISqlInjector.class, globalConfig::setSqlInjector);
// TODO 注入ID生成器
this.getBeanThen(IdentifierGenerator.class, globalConfig::setIdentifierGenerator);
// TODO 设置 GlobalConfig 到 MybatisSqlSessionFactoryBean
factory.setGlobalConfig(globalConfig);
try {
return factory.getObject();
} catch (Exception e) {
log.error("初始化SqlSessionFactory错误!", e);
......@@ -130,4 +171,17 @@ public class SqlSessionFactoryCreator {
}
}
/**
* 检查spring容器里是否有对应的bean,有则进行消费
*
* @param clazz class
* @param consumer 消费
* @param <T> 泛型
*/
private <T> void getBeanThen(Class<T> clazz, Consumer<T> consumer) {
if (this.applicationContext.getBeanNamesForType(clazz, false, false).length > 0) {
consumer.accept(this.applicationContext.getBean(clazz));
}
}
}
package cn.stylefeng.guns.base.db.context;
import cn.stylefeng.guns.base.db.dao.DataBaseInfoDao;
import cn.stylefeng.guns.base.db.factory.AtomikosFactory;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import com.atomikos.jdbc.AtomikosDataSourceBean;
import javax.sql.DataSource;
import java.util.Map;
......@@ -37,7 +37,7 @@ public class DataSourceContext {
* @author fengshuonan
* @Date 2019-06-12 13:48
*/
public static void initDataSource(DruidProperties masterDataSourceProperties) {
public static void initDataSource(DruidProperties masterDataSourceProperties, DataSource dataSourcePrimary) {
//清空数据库中的主数据源信息
new DataBaseInfoDao(masterDataSourceProperties).deleteMasterDatabaseInfo();
......@@ -58,11 +58,16 @@ public class DataSourceContext {
String dbName = entry.getKey();
DruidProperties druidProperties = entry.getValue();
//通过property创建DataSource
//如果是主数据源,不用初始化第二遍,如果是其他数据源就通过property初始化
if (dbName.equalsIgnoreCase(MASTER_DATASOURCE_NAME)) {
DATA_SOURCES_CONF.put(dbName, druidProperties);
DATA_SOURCES.put(dbName, dataSourcePrimary);
} else {
DataSource dataSource = createDataSource(dbName, druidProperties);
DATA_SOURCES.put(dbName, dataSource);
}
}
}
/**
* 新增datasource
......@@ -102,13 +107,7 @@ public class DataSourceContext {
//添加到全局配置里
DATA_SOURCES_CONF.put(dataSourceName, druidProperties);
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource");
atomikosDataSourceBean.setUniqueResourceName(dataSourceName);
atomikosDataSourceBean.setMaxPoolSize(20);
atomikosDataSourceBean.setBorrowConnectionTimeout(60);
atomikosDataSourceBean.setXaProperties(druidProperties.createProperties());
return atomikosDataSourceBean;
return AtomikosFactory.create(dataSourceName, druidProperties);
}
}
......@@ -18,16 +18,16 @@ public class AddDatabaseInfoSql extends AbstractSql {
@Override
protected String sqlServer() {
return "INSERT INTO [database_info] ([db_id], [db_name], [jdbc_driver], [user_name], [password], [jdbc_url], [remarks], [create_time]) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
return "";
}
@Override
protected String pgSql() {
return "INSERT INTO `database_info`(`db_id`, `db_name`, `jdbc_driver`, `user_name`, `password`, `jdbc_url`, `remarks`, `create_time`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
return "";
}
@Override
protected String oracle() {
return "INSERT INTO database_info VALUES (?, ?, ?, ?, ?, ?, ?, to_date(?, 'yyyy-mm-dd hh24:mi:ss'))";
return "";
}
}
package cn.stylefeng.guns.base.db.dao.sqls;
import lombok.Getter;
/**
* 创建数据库的sql
*
* @author fengshuonan
* @date 2019-07-16-13:06
*/
@Getter
public class CreateDatabaseSql extends AbstractSql {
@Override
protected String mysql() {
return "CREATE DATABASE IF NOT EXISTS ? DEFAULT CHARSET utf8 COLLATE utf8_general_ci;";
}
@Override
protected String sqlServer() {
return "";
}
@Override
protected String pgSql() {
return "";
}
@Override
protected String oracle() {
return "";
}
}
......@@ -18,16 +18,16 @@ public class DatabaseListSql extends AbstractSql {
@Override
protected String sqlServer() {
return "select db_name,jdbc_driver,jdbc_url,user_name,password from database_info";
return "";
}
@Override
protected String pgSql() {
return "select db_name,jdbc_driver,jdbc_url,user_name,password from database_info";
return "";
}
@Override
protected String oracle() {
return "select db_name,jdbc_driver,jdbc_url,user_name,password from database_info";
return "";
}
}
......@@ -18,16 +18,16 @@ public class DeleteDatabaseInfoSql extends AbstractSql {
@Override
protected String sqlServer() {
return "DELETE from database_info where db_name = ?";
return "";
}
@Override
protected String pgSql() {
return "DELETE from database_info where db_name = ?";
return "";
}
@Override
protected String oracle() {
return "DELETE from database_info where db_name = ?";
return "";
}
}
package cn.stylefeng.guns.base.db.dao.sqls;
import lombok.Getter;
/**
* 获取某个表的所有字段的sql
*
* @author fengshuonan
* @date 2019-07-16-13:06
*/
@Getter
public class TableFieldListSql extends AbstractSql {
@Override
protected String mysql() {
return "select COLUMN_NAME as columnName,COLUMN_COMMENT as columnComment from information_schema.COLUMNS where table_name = ? and table_schema = ?";
}
@Override
protected String sqlServer() {
return "";
}
@Override
protected String pgSql() {
return "";
}
@Override
protected String oracle() {
return "";
}
}
package cn.stylefeng.guns.base.db.dao.sqls;
import lombok.Getter;
/**
* 获取所有表的sql
*
* @author fengshuonan
* @date 2019-07-16-13:06
*/
@Getter
public class TableListSql extends AbstractSql {
@Override
protected String mysql() {
return "select TABLE_NAME as tableName,TABLE_COMMENT as tableComment from information_schema.`TABLES` where TABLE_SCHEMA = ?";
}
@Override
protected String sqlServer() {
return "";
}
@Override
protected String pgSql() {
return "";
}
@Override
protected String oracle() {
return "";
}
}
package cn.stylefeng.guns.base.db.factory;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import com.atomikos.jdbc.AtomikosDataSourceBean;
import com.atomikos.jdbc.AtomikosSQLException;
import java.util.Properties;
/**
* AtomikosDataSourceBean数据源工厂
*
* @author fengshuonan
* @Date 2019/11/19 18:22
*/
public class AtomikosFactory {
public static AtomikosDataSourceBean create(String dataSourceName, DruidProperties druidProperties) {
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource");
atomikosDataSourceBean.setUniqueResourceName(dataSourceName);
atomikosDataSourceBean.setMaxPoolSize(100);
atomikosDataSourceBean.setBorrowConnectionTimeout(60);
Properties properties = druidProperties.createProperties();
atomikosDataSourceBean.setXaProperties(properties);
try {
atomikosDataSourceBean.init();
} catch (AtomikosSQLException e) {
e.printStackTrace();
}
return atomikosDataSourceBean;
}
}
package cn.stylefeng.guns.base.db.util;
import java.io.BufferedReader;
import java.io.Reader;
import java.sql.Clob;
/**
* oracle数据库转化工具
*
* @author fengshuonan
* @Date 2019/11/19 18:14
*/
public class ClobUtil {
/**
* Clob类型转换成String类型
*
* @author fengshuonan
* @Date 2019/11/19 18:14
*/
public static String clobToString(final Clob clob) {
if (clob == null) {
return null;
}
Reader reader = null;
try {
reader = clob.getCharacterStream();
} catch (Exception e) {
e.printStackTrace();
}
if (reader == null) {
return "";
}
BufferedReader br = new BufferedReader(reader);
String str = null;
// 读取第一行
try {
str = br.readLine();
} catch (Exception e) {
e.printStackTrace();
}
StringBuilder sb = new StringBuilder();
// 如果没有到达流的末尾,则继续读取下一行
while (str != null) {
sb.append(str);
try {
str = br.readLine();
} catch (Exception e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
package cn.stylefeng.guns.base.db.util;
import cn.stylefeng.guns.base.db.dao.sqls.CreateDatabaseSql;
import cn.stylefeng.guns.base.db.dao.sqls.TableFieldListSql;
import cn.stylefeng.guns.base.db.dao.sqls.TableListSql;
import cn.stylefeng.guns.base.db.entity.DatabaseInfo;
import cn.stylefeng.guns.base.db.exception.DataSourceInitException;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
......@@ -29,29 +34,37 @@ public class DbUtil {
* @Date 2019-05-04 20:30
*/
public static List<Map<String, Object>> selectTables(DatabaseInfo dbInfo) {
ArrayList<Map<String, Object>> list = new ArrayList<>();
List<Map<String, Object>> tables = new ArrayList<>();
try {
Class.forName(dbInfo.getJdbcDriver());
Connection conn = DriverManager.getConnection(dbInfo.getJdbcUrl(), dbInfo.getUserName(), dbInfo.getPassword());
Connection conn = DriverManager.getConnection(
dbInfo.getJdbcUrl(), dbInfo.getUserName(), dbInfo.getPassword());
//获取数据库名称
String dbName = getDbName(dbInfo);
PreparedStatement preparedStatement = conn.prepareStatement(
"select TABLE_NAME as tableName,TABLE_COMMENT as tableComment from information_schema.`TABLES` where TABLE_SCHEMA = '" + dbName + "'");
//构造查询语句
PreparedStatement preparedStatement = conn.prepareStatement(new TableListSql().getSql(dbInfo.getJdbcUrl()));
//拼接设置数据库名称
if (!dbInfo.getJdbcUrl().contains("sqlserver") && !dbInfo.getJdbcUrl().contains("postgresql")) {
preparedStatement.setString(1, dbName);
}
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
HashMap<String, Object> map = new HashMap<>();
String tableName = resultSet.getString("tableName");
String tableComment = resultSet.getString("tableComment");
map.put("tableName", tableName);
map.put("tableComment", tableComment);
list.add(map);
tables.add(map);
}
return list;
return tables;
} catch (Exception ex) {
log.error("执行sql出现问题!", ex);
return null;
log.error("查询所有表错误!", ex);
throw new DataSourceInitException(DataSourceInitException.ExEnum.QUERY_DATASOURCE_INFO_ERROR);
}
}
......@@ -62,29 +75,41 @@ public class DbUtil {
* @Date 2019-05-04 20:31
*/
public static List<Map<String, Object>> getTableFields(DatabaseInfo dbInfo, String tableName) {
ArrayList<Map<String, Object>> list = new ArrayList<>();
ArrayList<Map<String, Object>> fieldList = new ArrayList<>();
try {
Class.forName(dbInfo.getJdbcDriver());
Connection conn = DriverManager.getConnection(dbInfo.getJdbcUrl(), dbInfo.getUserName(), dbInfo.getPassword());
Connection conn = DriverManager.getConnection(
dbInfo.getJdbcUrl(), dbInfo.getUserName(), dbInfo.getPassword());
//获取数据库名称
PreparedStatement preparedStatement = conn.prepareStatement(new TableFieldListSql().getSql(dbInfo.getJdbcUrl()));
if (dbInfo.getJdbcUrl().contains("oracle")) {
preparedStatement.setString(1, tableName);
} else if (dbInfo.getJdbcUrl().contains("postgresql")) {
preparedStatement.setString(1, tableName);
} else if (dbInfo.getJdbcUrl().contains("sqlserver")) {
preparedStatement.setString(1, tableName);
} else {
String dbName = getDbName(dbInfo);
preparedStatement.setString(1, tableName);
preparedStatement.setString(2, dbName);
}
PreparedStatement preparedStatement = conn.prepareStatement(
"select COLUMN_NAME as columnName,COLUMN_COMMENT as columnComment from information_schema.COLUMNS where table_name = '" + tableName + "' and table_schema = '" + dbName + "'");
//执行查询
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
HashMap<String, Object> map = new HashMap<>();
String columnName = resultSet.getString("columnName");
String columnComment = resultSet.getString("columnComment");
map.put("columnName", columnName);
map.put("columnComment", columnComment);
list.add(map);
fieldList.add(map);
}
return list;
return fieldList;
} catch (Exception ex) {
log.error("执行sql出现问题!", ex);
return null;
log.error("查询表的所有字段错误!", ex);
throw new DataSourceInitException(DataSourceInitException.ExEnum.QUERY_DATASOURCE_INFO_ERROR);
}
}
......@@ -100,7 +125,9 @@ public class DbUtil {
Connection conn = DriverManager.getConnection(druidProperties.getUrl(), druidProperties.getUsername(), druidProperties.getPassword());
//创建sql
String sql = "CREATE DATABASE IF NOT EXISTS " + databaseName + " DEFAULT CHARSET utf8 COLLATE utf8_general_ci;";
String sql = new CreateDatabaseSql().getSql(druidProperties.getUrl());
sql = sql.replaceAll("\\?", databaseName);
PreparedStatement preparedStatement = conn.prepareStatement(sql);
int i = preparedStatement.executeUpdate();
......@@ -108,6 +135,7 @@ public class DbUtil {
} catch (Exception ex) {
log.error("执行sql出现问题!", ex);
throw new ServiceException(500, "创建多租户-执行sql出现问题!");
}
}
......@@ -118,9 +146,31 @@ public class DbUtil {
* @Date 2019-06-18 15:25
*/
private static String getDbName(DatabaseInfo dbInfo) {
if (dbInfo.getJdbcUrl().contains("oracle")) {
//如果是oracle,直接返回username
return dbInfo.getUserName();
} else if (dbInfo.getJdbcUrl().contains("postgresql")) {
//postgresql,直接返回最后一个/后边的字符
int first = dbInfo.getJdbcUrl().lastIndexOf("/") + 1;
return dbInfo.getJdbcUrl().substring(first);
} else if (dbInfo.getJdbcUrl().contains("sqlserver")) {
//sqlserver,直接返回最后一个=后边的字符
int first = dbInfo.getJdbcUrl().lastIndexOf("=") + 1;
return dbInfo.getJdbcUrl().substring(first);
} else {
//mysql,返回/和?之间的字符
String jdbcUrl = dbInfo.getJdbcUrl();
int first = jdbcUrl.lastIndexOf("/") + 1;
int last = jdbcUrl.indexOf("?");
return jdbcUrl.substring(first, last);
}
}
}
......@@ -30,10 +30,7 @@ import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.reqres.response.SuccessResponseData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
......@@ -72,7 +69,7 @@ public class RestDeptController extends BaseController {
*/
@BussinessLog(value = "添加部门", key = "simpleName", dict = DeptDict.class)
@RequestMapping(value = "/add")
public ResponseData add(RestDept restDept) {
public ResponseData add(@RequestBody RestDept restDept) {
this.restDeptService.addDept(restDept);
return SUCCESS_TIP;
}
......@@ -118,7 +115,7 @@ public class RestDeptController extends BaseController {
*/
@BussinessLog(value = "修改部门", key = "simpleName", dict = DeptDict.class)
@RequestMapping(value = "/update")
public ResponseData update(RestDept restDept) {
public ResponseData update(@RequestBody RestDept restDept) {
restDeptService.editDept(restDept);
return SUCCESS_TIP;
}
......@@ -131,7 +128,7 @@ public class RestDeptController extends BaseController {
*/
@BussinessLog(value = "删除部门", key = "deptId", dict = DeptDict.class)
@RequestMapping(value = "/delete")
public ResponseData delete(@RequestParam Long deptId) {
public ResponseData delete(@RequestParam("deptId") Long deptId) {
restDeptService.deleteDept(deptId);
return SUCCESS_TIP;
}
......
......@@ -10,6 +10,7 @@ import cn.stylefeng.roses.core.base.controller.BaseController;
import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.reqres.response.SuccessResponseData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
......@@ -37,7 +38,7 @@ public class RestDictController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/addItem")
public ResponseData addItem(DictParam dictParam) {
public ResponseData addItem(@RequestBody DictParam dictParam) {
this.restDictService.add(dictParam);
return ResponseData.success();
}
......@@ -49,7 +50,7 @@ public class RestDictController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/editItem")
public ResponseData editItem(DictParam dictParam) {
public ResponseData editItem(@RequestBody DictParam dictParam) {
this.restDictService.update(dictParam);
return ResponseData.success();
}
......@@ -61,7 +62,7 @@ public class RestDictController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/delete")
public ResponseData delete(DictParam dictParam) {
public ResponseData delete(@RequestBody DictParam dictParam) {
this.restDictService.delete(dictParam);
return ResponseData.success();
}
......@@ -73,7 +74,7 @@ public class RestDictController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/detail")
public ResponseData detail(DictParam dictParam) {
public ResponseData detail(@RequestBody DictParam dictParam) {
DictResult dictResult = this.restDictService.dictDetail(dictParam.getDictId());
return ResponseData.success(dictResult);
}
......@@ -85,7 +86,7 @@ public class RestDictController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/list")
public LayuiPageInfo list(DictParam dictParam) {
public LayuiPageInfo list(@RequestBody DictParam dictParam) {
return this.restDictService.findPageBySpec(dictParam);
}
......@@ -120,7 +121,8 @@ public class RestDictController extends BaseController {
* @Date 2018/12/23 4:56 PM
*/
@RequestMapping(value = "/ztree")
public List<ZTreeNode> ztree(@RequestParam("dictTypeId") Long dictTypeId, @RequestParam(value = "dictId", required = false) Long dictId) {
public List<ZTreeNode> ztree(@RequestParam("dictTypeId") Long dictTypeId,
@RequestParam(value = "dictId", required = false) Long dictId) {
return this.restDictService.dictTreeList(dictTypeId, dictId);
}
......
......@@ -9,6 +9,7 @@ import cn.stylefeng.roses.core.reqres.response.ResponseData;
import cn.stylefeng.roses.core.reqres.response.SuccessResponseData;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -35,7 +36,7 @@ public class RestDictTypeController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/addItem")
public ResponseData addItem(DictTypeParam dictTypeParam) {
public ResponseData addItem(@RequestBody DictTypeParam dictTypeParam) {
this.restDictTypeService.add(dictTypeParam);
return ResponseData.success();
}
......@@ -47,7 +48,7 @@ public class RestDictTypeController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/editItem")
public ResponseData editItem(DictTypeParam dictTypeParam) {
public ResponseData editItem(@RequestBody DictTypeParam dictTypeParam) {
this.restDictTypeService.update(dictTypeParam);
return ResponseData.success();
}
......@@ -59,7 +60,7 @@ public class RestDictTypeController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/delete")
public ResponseData delete(DictTypeParam dictTypeParam) {
public ResponseData delete(@RequestBody DictTypeParam dictTypeParam) {
this.restDictTypeService.delete(dictTypeParam);
return ResponseData.success();
}
......@@ -71,7 +72,7 @@ public class RestDictTypeController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/detail")
public ResponseData detail(DictTypeParam dictTypeParam) {
public ResponseData detail(@RequestBody DictTypeParam dictTypeParam) {
RestDictType detail = this.restDictTypeService.getById(dictTypeParam.getDictTypeId());
return ResponseData.success(detail);
}
......@@ -83,7 +84,7 @@ public class RestDictTypeController extends BaseController {
* @Date 2019-03-13
*/
@RequestMapping("/list")
public LayuiPageInfo list(DictTypeParam dictTypeParam) {
public LayuiPageInfo list(@RequestBody DictTypeParam dictTypeParam) {
return this.restDictTypeService.findPageBySpec(dictTypeParam);
}
......
......@@ -21,6 +21,7 @@ import cn.stylefeng.guns.base.pojo.page.LayuiPageFactory;
import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.sys.core.constant.state.BizLogType;
import cn.stylefeng.guns.sys.modular.rest.entity.RestOperationLog;
import cn.stylefeng.guns.sys.modular.rest.model.LogQueryParam;
import cn.stylefeng.guns.sys.modular.rest.service.RestOperationLogService;
import cn.stylefeng.guns.sys.modular.system.warpper.LogWrapper;
import cn.stylefeng.roses.core.base.controller.BaseController;
......@@ -29,8 +30,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
import org.springframework.beans.factory.annotation.Autowired;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
......@@ -56,16 +57,15 @@ public class RestLogController extends BaseController {
* @Date 2018/12/23 5:34 PM
*/
@RequestMapping("/list")
public LayuiPageInfo list(@RequestParam(required = false) String beginTime,
@RequestParam(required = false) String endTime,
@RequestParam(required = false) String logName,
@RequestParam(required = false) Integer logType) {
public LayuiPageInfo list(@RequestBody LogQueryParam logQueryParam) {
//获取分页参数
Page page = LayuiPageFactory.defaultPage();
//根据条件查询操作日志
List<Map<String, Object>> result = restOperationLogService.getOperationLogs(page, beginTime, endTime, logName, BizLogType.valueOf(logType));
List<Map<String, Object>> result = restOperationLogService.getOperationLogs(
page, logQueryParam.getBeginTime(), logQueryParam.getEndTime(),
logQueryParam.getLogName(), BizLogType.valueOf(logQueryParam.getLogType()));
page.setRecords(new LogWrapper(result).wrap());
......
......@@ -18,6 +18,7 @@ package cn.stylefeng.guns.sys.modular.rest.controller;
import cn.stylefeng.guns.base.log.BussinessLog;
import cn.stylefeng.guns.base.pojo.page.LayuiPageFactory;
import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.sys.modular.rest.model.LogQueryParam;
import cn.stylefeng.guns.sys.modular.rest.service.RestLoginLogService;
import cn.stylefeng.guns.sys.modular.system.warpper.LogWrapper;
import cn.stylefeng.roses.core.base.controller.BaseController;
......@@ -25,8 +26,8 @@ import cn.stylefeng.roses.core.reqres.response.ResponseData;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
......@@ -52,15 +53,14 @@ public class RestLoginLogController extends BaseController {
* @Date 2018/12/23 5:51 PM
*/
@RequestMapping("/list")
public LayuiPageInfo list(@RequestParam(required = false) String beginTime,
@RequestParam(required = false) String endTime,
@RequestParam(required = false) String logName) {
public LayuiPageInfo list(@RequestBody LogQueryParam logQueryParam) {
//获取分页参数
Page page = LayuiPageFactory.defaultPage();
//根据条件查询日志
List<Map<String, Object>> result = restLoginLogService.getLoginLogs(page, beginTime, endTime, logName);
List<Map<String, Object>> result = restLoginLogService.getLoginLogs(page,
logQueryParam.getBeginTime(), logQueryParam.getEndTime(), logQueryParam.getLogName());
page.setRecords(new LogWrapper(result).wrap());
return LayuiPageFactory.createPageInfo(page);
......
......@@ -27,6 +27,7 @@ import cn.stylefeng.guns.sys.core.exception.enums.BizExceptionEnum;
import cn.stylefeng.guns.sys.core.log.LogObjectHolder;
import cn.stylefeng.guns.sys.modular.rest.entity.RestMenu;
import cn.stylefeng.guns.sys.modular.rest.factory.MenuFactory;
import cn.stylefeng.guns.sys.modular.rest.model.MenuQueryParam;
import cn.stylefeng.guns.sys.modular.rest.model.MenuTreeNode;
import cn.stylefeng.guns.sys.modular.rest.service.RestMenuService;
import cn.stylefeng.guns.sys.modular.rest.service.RestUserService;
......@@ -38,10 +39,7 @@ import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
......@@ -70,7 +68,7 @@ public class RestMenuController extends BaseController {
*/
@RequestMapping(value = "/edit")
@BussinessLog(value = "修改菜单", key = "name", dict = MenuDict.class)
public ResponseData edit(MenuDto menu) {
public ResponseData edit(@RequestBody MenuDto menu) {
//如果修改了编号,则该菜单的子菜单也要修改对应编号
this.restMenuService.updateMenu(menu);
......@@ -88,10 +86,9 @@ public class RestMenuController extends BaseController {
* @Date 2018/12/23 5:53 PM
*/
@RequestMapping(value = "/list")
public LayuiPageInfo list(@RequestParam(required = false) String menuName,
@RequestParam(required = false) String level,
@RequestParam(required = false) Long menuId) {
Page<Map<String, Object>> menus = this.restMenuService.selectMenus(menuName, level, menuId);
public LayuiPageInfo list(@RequestBody MenuQueryParam menuQueryParam) {
Page<Map<String, Object>> menus = this.restMenuService.selectMenus(
menuQueryParam.getMenuName(), menuQueryParam.getLevel(), menuQueryParam.getMenuId());
Page<Map<String, Object>> wrap = new MenuWrapper(menus).wrap();
return LayuiPageFactory.createPageInfo(wrap);
}
......@@ -103,9 +100,8 @@ public class RestMenuController extends BaseController {
* @Date 2019年2月23日22:01:47
*/
@RequestMapping(value = "/listTree")
public LayuiPageInfo listTree(@RequestParam(required = false) String menuName,
@RequestParam(required = false) String level) {
List<Map<String, Object>> menus = this.restMenuService.selectMenuTree(menuName, level);
public LayuiPageInfo listTree(@RequestBody MenuQueryParam menuQueryParam) {
List<Map<String, Object>> menus = this.restMenuService.selectMenuTree(menuQueryParam.getMenuName(), menuQueryParam.getLevel());
List<Map<String, Object>> menusWrap = new MenuWrapper(menus).wrap();
//构建树
......@@ -124,7 +120,7 @@ public class RestMenuController extends BaseController {
*/
@RequestMapping(value = "/add")
@BussinessLog(value = "菜单新增", key = "name", dict = MenuDict.class)
public ResponseData add(MenuDto menu) {
public ResponseData add(@RequestBody MenuDto menu) {
this.restMenuService.addMenu(menu);
return SUCCESS_TIP;
}
......
......@@ -32,10 +32,7 @@ import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.Map;
......@@ -86,7 +83,7 @@ public class RestNoticeController extends BaseController {
*/
@RequestMapping(value = "/add")
@BussinessLog(value = "新增通知", key = "title", dict = NoticeMap.class)
public Object add(RestNotice restNotice) {
public Object add(@RequestBody RestNotice restNotice) {
if (ToolUtil.isOneEmpty(restNotice, restNotice.getTitle(), restNotice.getContent())) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
......@@ -119,7 +116,7 @@ public class RestNoticeController extends BaseController {
*/
@RequestMapping(value = "/update")
@BussinessLog(value = "修改通知", key = "title", dict = NoticeMap.class)
public Object update(Notice notice) {
public Object update(@RequestBody Notice notice) {
if (ToolUtil.isOneEmpty(notice, notice.getNoticeId(), notice.getTitle(), notice.getContent())) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
......
......@@ -11,6 +11,7 @@ import cn.stylefeng.roses.core.reqres.response.SuccessResponseData;
import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
......@@ -36,7 +37,7 @@ public class RestPositionController extends BaseController {
* @Date 2019-06-27
*/
@RequestMapping("/addItem")
public ResponseData addItem(PositionParam positionParam) {
public ResponseData addItem(@RequestBody PositionParam positionParam) {
this.restPositionService.add(positionParam);
return ResponseData.success();
}
......@@ -48,7 +49,7 @@ public class RestPositionController extends BaseController {
* @Date 2019-06-27
*/
@RequestMapping("/editItem")
public ResponseData editItem(PositionParam positionParam) {
public ResponseData editItem(@RequestBody PositionParam positionParam) {
this.restPositionService.update(positionParam);
return ResponseData.success();
}
......@@ -60,7 +61,7 @@ public class RestPositionController extends BaseController {
* @Date 2019-06-27
*/
@RequestMapping("/delete")
public ResponseData delete(PositionParam positionParam) {
public ResponseData delete(@RequestBody PositionParam positionParam) {
this.restPositionService.delete(positionParam);
return ResponseData.success();
}
......@@ -72,7 +73,7 @@ public class RestPositionController extends BaseController {
* @Date 2019-06-27
*/
@RequestMapping("/detail")
public ResponseData detail(PositionParam positionParam) {
public ResponseData detail(@RequestBody PositionParam positionParam) {
RestPosition detail = this.restPositionService.getById(positionParam.getPositionId());
return ResponseData.success(detail);
}
......
......@@ -37,10 +37,7 @@ import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
......@@ -86,7 +83,7 @@ public class RestRoleController extends BaseController {
*/
@RequestMapping(value = "/add")
@BussinessLog(value = "添加角色", key = "name", dict = RoleDict.class)
public ResponseData add(RestRole restRole) {
public ResponseData add(@RequestBody RestRole restRole) {
this.restRoleService.addRole(restRole);
return SUCCESS_TIP;
}
......@@ -99,7 +96,7 @@ public class RestRoleController extends BaseController {
*/
@RequestMapping(value = "/edit")
@BussinessLog(value = "修改角色", key = "name", dict = RoleDict.class)
public ResponseData edit(RoleDto roleDto) {
public ResponseData edit(@RequestBody RoleDto roleDto) {
this.restRoleService.editRole(roleDto);
return SUCCESS_TIP;
}
......
......@@ -25,6 +25,7 @@ import cn.stylefeng.guns.sys.core.constant.state.ManagerStatus;
import cn.stylefeng.guns.sys.core.exception.enums.BizExceptionEnum;
import cn.stylefeng.guns.sys.core.util.SaltUtil;
import cn.stylefeng.guns.sys.modular.rest.entity.RestUser;
import cn.stylefeng.guns.sys.modular.rest.model.UserQueryParam;
import cn.stylefeng.guns.sys.modular.rest.service.RestUserService;
import cn.stylefeng.guns.sys.modular.system.model.UserDto;
import cn.stylefeng.guns.sys.modular.system.warpper.UserWrapper;
......@@ -37,11 +38,9 @@ import cn.stylefeng.roses.kernel.model.exception.RequestEmptyException;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import java.io.File;
import java.util.Map;
import java.util.UUID;
......@@ -111,27 +110,25 @@ public class RestUserMgrController extends BaseController {
* @Date 2018/12/24 22:43
*/
@RequestMapping("/list")
public Object list(@RequestParam(required = false) String name,
@RequestParam(required = false) String timeLimit,
@RequestParam(required = false) Long deptId) {
public Object list(@RequestBody UserQueryParam userQueryParam) {
//拼接查询条件
String beginTime = "";
String endTime = "";
if (ToolUtil.isNotEmpty(timeLimit)) {
String[] split = timeLimit.split(" - ");
if (ToolUtil.isNotEmpty(userQueryParam.getTimeLimit())) {
String[] split = userQueryParam.getTimeLimit().split(" - ");
beginTime = split[0];
endTime = split[1];
}
if (LoginContextHolder.getContext().isAdmin()) {
Page<Map<String, Object>> users = restUserService.selectUsers(null, name, beginTime, endTime, deptId);
Page<Map<String, Object>> users = restUserService.selectUsers(null, userQueryParam.getName(), beginTime, endTime, userQueryParam.getDeptId());
Page wrapped = new UserWrapper(users).wrap();
return LayuiPageFactory.createPageInfo(wrapped);
} else {
DataScope dataScope = new DataScope(LoginContextHolder.getContext().getDeptDataScope());
Page<Map<String, Object>> users = restUserService.selectUsers(dataScope, name, beginTime, endTime, deptId);
Page<Map<String, Object>> users = restUserService.selectUsers(dataScope, userQueryParam.getName(), beginTime, endTime, userQueryParam.getDeptId());
Page wrapped = new UserWrapper(users).wrap();
return LayuiPageFactory.createPageInfo(wrapped);
}
......@@ -145,10 +142,7 @@ public class RestUserMgrController extends BaseController {
*/
@RequestMapping("/add")
@BussinessLog(value = "添加管理员", key = "account", dict = UserDict.class)
public ResponseData add(@Valid UserDto user, BindingResult result) {
if (result.hasErrors()) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
public ResponseData add(@RequestBody UserDto user) {
this.restUserService.addUser(user);
return SUCCESS_TIP;
}
......@@ -161,10 +155,7 @@ public class RestUserMgrController extends BaseController {
*/
@RequestMapping("/edit")
@BussinessLog(value = "修改管理员", key = "account", dict = UserDict.class)
public ResponseData edit(@Valid UserDto user, BindingResult result) {
if (result.hasErrors()) {
throw new ServiceException(BizExceptionEnum.REQUEST_NULL);
}
public ResponseData edit(@RequestBody UserDto user) {
this.restUserService.editUser(user);
return SUCCESS_TIP;
}
......
package cn.stylefeng.guns.sys.modular.rest.model;
import lombok.Data;
/**
* 日志查询的参数
*
* @author fengshuonan
* @Date 2019/11/28 21:07
*/
@Data
public class LogQueryParam {
String beginTime;
String endTime;
String logName;
/**
* 1:业务日志 2:异常日志
*/
Integer logType;
}
package cn.stylefeng.guns.sys.modular.rest.model;
import lombok.Data;
/**
* 菜单查询的参数
*
* @author fengshuonan
* @Date 2019/11/28 21:07
*/
@Data
public class MenuQueryParam {
String menuName;
String level;
Long menuId;
}
package cn.stylefeng.guns.sys.modular.rest.model;
import lombok.Data;
/**
* 管理员查询的参数
*
* @author fengshuonan
* @Date 2019/11/28 21:07
*/
@Data
public class UserQueryParam {
String name;
String timeLimit;
Long deptId;
}
......@@ -35,18 +35,6 @@
) as "spread" from sys_dept
</select>
<select id="layuiTree" resultType="cn.stylefeng.guns.base.pojo.node.LayuiTreeNode" databaseId="oracle">
select dept_id AS id, pid as "pid", simple_name as title,
(
CASE
WHEN (pid = 0 OR pid IS NULL) THEN
'1'
ELSE
'0'
END
) as "spread" from sys_dept
</select>
<select id="tree" resultType="cn.stylefeng.guns.base.pojo.node.ZTreeNode">
select dept_id AS id, pid as "pId", simple_name as name,
(
......@@ -59,18 +47,6 @@
) as "open" from sys_dept
</select>
<select id="tree" resultType="cn.stylefeng.guns.base.pojo.node.ZTreeNode" databaseId="oracle">
select dept_id AS id, pid as "pId", simple_name as name,
(
CASE
WHEN (pid = 0 OR pid IS NULL) THEN
'1'
ELSE
'0'
END
) as "open" from sys_dept
</select>
<select id="list" resultType="map">
select
<include refid="Base_Column_List"/>
......@@ -84,19 +60,6 @@
order by sort ASC
</select>
<select id="list" resultType="map" databaseId="oracle">
select
<include refid="Base_Column_List"/>
from sys_dept where 1 = 1
<if test="condition != null and condition != ''">
and simple_name like ('%' || #{condition} || '%') or full_name like ('%' || #{condition} || '%')
</if>
<if test="deptId != null and deptId != ''">
and (dept_id = #{deptId} or dept_id in ( select dept_id from sys_dept where pids like '%[' || #{deptId} || ']%' ))
</if>
order by sort ASC
</select>
<select id="treeviewNodes" resultType="cn.stylefeng.guns.base.pojo.node.TreeviewNode">
select dept_id AS tags, pid as "parentId", simple_name as text from sys_dept
</select>
......@@ -110,13 +73,4 @@
</if>
</select>
<select id="likePids" resultType="cn.stylefeng.guns.sys.modular.system.entity.Dept" databaseId="oracle">
select
<include refid="Base_Column_List"/>
from sys_dept where 1 = 1
<if test="deptId != null and deptId != ''">
and pids LIKE '%[' || #{deptId} || ']%'
</if>
</select>
</mapper>
......@@ -36,18 +36,6 @@
) as "open" from sys_dict where dict_type_id = #{dictTypeId}
</select>
<select id="dictTree" resultType="cn.stylefeng.guns.base.pojo.node.ZTreeNode" databaseId="oracle">
select dict_id AS id, parent_id as "pId", name as name,
(
CASE
WHEN (parent_id = 0 OR parent_id IS NULL) THEN
'1'
ELSE
'0'
END
) as "open" from sys_dict where dict_type_id = #{dictTypeId}
</select>
<select id="likeParentIds" resultType="cn.stylefeng.guns.sys.modular.system.entity.Dict">
select
<include refid="Base_Column_List"></include>
......@@ -57,13 +45,4 @@
</if>
</select>
<select id="likeParentIds" resultType="cn.stylefeng.guns.sys.modular.system.entity.Dict" databaseId="oracle">
select
<include refid="Base_Column_List"></include>
from sys_dict where 1 = 1
<if test="dictId != null and dictId != ''">
and parent_ids LIKE '%$[' || #{dictId} || ']%'
</if>
</select>
</mapper>
......@@ -4,13 +4,13 @@
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.stylefeng.guns.sys.modular.system.entity.LoginLog">
<id column="login_log_id" property="loginLogId" />
<result column="log_name" property="logName" />
<result column="user_id" property="userId" />
<result column="create_time" property="createTime" />
<result column="succeed" property="succeed" />
<result column="message" property="message" />
<result column="ip_address" property="ipAddress" />
<id column="login_log_id" property="loginLogId"/>
<result column="log_name" property="logName"/>
<result column="user_id" property="userId"/>
<result column="create_time" property="createTime"/>
<result column="succeed" property="succeed"/>
<result column="message" property="message"/>
<result column="ip_address" property="ipAddress"/>
</resultMap>
<!-- 通用查询结果列 -->
......@@ -18,7 +18,8 @@
login_log_id AS "loginLogId", log_name AS "logName", user_id AS "userId", create_time AS "createTime", succeed AS "succeed", message AS "message", ip_address AS "ipAddress"
</sql>
<select id="getLoginLogs" resultType="map" parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page">
<select id="getLoginLogs" resultType="map"
parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page">
select
<include refid="Base_Column_List"/>
from sys_login_log
......@@ -31,18 +32,4 @@
</if>
</select>
<select id="getLoginLogs" resultType="map" parameterType="com.baomidou.mybatisplus.extension.plugins.pagination.Page" databaseId="oracle">
select
<include refid="Base_Column_List"/>
from sys_login_log
where 1 = 1
<if test="beginTime != null and beginTime !='' and endTime != null and endTime != ''">
and create_time &gt;= to_date(#{beginTime}||'00:00:00','yyyy-mm-dd hh24:mi:ss')
and create_time &lt;= to_date(#{endTime}||'23:59:59','yyyy-mm-dd hh24:mi:ss')
</if>
<if test="logName != null and logName !=''">
and log_name like '%' || #{logName} || '%'
</if>
</select>
</mapper>
......@@ -45,22 +45,6 @@
</if>
</select>
<select id="selectMenus" resultType="map" databaseId="oracle">
select
<include refid="Base_Column_List"/>
from sys_menu
where status = 'ENABLE'
<if test="condition != null and condition != ''">
and (name like '%' || #{condition} || '%' or code like '%' || #{condition} || '%')
</if>
<if test="level != null and level != ''">
and levels = #{level}
</if>
<if test="menuId != null and menuId != 0">
and (menu_id = #{menuId} or menu_id in ( select menu_id from sys_menu where pcodes like '%[' || #{code} ']%' ))
</if>
</select>
<select id="getMenuIdsByRoleId" resultType="long">
select menu_id from
sys_relation where role_id = #{roleId}
......@@ -94,34 +78,6 @@
m1.menu_id ASC
</select>
<select id="menuTreeList" resultType="cn.stylefeng.guns.base.pojo.node.ZTreeNode" databaseId="oracle">
SELECT
m1.menu_id AS id,
(
CASE
WHEN (m2.menu_id = 0 OR m2.menu_id IS NULL) THEN
0
ELSE
m2.menu_id
END
) AS pId,
m1.name
AS name,
(
CASE
WHEN (m2.menu_id = 0 OR m2.menu_id IS NULL) THEN
'1'
ELSE
'0'
END
) as "open"
FROM
sys_menu m1
LEFT join sys_menu m2 ON m1.pcode = m2.code
ORDER BY
m1.menu_id ASC
</select>
<select id="menuTreeListByMenuIds" resultType="cn.stylefeng.guns.base.pojo.node.ZTreeNode">
SELECT
m1.menu_id AS id,
......@@ -173,57 +129,6 @@
m1.menu_id ASC
</select>
<select id="menuTreeListByMenuIds" resultType="cn.stylefeng.guns.base.pojo.node.ZTreeNode" databaseId="oracle">
SELECT
m1.menu_id AS id,
(
CASE
WHEN (m2.menu_id = 0 OR m2.menu_id IS NULL) THEN
0
ELSE
m2.menu_id
END
) AS "pId",
m1.name AS name,
(
CASE
WHEN (m2.menu_id = 0 OR m2.menu_id IS
NULL) THEN
'1'
ELSE
'0'
END
) as "open",
(
CASE
WHEN (m3.menu_id = 0 OR m3.menu_id
IS NULL) THEN
'0'
ELSE
'1'
END
) as "checked"
FROM
sys_menu m1
LEFT JOIN
sys_menu m2
ON m1.pcode = m2.code
left join (
SELECT
menu_id
FROM
sys_menu
WHERE
menu_id IN
<foreach collection="list" index="index" item="i" open="("
separator="," close=")">
#{i}
</foreach>
) m3 on m1.menu_id = m3.menu_id
ORDER BY
m1.menu_id ASC
</select>
<delete id="deleteRelationByMenu">
delete from sys_relation where menu_id = #{menuId}
</delete>
......@@ -292,19 +197,6 @@
</if>
</select>
<select id="selectMenuTree" resultType="java.util.Map" databaseId="oracle">
select
<include refid="Base_Column_List"/>
from sys_menu
where status = 'ENABLE'
<if test="condition != null and condition != ''">
and (name like '%' || #{condition} || '%' or code like '%' || #{condition} || '%')
</if>
<if test="level != null and level != ''">
and levels = #{level}
</if>
</select>
<select id="getMenusLikePcodes" resultType="cn.stylefeng.guns.sys.modular.system.entity.Menu">
select
<include refid="Base_Column_List"></include>
......@@ -314,15 +206,6 @@
</if>
</select>
<select id="getMenusLikePcodes" resultType="cn.stylefeng.guns.sys.modular.system.entity.Menu" databaseId="oracle">
select
<include refid="Base_Column_List"></include>
from sys_menu where 1 = 1
<if test="code != null and code != ''">
and pcodes LIKE '%[' || #{code} || ']%'
</if>
</select>
<select id="getMenusTypesByRoleIds" resultType="java.lang.String">
select DISTINCT system_type from
sys_relation rel
......
......@@ -28,13 +28,4 @@
order by create_time DESC
</select>
<select id="list" resultType="map" databaseId="oracle">
select
<include refid="Base_Column_List"></include>
from sys_notice
<if test="condition != null and condition != ''">
where title like '%' || #{condition} || '%' or content like '%' || #{condition} || '%'
</if>
order by create_time DESC
</select>
</mapper>
......@@ -35,20 +35,4 @@
</if>
</select>
<select id="getOperationLogs" resultType="map" databaseId="oracle">
select
<include refid="Base_Column_List"/>
from sys_operation_log where 1 = 1
<if test="beginTime != null and beginTime !='' and endTime != null and endTime != ''">
and create_time &gt;= to_date(#{beginTime}||'00:00:00','yyyy-mm-dd hh24:mi:ss')
and create_time &lt;= to_date(#{endTime}||'23:59:59','yyyy-mm-dd hh24:mi:ss')
</if>
<if test="logName != null and logName !=''">
and log_name like '%' || #{logName} || '%'
</if>
<if test="logType != null and logType !=''">
and log_type like '%' || #{logType} || '%'
</if>
</select>
</mapper>
......@@ -31,16 +31,6 @@
order by sort asc
</select>
<select id="selectRoles" resultType="map" databaseId="oracle">
select
<include refid="Base_Column_List"/>
from sys_role
<if test="condition != null">
where name like '%' || #{condition} || '%'
</if>
order by sort asc
</select>
<delete id="deleteRolesById">
delete from sys_relation where role_id = #{roleId}
</delete>
......@@ -51,12 +41,6 @@
else 'false' end) as "open" from sys_role
</select>
<select id="roleTreeList" resultType="cn.stylefeng.guns.base.pojo.node.ZTreeNode" databaseId="oracle">
select role_id AS id, pid as "pId",
name as name, (case when (pid = 0 or pid is null) then '1'
else '0' end) as "open" from sys_role
</select>
<select id="roleTreeListByRoleId" resultType="cn.stylefeng.guns.base.pojo.node.ZTreeNode">
SELECT
r.role_id as id,
......@@ -96,45 +80,6 @@
ORDER BY pid,sort ASC
</select>
<select id="roleTreeListByRoleId" resultType="cn.stylefeng.guns.base.pojo.node.ZTreeNode" databaseId="oracle">
SELECT
r.role_id as id,
pid as "pId",
name AS "name",
(
CASE
WHEN (pid = 0 OR pid IS NULL) THEN
'1'
ELSE
'0'
END
) as "open",
(
CASE
WHEN (r1.role_id = 0 OR r1.role_id IS NULL) THEN
'0'
ELSE
'1'
END
) as "checked"
FROM
sys_role r
LEFT JOIN (
SELECT
role_id
FROM
sys_role
WHERE
role_id IN
<foreach collection="array" index="index" item="i" open="(" separator="," close=")">
#{i}
</foreach>
) r1 ON r.role_id = r1.role_id
ORDER BY pid,sort ASC
</select>
<select id="listRole" resultType="map">
select
role_id as id,
......@@ -144,7 +89,6 @@
where 1=1
<if test="name != null and name != ''">
and name LIKE CONCAT('%', #{name},'%')
</if>
</select>
......
......@@ -4,24 +4,24 @@
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.stylefeng.guns.sys.modular.system.entity.User">
<id column="user_id" property="userId" />
<result column="avatar" property="avatar" />
<result column="account" property="account" />
<result column="password" property="password" />
<result column="salt" property="salt" />
<result column="name" property="name" />
<result column="birthday" property="birthday" />
<result column="sex" property="sex" />
<result column="email" property="email" />
<result column="phone" property="phone" />
<result column="role_id" property="roleId" />
<result column="dept_id" property="deptId" />
<result column="status" property="status" />
<result column="create_time" property="createTime" />
<result column="create_user" property="createUser" />
<result column="update_time" property="updateTime" />
<result column="update_user" property="updateUser" />
<result column="version" property="version" />
<id column="user_id" property="userId"/>
<result column="avatar" property="avatar"/>
<result column="account" property="account"/>
<result column="password" property="password"/>
<result column="salt" property="salt"/>
<result column="name" property="name"/>
<result column="birthday" property="birthday"/>
<result column="sex" property="sex"/>
<result column="email" property="email"/>
<result column="phone" property="phone"/>
<result column="role_id" property="roleId"/>
<result column="dept_id" property="deptId"/>
<result column="status" property="status"/>
<result column="create_time" property="createTime"/>
<result column="create_user" property="createUser"/>
<result column="update_time" property="updateTime"/>
<result column="update_user" property="updateUser"/>
<result column="version" property="version"/>
</resultMap>
<!-- 通用查询结果列 -->
......@@ -51,25 +51,6 @@
</if>
</select>
<select id="selectUsers" resultType="map" databaseId="oracle">
select
<include refid="Base_Column_List"/>
from sys_user
where status != 'DELETED'
<if test="name != null and name != ''">
and (phone like '%' || #{name} || '%'
or account like '%' || #{name} || '%'
or name like '%' || #{name} || '%')
</if>
<if test="deptId != null and deptId != 0">
and (dept_id = #{deptId} or dept_id in ( select dept_id from sys_dept where pids like '%[' || #{deptId} || ']%'))
</if>
<if test="beginTime != null and beginTime != '' and endTime != null and endTime != ''">
and create_time &gt;= to_date(#{beginTime}||'00:00:00','yyyy-mm-dd hh24:mi:ss')
and create_time &lt;= to_date(#{endTime}||'23:59:59','yyyy-mm-dd hh24:mi:ss')
</if>
</select>
<select id="selectUsersByRole" resultType="map">
select
user_id AS "userId", avatar AS "avatar", account AS "account", salt AS "salt", u.name AS "name", birthday AS "birthday"
......
......@@ -59,6 +59,11 @@ public class DictTypeParam implements Serializable, BaseValidatingParam {
*/
private Integer sort;
/**
* 字典类型编码
*/
private String dictTypeCode;
@Override
public String checkParam() {
return null;
......
......@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
......@@ -88,9 +89,16 @@ public class PositionServiceImpl extends ServiceImpl<PositionMapper, Position> i
if (userPosList != null && userPosList.size() > 0) {
for (UserPos userPos : userPosList) {
for (Map<String, Object> positionMap : list) {
if (userPos.getPosId().equals(positionMap.get("positionId"))) {
Object positionId = positionMap.get("positionId");
if (positionId instanceof BigDecimal) {
if (new BigDecimal(userPos.getPosId()).equals(positionId)) {
positionMap.put("selected", true);
}
} else {
if (userPos.getPosId().equals(positionId)) {
positionMap.put("selected", true);
}
}
}
}
}
......
@/* 页脚 */
<div class="layui-footer">
Copyright © 2019 <a href="https://www.stylefeng.cn" target="_blank">stylefeng</a> All rights reserved.
<span class="pull-right">Version 企业版 v2.0</span>
<span class="pull-right">Version 企业版 v3.2</span>
</div>
@/* 手机屏幕遮罩层 */
......
......@@ -19,7 +19,7 @@
<label class="layui-form-label">JDBC驱动<span style="color: red;">*</span></label>
<div class="layui-input-block">
<select name="jdbcDriver">
<option value="com.mysql.cj.jdbc.Driver">com.mysql.cj.jdbc.Driver</option>
<option value="com.mysql.cj.jdbc.Driver">Mysql</option>
</select>
</div>
</div>
......@@ -40,6 +40,9 @@
<div class="layui-input-block">
<input id="jdbcUrl" name="jdbcUrl" placeholder="jdbc的url" type="text" class="layui-input" lay-verify="required" required autocomplete="off"/>
</div>
<div class="layui-form-mid layui-word-aux" style="margin-left: 120px;">参考:<br/>
mysql:jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注</label>
......
......@@ -28,7 +28,7 @@
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.0</version>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
......
......@@ -25,9 +25,6 @@ layui.use(['form', 'admin', 'ax'], function () {
var form = layui.form;
var admin = layui.admin;
//让当前iframe弹层高度适应
admin.iframeAuto();
//表单提交事件
form.on('submit(btnSubmit)', function (data) {
var ajax = new $ax(Feng.ctxPath + "/${lowerEntity}/addItem", function (data) {
......
......@@ -25,9 +25,6 @@ layui.use(['form', 'admin', 'ax'], function () {
var form = layui.form;
var admin = layui.admin;
//让当前iframe弹层高度适应
admin.iframeAuto();
//获取详情信息,填充表单
var ajax = new $ax(Feng.ctxPath + "/${lowerEntity}/detail?${keyPropertyName}=" + Feng.getUrlParam("${keyPropertyName}"));
var result = ajax.start();
......
......@@ -61,19 +61,17 @@
<artifactId>docker-maven-plugin</artifactId>
<version>0.26.1</version>
<configuration>
<dockerHost>tcp://demo.stylefeng.cn:2376</dockerHost>
<certPath>_dockerCerts</certPath>
<dockerHost>unix:///var/run/docker.sock</dockerHost>
<images>
<image>
<alias>service</alias>
<name>stylefeng/${project.artifactId}-advanced:latest</name>
<name>localhost:6001/guns-api:${docker.img.version}</name>
<build>
<from>java:8</from>
<assembly>
<descriptor>docker-assembly.xml</descriptor>
</assembly>
<cmd>
<shell>java -jar /maven/${project.artifactId}.jar</shell>
<shell>java -jar -Xms512m -Xmx512m -Xss1024K -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m /maven/${project.artifactId}.jar</shell>
</cmd>
</build>
</image>
......
......@@ -15,9 +15,9 @@
*/
package cn.stylefeng.guns.config.datasource;
import cn.stylefeng.guns.base.db.factory.AtomikosFactory;
import cn.stylefeng.roses.core.config.properties.DruidProperties;
import cn.stylefeng.roses.core.mutidatasource.aop.MultiSourceExAop;
import com.atomikos.jdbc.AtomikosDataSourceBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
......@@ -26,8 +26,6 @@ import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
import java.util.Properties;
import static cn.stylefeng.guns.base.db.context.DataSourceContext.MASTER_DATASOURCE_NAME;
/**
......@@ -57,25 +55,7 @@ public class DataSourceConfig {
@Primary
@Bean
public DataSource dataSourcePrimary(@Qualifier("druidProperties") DruidProperties druidProperties) {
AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean();
atomikosDataSourceBean.setXaDataSourceClassName("com.alibaba.druid.pool.xa.DruidXADataSource");
atomikosDataSourceBean.setUniqueResourceName(MASTER_DATASOURCE_NAME);
atomikosDataSourceBean.setMaxPoolSize(100);
atomikosDataSourceBean.setBorrowConnectionTimeout(60);
Properties properties = druidProperties.createProperties();
//解决oracle数据库包connection holder is null
if (druidProperties.getUrl().contains("oracle")) {
properties.setProperty("removeAbandoned", "true");
properties.setProperty("removeAbandonedTimeoutMillis", "10000");
properties.setProperty("poolPreparedStatements", "false");
}
atomikosDataSourceBean.setXaProperties(properties);
return atomikosDataSourceBean;
return AtomikosFactory.create(MASTER_DATASOURCE_NAME, druidProperties);
}
/**
......
......@@ -61,13 +61,13 @@ public class SqlSessionFactoryConfig {
* 多数据源sqlSessionTemplate切换模板
*/
@Bean(name = "gunsSqlSessionTemplate")
public OptionalSqlSessionTemplate gunsSqlSessionTemplate(@Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactoryPrimary,
public OptionalSqlSessionTemplate gunsSqlSessionTemplate(@Qualifier("dataSourcePrimary") DataSource dataSourcePrimary,
@Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactoryPrimary,
SqlSessionFactoryCreator sqlSessionFactoryCreator,
DruidProperties druidProperties) {
//初始化数据源容器
try {
DataSourceContext.initDataSource(druidProperties);
DataSourceContext.initDataSource(druidProperties, dataSourcePrimary);
} catch (Exception e) {
log.error("初始化数据源容器错误!", e);
throw new DataSourceInitException(DataSourceInitException.ExEnum.INIT_DATA_SOURCE_ERROR);
......
#Oracle配置
#spring:
# datasource:
......@@ -11,9 +13,9 @@
#spring:
# datasource:
# driverClassName: net.sourceforge.jtds.jdbc.Driver
# url: jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=guns
# username: root
# password: root
# url: jdbc:jtds:sqlserver://127.0.0.1:3433;DatabaseName=guns
# username: guns
# password: 123456
# filters: wall,mergeStat
#PostgreSQL配置
......@@ -21,6 +23,15 @@
# datasource:
# driverClassName: org.postgresql.Driver
# url: jdbc:postgresql://127.0.0.1:5432/guns
# username: postgres
# password: 123456
# filters: wall,mergeStat
# Mysql数据库
#spring:
# datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
# username: root
# password: root
# filters: wall,mergeStat
......@@ -48,3 +59,6 @@ spring:
# 邮件发送(改为自己的账号)
mail:
from: sn93@qq.com
server:
port: 9666
......@@ -11,9 +11,9 @@
#spring:
# datasource:
# driverClassName: net.sourceforge.jtds.jdbc.Driver
# url: jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=guns
# username: root
# password: root
# url: jdbc:jtds:sqlserver://127.0.0.1:3433;DatabaseName=guns
# username: guns
# password: 123456
# filters: wall,mergeStat
#PostgreSQL配置
......@@ -21,6 +21,15 @@
# datasource:
# driverClassName: org.postgresql.Driver
# url: jdbc:postgresql://127.0.0.1:5432/guns
# username: postgres
# password: 123456
# filters: wall,mergeStat
# Mysql数据库
#spring:
# datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://127.0.0.1:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT
# username: root
# password: root
# filters: wall,mergeStat
......
......@@ -21,9 +21,18 @@ spring:
max-actives: -1
mybatis-plus:
typeAliasesPackage: cn.stylefeng.guns.modular.system.model
mapper-locations:
- classpath*:cn/stylefeng/guns/**/mapping/*.xml
mapper-locations: classpath*:cn/stylefeng/guns/**/mapping/*.xml
configuration:
map-underscore-to-camel-case: true
cache-enabled: true
lazy-loading-enabled: true
multiple-result-sets-enabled: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
banner: false
db-config:
id-type: assign_id
table-underline: true
log:
path: _app_logs
\ No newline at end of file
......@@ -15,7 +15,7 @@
<version>1.0.0</version>
<name>guns-vip</name>
<description>guns的vip版本</description>
<description>guns企业单体版</description>
<packaging>pom</packaging>
......@@ -29,9 +29,6 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mysql-connector-java.version>8.0.11</mysql-connector-java.version>
<oracle.version>11.2.0.3</oracle.version>
<sqlserver.version>1.3.1</sqlserver.version>
<pgsql.version>42.2.5</pgsql.version>
<kaptcha.version>2.3.2</kaptcha.version>
<beetl.version>2.9.3</beetl.version>
<swagger.version>2.9.2</swagger.version>
......@@ -40,6 +37,7 @@
<just.auth.version>1.9.5</just.auth.version>
<activiti.version>6.0.0</activiti.version>
<batik.version>1.7</batik.version>
<docker.img.version>latest</docker.img.version>
</properties>
<dependencyManagement>
......@@ -50,7 +48,7 @@
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>kernel-core</artifactId>
<version>1.2.6</version>
<version>1.2.8</version>
</dependency>
<!--数据库驱动,可根据自己需要自行删减-->
......@@ -59,21 +57,6 @@
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector-java.version}</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>net.sourceforge.jtds</groupId>-->
<!-- <artifactId>jtds</artifactId>-->
<!-- <version>${sqlserver.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.oracle</groupId>-->
<!-- <artifactId>ojdbc6</artifactId>-->
<!-- <version>${oracle.version}</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.postgresql</groupId>-->
<!-- <artifactId>postgresql</artifactId>-->
<!-- <version>${pgsql.version}</version>-->
<!-- </dependency>-->
<!--beetl模板引擎-->
<dependency>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment