Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
safe-campus-bbs
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
万成波
safe-campus-bbs
Commits
1655486e
Commit
1655486e
authored
Aug 28, 2025
by
yuwenwen
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.tangguo.ren/2300064869/safe-campus-bbs
parents
80c71677
7c1c8c48
Changes
39
Show whitespace changes
Inline
Side-by-side
Showing
39 changed files
with
1500 additions
and
36 deletions
+1500
-36
pom.xml
pom.xml
+22
-6
safe-campus-admin/pom.xml
safe-campus-admin/pom.xml
+10
-4
safe-campus-admin/src/main/resources/application.yml
safe-campus-admin/src/main/resources/application.yml
+2
-2
safe-campus-bbs-ui/src/views/monitor/job/index.vue
safe-campus-bbs-ui/src/views/monitor/job/index.vue
+1
-1
safe-campus-common/pom.xml
safe-campus-common/pom.xml
+1
-1
safe-campus-common/src/main/java/com/tangguo/common/config/SwaggerConfig.java
...rc/main/java/com/tangguo/common/config/SwaggerConfig.java
+1
-1
safe-campus-common/src/main/java/com/tangguo/common/constant/Constants.java
.../src/main/java/com/tangguo/common/constant/Constants.java
+2
-2
safe-campus-common/src/main/java/com/tangguo/common/core/redis/RedisCache.java
...c/main/java/com/tangguo/common/core/redis/RedisCache.java
+28
-0
safe-campus-framework/pom.xml
safe-campus-framework/pom.xml
+2
-2
safe-campus-generator/pom.xml
safe-campus-generator/pom.xml
+2
-2
safe-campus-generator/src/main/resources/generator.yml
safe-campus-generator/src/main/resources/generator.yml
+2
-2
safe-campus-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
.../main/resources/mapper/generator/GenTableColumnMapper.xml
+2
-2
safe-campus-generator/src/main/resources/mapper/generator/GenTableMapper.xml
...or/src/main/resources/mapper/generator/GenTableMapper.xml
+4
-4
safe-campus-generator/src/main/resources/vm/java/controller.java.vm
...s-generator/src/main/resources/vm/java/controller.java.vm
+1
-1
safe-campus-generator/src/main/resources/vm/java/serviceImpl.java.vm
...-generator/src/main/resources/vm/java/serviceImpl.java.vm
+1
-1
safe-campus-moment/pom.xml
safe-campus-moment/pom.xml
+24
-0
safe-campus-moment/src/main/java/com/tangguo/controller/BbsGradeController.java
.../main/java/com/tangguo/controller/BbsGradeController.java
+95
-0
safe-campus-moment/src/main/java/com/tangguo/controller/BbsSensitiveWordController.java
...va/com/tangguo/controller/BbsSensitiveWordController.java
+126
-0
safe-campus-moment/src/main/java/com/tangguo/controller/BbsTopicController.java
.../main/java/com/tangguo/controller/BbsTopicController.java
+108
-0
safe-campus-moment/src/main/java/com/tangguo/domain/BbsGrade.java
...pus-moment/src/main/java/com/tangguo/domain/BbsGrade.java
+61
-0
safe-campus-moment/src/main/java/com/tangguo/domain/BbsSensitiveWord.java
...nt/src/main/java/com/tangguo/domain/BbsSensitiveWord.java
+50
-0
safe-campus-moment/src/main/java/com/tangguo/domain/BbsTopic.java
...pus-moment/src/main/java/com/tangguo/domain/BbsTopic.java
+77
-0
safe-campus-moment/src/main/java/com/tangguo/domain/result/DataImportResult.java
...main/java/com/tangguo/domain/result/DataImportResult.java
+69
-0
safe-campus-moment/src/main/java/com/tangguo/enums/IsTop.java
...-campus-moment/src/main/java/com/tangguo/enums/IsTop.java
+22
-0
safe-campus-moment/src/main/java/com/tangguo/mapper/BbsGradeMapper.java
...ment/src/main/java/com/tangguo/mapper/BbsGradeMapper.java
+13
-0
safe-campus-moment/src/main/java/com/tangguo/mapper/BbsSensitiveWordMapper.java
.../main/java/com/tangguo/mapper/BbsSensitiveWordMapper.java
+13
-0
safe-campus-moment/src/main/java/com/tangguo/mapper/BbsTopicMapper.java
...ment/src/main/java/com/tangguo/mapper/BbsTopicMapper.java
+13
-0
safe-campus-moment/src/main/java/com/tangguo/service/IBbsGradeService.java
...t/src/main/java/com/tangguo/service/IBbsGradeService.java
+47
-0
safe-campus-moment/src/main/java/com/tangguo/service/IBbsSensitiveWordService.java
...in/java/com/tangguo/service/IBbsSensitiveWordService.java
+74
-0
safe-campus-moment/src/main/java/com/tangguo/service/IBbsTopicService.java
...t/src/main/java/com/tangguo/service/IBbsTopicService.java
+55
-0
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsGradeServiceImpl.java
...in/java/com/tangguo/service/impl/BbsGradeServiceImpl.java
+140
-0
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsSensitiveWordServiceImpl.java
...com/tangguo/service/impl/BbsSensitiveWordServiceImpl.java
+218
-0
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsTopicServiceImpl.java
...in/java/com/tangguo/service/impl/BbsTopicServiceImpl.java
+142
-0
safe-campus-moment/src/main/resources/mapper/BbsSensitiveWordMapper.xml
...ment/src/main/resources/mapper/BbsSensitiveWordMapper.xml
+20
-0
safe-campus-moment/src/main/resources/mapper/BbsTopicMapper.xml
...ampus-moment/src/main/resources/mapper/BbsTopicMapper.xml
+24
-0
safe-campus-points/pom.xml
safe-campus-points/pom.xml
+23
-0
safe-campus-quartz/pom.xml
safe-campus-quartz/pom.xml
+2
-2
safe-campus-quartz/src/main/java/com/tangguo/quartz/config/ScheduleConfig.java
...c/main/java/com/tangguo/quartz/config/ScheduleConfig.java
+1
-1
safe-campus-system/pom.xml
safe-campus-system/pom.xml
+2
-2
No files found.
pom.xml
View file @
1655486e
...
...
@@ -4,7 +4,7 @@
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-bbs
</artifactId>
<version>
3.8.5
</version>
<name>
safe-campus-bbs
</name>
...
...
@@ -119,39 +119,53 @@
<!-- 定时任务-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-quartz
</artifactId>
<version>
${ruoyi.version}
</version>
</dependency>
<!-- 代码生成-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-generator
</artifactId>
<version>
${ruoyi.version}
</version>
</dependency>
<!-- 核心模块-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-framework
</artifactId>
<version>
${ruoyi.version}
</version>
</dependency>
<!-- 系统模块-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-system
</artifactId>
<version>
${ruoyi.version}
</version>
</dependency>
<!-- 通用工具-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-common
</artifactId>
<version>
${ruoyi.version}
</version>
</dependency>
<!-- 轻享模块-->
<dependency>
<groupId>
com.tangguo
</groupId>
<artifactId>
safe-campus-moment
</artifactId>
<version>
3.8.5
</version>
</dependency>
<!-- 积分模块-->
<dependency>
<groupId>
com.tangguo
</groupId>
<artifactId>
safe-campus-points
</artifactId>
<version>
3.8.5
</version>
</dependency>
</dependencies>
</dependencyManagement>
...
...
@@ -162,6 +176,8 @@
<module>
safe-campus-quartz
</module>
<module>
safe-campus-generator
</module>
<module>
safe-campus-common
</module>
<module>
safe-campus-moment
</module>
<module>
safe-campus-points
</module>
</modules>
<packaging>
pom
</packaging>
...
...
safe-campus-admin/pom.xml
View file @
1655486e
...
...
@@ -4,7 +4,7 @@
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
safe-campus-bbs
</artifactId>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<version>
3.8.5
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
...
...
@@ -16,21 +16,27 @@
<dependencies>
<!-- 核心模块-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-framework
</artifactId>
</dependency>
<!-- 定时任务-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-quartz
</artifactId>
</dependency>
<!-- 代码生成-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-generator
</artifactId>
</dependency>
<!-- 轻享模块 -->
<dependency>
<groupId>
com.tangguo
</groupId>
<artifactId>
safe-campus-moment
</artifactId>
</dependency>
</dependencies>
<build>
...
...
safe-campus-admin/src/main/resources/application.yml
View file @
1655486e
...
...
@@ -74,11 +74,11 @@ token:
mybatis-plus
:
# 不支持多包, 如有需要可在注解配置 或 提升扫包等级
# 例如 com.**.**.mapper
mapperPackage
:
com.
tangguo
.**.mapper
mapperPackage
:
com.
**
.**.mapper
# 对应的 XML 文件位置
mapper-locations
:
classpath*:mapper/**/*Mapper.xml
# 实体扫描,多个package用逗号或者分号分隔
type-aliases-package
:
com.
tangguo.
**.domain
type-aliases-package
:
com.**.domain
configuration
:
# 自动驼峰命名规则(camel case)映射
map-underscore-to-camel-case
:
true
...
...
safe-campus-bbs-ui/src/views/monitor/job/index.vue
View file @
1655486e
...
...
@@ -179,7 +179,7 @@
<el-tooltip
placement=
"top"
>
<div
slot=
"content"
>
Bean调用示例:ryTask.ryParams('ry')
<br
/>
Class类调用示例:com.
ruoyi
.quartz.task.RyTask.ryParams('ry')
<br
/>
Class类调用示例:com.
tangguo
.quartz.task.RyTask.ryParams('ry')
<br
/>
参数说明:支持字符串,布尔类型,长整型,浮点型,整型
</div>
<i
class=
"el-icon-question"
></i>
...
...
safe-campus-common/pom.xml
View file @
1655486e
...
...
@@ -7,7 +7,7 @@
<parent>
<artifactId>
safe-campus-bbs
</artifactId>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<version>
3.8.5
</version>
</parent>
...
...
safe-campus-common/src/main/java/com/tangguo/common/config/SwaggerConfig.java
View file @
1655486e
...
...
@@ -51,7 +51,7 @@ public class SwaggerConfig {
// 扫描所有有注解的api,用这种方式更灵活
.
apis
(
RequestHandlerSelectors
.
withMethodAnnotation
(
ApiOperation
.
class
))
// 扫描指定包中的swagger注解
// .apis(RequestHandlerSelectors.basePackage("com.
ruoyi
.project.tool.swagger"))
// .apis(RequestHandlerSelectors.basePackage("com.
tangguo
.project.tool.swagger"))
// 扫描所有 .apis(RequestHandlerSelectors.any())
.
paths
(
PathSelectors
.
any
())
.
build
()
...
...
safe-campus-common/src/main/java/com/tangguo/common/constant/Constants.java
View file @
1655486e
...
...
@@ -131,11 +131,11 @@ public class Constants {
/**
* 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
*/
public
static
final
String
[]
JOB_WHITELIST_STR
=
{
"com.
ruoyi
"
};
public
static
final
String
[]
JOB_WHITELIST_STR
=
{
"com.
tangguo
"
};
/**
* 定时任务违规的字符
*/
public
static
final
String
[]
JOB_ERROR_STR
=
{
"java.net.URL"
,
"javax.naming.InitialContext"
,
"org.yaml.snakeyaml"
,
"org.springframework"
,
"org.apache"
,
"com.
ruoyi.common.utils.file"
,
"com.ruoyi
.common.config"
};
"org.springframework"
,
"org.apache"
,
"com.
tangguo.common.utils.file"
,
"com.tangguo
.common.config"
};
}
safe-campus-common/src/main/java/com/tangguo/common/core/redis/RedisCache.java
View file @
1655486e
package
com
.
tangguo
.
common
.
core
.
redis
;
import
org.apache.poi.ss.formula.functions.T
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.BoundSetOperations
;
import
org.springframework.data.redis.core.HashOperations
;
...
...
@@ -154,6 +155,33 @@ public class RedisCache {
return
setOperation
;
}
/**
* 缓存Set
*
* @param key 缓存键值
* @param values 缓存的数据
* @return 缓存数据的对象
*/
public
<
T
>
void
setAddValues
(
final
String
key
,
final
T
...
values
)
{
BoundSetOperations
<
String
,
T
>
setOperation
=
redisTemplate
.
boundSetOps
(
key
);
setOperation
.
add
(
values
);
}
/**
* 缓存Set
*
* @param key 缓存键值
* @param values 缓存的数据
* @return 缓存数据的对象
*/
public
<
T
>
void
setDeleteValues
(
final
String
key
,
final
T
...
values
)
{
BoundSetOperations
<
String
,
T
>
setOperation
=
redisTemplate
.
boundSetOps
(
key
);
setOperation
.
remove
(
values
);
}
/**
* 获得缓存的set
*
...
...
safe-campus-framework/pom.xml
View file @
1655486e
...
...
@@ -7,7 +7,7 @@
<parent>
<artifactId>
safe-campus-bbs
</artifactId>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<version>
3.8.5
</version>
</parent>
...
...
@@ -35,7 +35,7 @@
<!-- 系统模块-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-system
</artifactId>
</dependency>
</dependencies>
...
...
safe-campus-generator/pom.xml
View file @
1655486e
...
...
@@ -4,7 +4,7 @@
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
safe-campus-bbs
</artifactId>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<version>
3.8.5
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
...
...
@@ -31,7 +31,7 @@
<!-- 通用工具-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-common
</artifactId>
</dependency>
...
...
safe-campus-generator/src/main/resources/generator.yml
View file @
1655486e
...
...
@@ -3,7 +3,7 @@ gen:
# 作者
author
:
ruoyi
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
packageName
:
com.
ruoyi
.system
packageName
:
com.
tangguo
.system
# 自动去除表前缀,默认是false
autoRemovePre
:
false
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
...
...
safe-campus-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
View file @
1655486e
...
...
@@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.
ruoyi
.generator.mapper.GenTableColumnMapper"
>
<mapper
namespace=
"com.
tangguo
.generator.mapper.GenTableColumnMapper"
>
<resultMap
type=
"GenTableColumn"
id=
"GenTableColumnResult"
>
<id
property=
"columnId"
column=
"column_id"
/>
...
...
safe-campus-generator/src/main/resources/mapper/generator/GenTableMapper.xml
View file @
1655486e
...
...
@@ -2,7 +2,7 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.
ruoyi
.generator.mapper.GenTableMapper"
>
<mapper
namespace=
"com.
tangguo
.generator.mapper.GenTableMapper"
>
<resultMap
type=
"GenTable"
id=
"GenTableResult"
>
<id
property=
"tableId"
column=
"table_id"
/>
...
...
safe-campus-generator/src/main/resources/vm/java/controller.java.vm
View file @
1655486e
...
...
@@ -37,7 +37,7 @@ import com.tangguo.common.core.page.TableDataInfo;
@
RequestMapping
(
"/${moduleName}/${businessName}"
)
public
class
${
ClassName
}
Controller
extends
BaseController
{
@
Resource
s
@
Resource
private
I
${
ClassName
}
Service
${
className
}
Service
;
/**
...
...
safe-campus-generator/src/main/resources/vm/java/serviceImpl.java.vm
View file @
1655486e
...
...
@@ -24,7 +24,7 @@ import ${packageName}.service.I${ClassName}Service;
@
Service
public
class
${
ClassName
}
ServiceImpl
extends
ServiceImpl
<${
ClassName
}
Mapper
,
${
ClassName
}>
implements
I
${
ClassName
}
Service
{
@
Resource
s
@
Resource
private
${
ClassName
}
Mapper
${
className
}
Mapper
;
/**
...
...
safe-campus-moment/pom.xml
0 → 100644
View file @
1655486e
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
com.tangguo
</groupId>
<artifactId>
safe-campus-bbs
</artifactId>
<version>
3.8.5
</version>
</parent>
<artifactId>
safe-campus-moment
</artifactId>
<description>
moment动态系统模块
</description>
<dependencies>
<dependency>
<groupId>
com.tangguo
</groupId>
<artifactId>
safe-campus-system
</artifactId>
</dependency>
</dependencies>
</project>
safe-campus-moment/src/main/java/com/tangguo/controller/BbsGradeController.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
controller
;
import
com.tangguo.common.annotation.Log
;
import
com.tangguo.common.core.controller.BaseController
;
import
com.tangguo.common.core.domain.AjaxResult
;
import
com.tangguo.common.core.page.TableDataInfo
;
import
com.tangguo.common.enums.BusinessType
;
import
com.tangguo.domain.BbsGrade
;
import
com.tangguo.service.IBbsGradeService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
java.util.List
;
/**
* 用户等级Controller
*
* @author ruoyi
* @date 2025-08-28
*/
@Api
(
tags
=
"用户等级管理"
)
@RestController
@RequestMapping
(
"/bbs/moment/grade"
)
public
class
BbsGradeController
extends
BaseController
{
@Resource
private
IBbsGradeService
bbsGradeService
;
/**
* 查询用户等级列表
*/
@ApiOperation
(
"查询用户等级列表"
)
@PreAuthorize
(
"@ss.hasPermi('grade:grade:list')"
)
@GetMapping
(
"/list"
)
public
TableDataInfo
list
(
BbsGrade
bbsGrade
)
{
startPage
();
List
<
BbsGrade
>
list
=
bbsGradeService
.
selectBbsGradeList
(
bbsGrade
);
return
getDataTable
(
list
);
}
/**
* 获取用户等级详细信息
*/
@ApiOperation
(
"获取用户等级详细信息"
)
@PreAuthorize
(
"@ss.hasPermi('grade:grade:query')"
)
@GetMapping
(
value
=
"/{id}"
)
public
AjaxResult
getInfo
(
@PathVariable
(
"id"
)
Long
id
)
{
return
success
(
bbsGradeService
.
getById
(
id
));
}
/**
* 新增用户等级
*/
@ApiOperation
(
"新增用户等级"
)
@PreAuthorize
(
"@ss.hasPermi('grade:grade:add')"
)
@Log
(
title
=
"用户等级"
,
businessType
=
BusinessType
.
INSERT
)
@PostMapping
public
AjaxResult
add
(
@RequestBody
BbsGrade
grade
)
{
this
.
bbsGradeService
.
addGrade
(
grade
);
return
AjaxResult
.
success
();
}
/**
* 修改用户等级
*/
@ApiOperation
(
"修改用户等级"
)
@PreAuthorize
(
"@ss.hasPermi('grade:grade:edit')"
)
@Log
(
title
=
"用户等级"
,
businessType
=
BusinessType
.
UPDATE
)
@PutMapping
public
AjaxResult
edit
(
@RequestBody
BbsGrade
grade
)
{
this
.
bbsGradeService
.
editGrade
(
grade
);
return
AjaxResult
.
success
();
}
/**
* 删除用户等级
*/
@ApiOperation
(
"删除用户等级"
)
@PreAuthorize
(
"@ss.hasPermi('grade:grade:remove')"
)
@Log
(
title
=
"用户等级"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/{id}"
)
public
AjaxResult
remove
(
@PathVariable
Long
id
)
{
this
.
bbsGradeService
.
deleteGrade
(
id
);
return
AjaxResult
.
success
();
}
}
safe-campus-moment/src/main/java/com/tangguo/controller/BbsSensitiveWordController.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
controller
;
import
com.tangguo.common.annotation.Log
;
import
com.tangguo.common.core.controller.BaseController
;
import
com.tangguo.common.core.domain.AjaxResult
;
import
com.tangguo.common.core.page.TableDataInfo
;
import
com.tangguo.common.enums.BusinessType
;
import
com.tangguo.common.utils.poi.ExcelUtil
;
import
com.tangguo.domain.BbsSensitiveWord
;
import
com.tangguo.domain.result.DataImportResult
;
import
com.tangguo.service.IBbsSensitiveWordService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletResponse
;
import
java.util.Arrays
;
import
java.util.List
;
/**
* 敏感词库Controller
*
* @author ruoyi
* @date 2025-08-27
*/
@Api
(
tags
=
"敏感词库管理"
)
@RestController
@RequestMapping
(
"/bbs/moment/sensitive/word"
)
public
class
BbsSensitiveWordController
extends
BaseController
{
@Resource
private
IBbsSensitiveWordService
bbsSensitiveWordService
;
/**
* 查询敏感词库列表
*/
@ApiOperation
(
"查询敏感词库列表"
)
@PreAuthorize
(
"@ss.hasPermi('word:word:list')"
)
@GetMapping
(
"/list"
)
public
TableDataInfo
list
(
BbsSensitiveWord
bbsSensitiveWord
)
{
startPage
();
List
<
BbsSensitiveWord
>
list
=
bbsSensitiveWordService
.
selectBbsSensitiveWordList
(
bbsSensitiveWord
);
return
getDataTable
(
list
);
}
/**
* 获取敏感词库详细信息
*/
@ApiOperation
(
"获取敏感词库详细信息"
)
@PreAuthorize
(
"@ss.hasPermi('word:word:query')"
)
@GetMapping
(
value
=
"/{id}"
)
public
AjaxResult
getInfo
(
@PathVariable
(
"id"
)
Long
id
)
{
return
success
(
bbsSensitiveWordService
.
getById
(
id
));
}
/**
* 新增敏感词库
*/
@ApiOperation
(
"新增敏感词库"
)
@PreAuthorize
(
"@ss.hasPermi('word:word:add')"
)
@Log
(
title
=
"敏感词库"
,
businessType
=
BusinessType
.
INSERT
)
@PostMapping
public
AjaxResult
add
(
@RequestBody
BbsSensitiveWord
word
)
{
this
.
bbsSensitiveWordService
.
addWord
(
word
);
return
AjaxResult
.
success
();
}
/**
* 修改敏感词库
*/
@ApiOperation
(
"修改敏感词库"
)
@PreAuthorize
(
"@ss.hasPermi('word:word:edit')"
)
@Log
(
title
=
"敏感词库"
,
businessType
=
BusinessType
.
UPDATE
)
@PutMapping
public
AjaxResult
edit
(
@RequestBody
BbsSensitiveWord
word
)
{
this
.
bbsSensitiveWordService
.
editWord
(
word
);
return
AjaxResult
.
success
();
}
/**
* 删除敏感词库
*/
@ApiOperation
(
"删除敏感词库"
)
@PreAuthorize
(
"@ss.hasPermi('word:word:remove')"
)
@Log
(
title
=
"敏感词库"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/{id}"
)
public
AjaxResult
remove
(
@PathVariable
Long
id
)
{
this
.
bbsSensitiveWordService
.
deleteWord
(
id
);
return
AjaxResult
.
success
();
}
/**
* 修改敏感词库
*/
@ApiOperation
(
"修改敏感词库"
)
@PreAuthorize
(
"@ss.hasPermi('word:word:edit')"
)
@Log
(
title
=
"敏感词库"
,
businessType
=
BusinessType
.
IMPORT
)
@PostMapping
(
"/import"
)
public
AjaxResult
importWords
(
MultipartFile
file
)
{
DataImportResult
<
String
>
result
=
this
.
bbsSensitiveWordService
.
importWords
(
file
);
return
AjaxResult
.
success
(
result
);
}
/**
* 刷新敏感词库缓存
*/
@ApiOperation
(
"刷新敏感词库缓存"
)
@PreAuthorize
(
"@ss.hasPermi('word:word:refresh')"
)
@Log
(
title
=
"敏感词库"
,
businessType
=
BusinessType
.
UPDATE
)
@PutMapping
(
"/refresh"
)
public
AjaxResult
refresh
()
{
this
.
bbsSensitiveWordService
.
refreshCacheWords
();
return
AjaxResult
.
success
();
}
}
safe-campus-moment/src/main/java/com/tangguo/controller/BbsTopicController.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
controller
;
import
com.tangguo.common.annotation.Log
;
import
com.tangguo.common.core.controller.BaseController
;
import
com.tangguo.common.core.domain.AjaxResult
;
import
com.tangguo.common.core.page.TableDataInfo
;
import
com.tangguo.common.enums.BusinessType
;
import
com.tangguo.domain.BbsTopic
;
import
com.tangguo.service.IBbsTopicService
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
java.util.List
;
/**
* 话题Controller
*
* @author ruoyi
* @date 2025-08-27
*/
@Api
(
tags
=
"话题管理"
)
@RestController
@RequestMapping
(
"/bbs/moment/topic"
)
public
class
BbsTopicController
extends
BaseController
{
@Resource
private
IBbsTopicService
bbsTopicService
;
/**
* 查询话题列表
*/
@ApiOperation
(
"查询话题列表"
)
@PreAuthorize
(
"@ss.hasPermi('topic:topic:list')"
)
@GetMapping
(
"/list"
)
public
TableDataInfo
list
(
BbsTopic
bbsTopic
)
{
startPage
();
List
<
BbsTopic
>
list
=
bbsTopicService
.
selectBbsTopicList
(
bbsTopic
);
return
getDataTable
(
list
);
}
/**
* 获取话题详细信息
*/
@ApiOperation
(
"获取话题详细信息"
)
@PreAuthorize
(
"@ss.hasPermi('topic:topic:query')"
)
@GetMapping
(
value
=
"/{id}"
)
public
AjaxResult
getInfo
(
@PathVariable
(
"id"
)
Long
id
)
{
return
success
(
bbsTopicService
.
getById
(
id
));
}
/**
* 新增话题
*/
@ApiOperation
(
"新增话题"
)
@PreAuthorize
(
"@ss.hasPermi('topic:topic:add')"
)
@Log
(
title
=
"话题"
,
businessType
=
BusinessType
.
INSERT
)
@PostMapping
public
AjaxResult
add
(
@RequestBody
BbsTopic
bbsTopic
)
{
this
.
bbsTopicService
.
addTopic
(
bbsTopic
);
return
AjaxResult
.
success
();
}
/**
* 修改话题
*/
@ApiOperation
(
"修改话题"
)
@PreAuthorize
(
"@ss.hasPermi('topic:topic:edit')"
)
@Log
(
title
=
"话题"
,
businessType
=
BusinessType
.
UPDATE
)
@PutMapping
public
AjaxResult
edit
(
@RequestBody
BbsTopic
bbsTopic
)
{
this
.
bbsTopicService
.
editeTopic
(
bbsTopic
);
return
AjaxResult
.
success
();
}
/**
* 置顶话题
*/
@ApiOperation
(
"置顶话题"
)
@PreAuthorize
(
"@ss.hasPermi('topic:topic:top')"
)
@Log
(
title
=
"话题"
,
businessType
=
BusinessType
.
UPDATE
)
@PutMapping
(
"/top"
)
public
AjaxResult
top
(
@RequestBody
BbsTopic
bbsTopic
)
{
this
.
bbsTopicService
.
topTopic
(
bbsTopic
);
return
AjaxResult
.
success
();
}
/**
* 删除话题
*/
@ApiOperation
(
"删除话题"
)
@PreAuthorize
(
"@ss.hasPermi('topic:topic:remove')"
)
@Log
(
title
=
"话题"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/{id}"
)
public
AjaxResult
remove
(
@PathVariable
Long
id
)
{
this
.
bbsTopicService
.
deleteTopic
(
id
);
return
AjaxResult
.
success
();
}
}
safe-campus-moment/src/main/java/com/tangguo/domain/BbsGrade.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
domain
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.tangguo.common.annotation.Excel
;
import
com.tangguo.common.core.domain.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.ToString
;
import
lombok.experimental.Accessors
;
/**
* 用户等级对象 bbs_grade
*
* @author ruoyi
* @date 2025-08-28
*/
@Data
@ToString
@NoArgsConstructor
@Accessors
(
chain
=
true
)
@TableName
(
"bbs_grade"
)
@ApiModel
(
value
=
"BbsGrade"
,
description
=
"用户等级实体"
)
public
class
BbsGrade
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
/** ID */
@TableId
(
type
=
IdType
.
AUTO
)
@ApiModelProperty
(
"ID"
)
private
Long
id
;
/** 等级名称 */
@Excel
(
name
=
"等级名称"
)
@ApiModelProperty
(
"等级名称"
)
private
String
name
;
/** 等级编码 */
@Excel
(
name
=
"等级编码"
)
@ApiModelProperty
(
"等级编码"
)
private
String
code
;
/** 最小积分 */
@Excel
(
name
=
"最小积分"
)
@ApiModelProperty
(
"最小积分"
)
private
Integer
minPoints
;
/** 最大积分 */
@Excel
(
name
=
"最大积分"
)
@ApiModelProperty
(
"最大积分"
)
private
Integer
maxPoints
;
/** 排序值(升序) */
@Excel
(
name
=
"排序值"
,
readConverterExp
=
"升=序"
)
@ApiModelProperty
(
"排序值(升序)"
)
private
Integer
sort
;
}
safe-campus-moment/src/main/java/com/tangguo/domain/BbsSensitiveWord.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
domain
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.tangguo.common.annotation.Excel
;
import
com.tangguo.common.core.domain.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.ToString
;
import
lombok.experimental.Accessors
;
/**
* 敏感词库对象 bbs_sensitive_word
*
* @author ruoyi
* @date 2025-08-27
*/
@Data
@ToString
@NoArgsConstructor
@Accessors
(
chain
=
true
)
@TableName
(
"bbs_sensitive_word"
)
@ApiModel
(
value
=
"BbsSensitiveWord"
,
description
=
"敏感词库实体"
)
public
class
BbsSensitiveWord
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
/** ID */
@TableId
(
type
=
IdType
.
AUTO
)
@ApiModelProperty
(
"ID"
)
private
Long
id
;
/** 敏感词名称 */
@Excel
(
name
=
"敏感词名称"
)
@ApiModelProperty
(
"敏感词名称"
)
private
String
name
;
/** 排序值 */
@Excel
(
name
=
"排序值"
)
@ApiModelProperty
(
"排序值"
)
private
Integer
sort
;
/** 启用状态:0 禁用、1 启用 */
@Excel
(
name
=
"启用状态:0 禁用、1 启用"
)
@ApiModelProperty
(
"启用状态:0 禁用、1 启用"
)
private
Integer
enableStatus
;
}
safe-campus-moment/src/main/java/com/tangguo/domain/BbsTopic.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
domain
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.tangguo.common.annotation.Excel
;
import
com.tangguo.common.core.domain.BaseEntity
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
lombok.ToString
;
import
lombok.experimental.Accessors
;
import
java.util.Date
;
/**
* 话题对象 bbs_topic
*
* @author ruoyi
* @date 2025-08-27
*/
@Data
@ToString
@NoArgsConstructor
@Accessors
(
chain
=
true
)
@TableName
(
"bbs_topic"
)
@ApiModel
(
value
=
"BbsTopic"
,
description
=
"话题实体"
)
public
class
BbsTopic
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
/** ID */
@TableId
(
type
=
IdType
.
AUTO
)
@ApiModelProperty
(
"ID"
)
private
Long
id
;
/** 话题来源 */
@Excel
(
name
=
"话题来源"
)
@ApiModelProperty
(
"话题来源"
)
private
String
source
;
/** 话题名称 */
@Excel
(
name
=
"话题名称"
)
@ApiModelProperty
(
"话题名称"
)
private
String
name
;
/** 排序值(升序) */
@Excel
(
name
=
"排序值"
,
readConverterExp
=
"升=序"
)
@ApiModelProperty
(
"排序值(升序)"
)
private
Integer
sort
;
/** 是否置顶:0 否、1 是 */
@Excel
(
name
=
"是否置顶:0 否、1 是"
)
@ApiModelProperty
(
"是否置顶:0 否、1 是"
)
private
Integer
isTop
;
/** 置顶时间(降序) */
@Excel
(
name
=
"置顶时间"
,
readConverterExp
=
"降=序"
)
@ApiModelProperty
(
"置顶时间(降序)"
)
private
Date
topTime
;
/** 话题动态总点赞数 */
@Excel
(
name
=
"话题动态总点赞数"
)
@ApiModelProperty
(
"话题动态总点赞数"
)
private
Integer
likeCount
;
/** 话题动态总评论数 */
@Excel
(
name
=
"话题动态总评论数"
)
@ApiModelProperty
(
"话题动态总评论数"
)
private
Integer
commentCount
;
/** 话题热度 */
@Excel
(
name
=
"话题热度"
)
@ApiModelProperty
(
"话题热度"
)
private
Integer
heat
;
}
safe-campus-moment/src/main/java/com/tangguo/domain/result/DataImportResult.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
domain
.
result
;
import
lombok.Data
;
import
org.apache.poi.ss.formula.functions.T
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 数据导入结果
*
* @author 谈笑
* @createTime 2025-08-28 09:43:53 星期四
*/
@Data
public
class
DataImportResult
<
T
>
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
1544586244818112713L
;
/**
* 导入任务Id
*/
private
String
taskId
;
/**
* 导入数据总条数
*/
private
int
totalCount
;
/**
* 导入成功数据条数
*/
private
int
successCount
;
/**
* 导入失败数据条数
*/
private
int
failCount
;
/**
* 导入失败消息
*/
private
String
errorMessage
;
/**
* 导入数据失败数据明细
*/
private
List
<
Row
<
T
>>
failRows
=
new
ArrayList
<>(
0
);
@Data
public
static
class
Row
<
T
>
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
437773899860737658L
;
/**
* 原始数据
*/
private
T
rowData
;
/**
* 反馈消息
*/
private
String
message
;
}
}
safe-campus-moment/src/main/java/com/tangguo/enums/IsTop.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
enums
;
import
lombok.AllArgsConstructor
;
import
lombok.Getter
;
/**
* 是否置顶
*
* @author 谈笑
* @createTime 2025-08-27 16:27:34 星期三
*/
@Getter
@AllArgsConstructor
public
enum
IsTop
{
TOP
(
1
,
"置顶"
),
NOT_TOP
(
0
,
"不置顶"
);
private
final
int
isTop
;
private
final
String
desc
;
}
safe-campus-moment/src/main/java/com/tangguo/mapper/BbsGradeMapper.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.tangguo.domain.BbsGrade
;
/**
* 用户等级Mapper接口
*
* @author ruoyi
* @date 2025-08-28
*/
public
interface
BbsGradeMapper
extends
BaseMapper
<
BbsGrade
>
{
}
safe-campus-moment/src/main/java/com/tangguo/mapper/BbsSensitiveWordMapper.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.tangguo.domain.BbsSensitiveWord
;
/**
* 敏感词库Mapper接口
*
* @author ruoyi
* @date 2025-08-27
*/
public
interface
BbsSensitiveWordMapper
extends
BaseMapper
<
BbsSensitiveWord
>
{
}
safe-campus-moment/src/main/java/com/tangguo/mapper/BbsTopicMapper.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.tangguo.domain.BbsTopic
;
/**
* 话题Mapper接口
*
* @author ruoyi
* @date 2025-08-27
*/
public
interface
BbsTopicMapper
extends
BaseMapper
<
BbsTopic
>
{
}
safe-campus-moment/src/main/java/com/tangguo/service/IBbsGradeService.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
service
;
import
java.util.List
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.tangguo.domain.BbsGrade
;
/**
* 用户等级Service接口
*
* @author ruoyi
* @date 2025-08-28
*/
public
interface
IBbsGradeService
extends
IService
<
BbsGrade
>
{
/**
* 查询用户等级列表
*
* @param bbsGrade 用户等级
* @return 用户等级集合
*/
List
<
BbsGrade
>
selectBbsGradeList
(
BbsGrade
bbsGrade
);
/**
* 新增等级
*
* @param grade 等级
*/
void
addGrade
(
BbsGrade
grade
);
/**
* 修改等级
*
* @param grade 等级
*/
void
editGrade
(
BbsGrade
grade
);
/**
* 删除等级
*
* @param gradeId 等级Id
*/
void
deleteGrade
(
Long
gradeId
);
}
safe-campus-moment/src/main/java/com/tangguo/service/IBbsSensitiveWordService.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
service
;
import
java.util.List
;
import
java.util.Set
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.tangguo.domain.BbsSensitiveWord
;
import
com.tangguo.domain.result.DataImportResult
;
import
org.springframework.web.multipart.MultipartFile
;
/**
* 敏感词库Service接口
*
* @author ruoyi
* @date 2025-08-27
*/
public
interface
IBbsSensitiveWordService
extends
IService
<
BbsSensitiveWord
>
{
/**
* 查询敏感词
*
* @return 敏感词
*/
Set
<
String
>
getDbWords
();
/**
* 刷新缓存敏感词
*/
void
refreshCacheWords
();
/**
* 查询敏感词库列表
*
* @param bbsSensitiveWord 敏感词库
* @return 敏感词库集合
*/
List
<
BbsSensitiveWord
>
selectBbsSensitiveWordList
(
BbsSensitiveWord
bbsSensitiveWord
);
/**
* 新增敏感词
*
* @param word 敏感词
*/
void
addWord
(
BbsSensitiveWord
word
);
/**
* 修改敏感词
*
* @param word 敏感词
*/
void
editWord
(
BbsSensitiveWord
word
);
/**
* 删除敏感词
*
* @param wordId 敏感词Id
*/
void
deleteWord
(
Long
wordId
);
/**
* 导入敏感词
*
* @param file 铭感词文件
* @return 导入结果
*/
DataImportResult
<
String
>
importWords
(
MultipartFile
file
);
}
safe-campus-moment/src/main/java/com/tangguo/service/IBbsTopicService.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
service
;
import
java.util.List
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.tangguo.domain.BbsTopic
;
/**
* 话题Service接口
*
* @author ruoyi
* @date 2025-08-27
*/
public
interface
IBbsTopicService
extends
IService
<
BbsTopic
>
{
/**
* 查询话题列表
*
* @param bbsTopic 话题
* @return 话题集合
*/
List
<
BbsTopic
>
selectBbsTopicList
(
BbsTopic
bbsTopic
);
/**
* 新增话题
*
* @param topic 话题
*/
void
addTopic
(
BbsTopic
topic
);
/**
* 修改话题
*
* @param topic 话题
*/
void
editeTopic
(
BbsTopic
topic
);
/**
* 置顶话题
*
* @param topic 话题
*/
void
topTopic
(
BbsTopic
topic
);
/**
* 删除话题
*
* @param topicId 话题Id
*/
void
deleteTopic
(
Long
topicId
);
}
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsGradeServiceImpl.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
service
.
impl
;
import
cn.hutool.core.util.IdUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.tangguo.common.exception.ServiceException
;
import
com.tangguo.common.utils.StringUtils
;
import
com.tangguo.domain.BbsGrade
;
import
com.tangguo.mapper.BbsGradeMapper
;
import
com.tangguo.service.IBbsGradeService
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Generated
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
java.util.Objects
;
/**
* 用户等级Service业务层处理
*
* @author ruoyi
* @date 2025-08-28
*/
@Service
public
class
BbsGradeServiceImpl
extends
ServiceImpl
<
BbsGradeMapper
,
BbsGrade
>
implements
IBbsGradeService
{
@Resource
private
BbsGradeMapper
bbsGradeMapper
;
/**
* 查询用户等级列表
*
* @param grade 用户等级
* @return 用户等级
*/
@Override
public
List
<
BbsGrade
>
selectBbsGradeList
(
BbsGrade
grade
)
{
LambdaQueryWrapper
<
BbsGrade
>
lqw
=
Wrappers
.
lambdaQuery
();
lqw
.
orderByDesc
(
BbsGrade:
:
getCreateTime
);
lqw
.
like
(
StringUtils
.
isNotBlank
(
grade
.
getName
()),
BbsGrade:
:
getName
,
grade
.
getName
());
lqw
.
eq
(
StringUtils
.
isNotBlank
(
grade
.
getCode
()),
BbsGrade:
:
getCode
,
grade
.
getCode
());
lqw
.
eq
(
grade
.
getSort
()
!=
null
,
BbsGrade:
:
getSort
,
grade
.
getSort
());
return
bbsGradeMapper
.
selectList
(
lqw
);
}
/**
* 新增等级
*
* @param grade 等级
*/
@Override
public
void
addGrade
(
BbsGrade
grade
)
{
long
nameCount
=
this
.
count
(
Wrappers
.
lambdaQuery
(
BbsGrade
.
class
).
eq
(
BbsGrade:
:
getName
,
grade
.
getName
())
);
if
(
nameCount
>
0
)
{
throw
new
ServiceException
(
"添加失败,当前等级名称已存在。"
);
}
Integer
s1
=
grade
.
getMinPoints
();
Integer
e1
=
grade
.
getMaxPoints
();
if
(
s1
<
0
||
e1
<
0
||
s1
>=
e1
)
{
throw
new
ServiceException
(
"添加失败,当前等级积分范围错误。"
);
}
List
<
BbsGrade
>
dbGrades
=
this
.
list
();
for
(
BbsGrade
g
:
dbGrades
)
{
if
(!(
e1
<
g
.
getMinPoints
()
||
s1
>
g
.
getMaxPoints
()))
{
throw
new
ServiceException
(
"添加失败,当前等级积分范围和等级【"
+
g
.
getName
()
+
"】积分范围冲突。"
);
}
}
BbsGrade
addGrade
=
new
BbsGrade
();
addGrade
.
setName
(
grade
.
getName
());
addGrade
.
setCode
(
IdUtil
.
fastSimpleUUID
());
addGrade
.
setSort
(
grade
.
getSort
());
addGrade
.
setMinPoints
(
grade
.
getMinPoints
());
addGrade
.
setMaxPoints
(
grade
.
getMaxPoints
());
this
.
save
(
addGrade
);
}
/**
* 修改等级
*
* @param grade 等级
*/
@Override
public
void
editGrade
(
BbsGrade
grade
)
{
BbsGrade
dbGrade
=
this
.
getById
(
grade
.
getId
());
if
(
Objects
.
isNull
(
dbGrade
))
{
throw
new
ServiceException
(
"修改失败,未查询到当前等级数据。"
);
}
if
(!
dbGrade
.
getName
().
equals
(
grade
.
getName
()))
{
long
nameCount
=
this
.
count
(
Wrappers
.
lambdaQuery
(
BbsGrade
.
class
).
eq
(
BbsGrade:
:
getName
,
grade
.
getName
())
);
if
(
nameCount
>
0
)
{
throw
new
ServiceException
(
"修改失败,当前等级名称已存在。"
);
}
}
Integer
s1
=
grade
.
getMinPoints
();
Integer
e1
=
grade
.
getMaxPoints
();
if
(
s1
<
0
||
e1
<
0
||
s1
>=
e1
)
{
throw
new
ServiceException
(
"修改失败,当前等级积分范围错误。"
);
}
List
<
BbsGrade
>
dbGrades
=
this
.
list
();
for
(
BbsGrade
g
:
dbGrades
)
{
if
(!(
e1
<
g
.
getMinPoints
()
||
s1
>
g
.
getMaxPoints
()))
{
throw
new
ServiceException
(
"修改失败,当前等级积分范围和等级【"
+
g
.
getName
()
+
"】积分范围冲突。"
);
}
}
BbsGrade
updGrade
=
new
BbsGrade
();
updGrade
.
setId
(
dbGrade
.
getId
());
updGrade
.
setName
(
grade
.
getName
());
updGrade
.
setSort
(
grade
.
getSort
());
updGrade
.
setMinPoints
(
grade
.
getMinPoints
());
updGrade
.
setMaxPoints
(
grade
.
getMaxPoints
());
this
.
save
(
updGrade
);
}
/**
* 删除等级
*
* @param gradeId 等级Id
*/
@Override
public
void
deleteGrade
(
Long
gradeId
)
{
this
.
removeById
(
gradeId
);
}
}
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsSensitiveWordServiceImpl.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
service
.
impl
;
import
cn.hutool.core.io.IoUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.tangguo.common.core.redis.RedisCache
;
import
com.tangguo.common.exception.ServiceException
;
import
com.tangguo.common.utils.StringUtils
;
import
com.tangguo.domain.BbsSensitiveWord
;
import
com.tangguo.domain.result.DataImportResult
;
import
com.tangguo.mapper.BbsSensitiveWordMapper
;
import
com.tangguo.service.IBbsSensitiveWordService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.annotation.PostConstruct
;
import
javax.annotation.Resource
;
import
java.io.*
;
import
java.nio.file.Files
;
import
java.util.*
;
/**
* 敏感词库Service业务层处理
*
* @author ruoyi
* @date 2025-08-27
*/
@Slf4j
@Service
public
class
BbsSensitiveWordServiceImpl
extends
ServiceImpl
<
BbsSensitiveWordMapper
,
BbsSensitiveWord
>
implements
IBbsSensitiveWordService
{
private
static
final
String
WORD_CACHE_KEY
=
"sensitive:words"
;
@Resource
private
BbsSensitiveWordMapper
bbsSensitiveWordMapper
;
@Resource
private
RedisCache
redisCache
;
@PostConstruct
private
void
initCacheWords
()
{
Set
<
String
>
dbWords
=
this
.
getDbWords
();
this
.
redisCache
.
setCacheSet
(
WORD_CACHE_KEY
,
new
HashSet
<>(
dbWords
));
log
.
info
(
"=> 数据库敏感词已缓存,敏感词数量:{}"
,
dbWords
.
size
());
}
/**
* 查询敏感词
*
* @return 敏感词
*/
@Override
public
Set
<
String
>
getDbWords
()
{
List
<
String
>
dbWords
=
this
.
listObjs
(
Wrappers
.
lambdaQuery
(
BbsSensitiveWord
.
class
).
select
(
BbsSensitiveWord:
:
getName
),
Objects:
:
toString
);
return
new
HashSet
<>(
dbWords
);
}
/**
* 刷新缓存敏感词
*/
@Override
public
void
refreshCacheWords
()
{
this
.
redisCache
.
deleteObject
(
WORD_CACHE_KEY
);
log
.
info
(
"=> 缓存敏感词已清空"
);
Set
<
String
>
dbWords
=
this
.
getDbWords
();
this
.
redisCache
.
setCacheSet
(
WORD_CACHE_KEY
,
new
HashSet
<>(
dbWords
));
log
.
info
(
"=> 缓存敏感词已刷新,敏感词数量:{}"
,
dbWords
.
size
());
}
/**
* 查询敏感词库列表
*
* @param word 敏感词库
* @return 敏感词库
*/
@Override
public
List
<
BbsSensitiveWord
>
selectBbsSensitiveWordList
(
BbsSensitiveWord
word
)
{
LambdaQueryWrapper
<
BbsSensitiveWord
>
lqw
=
Wrappers
.
lambdaQuery
();
lqw
.
orderByDesc
(
BbsSensitiveWord:
:
getCreateTime
);
lqw
.
like
(
StringUtils
.
isNotBlank
(
word
.
getName
()),
BbsSensitiveWord:
:
getName
,
word
.
getName
());
return
bbsSensitiveWordMapper
.
selectList
(
lqw
);
}
/**
* 新增敏感词
*
* @param word 敏感词
*/
@Override
public
void
addWord
(
BbsSensitiveWord
word
)
{
long
wordCount
=
this
.
count
(
Wrappers
.
lambdaQuery
(
BbsSensitiveWord
.
class
).
eq
(
BbsSensitiveWord:
:
getName
,
word
.
getName
())
);
if
(
wordCount
>
0
)
{
throw
new
ServiceException
(
"添加失败,当前敏感词已存在。"
);
}
BbsSensitiveWord
addWord
=
new
BbsSensitiveWord
();
addWord
.
setName
(
word
.
getName
());
addWord
.
setSort
(
word
.
getSort
());
addWord
.
setEnableStatus
(
1
);
this
.
save
(
addWord
);
this
.
redisCache
.
setAddValues
(
WORD_CACHE_KEY
,
word
.
getName
());
}
/**
* 修改敏感词
*
* @param word 敏感词
*/
@Override
public
void
editWord
(
BbsSensitiveWord
word
)
{
BbsSensitiveWord
dbWord
=
this
.
getById
(
word
.
getId
());
if
(
Objects
.
isNull
(
dbWord
))
{
throw
new
ServiceException
(
"修改失败,未查询到当前敏感词数据。"
);
}
if
(!
dbWord
.
getName
().
equals
(
word
.
getName
()))
{
long
wordCount
=
this
.
count
(
Wrappers
.
lambdaQuery
(
BbsSensitiveWord
.
class
).
eq
(
BbsSensitiveWord:
:
getName
,
word
.
getName
())
);
if
(
wordCount
>
0
)
{
throw
new
ServiceException
(
"修改失败,当前敏感词已存在。"
);
}
}
BbsSensitiveWord
updWord
=
new
BbsSensitiveWord
();
updWord
.
setId
(
dbWord
.
getId
());
updWord
.
setName
(
word
.
getName
());
updWord
.
setSort
(
word
.
getSort
());
this
.
updateById
(
updWord
);
this
.
redisCache
.
setDeleteValues
(
WORD_CACHE_KEY
,
dbWord
.
getName
());
this
.
redisCache
.
setAddValues
(
WORD_CACHE_KEY
,
word
.
getName
());
}
/**
* 删除敏感词
*
* @param wordId 敏感词Id
*/
@Override
public
void
deleteWord
(
Long
wordId
)
{
BbsSensitiveWord
dbWord
=
this
.
getById
(
wordId
);
if
(
Objects
.
nonNull
(
dbWord
))
{
this
.
removeById
(
wordId
);
this
.
redisCache
.
setDeleteValues
(
WORD_CACHE_KEY
,
dbWord
.
getName
());
}
}
/**
* 导入敏感词
*
* @param file 铭感词文件
* @return 导入结果
*/
@Override
public
DataImportResult
<
String
>
importWords
(
MultipartFile
file
)
{
DataImportResult
<
String
>
result
=
new
DataImportResult
<>();
BufferedReader
reader
=
null
;
try
{
// 读取敏感词
reader
=
new
BufferedReader
(
new
InputStreamReader
(
file
.
getInputStream
()));
String
readWord
;
Set
<
String
>
readWords
=
new
LinkedHashSet
<>(
10
);
while
(
Objects
.
nonNull
(
readWord
=
reader
.
readLine
()))
{
if
(
StrUtil
.
isNotBlank
(
readWord
))
{
readWords
.
add
(
readWord
);
}
}
// 校验敏感词
Set
<
String
>
cacheWords
=
this
.
redisCache
.
getCacheSet
(
WORD_CACHE_KEY
);
List
<
BbsSensitiveWord
>
addWords
=
new
ArrayList
<>(
readWords
.
size
());
for
(
String
word
:
readWords
)
{
if
(!
cacheWords
.
contains
(
word
))
{
BbsSensitiveWord
newWord
=
new
BbsSensitiveWord
();
newWord
.
setName
(
word
);
addWords
.
add
(
newWord
);
}
else
{
DataImportResult
.
Row
<
String
>
row
=
new
DataImportResult
.
Row
<>();
row
.
setRowData
(
word
);
row
.
setMessage
(
"当前敏感词已存在"
);
result
.
getFailRows
().
add
(
row
);
}
}
super
.
saveBatch
(
addWords
);
// 缓存敏感词
this
.
redisCache
.
setAddValues
(
WORD_CACHE_KEY
,
addWords
.
toArray
());
result
.
setTotalCount
(
readWords
.
size
());
result
.
setSuccessCount
(
addWords
.
size
());
result
.
setFailCount
(
readWords
.
size
()
-
addWords
.
size
());
}
catch
(
Exception
e
)
{
log
.
error
(
"=> 导入敏感词失败:"
,
e
);
}
finally
{
IoUtil
.
close
(
reader
);
}
return
result
;
}
}
safe-campus-moment/src/main/java/com/tangguo/service/impl/BbsTopicServiceImpl.java
0 → 100644
View file @
1655486e
package
com
.
tangguo
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.tangguo.common.exception.ServiceException
;
import
com.tangguo.common.utils.StringUtils
;
import
com.tangguo.domain.BbsTopic
;
import
com.tangguo.enums.IsTop
;
import
com.tangguo.mapper.BbsTopicMapper
;
import
com.tangguo.service.IBbsTopicService
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
/**
* 话题Service业务层处理
*
* @author ruoyi
* @date 2025-08-27
*/
@Service
public
class
BbsTopicServiceImpl
extends
ServiceImpl
<
BbsTopicMapper
,
BbsTopic
>
implements
IBbsTopicService
{
@Resource
private
BbsTopicMapper
bbsTopicMapper
;
/**
* 查询话题列表
*
* @param topic 话题
* @return 话题
*/
@Override
public
List
<
BbsTopic
>
selectBbsTopicList
(
BbsTopic
topic
)
{
LambdaQueryWrapper
<
BbsTopic
>
lqw
=
Wrappers
.
lambdaQuery
();
lqw
.
orderByDesc
(
BbsTopic:
:
getCreateTime
);
lqw
.
like
(
StringUtils
.
isNotBlank
(
topic
.
getSource
()),
BbsTopic:
:
getSource
,
topic
.
getSource
());
lqw
.
like
(
StringUtils
.
isNotBlank
(
topic
.
getName
()),
BbsTopic:
:
getName
,
topic
.
getName
());
lqw
.
orderByAsc
(
BbsTopic:
:
getIsTop
);
lqw
.
orderByDesc
(
BbsTopic:
:
getTopTime
);
lqw
.
orderByAsc
(
BbsTopic:
:
getSort
);
return
bbsTopicMapper
.
selectList
(
lqw
);
}
/**
* 新增话题
*
* @param topic 话题
*/
@Override
public
void
addTopic
(
BbsTopic
topic
)
{
long
nameCount
=
this
.
count
(
Wrappers
.
lambdaQuery
(
BbsTopic
.
class
).
eq
(
BbsTopic:
:
getName
,
topic
.
getName
())
);
if
(
nameCount
>
0
)
{
throw
new
ServiceException
(
"新增失败,当前话题名称已存在。"
);
}
BbsTopic
newTopic
=
new
BbsTopic
();
newTopic
.
setSource
(
"后台管理"
);
newTopic
.
setName
(
topic
.
getName
());
newTopic
.
setSort
(
topic
.
getSort
());
this
.
save
(
newTopic
);
}
/**
* 修改话题
*
* @param topic 话题
*/
@Override
public
void
editeTopic
(
BbsTopic
topic
)
{
BbsTopic
dbTopic
=
this
.
getById
(
topic
.
getId
());
if
(
Objects
.
isNull
(
dbTopic
))
{
throw
new
ServiceException
(
"修改失败,当前话题数据不存在。"
);
}
if
(!
dbTopic
.
getName
().
equals
(
topic
.
getName
()))
{
long
nameCount
=
this
.
count
(
Wrappers
.
lambdaQuery
(
BbsTopic
.
class
).
eq
(
BbsTopic:
:
getName
,
topic
.
getName
())
);
if
(
nameCount
>
0
)
{
throw
new
ServiceException
(
"修改失败,当前话题名称已存在。"
);
}
}
BbsTopic
updTopic
=
new
BbsTopic
();
updTopic
.
setId
(
dbTopic
.
getId
());
updTopic
.
setName
(
topic
.
getName
());
updTopic
.
setSort
(
topic
.
getSort
());
this
.
updateById
(
updTopic
);
}
/**
* 置顶话题
*
* @param topic 话题
*/
@Override
public
void
topTopic
(
BbsTopic
topic
)
{
BbsTopic
dbTopic
=
this
.
getById
(
topic
.
getId
());
if
(
Objects
.
isNull
(
dbTopic
))
{
throw
new
ServiceException
(
"置顶失败,当前话题数据不存在。"
);
}
Integer
isTop
=
topic
.
getIsTop
();
if
(!
dbTopic
.
getIsTop
().
equals
(
isTop
))
{
LambdaUpdateWrapper
<
BbsTopic
>
wrapper
=
Wrappers
.
lambdaUpdate
(
BbsTopic
.
class
);
wrapper
.
eq
(
BbsTopic:
:
getId
,
dbTopic
.
getId
());
if
(
IsTop
.
TOP
.
getIsTop
()
==
isTop
)
{
wrapper
.
set
(
BbsTopic:
:
getIsTop
,
IsTop
.
TOP
.
getIsTop
());
wrapper
.
set
(
BbsTopic:
:
getTopTime
,
new
Date
());
}
else
{
wrapper
.
set
(
BbsTopic:
:
getIsTop
,
IsTop
.
NOT_TOP
.
getIsTop
());
wrapper
.
set
(
BbsTopic:
:
getTopTime
,
null
);
}
this
.
update
(
wrapper
);
}
}
/**
* 删除话题
*
* @param topicId 话题Id
*/
@Override
public
void
deleteTopic
(
Long
topicId
)
{
this
.
removeById
(
topicId
);
}
}
safe-campus-moment/src/main/resources/mapper/BbsSensitiveWordMapper.xml
0 → 100644
View file @
1655486e
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.tangguo.mapper.BbsSensitiveWordMapper"
>
<resultMap
type=
"BbsSensitiveWord"
id=
"BbsSensitiveWordResult"
>
<result
property=
"id"
column=
"id"
/>
<result
property=
"createBy"
column=
"create_by"
/>
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"updateBy"
column=
"update_by"
/>
<result
property=
"updateTime"
column=
"update_time"
/>
<result
property=
"remark"
column=
"remark"
/>
<result
property=
"name"
column=
"name"
/>
<result
property=
"sort"
column=
"sort"
/>
<result
property=
"enableStatus"
column=
"enable_status"
/>
</resultMap>
</mapper>
safe-campus-moment/src/main/resources/mapper/BbsTopicMapper.xml
0 → 100644
View file @
1655486e
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.tangguo.mapper.BbsTopicMapper"
>
<resultMap
type=
"BbsTopic"
id=
"BbsTopicResult"
>
<result
property=
"id"
column=
"id"
/>
<result
property=
"createBy"
column=
"create_by"
/>
<result
property=
"createTime"
column=
"create_time"
/>
<result
property=
"updateBy"
column=
"update_by"
/>
<result
property=
"updateTime"
column=
"update_time"
/>
<result
property=
"remark"
column=
"remark"
/>
<result
property=
"name"
column=
"name"
/>
<result
property=
"sort"
column=
"sort"
/>
<result
property=
"isTop"
column=
"is_top"
/>
<result
property=
"topTime"
column=
"top_time"
/>
<result
property=
"likeCount"
column=
"like_count"
/>
<result
property=
"commentCount"
column=
"comment_count"
/>
<result
property=
"heat"
column=
"heat"
/>
</resultMap>
</mapper>
safe-campus-points/pom.xml
0 → 100644
View file @
1655486e
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
com.tangguo
</groupId>
<artifactId>
safe-campus-bbs
</artifactId>
<version>
3.8.5
</version>
</parent>
<artifactId>
safe-campus-points
</artifactId>
<description>
points积分模块
</description>
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>
com.tangguo
</groupId>
<artifactId>
safe-campus-common
</artifactId>
</dependency>
</dependencies>
</project>
safe-campus-quartz/pom.xml
View file @
1655486e
...
...
@@ -4,7 +4,7 @@
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
safe-campus-bbs
</artifactId>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<version>
3.8.5
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
...
...
@@ -30,7 +30,7 @@
<!-- 通用工具-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-common
</artifactId>
</dependency>
</dependencies>
...
...
safe-campus-quartz/src/main/java/com/tangguo/quartz/config/ScheduleConfig.java
View file @
1655486e
//package com.
ruoyi
.quartz.config;
//package com.
tangguo
.quartz.config;
//
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
...
...
safe-campus-system/pom.xml
View file @
1655486e
...
...
@@ -7,7 +7,7 @@
<parent>
<artifactId>
safe-campus-bbs
</artifactId>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<version>
3.8.5
</version>
</parent>
...
...
@@ -17,7 +17,7 @@
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>
com.
ruoyi
</groupId>
<groupId>
com.
tangguo
</groupId>
<artifactId>
safe-campus-common
</artifactId>
</dependency>
</dependencies>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment