diff --git a/pom.xml b/pom.xml
index 7c4217ec..2f8fa236 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
4.0
11.2.0.3
1.1.13
- 2.3.0
+
2.6
1.2.2
2.5
@@ -53,6 +53,26 @@
+
+ com.aliyun
+ dytnsapi20200217
+ 2.9.0
+
+
+ com.aliyun
+ tea-openapi
+ 0.3.6
+
+
+ com.aliyun
+ tea-console
+ 0.0.1
+
+
+ com.aliyun
+ tea-util
+ 0.2.23
+
com.volcengine
@@ -65,17 +85,17 @@
guava
19.0
-
- com.amazonaws
- aws-java-sdk
- 1.11.274
-
-
- aws-java-sdk-simpleworkflow
- com.amazonaws
-
-
-
+
+
+
+
+
+
+
+
+
+
+
cn.afterturn
easypoi-spring-boot-starter
@@ -305,17 +325,17 @@
druid-spring-boot-starter
${druid.version}
-
- org.quartz-scheduler
- quartz
- ${quartz.version}
-
-
- com.mchange
- c3p0
-
-
-
+
+
+
+
+
+
+
+
+
+
+
commons-lang
commons-lang
diff --git a/src/main/java/com/sqx/common/utils/ApiAccessLimitUtil.java b/src/main/java/com/sqx/common/utils/ApiAccessLimitUtil.java
index 8365d057..e6e5c944 100644
--- a/src/main/java/com/sqx/common/utils/ApiAccessLimitUtil.java
+++ b/src/main/java/com/sqx/common/utils/ApiAccessLimitUtil.java
@@ -1,6 +1,7 @@
package com.sqx.common.utils;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -114,8 +115,13 @@ public class ApiAccessLimitUtil {
String redisKey = generateRedisKey(key, id);
Object countObj = redisUtils.get(redisKey);
if (countObj == null) {
- // 根据不同时间周期设置过期时间并初始化访问次数为1
- long expireAt = calculateExpireAt(timeFormat);
+ long expireAt;
+ if (StrUtil.isBlank(timeFormat)) {
+ expireAt = count;
+ }else {
+ // 根据不同时间周期设置过期时间并初始化访问次数为1
+ expireAt = calculateExpireAt(timeFormat);
+ }
redisUtils.set(redisKey, 1, expireAt);
return true;
}
@@ -127,6 +133,11 @@ public class ApiAccessLimitUtil {
return false;
}
+ public static void removeKey(String id, String key) {
+ String redisKey = generateRedisKey(key, id);
+ redisUtils.delete(redisKey);
+ }
+
public static T runFunAndCheckKey(Supplier supplier, String lockKey, Integer seconds) {
try{
diff --git a/src/main/java/com/sqx/common/utils/PageUtils.java b/src/main/java/com/sqx/common/utils/PageUtils.java
index 6e522c03..f00ff808 100644
--- a/src/main/java/com/sqx/common/utils/PageUtils.java
+++ b/src/main/java/com/sqx/common/utils/PageUtils.java
@@ -1,101 +1,120 @@
package com.sqx.common.utils;
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.pagehelper.PageInfo;
import java.io.Serializable;
import java.util.List;
/**
* 分页工具类
- *
*/
public class PageUtils implements Serializable {
- private static final long serialVersionUID = 1L;
- /**
- * 总记录数
- */
- private int totalCount;
- /**
- * 每页记录数
- */
- private int pageSize;
- /**
- * 总页数
- */
- private int totalPage;
- /**
- * 当前页数
- */
- private int currPage;
- /**
- * 列表数据
- */
- private List> list;
-
- /**
- * 分页
- * @param list 列表数据
- * @param totalCount 总记录数
- * @param pageSize 每页记录数
- * @param currPage 当前页数
- */
- public PageUtils(List> list, int totalCount, int pageSize, int currPage) {
- this.list = list;
- this.totalCount = totalCount;
- this.pageSize = pageSize;
- this.currPage = currPage;
- this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
- }
+ private static final long serialVersionUID = 1L;
+ /**
+ * 总记录数
+ */
+ private int totalCount;
+ /**
+ * 每页记录数
+ */
+ private int pageSize;
+ /**
+ * 总页数
+ */
+ private int totalPage;
+ /**
+ * 当前页数
+ */
+ private int currPage;
+ /**
+ * 列表数据
+ */
+ private List> list;
+ private List> records;
- /**
- * 分页
- */
- public PageUtils(IPage> page) {
- this.list = page.getRecords();
- this.totalCount = (int)page.getTotal();
- this.pageSize = (int)page.getSize();
- this.currPage = (int)page.getCurrent();
- this.totalPage = (int)page.getPages();
- }
- public int getTotalCount() {
- return totalCount;
- }
+ public PageUtils() {
+ }
- public void setTotalCount(int totalCount) {
- this.totalCount = totalCount;
- }
+ /**
+ * 分页
+ *
+ * @param list 列表数据
+ * @param totalCount 总记录数
+ * @param pageSize 每页记录数
+ * @param currPage 当前页数
+ */
+ public PageUtils(List> list, int totalCount, int pageSize, int currPage) {
+ this.list = list;
+ this.totalCount = totalCount;
+ this.pageSize = pageSize;
+ this.currPage = currPage;
+ this.totalPage = (int) Math.ceil((double) totalCount / pageSize);
+ }
- public int getPageSize() {
- return pageSize;
- }
+ public static PageUtils page(PageInfo> page) {
+ return page(page,false);
+ }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
+ public static PageUtils page(PageInfo> page, boolean isRecords) {
+ PageUtils pageUtils = new PageUtils();
+ if (isRecords) {
+ pageUtils.records = page.getList();
+ } else {
+ pageUtils.list = page.getList();
+ }
+ pageUtils.totalCount = (int) page.getTotal();
+ pageUtils.pageSize = page.getSize();
+ pageUtils.currPage = page.getPageNum();
+ pageUtils.totalPage = page.getPages();
+ return pageUtils;
+ }
- public int getTotalPage() {
- return totalPage;
- }
+ public int getTotalCount() {
+ return totalCount;
+ }
- public void setTotalPage(int totalPage) {
- this.totalPage = totalPage;
- }
+ public void setTotalCount(int totalCount) {
+ this.totalCount = totalCount;
+ }
- public int getCurrPage() {
- return currPage;
- }
+ public int getPageSize() {
+ return pageSize;
+ }
- public void setCurrPage(int currPage) {
- this.currPage = currPage;
- }
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
- public List> getList() {
- return list;
- }
+ public int getTotalPage() {
+ return totalPage;
+ }
- public void setList(List> list) {
- this.list = list;
- }
-
+ public void setTotalPage(int totalPage) {
+ this.totalPage = totalPage;
+ }
+
+ public int getCurrPage() {
+ return currPage;
+ }
+
+ public void setCurrPage(int currPage) {
+ this.currPage = currPage;
+ }
+
+ public List> getList() {
+ return list;
+ }
+
+ public void setList(List> list) {
+ this.list = list;
+ }
+
+ public List> getRecords() {
+ return records;
+ }
+
+ public void setRecords(List> records) {
+ this.records = records;
+ }
}
diff --git a/src/main/java/com/sqx/common/utils/Query.java b/src/main/java/com/sqx/common/utils/Query.java
deleted file mode 100644
index bbddb661..00000000
--- a/src/main/java/com/sqx/common/utils/Query.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.sqx.common.utils;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.metadata.OrderItem;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.sqx.common.xss.SQLFilter;
-import org.apache.commons.lang.StringUtils;
-
-import java.util.Map;
-
-/**
- * 查询参数
- *
- */
-public class Query {
-
- public IPage getPage(Map params) {
- return this.getPage(params, null, false);
- }
-
- public IPage getPage(Map params, String defaultOrderField, boolean isAsc) {
- //分页参数
- long curPage = 1;
- long limit = 10;
-
- if(params.get(Constant.PAGE) != null){
- curPage = Long.parseLong(String.valueOf(params.get(Constant.PAGE)));
- }
- if(params.get(Constant.LIMIT) != null){
- limit = Long.parseLong(String.valueOf(params.get(Constant.LIMIT)));
- }
-
- //分页对象
- Page page = new Page<>(curPage, limit);
-
- //分页参数
- params.put(Constant.PAGE, page);
-
- //排序字段
- //防止SQL注入(因为sidx、order是通过拼接SQL实现排序的,会有SQL注入风险)
- String orderField = SQLFilter.sqlInject((String)params.get(Constant.ORDER_FIELD));
- String order = (String)params.get(Constant.ORDER);
-
-
- //前端字段排序
- if(StringUtils.isNotEmpty(orderField) && StringUtils.isNotEmpty(order)){
- if(Constant.ASC.equalsIgnoreCase(order)) {
- return page.addOrder(OrderItem.asc(orderField));
- }else {
- return page.addOrder(OrderItem.desc(orderField));
- }
- }
-
- //没有排序字段,则不排序
- if(StringUtils.isBlank(defaultOrderField)){
- return page;
- }
-
- //默认排序
- if(isAsc) {
- page.addOrder(OrderItem.asc(defaultOrderField));
- }else {
- page.addOrder(OrderItem.desc(defaultOrderField));
- }
-
- return page;
- }
-}
diff --git a/src/main/java/com/sqx/common/utils/SpringContextUtils.java b/src/main/java/com/sqx/common/utils/SpringContextUtils.java
index 96a3976f..c92b97e5 100644
--- a/src/main/java/com/sqx/common/utils/SpringContextUtils.java
+++ b/src/main/java/com/sqx/common/utils/SpringContextUtils.java
@@ -23,6 +23,11 @@ public class SpringContextUtils implements ApplicationContextAware {
return applicationContext.getBean(name);
}
+ public static Object getSpringBean(Class> clazz) {
+ return applicationContext == null ? null : applicationContext.getBean(clazz);
+ }
+
+
public static T getBean(String name, Class requiredType) {
return applicationContext.getBean(name, requiredType);
}
diff --git a/src/main/java/com/sqx/config/ShardingConfig.java b/src/main/java/com/sqx/config/ShardingConfig.java
index 297a772f..7cc0f0b7 100644
--- a/src/main/java/com/sqx/config/ShardingConfig.java
+++ b/src/main/java/com/sqx/config/ShardingConfig.java
@@ -1,25 +1,31 @@
package com.sqx.config;
+import com.sqx.modules.utils.InvitationCodeUtil;
import com.sqx.sharding.MasterSlaveRules;
import com.sqx.sharding.ShardingDataBase;
+import com.sqx.sharding.StandardShardingStrategyConf;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.apache.shardingsphere.api.config.masterslave.MasterSlaveRuleConfiguration;
+import org.apache.shardingsphere.api.config.sharding.KeyGeneratorConfiguration;
import org.apache.shardingsphere.api.config.sharding.ShardingRuleConfiguration;
import org.apache.shardingsphere.api.config.sharding.TableRuleConfiguration;
+import org.apache.shardingsphere.api.config.sharding.strategy.InlineShardingStrategyConfiguration;
+import org.apache.shardingsphere.api.config.sharding.strategy.StandardShardingStrategyConfiguration;
+import org.apache.shardingsphere.core.strategy.route.standard.StandardShardingStrategy;
import org.apache.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
+import org.codehaus.groovy.util.StringUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.*;
-import java.util.stream.Collectors;
/**
@@ -31,6 +37,9 @@ import java.util.stream.Collectors;
@ConfigurationProperties(prefix = "spring.shardingsphere")
public class ShardingConfig {
+ @Value("${spring.profiles.active}")
+ private String activeProfile;
+
/**
* 读取数据源信息
*/
@@ -44,17 +53,56 @@ public class ShardingConfig {
*/
private String showSql;
+ /**
+ * 广播表
+ */
+// private Set broadcastTables;
+
/**
* 中心库的节点
*/
private String centerTablesDataNode;
-
/**
* 中心表,不进行分库操作
*/
- private List centerTables;
+ private Set centerTables;
+ /**
+ * 区域库的节点
+ */
+ private String regionTablesDataNode;
+
+ /**
+ * 区域表分库策略的字段
+ */
+ private String regionTablesShardingDatabaseColumn;
+
+ /**
+ * 区域表分库的算法
+ */
+ private String regionTablesShardingDatabaseAlgorithm;
+
+ /**
+ * 分库表,通过userId进行分库
+ */
+ private Set regionTables;
+
+
+ /**
+ * 区域表分库策略的字段
+ */
+ private String courseDetailsShardingDatabaseColumn;
+
+ /**
+ * 区域表分库的算法
+ */
+ private String courseDetailsShardingDatabaseAlgorithm;
+
+ /**
+ * 分库表,通过userId进行分库
+ */
+ private Set courseDetails;
/**
* 配置sharding-jdbc数据源
@@ -66,9 +114,18 @@ public class ShardingConfig {
// 配置数据库主从
shardingRuleConfig.setMasterSlaveRuleConfigs(masterSlaveRuleConfigs());
+ // 配置广播表
+// shardingRuleConfig.setBroadcastTables(broadcastTables);
+
// 配置表的切分策略
shardingRuleConfig.setTableRuleConfigs(addTableRuleConfigs());
+ // 配置表绑定规则
+ List> sets = new ArrayList<>();
+ sets.add(regionTables);
+ shardingRuleConfig.setBindingTableGroups(bindingTableGroups(sets));
+
+
// 配置是否显示sql
Properties props = new Properties();
props.put("sql.show", showSql);
@@ -88,15 +145,30 @@ public class ShardingConfig {
String.format(centerTablesDataNode, centerTable));
sets.add(tableRuleConfig);
}
-
-// // 定义区域表的分库规则
+ // 定义区域表的分库规则
+ StandardShardingStrategyConfiguration databaseShardingStrategyConfig = new StandardShardingStrategyConfiguration(
+ regionTablesShardingDatabaseColumn, new StandardShardingStrategyConf());
// InlineShardingStrategyConfiguration databaseShardingStrategyConfig = new InlineShardingStrategyConfiguration(
// regionTablesShardingDatabaseColumn, regionTablesShardingDatabaseAlgorithm);
-// for (String regionTable : regionTables) {
-// TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable));
-// tableRuleConfig.setDatabaseShardingStrategyConfig(databaseShardingStrategyConfig);
-// sets.add(tableRuleConfig);
-// }
+ for (String regionTable : regionTables) {
+ TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable));
+ tableRuleConfig.setDatabaseShardingStrategyConfig(databaseShardingStrategyConfig);
+ sets.add(tableRuleConfig);
+ }
+
+
+ // 定义区域表的分库规则
+ StandardShardingStrategyConfiguration courseDetailsShardingStrategyConfig = new StandardShardingStrategyConfiguration(
+ courseDetailsShardingDatabaseColumn, new StandardShardingStrategyConf());
+ for (String regionTable : courseDetails) {
+ TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(regionTable, String.format(regionTablesDataNode, regionTable));
+ tableRuleConfig.setDatabaseShardingStrategyConfig(courseDetailsShardingStrategyConfig);
+ // 设置区域表使用雪花算法生成主键
+ KeyGeneratorConfiguration keyGeneratorConfig = new KeyGeneratorConfiguration("SNOWFLAKE", "id");
+ tableRuleConfig.setKeyGeneratorConfig(keyGeneratorConfig);
+
+ sets.add(tableRuleConfig);
+ }
return sets;
}
@@ -136,4 +208,38 @@ public class ShardingConfig {
});
return sets;
}
-}
\ No newline at end of file
+
+ /**
+ * 绑定表的分片规则
+ */
+ public static Set bindingTableGroups(List> sets) {
+ if (sets != null && !sets.isEmpty()) {
+ Set tableGroups = new HashSet<>();
+ for (Set set : sets) {
+ String tableNames = bindingTable(set.toArray(new String[0]));
+ if (StringUtils.isNotBlank(tableNames)) {
+ tableGroups.add(tableNames);
+ }
+ }
+ return tableGroups;
+ }
+ return null;
+ }
+
+ /**
+ * 批量绑定表规则
+ *
+ * @param tables 批量绑定的标规则
+ * @return tableNames
+ */
+ private static String bindingTable(String... tables) {
+ StringBuilder tableNames = new StringBuilder();
+ if (tables != null && tables.length != 0) {
+ for (String table : tables) {
+ tableNames.append(table).append(",");
+ }
+ tableNames.deleteCharAt(tableNames.length() - 1);
+ }
+ return tableNames.toString();
+ }
+}
diff --git a/src/main/java/com/sqx/config/SnowFlake.java b/src/main/java/com/sqx/config/SnowFlake.java
new file mode 100644
index 00000000..c6096bd7
--- /dev/null
+++ b/src/main/java/com/sqx/config/SnowFlake.java
@@ -0,0 +1,114 @@
+package com.sqx.config;
+
+/**
+ * 描述: Twitter的分布式自增ID雪花算法snowflake (Java版)
+ **/
+public class SnowFlake {
+
+ /**
+ * 起始的时间戳
+ */
+ private final static long START_STMP = 1480166465631L;
+
+ /**
+ * 每一部分占用的位数
+ */
+ private final static long SEQUENCE_BIT = 12; //序列号占用的位数
+ private final static long MACHINE_BIT = 5; //机器标识占用的位数
+ private final static long DATACENTER_BIT = 5;//数据中心占用的位数
+
+ /**
+ * 每一部分的最大值
+ */
+ private final static long MAX_DATACENTER_NUM = ~(-1L << DATACENTER_BIT);
+ private final static long MAX_MACHINE_NUM = ~(-1L << MACHINE_BIT);
+ private final static long MAX_SEQUENCE = ~(-1L << SEQUENCE_BIT);
+
+ /**
+ * 每一部分向左的位移
+ */
+ private final static long MACHINE_LEFT = SEQUENCE_BIT;
+ private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
+ private final static long TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;
+
+ /**
+ * 数据中心
+ */
+ private long datacenterId;
+ /**
+ * 机器标识
+ */
+ private long machineId;
+ /**
+ * 代表了一毫秒内生成的多个id的最新序号
+ */
+ private long sequence = 10000L;
+ /**
+ * 上一次时间戳
+ */
+ private long lastStmp = -1L;
+
+ public SnowFlake() {
+ }
+
+ public SnowFlake(long datacenterId, long machineId) {
+ if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) {
+ throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0");
+ }
+ if (machineId > MAX_MACHINE_NUM || machineId < 0) {
+ throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0");
+ }
+ this.datacenterId = datacenterId;
+ this.machineId = machineId;
+ }
+
+ /**
+ * 产生下一个ID
+ *
+ * @param ifEvenNum 是否偶数 true 时间不连续全是偶数 时间连续 奇数偶数 false 时间不连续 奇偶都有 所以一般建议用false
+ */
+ public synchronized long nextId(boolean ifEvenNum) {
+ long currStmp = getNewstmp();
+ if (currStmp < lastStmp) {
+ throw new RuntimeException("Clock moved backwards. Refusing to generate id");
+ }
+ /**
+ * 时间不连续出来全是偶数
+ */
+ if (ifEvenNum) {
+ if (currStmp == lastStmp) {
+ //相同毫秒内,序列号自增
+ sequence = (sequence + 1) & MAX_SEQUENCE;
+ //同一毫秒的序列数已经达到最大
+ if (sequence == 0L) {
+ currStmp = getNextMill();
+ }
+ } else {
+ //不同毫秒内,序列号置为0
+ sequence = 0L;
+ }
+ } else {
+ //相同毫秒内,序列号自增
+ sequence = (sequence + 1) & MAX_SEQUENCE;
+ }
+
+ lastStmp = currStmp;
+
+ return (currStmp - START_STMP) << TIMESTMP_LEFT //时间戳部分
+ | datacenterId << DATACENTER_LEFT //数据中心部分
+ | machineId << MACHINE_LEFT //机器标识部分
+ | sequence; //序列号部分
+ }
+
+ private long getNextMill() {
+ long mill = getNewstmp();
+ while (mill <= lastStmp) {
+ mill = getNewstmp();
+ }
+ return mill;
+ }
+
+ private long getNewstmp() {
+ return System.currentTimeMillis();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/sqx/config/SnowFlakeConfig.java b/src/main/java/com/sqx/config/SnowFlakeConfig.java
new file mode 100644
index 00000000..49b10930
--- /dev/null
+++ b/src/main/java/com/sqx/config/SnowFlakeConfig.java
@@ -0,0 +1,24 @@
+package com.sqx.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class SnowFlakeConfig {
+ /**
+ * 数据中心
+ */
+ @Value("${snowflake.datacenterId}")
+ private String datacenterId;
+ /**
+ * 机器标识
+ */
+ @Value("${snowflake.machineId}")
+ private String machineId;
+
+ @Bean(name = "snowFlake")
+ public SnowFlake snowFlake() {
+ return new SnowFlake(Long.parseLong(datacenterId), Long.parseLong(machineId));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/sqx/modules/announcement/controller/AnnouncementController.java b/src/main/java/com/sqx/modules/announcement/controller/AnnouncementController.java
new file mode 100644
index 00000000..41dcd709
--- /dev/null
+++ b/src/main/java/com/sqx/modules/announcement/controller/AnnouncementController.java
@@ -0,0 +1,41 @@
+package com.sqx.modules.announcement.controller;
+
+import com.sqx.common.utils.Result;
+import com.sqx.modules.announcement.service.AnnouncementService;
+import com.sqx.modules.common.dto.AddAnnouncementDTO;
+import com.sqx.modules.common.dto.DeleteAnnouncementDTO;
+import com.sqx.modules.common.dto.UpdateAnnouncementDTO;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/announcement")
+public class AnnouncementController {
+
+ private final AnnouncementService announcementService;
+
+ public AnnouncementController(AnnouncementService announcementService) {
+ this.announcementService = announcementService;
+ }
+
+ @GetMapping("/list")
+ public Result list(@RequestParam(required = false) String title, @RequestParam(required = false) Integer state, @RequestParam(required = false) Integer id) {
+ return Result.success().put("data", announcementService.listInfo(title, state, id));
+ }
+
+ @PostMapping
+ public Result add(@RequestBody @Validated AddAnnouncementDTO announcementDTO) {
+ return Result.success().put("data", announcementService.add(announcementDTO));
+ }
+
+ @PutMapping
+ public Result update(@RequestBody @Validated UpdateAnnouncementDTO updateAnnouncementDTO) {
+ return Result.success().put("data", announcementService.updateInfo(updateAnnouncementDTO));
+ }
+
+ @DeleteMapping
+ public Result delete(@RequestBody @Validated DeleteAnnouncementDTO deleteAnnouncementDTO) {
+ return Result.success().put("data", announcementService.removeById(deleteAnnouncementDTO.getId()));
+ }
+
+}
diff --git a/src/main/java/com/sqx/modules/announcement/entity/Announcement.java b/src/main/java/com/sqx/modules/announcement/entity/Announcement.java
new file mode 100644
index 00000000..30002c7d
--- /dev/null
+++ b/src/main/java/com/sqx/modules/announcement/entity/Announcement.java
@@ -0,0 +1,101 @@
+package com.sqx.modules.announcement.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Data;
+
+/**
+ * 公告表
+ * @TableName announcement
+ */
+@TableName(value ="announcement")
+@Data
+public class Announcement implements Serializable {
+ /**
+ *
+ */
+// @TableId
+ private Integer id;
+
+ /**
+ * 标题
+ */
+ private String title;
+
+ /**
+ * 内容
+ */
+ private String content;
+
+ /**
+ * 状态0关闭 1打开
+ */
+ private Integer state;
+
+ /**
+ * 创建时间
+ */
+ private Date createTime;
+
+ /**
+ * 修改时间
+ */
+ private Date updateTime;
+
+ @TableField(exist = false)
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public boolean equals(Object that) {
+ if (this == that) {
+ return true;
+ }
+ if (that == null) {
+ return false;
+ }
+ if (getClass() != that.getClass()) {
+ return false;
+ }
+ Announcement other = (Announcement) that;
+ return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
+ && (this.getTitle() == null ? other.getTitle() == null : this.getTitle().equals(other.getTitle()))
+ && (this.getContent() == null ? other.getContent() == null : this.getContent().equals(other.getContent()))
+ && (this.getState() == null ? other.getState() == null : this.getState().equals(other.getState()))
+ && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
+ && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime()));
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
+ result = prime * result + ((getTitle() == null) ? 0 : getTitle().hashCode());
+ result = prime * result + ((getContent() == null) ? 0 : getContent().hashCode());
+ result = prime * result + ((getState() == null) ? 0 : getState().hashCode());
+ result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
+ result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode());
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName());
+ sb.append(" [");
+ sb.append("Hash = ").append(hashCode());
+ sb.append(", id=").append(id);
+ sb.append(", title=").append(title);
+ sb.append(", content=").append(content);
+ sb.append(", state=").append(state);
+ sb.append(", createTime=").append(createTime);
+ sb.append(", updateTime=").append(updateTime);
+ sb.append(", serialVersionUID=").append(serialVersionUID);
+ sb.append("]");
+ return sb.toString();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/sqx/modules/announcement/mapper/AnnouncementMapper.java b/src/main/java/com/sqx/modules/announcement/mapper/AnnouncementMapper.java
new file mode 100644
index 00000000..0c98bf78
--- /dev/null
+++ b/src/main/java/com/sqx/modules/announcement/mapper/AnnouncementMapper.java
@@ -0,0 +1,20 @@
+package com.sqx.modules.announcement.mapper;
+
+import com.sqx.modules.announcement.entity.Announcement;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author Administrator
+* @description 针对表【announcement(公告表)】的数据库操作Mapper
+* @createDate 2025-01-02 14:33:44
+* @Entity com.sqx.modules.announcement.entity.Announcement
+*/
+@Mapper
+public interface AnnouncementMapper extends BaseMapper {
+
+}
+
+
+
+
diff --git a/src/main/java/com/sqx/modules/announcement/service/AnnouncementService.java b/src/main/java/com/sqx/modules/announcement/service/AnnouncementService.java
new file mode 100644
index 00000000..6a1180b4
--- /dev/null
+++ b/src/main/java/com/sqx/modules/announcement/service/AnnouncementService.java
@@ -0,0 +1,22 @@
+package com.sqx.modules.announcement.service;
+
+import com.sqx.modules.announcement.entity.Announcement;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.sqx.modules.common.dto.AddAnnouncementDTO;
+import com.sqx.modules.common.dto.DeleteAnnouncementDTO;
+import com.sqx.modules.common.dto.UpdateAnnouncementDTO;
+
+/**
+* @author Administrator
+* @description 针对表【announcement(公告表)】的数据库操作Service
+* @createDate 2025-01-02 14:33:44
+*/
+public interface AnnouncementService extends IService {
+
+ Object add(AddAnnouncementDTO announcementDTO);
+
+ Object updateInfo(UpdateAnnouncementDTO updateAnnouncementDTO);
+
+ Object listInfo(String title, Integer state, Integer id);
+
+}
diff --git a/src/main/java/com/sqx/modules/announcement/service/impl/AnnouncementServiceImpl.java b/src/main/java/com/sqx/modules/announcement/service/impl/AnnouncementServiceImpl.java
new file mode 100644
index 00000000..a89bd838
--- /dev/null
+++ b/src/main/java/com/sqx/modules/announcement/service/impl/AnnouncementServiceImpl.java
@@ -0,0 +1,65 @@
+package com.sqx.modules.announcement.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sqx.common.exception.SqxException;
+import com.sqx.modules.announcement.entity.Announcement;
+import com.sqx.modules.announcement.service.AnnouncementService;
+import com.sqx.modules.announcement.mapper.AnnouncementMapper;
+import com.sqx.modules.common.dto.AddAnnouncementDTO;
+import com.sqx.modules.common.dto.UpdateAnnouncementDTO;
+import org.springframework.stereotype.Service;
+
+/**
+* @author Administrator
+* @description 针对表【announcement(公告表)】的数据库操作Service实现
+* @createDate 2025-01-02 14:33:44
+*/
+@Service
+public class AnnouncementServiceImpl extends ServiceImpl
+ implements AnnouncementService{
+
+ @Override
+ public Object listInfo(String title, Integer state, Integer id) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ boolean flag = false;
+ if (StrUtil.isNotBlank(title)) {
+ queryWrapper.like(Announcement::getTitle, title);
+ flag = true;
+ }
+ if (state != null) {
+ queryWrapper.eq(Announcement::getState, state);
+ flag = true;
+ }
+ if (id != null) {
+ queryWrapper.eq(Announcement::getId, id);
+ }
+ return flag ? list(queryWrapper) : list();
+ }
+
+ @Override
+ public Object add(AddAnnouncementDTO announcementDTO) {
+ Announcement announcement = new Announcement();
+ BeanUtil.copyProperties(announcementDTO, announcement);
+ announcement.setCreateTime(DateUtil.date());
+ return save(announcement);
+ }
+
+ @Override
+ public Object updateInfo(UpdateAnnouncementDTO updateAnnouncementDTO) {
+ Announcement announcement = getById(updateAnnouncementDTO.getId());
+ if (announcement == null) {
+ throw new SqxException("公告不存在");
+ }
+ BeanUtil.copyProperties(updateAnnouncementDTO, announcement);
+ announcement.setUpdateTime(DateUtil.date());
+ return updateById(announcement);
+ }
+}
+
+
+
+
diff --git a/src/main/java/com/sqx/modules/app/controller/AppUpgradeController.java b/src/main/java/com/sqx/modules/app/controller/AppUpgradeController.java
index a09d2a66..02c1dbdd 100644
--- a/src/main/java/com/sqx/modules/app/controller/AppUpgradeController.java
+++ b/src/main/java/com/sqx/modules/app/controller/AppUpgradeController.java
@@ -1,8 +1,9 @@
package com.sqx.modules.app.controller;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sqx.common.utils.PageUtils;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.entity.App;
import com.sqx.modules.app.service.AppService;
@@ -13,6 +14,7 @@ import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.List;
/**
* APP登录授权
@@ -30,8 +32,10 @@ public class AppUpgradeController {
@ApiOperation("管理平台升级详情")
@ResponseBody
public Result list(Integer page,Integer limit) {
- IPage pages =new Page<>(page,limit);
- return Result.success().put("data",iAppService.page(pages));
+ PageHelper.startPage(page,limit);
+ List list = iAppService.list();
+ PageInfo pageInfo = new PageInfo<>(list);
+ return Result.success().put("data", PageUtils.page(pageInfo, true));
}
diff --git a/src/main/java/com/sqx/modules/app/controller/UserController.java b/src/main/java/com/sqx/modules/app/controller/UserController.java
index 7ff0b9bf..b1def84d 100644
--- a/src/main/java/com/sqx/modules/app/controller/UserController.java
+++ b/src/main/java/com/sqx/modules/app/controller/UserController.java
@@ -1,8 +1,8 @@
package com.sqx.modules.app.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
import com.sqx.common.utils.PageUtils;
import com.sqx.common.utils.Result;
import com.sqx.modules.app.entity.UserEntity;
@@ -270,9 +270,8 @@ public class UserController {
@GetMapping("/courseMessage")
@ApiOperation("短剧分析")
public Result courseMessage(Long page, Long limit, String date, int type, Long sysUserId) {
- Page