diff --git a/pom.xml b/pom.xml index cb84441d6..312f06daa 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,9 @@ yudao-module-pay yudao-module-report yudao-module-mp + yudao-module-market + yudao-module-market/yudao-module-market-api + yudao-module-market/yudao-module-market-biz ${project.artifactId} diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml index 17e1cb508..74f52736f 100644 --- a/yudao-dependencies/pom.xml +++ b/yudao-dependencies/pom.xml @@ -31,6 +31,7 @@ 3.6.1 1.4.5 3.18.0 + 0.3.2 8.1.2.141 @@ -287,6 +288,24 @@ ${revision} + + cn.iocoder.cloud + yudao-spring-boot-starter-clickhouse + ${revision} + + + + org.redisson + redisson-spring-boot-starter + ${redisson.version} + + + + ru.yandex.clickhouse + clickhouse-jdbc + ${clickhouse.version} + + org.redisson redisson-spring-boot-starter diff --git a/yudao-framework/pom.xml b/yudao-framework/pom.xml index c2e7d6123..594948931 100644 --- a/yudao-framework/pom.xml +++ b/yudao-framework/pom.xml @@ -15,6 +15,7 @@ yudao-spring-boot-starter-banner yudao-spring-boot-starter-mybatis yudao-spring-boot-starter-redis + yudao-spring-boot-starter-clickhouse yudao-spring-boot-starter-web yudao-spring-boot-starter-security @@ -26,6 +27,7 @@ yudao-spring-boot-starter-mq yudao-spring-boot-starter-rpc + yudao-spring-boot-starter-excel yudao-spring-boot-starter-test @@ -44,6 +46,7 @@ yudao-spring-boot-starter-flowable yudao-spring-boot-starter-captcha yudao-spring-boot-starter-desensitize + yudao-spring-boot-starter-clickhouse yudao-framework diff --git a/yudao-framework/yudao-spring-boot-starter-clickhouse/pom.xml b/yudao-framework/yudao-spring-boot-starter-clickhouse/pom.xml new file mode 100644 index 000000000..251c5de62 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-clickhouse/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + cn.iocoder.cloud + yudao-framework + ${revision} + + + yudao-spring-boot-starter-clickhouse + ${project.artifactId} + 验证码拓展 + 1. springBoot集成clickhouse数据源 + + jar + + + + cn.iocoder.cloud + yudao-common + + + + ru.yandex.clickhouse + clickhouse-jdbc + + + org.springframework.boot + spring-boot-autoconfigure + + + com.baomidou + mybatis-plus-boot-starter + + + \ No newline at end of file diff --git a/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/ClickHouseSqlInjector.java b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/ClickHouseSqlInjector.java new file mode 100644 index 000000000..60461ecc8 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/ClickHouseSqlInjector.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.framework.clickhouse.injector; + +import cn.iocoder.yudao.framework.clickhouse.injector.enums.SqlMethodDiv; +import cn.iocoder.yudao.framework.clickhouse.injector.methods.DeleteClickHouse; +import cn.iocoder.yudao.framework.clickhouse.injector.methods.UpdateByIdClickHouse; +import cn.iocoder.yudao.framework.clickhouse.injector.methods.UpdateClickHouse; +import com.baomidou.mybatisplus.core.injector.AbstractMethod; +import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector; +import com.baomidou.mybatisplus.core.metadata.TableInfo; + + +import java.util.List; + +/** + * 注册方法 + * + * @author coder + */ +public class ClickHouseSqlInjector extends DefaultSqlInjector { + + @Override + public List getMethodList(Class mapperClass, TableInfo tableInfo) { + /** + * 这里很重要,先要通过父类方法,获取到原有的集合,不然会自带的通用方法会失效的 + */ + List methodList = super.getMethodList(mapperClass,tableInfo); + /*** + * 添加自定义方法类 + */ + methodList.add(new UpdateByIdClickHouse(SqlMethodDiv.UPDATE_BY_ID.getMethod())); + methodList.add(new UpdateClickHouse(SqlMethodDiv.UPDATE.getMethod())); + methodList.add(new DeleteClickHouse(SqlMethodDiv.DELETE_BY_ID.getMethod())); + return methodList; + } +} diff --git a/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/config/CkProperties.java b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/config/CkProperties.java new file mode 100644 index 000000000..57d088492 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/config/CkProperties.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.framework.clickhouse.injector.config;//package com.w3.framework.clickhouse.config; +// +//import lombok.Data; +//import org.springframework.boot.context.properties.ConfigurationProperties; +// +///** +// * jdbc基本配置参数 +// */ +//@ConfigurationProperties(prefix = "spring.datasource.click") +//@Data +//public class CkProperties { +// +// public String address; +// +// public String username; +// +// public String password; +// +// public String dbName; +// +// public int socketTimeout; +// +// private String driverClassName; +// +// private String url; +// +// private int initialSize; +// +// private int maxActive; +// +// private int minIdle; +// +// private int maxWait; +// +//} diff --git a/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/config/ClickHouseConfig.java b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/config/ClickHouseConfig.java new file mode 100644 index 000000000..7a5a219a9 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/config/ClickHouseConfig.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.framework.clickhouse.injector.config;//package com.w3.framework.clickhouse.config; +// +//import lombok.Data; +//import org.springframework.boot.autoconfigure.AutoConfiguration; +//import org.springframework.boot.context.properties.EnableConfigurationProperties; +//import org.springframework.context.annotation.Bean; +//import ru.yandex.clickhouse.ClickHouseDataSource; +//import ru.yandex.clickhouse.settings.ClickHouseProperties; +// +// +///** +// * @desc ClickHouse基本配置参数 +// * SQL方式执行 +// */ +//@AutoConfiguration +//@EnableConfigurationProperties({CkProperties.class}) +//@Data +//public class ClickHouseConfig { +// +//// private static ClickHouseDataSource clickHouseDataSource; +// +// @Bean +// public ClickHouseDataSource clickHouseDataSource(CkProperties ckProperties) { +// ClickHouseProperties properties = new ClickHouseProperties(); +// properties.setUser(ckProperties.username); +// properties.setPassword(ckProperties.getPassword()); +// properties.setDatabase(ckProperties.dbName); +// properties.setSocketTimeout(ckProperties.socketTimeout); +//// clickHouseDataSource = new ClickHouseDataSource(clickhouseProperties.address, properties); +//// return clickHouseDataSource; +// return new ClickHouseDataSource(ckProperties.address, properties); +// } +// +//// public static List> exeSql(String sql) { +//// System.out.println("cliockhouse 执行sql:" + sql); +//// Connection connection = null; +//// try { +//// connection = clickHouseDataSource.getConnection(); +//// assert connection != null; +//// Statement statement = connection.createStatement(); +//// ResultSet results = statement.executeQuery(sql); +//// ResultSetMetaData rsmd = results.getMetaData(); +//// List> list = new ArrayList<>(); +//// while (results.next()) { +//// Map row = new HashMap<>(); +//// for (int i = 1; i <= rsmd.getColumnCount(); i++) { +//// row.put(rsmd.getColumnName(i), results.getString(rsmd.getColumnName(i))); +//// } +//// list.add(row); +//// } +//// return list; +//// } catch (SQLException e) { +//// e.printStackTrace(); +//// } +//// return null; +//// } +//} diff --git a/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/enums/SqlMethodDiv.java b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/enums/SqlMethodDiv.java new file mode 100644 index 000000000..645448de2 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/enums/SqlMethodDiv.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.framework.clickhouse.injector.enums; + +public enum SqlMethodDiv { + + /** + * 删除 + */ + DELETE_BY_ID("deleteByIdClickHouse", "根据ID 删除一条数据", ""), + + /** + * 逻辑删除 + */ + LOGIC_DELETE_BY_ID("deleteByIdClickHouse", "根据ID 逻辑删除一条数据", ""), + + /** + * 修改 条件主键 + */ + UPDATE_BY_ID("updateByIdClickHouse", "根据ID 选择修改数据", ""), + /** + * 修改 条件主键 + */ + UPDATE("updateClickHouse", "根据 whereEntity 条件,更新记录", ""); + + private final String method; + private final String desc; + private final String sql; + + SqlMethodDiv(String method, String desc, String sql) { + this.method = method; + this.desc = desc; + this.sql = sql; + } + + public String getMethod() { + return method; + } + + public String getDesc() { + return desc; + } + + public String getSql() { + return sql; + } +} diff --git a/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/methods/DeleteClickHouse.java b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/methods/DeleteClickHouse.java new file mode 100644 index 000000000..ebb2d4628 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/methods/DeleteClickHouse.java @@ -0,0 +1,77 @@ +package cn.iocoder.yudao.framework.clickhouse.injector.methods; + +import cn.iocoder.yudao.framework.clickhouse.injector.enums.SqlMethodDiv; +import com.baomidou.mybatisplus.core.injector.AbstractMethod; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlSource; + + +/** + * @author coder + * @date 2023-08-27 + * @desc 通过MybatisPlus源码 扩展修改 + */ +public class DeleteClickHouse extends AbstractMethod { + + public DeleteClickHouse(String methodName) { + super(methodName); + } + + @Override + public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { + String sql; + SqlMethodDiv sqlMethod = SqlMethodDiv.LOGIC_DELETE_BY_ID; + if (tableInfo.isWithLogicDelete()) { + sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlLogicSet(tableInfo), + tableInfo.getKeyColumn(), tableInfo.getKeyProperty(), + tableInfo.getLogicDeleteSql(true, true)); + SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, Object.class); + return addUpdateMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource); + } else { + sqlMethod = SqlMethodDiv.DELETE_BY_ID; + sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), tableInfo.getKeyColumn(), + tableInfo.getKeyProperty()); + SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, Object.class); + return this.addDeleteMappedStatement(mapperClass, sqlMethod.getMethod(), sqlSource); + } + } + + + /** + * SQL 更新 set 语句 + * + * @param logic 是否逻辑删除注入器 + * @param ew 是否存在 UpdateWrapper 条件 + * @param table 表信息 + * @param alias 别名 + * @param prefix 前缀 + * @return sql + */ + @Override + protected String sqlSet(boolean logic, boolean ew, TableInfo table, boolean judgeAliasNull, final String alias, + final String prefix) { + String sqlScript = table.getAllSqlSet(logic, prefix); + if (judgeAliasNull) { + sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", alias), true); + } + if (ew) { + sqlScript += NEWLINE; + sqlScript += SqlScriptUtils.convertIf(SqlScriptUtils.unSafeParam(U_WRAPPER_SQL_SET), + String.format("%s != null and %s != null", WRAPPER, U_WRAPPER_SQL_SET), false); + } + sqlScript = convertSet(sqlScript); + return sqlScript; + } + + /** + * 去掉sest 和 suffixOverrides=","代表去掉第一个逗号 + * + * @param sqlScript + * @return + */ + public static String convertSet(final String sqlScript) { + return " " + sqlScript + "\n" + ""; + } +} diff --git a/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/methods/UpdateByIdClickHouse.java b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/methods/UpdateByIdClickHouse.java new file mode 100644 index 000000000..8d8ca8a6e --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/methods/UpdateByIdClickHouse.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.framework.clickhouse.injector.methods; + +import cn.iocoder.yudao.framework.clickhouse.injector.enums.SqlMethodDiv; +import com.baomidou.mybatisplus.core.injector.AbstractMethod; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; +import org.apache.ibatis.executor.keygen.NoKeyGenerator; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlSource; + +/** + * @author coder + * @date 2023-08-27 + * @desc 通过MybatisPlus源码 扩展修改 + */ +public class UpdateByIdClickHouse extends AbstractMethod { + + public UpdateByIdClickHouse(String methodName) { + super(methodName); + } + + @Override + public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { + SqlMethodDiv sqlMethod = SqlMethodDiv.UPDATE_BY_ID; + + final String additional = optlockVersion(tableInfo) + tableInfo.getLogicDeleteSql(true, true); + String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), + this.sqlSet(tableInfo.isWithLogicDelete(), false, tableInfo, false, ENTITY, ENTITY_DOT), + tableInfo.getKeyColumn(), ENTITY_DOT + tableInfo.getKeyProperty(), additional); + SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); + return this.addInsertMappedStatement(mapperClass, modelClass, + sqlMethod.getMethod(), sqlSource, new NoKeyGenerator(), null, null); + } + + + /** + * SQL 更新 set 语句 + * + * @param logic 是否逻辑删除注入器 + * @param ew 是否存在 UpdateWrapper 条件 + * @param table 表信息 + * @param alias 别名 + * @param prefix 前缀 + * @return sql + */ + @Override + protected String sqlSet(boolean logic, boolean ew, TableInfo table, boolean judgeAliasNull, final String alias, + final String prefix) { + String sqlScript = table.getAllSqlSet(logic, prefix); + if (judgeAliasNull) { + sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", alias), true); + } + if (ew) { + sqlScript += NEWLINE; + sqlScript += SqlScriptUtils.convertIf(SqlScriptUtils.unSafeParam(U_WRAPPER_SQL_SET), + String.format("%s != null and %s != null", WRAPPER, U_WRAPPER_SQL_SET), false); + } + sqlScript = convertSet(sqlScript); + return sqlScript; + } + + /** + * 去掉sest 和 suffixOverrides=","代表去掉第一个逗号 + * + * @param sqlScript + * @return + */ + public static String convertSet(final String sqlScript) { + return " " + sqlScript + "\n" + ""; + } +} diff --git a/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/methods/UpdateClickHouse.java b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/methods/UpdateClickHouse.java new file mode 100644 index 000000000..db72584f0 --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/java/cn/iocoder/yudao/framework/clickhouse/injector/methods/UpdateClickHouse.java @@ -0,0 +1,68 @@ +package cn.iocoder.yudao.framework.clickhouse.injector.methods; + +import cn.iocoder.yudao.framework.clickhouse.injector.enums.SqlMethodDiv; +import com.baomidou.mybatisplus.core.injector.AbstractMethod; +import com.baomidou.mybatisplus.core.metadata.TableInfo; +import com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlSource; + + +/** + * @author coder + * @date 2023-08-27 + * @desc 通过MybatisPlus源码 扩展修改 + */ +public class UpdateClickHouse extends AbstractMethod { + + public UpdateClickHouse(String methodName) { + super(methodName); + } + + @Override + public MappedStatement injectMappedStatement(Class mapperClass, Class modelClass, TableInfo tableInfo) { + SqlMethodDiv sqlMethod = SqlMethodDiv.UPDATE; + String sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), + sqlSet(true, true, tableInfo, true, ENTITY, ENTITY_DOT), + sqlWhereEntityWrapper(true, tableInfo), sqlComment()); + SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass); + return this.addUpdateMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource); + } + + + /** + * SQL 更新 set 语句 + * + * @param logic 是否逻辑删除注入器 + * @param ew 是否存在 UpdateWrapper 条件 + * @param table 表信息 + * @param alias 别名 + * @param prefix 前缀 + * @return sql + */ + @Override + protected String sqlSet(boolean logic, boolean ew, TableInfo table, boolean judgeAliasNull, final String alias, + final String prefix) { + String sqlScript = table.getAllSqlSet(logic, prefix); + if (judgeAliasNull) { + sqlScript = SqlScriptUtils.convertIf(sqlScript, String.format("%s != null", alias), true); + } + if (ew) { + sqlScript += NEWLINE; + sqlScript += SqlScriptUtils.convertIf(SqlScriptUtils.unSafeParam(U_WRAPPER_SQL_SET), + String.format("%s != null and %s != null", WRAPPER, U_WRAPPER_SQL_SET), false); + } + sqlScript = convertSet(sqlScript); + return sqlScript; + } + + /** + * 去掉sest 和 suffixOverrides=","代表去掉第一个逗号 + * + * @param sqlScript + * @return + */ + public static String convertSet(final String sqlScript) { + return " " + sqlScript + "\n" + ""; + } +} diff --git a/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/resources/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/resources/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 000000000..ec0eac9ac --- /dev/null +++ b/yudao-framework/yudao-spring-boot-starter-clickhouse/src/main/resources/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +## com.w3.framework.clickhouse.config.ClickHouseConfig \ No newline at end of file diff --git a/yudao-module-market/pom.xml b/yudao-module-market/pom.xml new file mode 100644 index 000000000..d780da24a --- /dev/null +++ b/yudao-module-market/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + cn.iocoder.cloud + yudao + ${revision} + + + + yudao-module-market-api + yudao-module-market-biz + + yudao-module-market + pom + + ${project.artifactId} + + market 模块,主要提供两块能力: + 1. 交易市场数据收集,基本清理维护 + 2. 定时任务采集数据计算数据,对外提供数据接口。 + + + + \ No newline at end of file diff --git a/yudao-module-market/yudao-module-market-api/pom.xml b/yudao-module-market/yudao-module-market-api/pom.xml new file mode 100644 index 000000000..a54093eaf --- /dev/null +++ b/yudao-module-market/yudao-module-market-api/pom.xml @@ -0,0 +1,39 @@ + + + 4.0.0 + + cn.iocoder.cloud + yudao-module-market + ${revision} + + yudao-module-market-api + jar + + ${project.artifactId} + + market 模块 API,暴露给其它模块调用 + + + + + cn.iocoder.cloud + yudao-common + + + + + io.swagger.core.v3 + swagger-annotations + provided + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + \ No newline at end of file diff --git a/yudao-module-market/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/enums/ErrorCodeConstants.java b/yudao-module-market/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/enums/ErrorCodeConstants.java new file mode 100644 index 000000000..57bb01d68 --- /dev/null +++ b/yudao-module-market/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/enums/ErrorCodeConstants.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.market.enums; + +import cn.iocoder.yudao.framework.common.exception.ErrorCode; + +/** + * Market 错误码枚举类 TODO + * + * market 系统,使用 1-008-000-000 段 + */ +public interface ErrorCodeConstants { + + // ========== 公众号账号 1008000000============ + ErrorCode ACCOUNT_NOT_EXISTS = new ErrorCode(1008000000, "公众号账号不存在"); + ErrorCode ACCOUNT_GENERATE_QR_CODE_FAIL = new ErrorCode(1008000001, "生成公众号二维码失败,原因:{}"); + ErrorCode ACCOUNT_CLEAR_QUOTA_FAIL = new ErrorCode(1008000002, "清空公众号的 API 配额失败,原因:{}"); + + // ========== 公众号统计 1008001000============ + ErrorCode STATISTICS_GET_USER_SUMMARY_FAIL = new ErrorCode(1008001000, "获取粉丝增减数据失败,原因:{}"); + ErrorCode STATISTICS_GET_USER_CUMULATE_FAIL = new ErrorCode(1008001001, "获得粉丝累计数据失败,原因:{}"); + ErrorCode STATISTICS_GET_UPSTREAM_MESSAGE_FAIL = new ErrorCode(1008001002, "获得消息发送概况数据失败,原因:{}"); + ErrorCode STATISTICS_GET_INTERFACE_SUMMARY_FAIL = new ErrorCode(1008001003, "获得接口分析数据失败,原因:{}"); + + // ========== 公众号标签 1008002000============ + ErrorCode TAG_NOT_EXISTS = new ErrorCode(1008002000, "标签不存在"); + ErrorCode TAG_CREATE_FAIL = new ErrorCode(1008002001, "创建标签失败,原因:{}"); + ErrorCode TAG_UPDATE_FAIL = new ErrorCode(1008002002, "更新标签失败,原因:{}"); + ErrorCode TAG_DELETE_FAIL = new ErrorCode(1008002003, "删除标签失败,原因:{}"); + ErrorCode TAG_GET_FAIL = new ErrorCode(1008002004, "获得标签失败,原因:{}"); + + // ========== 公众号粉丝 1008003000============ + ErrorCode USER_NOT_EXISTS = new ErrorCode(1008003000, "粉丝不存在"); + ErrorCode USER_UPDATE_TAG_FAIL = new ErrorCode(1008003001, "更新粉丝标签失败,原因:{}"); + + // ========== 公众号素材 1008004000============ + ErrorCode MATERIAL_NOT_EXISTS = new ErrorCode(1008004000, "素材不存在"); + ErrorCode MATERIAL_UPLOAD_FAIL = new ErrorCode(1008004001, "上传素材失败,原因:{}"); + ErrorCode MATERIAL_IMAGE_UPLOAD_FAIL = new ErrorCode(1008004002, "上传图片失败,原因:{}"); + ErrorCode MATERIAL_DELETE_FAIL = new ErrorCode(1008004003, "删除素材失败,原因:{}"); + + // ========== 公众号消息 1008005000============ + ErrorCode MESSAGE_SEND_FAIL = new ErrorCode(1008005000, "发送消息失败,原因:{}"); + + // ========== 公众号发布能力 1008006000============ + ErrorCode FREE_PUBLISH_LIST_FAIL = new ErrorCode(1008006000, "获得已成功发布列表失败,原因:{}"); + ErrorCode FREE_PUBLISH_SUBMIT_FAIL = new ErrorCode(1008006001, "提交发布失败,原因:{}"); + ErrorCode FREE_PUBLISH_DELETE_FAIL = new ErrorCode(1008006002, "删除发布失败,原因:{}"); + + // ========== 公众号草稿 1008007000============ + ErrorCode DRAFT_LIST_FAIL = new ErrorCode(1008007000, "获得草稿列表失败,原因:{}"); + ErrorCode DRAFT_CREATE_FAIL = new ErrorCode(1008007001, "创建草稿失败,原因:{}"); + ErrorCode DRAFT_UPDATE_FAIL = new ErrorCode(1008007002, "更新草稿失败,原因:{}"); + ErrorCode DRAFT_DELETE_FAIL = new ErrorCode(1008007003, "删除草稿失败,原因:{}"); + + // ========== 公众号菜单 1008008000============ + ErrorCode MENU_SAVE_FAIL = new ErrorCode(1008008000, "创建菜单失败,原因:{}"); + ErrorCode MENU_DELETE_FAIL = new ErrorCode(1008008001, "删除菜单失败,原因:{}"); + + // ========== 公众号自动回复 1008009000============ + ErrorCode AUTO_REPLY_NOT_EXISTS = new ErrorCode(1008009000, "自动回复不存在"); + ErrorCode AUTO_REPLY_ADD_SUBSCRIBE_FAIL_EXISTS = new ErrorCode(1008009001, "操作失败,原因:已存在关注时的回复"); + ErrorCode AUTO_REPLY_ADD_MESSAGE_FAIL_EXISTS = new ErrorCode(1008009002, "操作失败,原因:已存在该消息类型的回复"); + ErrorCode AUTO_REPLY_ADD_KEYWORD_FAIL_EXISTS = new ErrorCode(1008009003, "操作失败,原因:已关在该关键字的回复"); + +} diff --git a/yudao-module-market/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/package-info.java b/yudao-module-market/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/package-info.java new file mode 100644 index 000000000..caf3ff495 --- /dev/null +++ b/yudao-module-market/yudao-module-market-api/src/main/java/cn/iocoder/yudao/module/market/package-info.java @@ -0,0 +1,8 @@ +/** + * market 模块,我们放市场数据收集处理业务模块。 + * 例如说:提供市场数据收集,基础清理,基础计算,基础统计,消息通等功能 + * + * 1. Controller URL:以 /market/ 开头,避免和其它 Module 冲突 + * 2. DataObject 表名:以 market_ 开头,方便在数据库中区分 + */ +package cn.iocoder.yudao.module.market; diff --git a/yudao-module-market/yudao-module-market-biz/Dockerfile b/yudao-module-market/yudao-module-market-biz/Dockerfile new file mode 100644 index 000000000..b0dc05f2f --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/Dockerfile @@ -0,0 +1,19 @@ +## AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性 +## 感谢复旦核博士的建议!灰子哥,牛皮! +FROM eclipse-temurin:8-jre + +## 创建目录,并使用它作为工作目录 +RUN mkdir -p /yudao-module-market-biz +WORKDIR /yudao-module-market-biz +## 将后端项目的 Jar 文件,复制到镜像中 +COPY ./target/yudao-module-market-biz.jar app.jar + +## 设置 TZ 时区 +## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 +ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m" + +## 暴露后端项目的 48080 端口 +EXPOSE 48082 + +## 启动后端项目 +CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar diff --git a/yudao-module-market/yudao-module-market-biz/pom.xml b/yudao-module-market/yudao-module-market-biz/pom.xml new file mode 100644 index 000000000..75e20383b --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/pom.xml @@ -0,0 +1,139 @@ + + + 4.0.0 + + cn.iocoder.cloud + yudao-module-market + ${revision} + + yudao-module-market-biz + jar + + ${project.artifactId} + + market 模块,主要提供两块能力: + 1. 市场数据收集维护,基础清理 + 2. 对外提供数据http接口提供 + + + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + + + cn.iocoder.cloud + yudao-module-market-api + ${revision} + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-banner + + + cn.iocoder.cloud + yudao-spring-boot-starter-biz-operatelog + + + cn.iocoder.cloud + yudao-spring-boot-starter-biz-tenant + + + cn.iocoder.cloud + yudao-spring-boot-starter-biz-error-code + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-security + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-mybatis + + + + cn.iocoder.cloud + yudao-spring-boot-starter-redis + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-job + + + + cn.iocoder.cloud + yudao-spring-boot-starter-test + test + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-excel + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-monitor + + + + de.codecentric + spring-boot-admin-starter-server + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + true + + + + + repackage + + + + + + + \ No newline at end of file diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/MarketServerApplication.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/MarketServerApplication.java new file mode 100644 index 000000000..9b0667060 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/MarketServerApplication.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.market; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 项目的启动类 + * + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + * + * @author 芋道源码 + */ +@SpringBootApplication +public class MarketServerApplication { + + public static void main(String[] args) { + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + + SpringApplication.run(MarketServerApplication.class, args); + + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + // 如果你碰到启动的问题,请认真阅读 https://cloud.iocoder.cn/quick-start/ 文章 + } + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/market/TokenInfoController.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/market/TokenInfoController.java new file mode 100644 index 000000000..b0f904367 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/market/TokenInfoController.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.market.controller.admin.market; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.market.service.info.TokenInfoService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 公众号账号") +@RestController +@RequestMapping("/mp/account") +@Validated +public class TokenInfoController { + + @Resource + private TokenInfoService tokenInfoService; + + + + +// @GetMapping("/page") +// @Operation(summary = "获得公众号账号分页") +// @PreAuthorize("@ss.hasPermission('mp:account:query')") +// public CommonResult> getAccountPage(@Valid MpAccountPageReqVO pageVO) { +// PageResult pageResult = tokenInfoService.getAccountPage(pageVO); +// return success(MpAccountConvert.INSTANCE.convertPage(pageResult)); +// } + + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/market/vo/TokenInfoBaseVO.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/market/vo/TokenInfoBaseVO.java new file mode 100644 index 000000000..8623fb2ed --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/market/vo/TokenInfoBaseVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.market.controller.admin.market.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; + +/** + * 公众号账号 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + * + * @author fengdan + */ +@Data +public class TokenInfoBaseVO { + + @Schema(description = "公众号名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道源码") + @NotEmpty(message = "公众号名称不能为空") + private String name; + + @Schema(description = "公众号微信号", requiredMode = Schema.RequiredMode.REQUIRED, example = "yudaoyuanma") + @NotEmpty(message = "公众号微信号不能为空") + private String account; + + @Schema(description = "公众号 appId", requiredMode = Schema.RequiredMode.REQUIRED, example = "wx5b23ba7a5589ecbb") + @NotEmpty(message = "公众号 appId 不能为空") + private String appId; + + @Schema(description = "公众号密钥", requiredMode = Schema.RequiredMode.REQUIRED, example = "3a7b3b20c537e52e74afd395eb85f61f") + @NotEmpty(message = "公众号密钥不能为空") + private String appSecret; + + @Schema(description = "公众号 token", requiredMode = Schema.RequiredMode.REQUIRED, example = "kangdayuzhen") + @NotEmpty(message = "公众号 token 不能为空") + private String token; + + @Schema(description = "加密密钥", example = "gjN+Ksei") + private String aesKey; + + @Schema(description = "备注", example = "请关注芋道源码,学习技术") + private String remark; + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/market/vo/TokenInfoageReqVO.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/market/vo/TokenInfoageReqVO.java new file mode 100644 index 000000000..e1944ce16 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/market/vo/TokenInfoageReqVO.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.market.controller.admin.market.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +@Schema(description = "管理后台 - 公众号账号分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TokenInfoageReqVO extends PageParam { + + @Schema(name = "公众号名称", description = "模糊匹配") + private String name; + + @Schema(name = "公众号账号", description = "模糊匹配") + private String account; + + @Schema(name = "公众号 appid", description = "模糊匹配") + private String appId; + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/material/MpMaterialController.http b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/material/MpMaterialController.http new file mode 100644 index 000000000..74b8f40b6 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/material/MpMaterialController.http @@ -0,0 +1,5 @@ +### 请求 /mp/material/page 接口 => 成功 +GET {{baseUrl}}/mp/material/page?permanent=true&pageNo=1&pageSize=10 +Content-Type: application/json +Authorization: Bearer {{token}} +tenant-id: {{adminTenentId}} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/material/MpMaterialController.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/material/MpMaterialController.java new file mode 100644 index 000000000..144b61976 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/material/MpMaterialController.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.market.controller.admin.material; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.market.service.rank.TokenRankService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.io.IOException; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 公众号素材") +@RestController +@RequestMapping("/mp/material") +@Validated +public class MpMaterialController { + + @Resource + private TokenRankService tokenRankService; + +// @GetMapping("/page") +// @Operation(summary = "获得公众号账号分页") +// @PreAuthorize("@ss.hasPermission('mp:account:query')") +// public CommonResult> getAccountPage(@Valid MpAccountPageReqVO pageVO) { +// PageResult pageResult = tokenRankService.getAccountPage(pageVO); +// return success(MpAccountConvert.INSTANCE.convertPage(pageResult)); +// } + + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/material/vo/TokenRankPageReqVO.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/material/vo/TokenRankPageReqVO.java new file mode 100644 index 000000000..fe83c5186 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/admin/material/vo/TokenRankPageReqVO.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.market.controller.admin.material.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import javax.validation.constraints.NotNull; + +@Schema(description = "管理后台 - 公众号素材的分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TokenRankPageReqVO extends PageParam { + + @Schema(description = "公众号账号的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") + @NotNull(message = "公众号账号的编号不能为空") + private Long accountId; + + @Schema(description = "是否永久", example = "true") + private Boolean permanent; + + @Schema(description = "文件类型 参见 WxConsts.MediaFileType 枚举", example = "image") + private String type; + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/package-info.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/package-info.java new file mode 100644 index 000000000..04ce3aa16 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/controller/package-info.java @@ -0,0 +1,6 @@ +/** + * 提供 RESTful API 给前端: + * 1. admin 包:提供给管理后台 yudao-ui-admin 前端项目 + * 2. app 包:提供给用户 APP yudao-ui-app 前端项目,它的 Controller 和 VO 都要添加 App 前缀,用于和管理后台进行区分 + */ +package cn.iocoder.yudao.module.market.controller; diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/convert/account/MpAccountConvert.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/convert/account/MpAccountConvert.java new file mode 100644 index 000000000..05a861822 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/convert/account/MpAccountConvert.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.market.convert.account; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mp.controller.admin.account.vo.MpAccountCreateReqVO; +import cn.iocoder.yudao.module.mp.controller.admin.account.vo.MpAccountRespVO; +import cn.iocoder.yudao.module.mp.controller.admin.account.vo.MpAccountSimpleRespVO; +import cn.iocoder.yudao.module.mp.controller.admin.account.vo.MpAccountUpdateReqVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +@Mapper +public interface MpAccountConvert { + + MpAccountConvert INSTANCE = Mappers.getMapper(MpAccountConvert.class); + + MpAccountDO convert(MpAccountCreateReqVO bean); + + MpAccountDO convert(MpAccountUpdateReqVO bean); + + MpAccountRespVO convert(MpAccountDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/convert/material/MpMaterialConvert.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/convert/material/MpMaterialConvert.java new file mode 100644 index 000000000..dc842ac51 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/convert/material/MpMaterialConvert.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.market.convert.material; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialRespVO; +import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialUploadRespVO; +import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO; +import cn.iocoder.yudao.module.mp.dal.dataobject.material.MpMaterialDO; +import me.chanjar.weixin.mp.bean.material.WxMpMaterial; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; +import org.mapstruct.factory.Mappers; + +import java.io.File; + +@Mapper +public interface MpMaterialConvert { + + MpMaterialConvert INSTANCE = Mappers.getMapper(MpMaterialConvert.class); + + @Mappings({ + @Mapping(target = "id", ignore = true), + @Mapping(source = "account.id", target = "accountId"), + @Mapping(source = "account.appId", target = "appId"), + @Mapping(source = "name", target = "name") + }) + MpMaterialDO convert(String mediaId, String type, String url, MpAccountDO account, + String name); + + @Mappings({ + @Mapping(target = "id", ignore = true), + @Mapping(source = "account.id", target = "accountId"), + @Mapping(source = "account.appId", target = "appId"), + @Mapping(source = "name", target = "name") + }) + MpMaterialDO convert(String mediaId, String type, String url, MpAccountDO account, + String name, String title, String introduction, String mpUrl); + + MpMaterialUploadRespVO convert(MpMaterialDO bean); + + default WxMpMaterial convert(String name, File file, String title, String introduction) { + return new WxMpMaterial(name, file, title, introduction); + } + + PageResult convertPage(PageResult page); + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/dataobject/info/TokenInfoDO.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/dataobject/info/TokenInfoDO.java new file mode 100644 index 000000000..1dafbf793 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/dataobject/info/TokenInfoDO.java @@ -0,0 +1,136 @@ +package cn.iocoder.yudao.module.market.dal.dataobject.info; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +import java.time.LocalDateTime; + +/** + * TOKEN基本信息 DO + * + * @author 芋道源码 + */ +@TableName("mk_token_info") +@KeySequence("mk_token_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TokenInfoDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Long id; + /** + * 交易货币币种 + */ + private String baseCcy; + /** + * 合约乘数,仅适用于交割/永续/期权 + */ + private String ctMult; + /** + * 上线日期 + */ + private LocalDateTime listDate; + /** + * 合约面值,仅适用于交割/永续/期权 + */ + private String ctVal; + /** + * 合约面值计价币种,仅适用于交割/永续/期权 + */ + private String ctValCcy; + /** + * 交割/行权日期,仅适用于交割 和 期权 + */ + private LocalDateTime expDate; + /** + * 交易品种,如 BTC-USD,仅适用于交割/永续/期权 + */ + private String instFamily; + /** + * 产品id, 如 BTC-USD-SWAP + */ + private String instId; + /** + * 产品类型 币币 SPOT 币币杠杆 MARGIN 永续合约 SWAP 交割合约 FUTURES 期权 OPTION + */ + private String instType; + /** + * 该instId支持的最大杠杆倍数,不适用于币币、期权 + */ + private String lever; + /** + * 下单数量精度,如 BTC-USDT-SWAP:1 + */ + private String lotSz; + /** + * 合约或现货冰山委托的单笔最大委托数量 + */ + private String maxIcebergSz; + /** + * 最大限制数量 + */ + private String maxLmtSz; + /** + * 合约或现货市价单的单笔最大委托数量 + */ + private String maxMktSz; + /** + * 合约或现货止盈止损委托的单笔最大委托数量 + */ + private String maxStopSz; + /** + * 合约或现货计划委托委托的单笔最大委托数量 + */ + private String maxTriggerSz; + /** + * 合约或现货时间加权单的单笔最大委托数量 + */ + private String maxTwapSz; + /** + * 最小下单数量 + */ + private String minSz; + /** + * 期权类型,C或P 仅适用于期权 + */ + private String optType; + /** + * 计价货币币种,如 BTC-USDT 中的USDT ,仅适用于币币/币币杠杆 + */ + private String quoteCcy; + /** + * 盈亏结算和保证金币种,如 BTC 仅适用于交割/永续/期权 + */ + private String settleCcy; + /** + * * 产品状态 * live:交易中 * suspend:暂停中 * preopen:预上线 * test:测试中(测试产品,不可交易) * 当合约预上线时,状态变更为预上线(即新生成一个合约,新合约会处于预上线状态); * 当产品下线的时候(如交割合约被交割的时候,期权合约被行权的时候),查询不到该产品 + */ + private String state; + /** + * 行权价格,仅适用于期权 + */ + private String stk; + /** + * 下单价格精度,如 0.0001 + */ + private String tickSz; + /** + * 标的指数,如 BTC-USD,仅适用于交割/永续/期权 + */ + private String uly; + /** + * 交易所类型 1 币安交易所 2 欧易交易所 3 芝麻开门交易所 + */ + private Byte exchangeType; + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/dataobject/rank/TokenRankDO.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/dataobject/rank/TokenRankDO.java new file mode 100644 index 000000000..28f11f020 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/dataobject/rank/TokenRankDO.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.market.dal.dataobject.rank; + +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.*; + +/** + * TOKEN排名信息 DO + * + * @author 芋道源码 + */ +@TableName("mk_token_rank") +@KeySequence("mk_token_rank_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TokenRankDO extends BaseDO { + + /** + * 主键ID + */ + @TableId + private Integer id; + /** + * 币种基础名称 + */ + private String tokenBaseName; + /** + * 是否有最新事件触发(0:没有 1:有) + */ + private Byte event; + /** + * 是否有近期热点消息(0:没有 1:有) + */ + private Byte hot; + /** + * 市值排名 + */ + private Integer capRanking; + /** + * 近期交易量 + */ + private Object volRanking; + /** + * 板块概念 + */ + private String concept; + /** + * 根据币种成交量 热度等生成的排名值 排名值越高币种策略价值越高 + */ + private Byte comprehensiveRanking; + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/mysql/info/TokenInfoMapper.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/mysql/info/TokenInfoMapper.java new file mode 100644 index 000000000..3af4d72c1 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/mysql/info/TokenInfoMapper.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.market.dal.mysql.info; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; + +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.market.controller.admin.market.vo.TokenInfoageReqVO; +import cn.iocoder.yudao.module.market.dal.dataobject.info.TokenInfoDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TokenInfoMapper extends BaseMapperX { + + default PageResult selectPage(TokenInfoageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(TokenInfoDO::getInstId, reqVO.getName()) + .likeIfPresent(TokenInfoDO::getExchangeType, reqVO.getAccount()) + .orderByDesc(TokenInfoDO::getId)); + } + + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/mysql/rank/TokenRankMapper.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/mysql/rank/TokenRankMapper.java new file mode 100644 index 000000000..f8c32c9a7 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/dal/mysql/rank/TokenRankMapper.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.market.dal.mysql.rank; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.market.controller.admin.material.vo.TokenRankPageReqVO; +import cn.iocoder.yudao.module.market.dal.dataobject.rank.TokenRankDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TokenRankMapper extends BaseMapperX { + + default PageResult selectPage(TokenRankPageReqVO pageReqVO) { + return selectPage(pageReqVO, new LambdaQueryWrapperX() + .eq(TokenRankDO::getHot, pageReqVO.getAccountId()) + .eqIfPresent(TokenRankDO::getTokenBaseName, pageReqVO.getPermanent()) + .orderByDesc(TokenRankDO::getId)); + } + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/config/MarketConfiguration.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/config/MarketConfiguration.java new file mode 100644 index 000000000..61c576d9c --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/config/MarketConfiguration.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.market.framework.market.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.StringRedisTemplate; + +/** + * 微信公众号的配置类 + * + * @author 芋道源码 + */ +@Configuration +public class MarketConfiguration { + +// @Bean +// @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") +// public RedisTemplateWxRedisOps redisTemplateWxRedisOps(StringRedisTemplate stringRedisTemplate) { +// return new RedisTemplateWxRedisOps(stringRedisTemplate); +// } +// +// @Bean +// @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") +// public MpServiceFactory mpServiceFactory(RedisTemplateWxRedisOps redisTemplateWxRedisOps, +// WxMpProperties wxMpProperties, +// MessageReceiveHandler messageReceiveHandler, +// KfSessionHandler kfSessionHandler, +// StoreCheckNotifyHandler storeCheckNotifyHandler, +// MenuHandler menuHandler, +// NullHandler nullHandler, +// SubscribeHandler subscribeHandler, +// UnsubscribeHandler unsubscribeHandler, +// LocationHandler locationHandler, +// ScanHandler scanHandler, +// MessageAutoReplyHandler messageAutoReplyHandler) { +// return new DefaultMpServiceFactory(redisTemplateWxRedisOps, wxMpProperties, +// messageReceiveHandler, kfSessionHandler, storeCheckNotifyHandler, menuHandler, +// nullHandler, subscribeHandler, unsubscribeHandler, locationHandler, scanHandler, messageAutoReplyHandler); +// } + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/DefaultMarketServiceFactory.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/DefaultMarketServiceFactory.java new file mode 100644 index 000000000..839521af9 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/DefaultMarketServiceFactory.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.market.framework.market.core; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +/** + * 默认的 {@link MarketServiceFactory} 实现类 + * + * @author 芋道源码 + */ +@Slf4j +@RequiredArgsConstructor +public class DefaultMarketServiceFactory implements MarketServiceFactory { + + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/MarketServiceFactory.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/MarketServiceFactory.java new file mode 100644 index 000000000..1e67d05fc --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/MarketServiceFactory.java @@ -0,0 +1,10 @@ +package cn.iocoder.yudao.module.market.framework.market.core; + +/** + * {@link WxMpService} 工厂接口 + * + * @author 芋道源码 + */ +public interface MarketServiceFactory { + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/context/MarketContextHolder.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/context/MarketContextHolder.java new file mode 100644 index 000000000..5dcc57108 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/context/MarketContextHolder.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018-2025, zengtao All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: zengtao (w1999wtw3537@gmail.com) + */ + +package cn.iocoder.yudao.module.market.framework.market.core.context; + +import com.alibaba.ttl.TransmittableThreadLocal; + +/** + * 微信上下文 Context + * + * 目的:解决微信多公众号的问题,在 {@link WxMpMessageHandler} 实现类中,可以通过 {@link #getAppId()} 获取到当前的 appId + * + * @see MpOpenController#handleMessage(String, String, MpOpenHandleMessageReqVO) + * + * @author 芋道源码 + */ +public class MarketContextHolder { + + /** + * 微信公众号的 appId 上下文 + */ + private static final ThreadLocal APPID = new TransmittableThreadLocal<>(); + + public static void setAppId(String appId) { + APPID.set(appId); + } + + public static String getAppId() { + return APPID.get(); + } + + public static void clear() { + APPID.remove(); + } + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/util/MarketUtils.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/util/MarketUtils.java new file mode 100644 index 000000000..0dd3f5e19 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/market/core/util/MarketUtils.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.market.framework.market.core.util; + +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.common.util.validation.ValidationUtils; +import lombok.extern.slf4j.Slf4j; + +import javax.validation.Validator; + +/** + * 公众号工具类 + * + * @author 芋道源码 + */ +@Slf4j +public class MarketUtils { + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/package-info.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/package-info.java new file mode 100644 index 000000000..b09834206 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/package-info.java @@ -0,0 +1,6 @@ +/** + * 属于 mp 模块的 framework 封装 + * + * @author 芋道源码 + */ +package cn.iocoder.yudao.module.market.framework; diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/rpc/config/RpcConfiguration.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 000000000..13f872d62 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,10 @@ +package cn.iocoder.yudao.module.market.framework.rpc.config; + +import cn.iocoder.yudao.module.infra.api.file.FileApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@EnableFeignClients(clients = FileApi.class) +public class RpcConfiguration { +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/rpc/package-info.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/rpc/package-info.java new file mode 100644 index 000000000..86484386b --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/rpc/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package cn.iocoder.yudao.module.market.framework.rpc; diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/security/config/SecurityConfiguration.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/security/config/SecurityConfiguration.java new file mode 100644 index 000000000..e3470640e --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/security/config/SecurityConfiguration.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.market.framework.security.config; + +import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; +import cn.iocoder.yudao.module.system.enums.ApiConstants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.ExpressionUrlAuthorizationConfigurer; + +/** + * System 模块的 Security 配置 + */ +@Configuration(proxyBeanMethods = false, value = "systemSecurityConfiguration") +public class SecurityConfiguration { + + @Bean("systemAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry registry) { + // TODO 芋艿:这个每个项目都需要重复配置,得捉摸有没通用的方案 + // Swagger 接口文档 + registry.antMatchers("/v3/api-docs/**").permitAll() // 元数据 + .antMatchers("/swagger-ui.html").permitAll(); // Swagger UI + // Druid 监控 + registry.antMatchers("/druid/**").anonymous(); + // Spring Boot Actuator 的安全配置 + registry.antMatchers("/actuator").anonymous() + .antMatchers("/actuator/**").anonymous(); + // RPC 服务的安全配置 + registry.antMatchers(ApiConstants.PREFIX + "/**").permitAll(); + } + + }; + } + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/security/core/package-info.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/security/core/package-info.java new file mode 100644 index 000000000..af5dfb691 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/security/core/package-info.java @@ -0,0 +1,4 @@ +/** + * 占位 + */ +package cn.iocoder.yudao.module.market.framework.security.core; diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/web/config/MpWebConfiguration.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/web/config/MpWebConfiguration.java new file mode 100644 index 000000000..7d6e4aa8d --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/web/config/MpWebConfiguration.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.market.framework.web.config; + +import cn.iocoder.yudao.framework.swagger.config.YudaoSwaggerAutoConfiguration; +import org.springdoc.core.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * market 模块的 web 组件的 Configuration + * + * @author 芋道源码 + */ +@Configuration(proxyBeanMethods = false) +public class MpWebConfiguration { + + /** + * mp 模块的 API 分组 + */ + @Bean + public GroupedOpenApi mpGroupedOpenApi() { + return YudaoSwaggerAutoConfiguration.buildGroupedOpenApi("market"); + } + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/web/package-info.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/web/package-info.java new file mode 100644 index 000000000..d30d4bdec --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/framework/web/package-info.java @@ -0,0 +1,4 @@ +/** + * mp 模块的 web 配置 + */ +package cn.iocoder.yudao.module.market.framework.web; diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/package-info.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/package-info.java new file mode 100644 index 000000000..ed4c7233e --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/package-info.java @@ -0,0 +1,8 @@ +/** + * mp 模块,我们放微信微信公众号。 + * 例如说:提供微信公众号的账号、菜单、粉丝、标签、消息、自动回复、素材、模板通知、运营数据等功能 + * + * 1. Controller URL:以 /mp/ 开头,避免和其它 Module 冲突 + * 2. DataObject 表名:以 mp_ 开头,方便在数据库中区分 + */ +package cn.iocoder.yudao.module.market; diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/info/TokenInfoService.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/info/TokenInfoService.java new file mode 100644 index 000000000..436bd1798 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/info/TokenInfoService.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.market.service.info; + +/** + * 公众号账号 Service 接口 + * + * @author 芋道源码 + */ +public interface TokenInfoService { + /** + * TODO + */ +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/info/TokenInfoServiceImpl.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/info/TokenInfoServiceImpl.java new file mode 100644 index 000000000..5e2697a42 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/info/TokenInfoServiceImpl.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.market.service.info; + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +/** + * 公众号账号 Service 实现类 + * + * @author fengdan + */ +@Slf4j +@Service +@Validated +public class TokenInfoServiceImpl implements TokenInfoService { + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/rank/TokenRankService.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/rank/TokenRankService.java new file mode 100644 index 000000000..3fcf5df29 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/rank/TokenRankService.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.market.service.rank; + + +/** + * TokenRank Service 接口 + * + * @author 芋道源码 + */ +public interface TokenRankService { + + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/rank/TokenRankServiceImpl.java b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/rank/TokenRankServiceImpl.java new file mode 100644 index 000000000..3164fc29c --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/java/cn/iocoder/yudao/module/market/service/rank/TokenRankServiceImpl.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.market.service.rank; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +/** + * 公众号素材 Service 接口 + * + * @author 芋道源码 + */ +@Service +@Validated +@Slf4j +public class TokenRankServiceImpl implements TokenRankService { + +} diff --git a/yudao-module-market/yudao-module-market-biz/src/main/resources/application-dev.yaml b/yudao-module-market/yudao-module-market-biz/src/main/resources/application-dev.yaml new file mode 100644 index 000000000..ebf547dcd --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/resources/application-dev.yaml @@ -0,0 +1,100 @@ +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 5 # 初始连接数 + min-idle: 10 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + name: ruoyi-vue-pro + url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.jdbc.Driver + username: root + password: 3WLiVUBEwTbvAfsh + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + name: ruoyi-vue-pro + url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true + driver-class-name: com.mysql.jdbc.Driver + username: root + password: 3WLiVUBEwTbvAfsh + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + redis: + host: 127.0.0.1 # 地址 + port: 6379 # 端口 + database: 1 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + demo: true # 开启演示模式 diff --git a/yudao-module-market/yudao-module-market-biz/src/main/resources/application-local.yaml b/yudao-module-market/yudao-module-market-biz/src/main/resources/application-local.yaml new file mode 100644 index 000000000..670205f82 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/resources/application-local.yaml @@ -0,0 +1,125 @@ +--- #################### 数据库相关配置 #################### +spring: + + # 数据源配置项 + autoconfigure: + exclude: + - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 5 # 初始连接数 + min-idle: 10 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + name: ruoyi-vue-pro + url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.master.name} # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.master.name} # SQLServer 连接的示例 + username: root + password: 123456 + # username: sa + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W + slave: # 模拟从库,可根据自己需要修改 + name: ruoyi-vue-pro + url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?allowMultiQueries=true&useUnicode=true&useSSL=false&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/${spring.datasource.dynamic.datasource.slave.name} # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=${spring.datasource.dynamic.datasource.slave.name} # SQLServer 连接的示例 + username: root + password: 123456 + # username: sa + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + redis: + host: 127.0.0.1 # 地址 + port: 6379 # 端口 + database: 0 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.report.dal.mysql: debug + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + env: # 多环境的配置项 + tag: ${HOSTNAME} + security: + mock-enable: true + xss: + enable: false + exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系 + - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + access-log: # 访问日志的配置项 + enable: false + error-code: # 错误码相关配置项 + enable: false + demo: false # 关闭演示模式 diff --git a/yudao-module-market/yudao-module-market-biz/src/main/resources/application.yaml b/yudao-module-market/yudao-module-market-biz/src/main/resources/application.yaml new file mode 100644 index 000000000..56fdc2344 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/resources/application.yaml @@ -0,0 +1,88 @@ +spring: + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + mvc: + pathmatch: + matching-strategy: ANT_PATH_MATCHER # 解决 SpringFox 与 SpringBoot 2.6.x 不兼容的问题,参见 SpringFoxHandlerProviderBeanPostProcessor 类 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui.html + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + # 重要说明:如果将配置放到 Nacos 时,请注意将 id-type 设置为对应 DB 的类型,否则会报错;详细见 https://gitee.com/zhijiantianya/yudao-cloud/issues/I5W2N0 讨论 + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 +# id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 +# id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 +# id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + type-aliases-package: ${yudao.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +--- #################### 芋道相关配置 #################### + +yudao: + info: + version: 1.0.0 + base-package: cn.iocoder.yudao.module.report + web: + admin-ui: + url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${yudao.info.version} + base-package: ${yudao.info.base-package} + error-code: # 错误码相关配置项 + constants-class-list: + - cn.iocoder.yudao.module.report.enums.ErrorCodeConstants + tenant: # 多租户相关配置项 + enable: true + +debug: false diff --git a/yudao-module-market/yudao-module-market-biz/src/main/resources/bootstrap-local.yaml b/yudao-module-market/yudao-module-market-biz/src/main/resources/bootstrap-local.yaml new file mode 100644 index 000000000..2de0efbf7 --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/resources/bootstrap-local.yaml @@ -0,0 +1,23 @@ +--- #################### 注册中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 127.0.0.1:8848 + discovery: + namespace: dev # 命名空间。这里使用 dev 开发环境 + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + +--- #################### 配置中心相关配置 #################### + +spring: + cloud: + nacos: + # Nacos Config 配置项,对应 NacosConfigProperties 配置属性类 + config: + server-addr: 127.0.0.1:8848 # Nacos 服务器地址 + namespace: dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + name: ${spring.application.name} # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name + file-extension: yaml # 使用的 Nacos 配置集的 dataId 的文件拓展名,同时也是 Nacos 配置集的配置格式,默认为 properties diff --git a/yudao-module-market/yudao-module-market-biz/src/main/resources/bootstrap.yaml b/yudao-module-market/yudao-module-market-biz/src/main/resources/bootstrap.yaml new file mode 100644 index 000000000..caf41b17b --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/resources/bootstrap.yaml @@ -0,0 +1,14 @@ +spring: + application: + name: report-server + + profiles: + active: local + +server: + port: 48084 + +# 日志文件配置。注意,如果 logging.file.name 不放在 bootstrap.yaml 配置文件,而是放在 application.yaml 中,会导致出现 LOG_FILE_IS_UNDEFINED 文件 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 diff --git a/yudao-module-market/yudao-module-market-biz/src/main/resources/logback-spring.xml b/yudao-module-market/yudao-module-market-biz/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..b1b9f3faf --- /dev/null +++ b/yudao-module-market/yudao-module-market-biz/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/yudao-module-report/yudao-module-report-biz/src/main/resources/application-dev.yaml b/yudao-module-report/yudao-module-report-biz/src/main/resources/application-dev.yaml index e0faca40f..ebf547dcd 100644 --- a/yudao-module-report/yudao-module-report-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-report/yudao-module-report-biz/src/main/resources/application-dev.yaml @@ -40,20 +40,20 @@ spring: datasource: master: name: ruoyi-vue-pro - url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true driver-class-name: com.mysql.jdbc.Driver username: root password: 3WLiVUBEwTbvAfsh slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 name: ruoyi-vue-pro - url: jdbc:mysql://400-infra.server.iocoder.cn:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true + url: jdbc:mysql://127.0.0.1:3306/${spring.datasource.dynamic.datasource.slave.name}?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT&nullCatalogMeansCurrent=true driver-class-name: com.mysql.jdbc.Driver username: root password: 3WLiVUBEwTbvAfsh # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 127.0.0.1 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 diff --git a/yudao-module-report/yudao-module-report-biz/src/main/resources/application-local.yaml b/yudao-module-report/yudao-module-report-biz/src/main/resources/application-local.yaml index 670205f82..e953541fd 100644 --- a/yudao-module-report/yudao-module-report-biz/src/main/resources/application-local.yaml +++ b/yudao-module-report/yudao-module-report-biz/src/main/resources/application-local.yaml @@ -61,7 +61,12 @@ spring: password: 123456 # username: sa # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W - + click: + type: com.zaxxer.hikari.HikariDataSource + driverClassName: com.clickhouse.jdbc.ClickHouseDriver + url: jdbc:clickhouse://127.0.0.1:8123/default?socket_timeout=600000 + username: default + password: 123456 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 redis: host: 127.0.0.1 # 地址 diff --git a/yudao-module-report/yudao-module-report-biz/src/main/resources/application.yaml b/yudao-module-report/yudao-module-report-biz/src/main/resources/application.yaml index 56fdc2344..23efbbae2 100644 --- a/yudao-module-report/yudao-module-report-biz/src/main/resources/application.yaml +++ b/yudao-module-report/yudao-module-report-biz/src/main/resources/application.yaml @@ -70,7 +70,7 @@ mybatis-plus: yudao: info: version: 1.0.0 - base-package: cn.iocoder.yudao.module.report + base-package: cn.iocoder.yudao.module.market web: admin-ui: url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址 diff --git a/yudao-module-report/yudao-module-report-biz/src/main/resources/bootstrap.yaml b/yudao-module-report/yudao-module-report-biz/src/main/resources/bootstrap.yaml index caf41b17b..f722c0c2f 100644 --- a/yudao-module-report/yudao-module-report-biz/src/main/resources/bootstrap.yaml +++ b/yudao-module-report/yudao-module-report-biz/src/main/resources/bootstrap.yaml @@ -1,6 +1,6 @@ spring: application: - name: report-server + name: market-server profiles: active: local