From 76b8831562ce73abf0dbdcf740439716834ac3bc Mon Sep 17 00:00:00 2001 From: HuangJiahui <3236488932@qq.com> Date: Tue, 6 Jan 2026 10:44:43 +0800 Subject: [PATCH 01/44] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E8=B7=A8=E5=9F=9F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../teaching/config/CorsConfig.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 backend/src/main/java/com/unionbigdata/teaching/config/CorsConfig.java diff --git a/backend/src/main/java/com/unionbigdata/teaching/config/CorsConfig.java b/backend/src/main/java/com/unionbigdata/teaching/config/CorsConfig.java new file mode 100644 index 0000000..8861d30 --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/config/CorsConfig.java @@ -0,0 +1,26 @@ +package com.unionbigdata.teaching.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +@Configuration +public class CorsConfig { + + // 当前跨域请求最大有效时长。这里默认1天 + private static final long MAX_AGE = 24 * 60 * 60; + + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration corsConfiguration = new CorsConfiguration(); + corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址 + corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头 + corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法 + corsConfiguration.setMaxAge(MAX_AGE); + source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置 + return new CorsFilter(source); + } +} \ No newline at end of file -- Gitee From 2ff0c405dd18c34d89a4f69b5ad5df664ce8327c Mon Sep 17 00:00:00 2001 From: lxm <3318952246@qq.com> Date: Tue, 6 Jan 2026 11:49:25 +0800 Subject: [PATCH 02/44] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E5=BB=BA=E7=AB=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/web-management-vue3/src/App.vue | 73 +----------- .../web-management-vue3/src/assets/main.css | 4 +- frontend/web-management-vue3/src/main.ts | 6 +- .../web-management-vue3/src/router/index.ts | 64 +++++++--- .../src/views/Data/index.vue | 19 +++ .../src/views/Layout/index.vue | 111 ++++++++++++++++++ .../src/views/Quality/index.vue | 19 +++ .../src/views/Task/index.vue | 19 +++ 8 files changed, 222 insertions(+), 93 deletions(-) create mode 100644 frontend/web-management-vue3/src/views/Data/index.vue create mode 100644 frontend/web-management-vue3/src/views/Layout/index.vue create mode 100644 frontend/web-management-vue3/src/views/Quality/index.vue create mode 100644 frontend/web-management-vue3/src/views/Task/index.vue diff --git a/frontend/web-management-vue3/src/App.vue b/frontend/web-management-vue3/src/App.vue index 7905b05..b9de61b 100644 --- a/frontend/web-management-vue3/src/App.vue +++ b/frontend/web-management-vue3/src/App.vue @@ -1,85 +1,14 @@ diff --git a/frontend/web-management-vue3/src/assets/main.css b/frontend/web-management-vue3/src/assets/main.css index 36fb845..cd97abd 100644 --- a/frontend/web-management-vue3/src/assets/main.css +++ b/frontend/web-management-vue3/src/assets/main.css @@ -1,9 +1,9 @@ @import './base.css'; #app { - max-width: 1280px; + /* max-width: 1280px; */ margin: 0 auto; - padding: 2rem; + padding: 1rem; font-weight: normal; } diff --git a/frontend/web-management-vue3/src/main.ts b/frontend/web-management-vue3/src/main.ts index 5dcad83..f45dbbb 100644 --- a/frontend/web-management-vue3/src/main.ts +++ b/frontend/web-management-vue3/src/main.ts @@ -6,9 +6,13 @@ import { createPinia } from 'pinia' import App from './App.vue' import router from './router' +import ElementPlus from 'element-plus' +// 引入 Element Plus 样式(关键!没有这个布局样式不生效) +import 'element-plus/dist/index.css' + const app = createApp(App) app.use(createPinia()) app.use(router) - +app.use(ElementPlus) app.mount('#app') diff --git a/frontend/web-management-vue3/src/router/index.ts b/frontend/web-management-vue3/src/router/index.ts index 3e49915..35b8e3a 100644 --- a/frontend/web-management-vue3/src/router/index.ts +++ b/frontend/web-management-vue3/src/router/index.ts @@ -1,23 +1,51 @@ -import { createRouter, createWebHistory } from 'vue-router' -import HomeView from '../views/HomeView.vue' +import { createRouter, createWebHistory, type RouteRecordRaw } from 'vue-router' // 1. 导入 TS 类型 +// 导入布局组件 +import LayoutContainer from '@/views/Layout/index.vue' +// 优化:改为懒加载(减小初始打包体积,符合最佳实践) +const TaskFormulation = () => import('@/views/Task/index.vue') +const DataCollection = () => import('@/views/Data/index.vue') +const QualityInspectionResult = () => import('@/views/Quality/index.vue') + +// 2. 显式标注 routes 类型为 RouteRecordRaw[] +const routes: RouteRecordRaw[] = [ + { + path: '/', + redirect: '/task-formulation', // 3. 修正重定向路径(小写 + 有效路径) + component: LayoutContainer, + children: [ + { + path: 'task-formulation', // 和侧边栏菜单 index="/task-formulation" 完全匹配 + name: 'TaskFormulation', + component: TaskFormulation, + meta: { title: '任务制定' } + }, + { + path: 'data-collection', // 和侧边栏菜单 index="/data-collection" 匹配 + name: 'DataCollection', + component: DataCollection, + meta: { title: '采集任务' } + }, + { + path: 'quality-inspection-result', // 和侧边栏菜单 index="/quality-inspection-result" 匹配 + name: 'QualityInspectionResult', + component: QualityInspectionResult, + meta: { title: '质检结果库' } + } + ] + } +] const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), - routes: [ - { - path: '/', - name: 'home', - component: HomeView, - }, - { - path: '/about', - name: 'about', - // route level code-splitting - // this generates a separate chunk (About.[hash].js) for this route - // which is lazy-loaded when the route is visited. - component: () => import('../views/AboutView.vue'), - }, - ], + routes +}) + +// 可选优化:路由守卫 - 自动设置页面标题 +router.beforeEach((to, from, next) => { + if (to.meta.title) { + document.title = `${to.meta.title} - 数据采集系统` + } + next() }) -export default router +export default router \ No newline at end of file diff --git a/frontend/web-management-vue3/src/views/Data/index.vue b/frontend/web-management-vue3/src/views/Data/index.vue new file mode 100644 index 0000000..ec2814b --- /dev/null +++ b/frontend/web-management-vue3/src/views/Data/index.vue @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/frontend/web-management-vue3/src/views/Layout/index.vue b/frontend/web-management-vue3/src/views/Layout/index.vue new file mode 100644 index 0000000..a2c3d84 --- /dev/null +++ b/frontend/web-management-vue3/src/views/Layout/index.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/frontend/web-management-vue3/src/views/Quality/index.vue b/frontend/web-management-vue3/src/views/Quality/index.vue new file mode 100644 index 0000000..cf7c2a9 --- /dev/null +++ b/frontend/web-management-vue3/src/views/Quality/index.vue @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file diff --git a/frontend/web-management-vue3/src/views/Task/index.vue b/frontend/web-management-vue3/src/views/Task/index.vue new file mode 100644 index 0000000..abdd4af --- /dev/null +++ b/frontend/web-management-vue3/src/views/Task/index.vue @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file -- Gitee From 99f84cc37be2f0cad221ac8e8fbf4020da2a9ea2 Mon Sep 17 00:00:00 2001 From: HuangJiahui <3236488932@qq.com> Date: Wed, 7 Jan 2026 17:25:51 +0800 Subject: [PATCH 03/44] =?UTF-8?q?=E6=95=8F=E6=84=9F=E8=AF=8D=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../teaching/DTO/SensitiveWordBatchDTO.java | 16 +++ .../controller/SensitiveWordController.java | 67 ++++++++++++ .../teaching/entity/SensitiveWord.java | 27 +++++ .../teaching/mapper/SensitiveWordMapper.java | 41 +++++++ .../teaching/mapper/xml/SensitiveWMapper.xml | 50 +++++++++ .../sevice/ISensitiveWordService.java | 27 +++++ .../sevice/impl/SensitiveWordServiceImpl.java | 102 ++++++++++++++++++ .../teaching/vo/SensitiveWordVO.java | 20 ++++ 8 files changed, 350 insertions(+) create mode 100644 backend/src/main/java/com/unionbigdata/teaching/DTO/SensitiveWordBatchDTO.java create mode 100644 backend/src/main/java/com/unionbigdata/teaching/controller/SensitiveWordController.java create mode 100644 backend/src/main/java/com/unionbigdata/teaching/entity/SensitiveWord.java create mode 100644 backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java create mode 100644 backend/src/main/java/com/unionbigdata/teaching/mapper/xml/SensitiveWMapper.xml create mode 100644 backend/src/main/java/com/unionbigdata/teaching/sevice/ISensitiveWordService.java create mode 100644 backend/src/main/java/com/unionbigdata/teaching/sevice/impl/SensitiveWordServiceImpl.java create mode 100644 backend/src/main/java/com/unionbigdata/teaching/vo/SensitiveWordVO.java diff --git a/backend/src/main/java/com/unionbigdata/teaching/DTO/SensitiveWordBatchDTO.java b/backend/src/main/java/com/unionbigdata/teaching/DTO/SensitiveWordBatchDTO.java new file mode 100644 index 0000000..a72b987 --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/DTO/SensitiveWordBatchDTO.java @@ -0,0 +1,16 @@ +package com.unionbigdata.teaching.DTO; + +import com.unionbigdata.teaching.entity.SensitiveWord; +import lombok.Data; + +import java.util.List; + +@Data +public class SensitiveWordBatchDTO { + // 新增的敏感词列表 + private List add; + // 修改的敏感词列表 + private List update; + // 删除的敏感词列表 + private List delete; +} diff --git a/backend/src/main/java/com/unionbigdata/teaching/controller/SensitiveWordController.java b/backend/src/main/java/com/unionbigdata/teaching/controller/SensitiveWordController.java new file mode 100644 index 0000000..58ea974 --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/controller/SensitiveWordController.java @@ -0,0 +1,67 @@ +package com.unionbigdata.teaching.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.unionbigdata.teaching.DTO.SensitiveWordBatchDTO; +import com.unionbigdata.teaching.common.Result; +import com.unionbigdata.teaching.entity.SensitiveWord; +import com.unionbigdata.teaching.sevice.ISensitiveWordService; +import com.unionbigdata.teaching.vo.SensitiveWordVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/sensitiveWord") +public class SensitiveWordController { + + @Autowired + private ISensitiveWordService sensitiveWordService; + + @GetMapping("/list")//返回全部敏感词 + public Result> findAllSensitiveWord(){ + return Result.ok(sensitiveWordService.findAllSensitiveWord()); + } + +/** + * 添加敏感词的接口方法 + * @param sensitiveWord 敏感词信息,通过请求体传递 + * @return 返回操作结果,包含添加的敏感词ID + */ + @PostMapping//添加敏感词 + public Result addSensitiveWord(@RequestBody SensitiveWord sensitiveWord){ + return Result.ok(sensitiveWordService.addSensitiveWord(sensitiveWord)); + } + + @DeleteMapping("/{id}")//根据id删除敏感词 + public Result deleteSensitiveWord(@PathVariable Integer id){ + return Result.ok(sensitiveWordService.deleteSensitiveWord(id)); + } + +// // 批量修改 +// @PostMapping("/updateSensitiveWordBatch") +// public Result updateSensitiveWordBatch(@RequestBody List sensitiveWordList) { +// // 调用Service的批量修改方法 +// int count = sensitiveWordService.updateSensitiveWordBatch(sensitiveWordList); +// return Result.ok(count); // 返回修改的记录数 +// } + + // 批量修改 + @PostMapping("/batch") + public Result updateSensitiveWordBatch(@RequestBody SensitiveWordBatchDTO batchDTO) { + return Result.ok(sensitiveWordService.updateSensitiveWordBatch(batchDTO.getAdd(), batchDTO.getUpdate(), batchDTO.getDelete())); + } + + @GetMapping("/page")//分页查询 + public Result findPage(@RequestParam Integer pageNum, + @RequestParam Integer pageSize) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + //queryWrapper.orderByDesc(User::getId); //设置降序查询,默认升序 + + Page page = new Page<>(pageNum,pageSize);//Page中的User要与userSerice对应 + + return Result.ok(sensitiveWordService.page(page, queryWrapper)); + } +} diff --git a/backend/src/main/java/com/unionbigdata/teaching/entity/SensitiveWord.java b/backend/src/main/java/com/unionbigdata/teaching/entity/SensitiveWord.java new file mode 100644 index 0000000..d67bbcb --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/entity/SensitiveWord.java @@ -0,0 +1,27 @@ +package com.unionbigdata.teaching.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +@TableName("sensitive_word") +@Data +public class SensitiveWord { + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + //敏感词 + private String wordContent; + + //创建时间 + private LocalDateTime createTime; + + //更新时间 + private LocalDateTime updateTime; + + //是否启用 0不启用,1启用 + private Integer isEnabled; +} diff --git a/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java b/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java new file mode 100644 index 0000000..8b30046 --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java @@ -0,0 +1,41 @@ +package com.unionbigdata.teaching.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.unionbigdata.teaching.entity.SensitiveWord; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface SensitiveWordMapper extends BaseMapper { + List findSensitiveWordList(); + +/** + * 根据ID删除记录 + * @param id 要删除的记录ID + * @return 删除操作的结果,通常返回受影响的行数或成功/失败标志 + */ + Integer deleteById(Integer id); + +/** + * 保存敏感词信息的方法声明 + * + * @param sensitiveWord 包含敏感词信息的对象 + * @return 如果保存成功返回true,否则返回false + */ + boolean save(SensitiveWord sensitiveWord); // 声明一个保存敏感词的方法,返回布尔值表示操作是否成功 + +/** + * 批量更新敏感词信息 + * @param sensitiveWordList 敏感词列表,包含需要更新的敏感词信息 + * @return 更新操作影响的记录数,用于判断更新是否成功 + */ + int updateBatch(List sensitiveWordList); + +/** + * 根据敏感词ID查询敏感词信息 + * @param id 敏感词的唯一标识ID + * @return 返回对应的敏感词对象,如果未找到则返回null + */ + SensitiveWord findSensitiveWordById(Integer id); +} diff --git a/backend/src/main/java/com/unionbigdata/teaching/mapper/xml/SensitiveWMapper.xml b/backend/src/main/java/com/unionbigdata/teaching/mapper/xml/SensitiveWMapper.xml new file mode 100644 index 0000000..c78c798 --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/mapper/xml/SensitiveWMapper.xml @@ -0,0 +1,50 @@ + + + + + + + + + + delete from sensitive_word + where id = #{id} + + + + + + + insert into sensitive_word (is_enabled, word_content) + values (#{isEnabled}, #{wordContent}) + + + + + update sensitive_word + + word_content = case id + + when #{item.id} then #{item.wordContent} + + end, + is_enabled = case id + + when #{item.id} then #{item.isEnabled} + + end + + where id in + + #{item.id} + + + + \ No newline at end of file diff --git a/backend/src/main/java/com/unionbigdata/teaching/sevice/ISensitiveWordService.java b/backend/src/main/java/com/unionbigdata/teaching/sevice/ISensitiveWordService.java new file mode 100644 index 0000000..6911ae5 --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/sevice/ISensitiveWordService.java @@ -0,0 +1,27 @@ +package com.unionbigdata.teaching.sevice; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.unionbigdata.teaching.entity.SensitiveWord; +import com.unionbigdata.teaching.vo.SensitiveWordVO; +import org.springframework.stereotype.Service; + +import java.util.List; + +public interface ISensitiveWordService extends IService { + + List findAllSensitiveWord(); + +/** + * 删除敏感词的方法 + * @param id 需要删除的敏感词的id + * @return 返回操作结果,Integer类型,通常用于表示删除的记录数或操作状态 + */ + Integer deleteSensitiveWord(Integer id); + + + boolean addSensitiveWord(SensitiveWord sensitiveWord); + + Integer updateSensitiveWordBatch(List add, List update, List delete); + +// int updateSensitiveWordBatch(List sensitiveWordList); +} diff --git a/backend/src/main/java/com/unionbigdata/teaching/sevice/impl/SensitiveWordServiceImpl.java b/backend/src/main/java/com/unionbigdata/teaching/sevice/impl/SensitiveWordServiceImpl.java new file mode 100644 index 0000000..b114b53 --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/sevice/impl/SensitiveWordServiceImpl.java @@ -0,0 +1,102 @@ +package com.unionbigdata.teaching.sevice.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.unionbigdata.teaching.entity.SensitiveWord; +import com.unionbigdata.teaching.entity.UserEntity; +import com.unionbigdata.teaching.mapper.SensitiveWordMapper; +import com.unionbigdata.teaching.sevice.ISensitiveWordService; +import com.unionbigdata.teaching.vo.SensitiveWordVO; +import com.unionbigdata.teaching.vo.UserVO; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.util.List; + +@Service +public class SensitiveWordServiceImpl extends ServiceImpl implements ISensitiveWordService{ + + @Resource + private SensitiveWordMapper sensitiveWordMapper; + +/** + * 查找所有敏感词信息 + * @return 返回敏感词视图对象列表(SensitiveWordVO) + */ + @Override + public List findAllSensitiveWord() { + // 从数据库中获取所有敏感词数据 + List sensitiveWordList = sensitiveWordMapper.findSensitiveWordList(); + // 将实体对象列表转换为视图对象列表并返回 + return sensitiveWordList.stream().map(this::convertSensitiveWordVO).toList(); + } + +/** + * 删除敏感词方法 + * @param id 敏感词ID + * @return 返回删除的记录数,通常为1表示成功删除,0表示未找到对应记录 + */ + @Override + public Integer deleteSensitiveWord(Integer id) { + // 调用敏感词数据访问层的删除方法,根据ID删除敏感词 + return sensitiveWordMapper.deleteById(id); + } + + +/** + * 添加敏感词方法 + * @param sensitiveWord 敏感词对象,包含需要添加的敏感词信息 + * @return 返回操作结果,true表示添加成功,false表示添加失败 + */ + @Override + public boolean addSensitiveWord(SensitiveWord sensitiveWord) { + // 调用敏感词映射器的save方法,保存敏感词信息并返回操作结果 + return sensitiveWordMapper.save(sensitiveWord); + } + +/** + * 批量更新敏感词信息的方法 + * 包括新增、修改和删除三种操作 + * + * @param addSensitiveWordList 需要新增的敏感词列表 + * @param updateSensitiveWordList 需要修改的敏感词列表 + * @param deleteSensitiveWordList 需要删除的敏感词列表 + * @return 返回操作结果,此处固定返回0 + */ + @Override + public Integer updateSensitiveWordBatch(List addSensitiveWordList, List updateSensitiveWordList, List deleteSensitiveWordList) { + // 遍历新增敏感词列表,逐个保存 + for (SensitiveWord sensitiveWord : addSensitiveWordList) { + sensitiveWordMapper.save(sensitiveWord); + } + // 遍历更新敏感词列表,逐个更新 + for (SensitiveWord sensitiveWord : updateSensitiveWordList) { + sensitiveWordMapper.updateById(sensitiveWord); + } + // 遍历删除敏感词列表,逐个删除 + for (Integer id : deleteSensitiveWordList) { + sensitiveWordMapper.deleteById(id); + } + return 0; + } + + // 批量修改的实现 +// @Override +// public int updateSensitiveWordBatch(List sensitiveWordList) { +// for( SensitiveWord sensitiveWord : sensitiveWordList){ +// Long id = sensitiveWord.getId(); +// } +// // 调用Mapper的批量更新方法 +// return sensitiveWordMapper.updateBatch(sensitiveWordList); +// } + + private SensitiveWordVO convertSensitiveWordVO(SensitiveWord sensitiveWord) { + SensitiveWordVO sensitiveWordVO = new SensitiveWordVO(); + if (!ObjectUtils.isEmpty(sensitiveWord)) { + sensitiveWordVO.setId(sensitiveWord.getId()); + sensitiveWordVO.setWordContent(sensitiveWord.getWordContent()); + sensitiveWordVO.setIsEnabled(sensitiveWord.getIsEnabled()); + } + return sensitiveWordVO; + } +} diff --git a/backend/src/main/java/com/unionbigdata/teaching/vo/SensitiveWordVO.java b/backend/src/main/java/com/unionbigdata/teaching/vo/SensitiveWordVO.java new file mode 100644 index 0000000..3048837 --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/vo/SensitiveWordVO.java @@ -0,0 +1,20 @@ +package com.unionbigdata.teaching.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "敏感词VO") +@Data +public class SensitiveWordVO { + + @Schema(description = "敏感词ID") + private Long id; + + //敏感词 + @Schema(description = "敏感词") + private String wordContent; + + //是否启用 + @Schema(description = "是否启用") + private Integer isEnabled; +} -- Gitee From f0b45e883ff89736d763d1d902da273cddb307b6 Mon Sep 17 00:00:00 2001 From: HuangJiahui <3236488932@qq.com> Date: Wed, 7 Jan 2026 19:51:35 +0800 Subject: [PATCH 04/44] =?UTF-8?q?=E6=95=8F=E6=84=9F=E8=AF=8D=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/pom.xml | 3 +- .../teaching/DTO/SensitiveWordBatchDTO.java | 2 +- .../teaching/controller/UserController.java | 6 ++ .../teaching/mapper/SensitiveWordMapper.java | 9 +++ .../sevice/impl/SensitiveWordServiceImpl.java | 6 +- .../teaching/sevice/impl/UserServiceImpl.java | 2 - .../teaching/utils/SensitiveWordManager.java | 70 +++++++++++++++++++ backend/src/main/resources/application.yml | 7 +- 8 files changed, 95 insertions(+), 10 deletions(-) create mode 100644 backend/src/main/java/com/unionbigdata/teaching/utils/SensitiveWordManager.java diff --git a/backend/pom.xml b/backend/pom.xml index 34e1ce2..7e02cb9 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -59,8 +59,7 @@ org.projectlombok lombok - 1.18.34 - provided + 1.18.42 diff --git a/backend/src/main/java/com/unionbigdata/teaching/DTO/SensitiveWordBatchDTO.java b/backend/src/main/java/com/unionbigdata/teaching/DTO/SensitiveWordBatchDTO.java index a72b987..c4e5994 100644 --- a/backend/src/main/java/com/unionbigdata/teaching/DTO/SensitiveWordBatchDTO.java +++ b/backend/src/main/java/com/unionbigdata/teaching/DTO/SensitiveWordBatchDTO.java @@ -6,7 +6,7 @@ import lombok.Data; import java.util.List; @Data -public class SensitiveWordBatchDTO { +public class SensitiveWordBatchDTO {//用于前端“敏感词设置”页面 // 新增的敏感词列表 private List add; // 修改的敏感词列表 diff --git a/backend/src/main/java/com/unionbigdata/teaching/controller/UserController.java b/backend/src/main/java/com/unionbigdata/teaching/controller/UserController.java index a9baf2f..76c3974 100644 --- a/backend/src/main/java/com/unionbigdata/teaching/controller/UserController.java +++ b/backend/src/main/java/com/unionbigdata/teaching/controller/UserController.java @@ -24,6 +24,12 @@ public class UserController { return Result.ok(testService.findById(id)); } + @GetMapping("/a") + public String ces(){ + String a = "123"; + return a; + } + @Operation(summary = "新增用户") @PostMapping public Result saveUser(@RequestBody UserVO userVO) { diff --git a/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java b/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java index 8b30046..a58241e 100644 --- a/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java +++ b/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java @@ -3,6 +3,7 @@ package com.unionbigdata.teaching.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.unionbigdata.teaching.entity.SensitiveWord; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -38,4 +39,12 @@ public interface SensitiveWordMapper extends BaseMapper { * @return 返回对应的敏感词对象,如果未找到则返回null */ SensitiveWord findSensitiveWordById(Integer id); + +/** + * 查询所有启用的词语内容 + * + * @return 返回启用的词语内容列表,每个元素是一个字符串 + */ + @Select("select word_content from sensitive_word where is_enabled = 1") + List selectEnabledWordContents(); } diff --git a/backend/src/main/java/com/unionbigdata/teaching/sevice/impl/SensitiveWordServiceImpl.java b/backend/src/main/java/com/unionbigdata/teaching/sevice/impl/SensitiveWordServiceImpl.java index b114b53..223d408 100644 --- a/backend/src/main/java/com/unionbigdata/teaching/sevice/impl/SensitiveWordServiceImpl.java +++ b/backend/src/main/java/com/unionbigdata/teaching/sevice/impl/SensitiveWordServiceImpl.java @@ -2,11 +2,10 @@ package com.unionbigdata.teaching.sevice.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.unionbigdata.teaching.entity.SensitiveWord; -import com.unionbigdata.teaching.entity.UserEntity; import com.unionbigdata.teaching.mapper.SensitiveWordMapper; import com.unionbigdata.teaching.sevice.ISensitiveWordService; +import com.unionbigdata.teaching.utils.SensitiveWordManager; import com.unionbigdata.teaching.vo.SensitiveWordVO; -import com.unionbigdata.teaching.vo.UserVO; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; @@ -19,6 +18,9 @@ public class SensitiveWordServiceImpl extends ServiceImpl enabledSensitiveWords = new HashSet<>(); + // 敏感词匹配的正则表达式(预编译,提升性能) + private Pattern sensitiveWordPattern; + + // 注入敏感词Mapper,用于从数据库查询敏感词 + private final SensitiveWordMapper sensitiveWordMapper; + public SensitiveWordManager(SensitiveWordMapper sensitiveWordMapper) { + this.sensitiveWordMapper = sensitiveWordMapper; + } + + /** + * 项目启动时自动加载【启用的敏感词】到缓存 + */ + @PostConstruct + public void loadEnabledSensitiveWords() { + // 从数据库查询:is_enabled=1的敏感词内容 + List words = sensitiveWordMapper.selectEnabledWordContents(); + enabledSensitiveWords.clear(); + enabledSensitiveWords.addAll(words); + + // 构建敏感词正则(转义特殊字符,避免正则语法错误) + if (!enabledSensitiveWords.isEmpty()) { + StringBuilder regexBuilder = new StringBuilder(); + for (String word : enabledSensitiveWords) { + // Pattern.quote():转义敏感词中的特殊字符(如.、*、|等) + regexBuilder.append(Pattern.quote(word)).append("|"); + } + // 移除最后一个多余的"|" + regexBuilder.deleteCharAt(regexBuilder.length() - 1); + // 编译正则(忽略大小写,避免漏检“美国”和“美國”) + sensitiveWordPattern = Pattern.compile(regexBuilder.toString(), Pattern.CASE_INSENSITIVE); + } + } + + /** + * 核心方法:对单个字符串做敏感词替换(替换为等长度的*) + * @param text 待检测的文本 + * @return 替换敏感词后的文本 + */ + public String replaceSensitiveWord(String text) { + // 空值/无敏感词时直接返回原文本 + if (text == null || text.isEmpty() || sensitiveWordPattern == null) { + return text; + } + + Matcher matcher = sensitiveWordPattern.matcher(text); + // 匹配到敏感词则替换为等长度的“*” + return matcher.replaceAll(matchResult -> { + String matchedWord = matchResult.group(); + return "*".repeat(matchedWord.length()); + }); + } +} \ No newline at end of file diff --git a/backend/src/main/resources/application.yml b/backend/src/main/resources/application.yml index 8f7cf05..bbf33db 100644 --- a/backend/src/main/resources/application.yml +++ b/backend/src/main/resources/application.yml @@ -1,13 +1,14 @@ server: port: 8080 + address: 0.0.0.0 # 关键:监听所有网络接口 spring: application: - name: data-acqusition-system + name: supplementary_data_collection datasource: - url: jdbc:mysql://localhost:3306/data-acqusition-system?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai + url: jdbc:mysql://localhost:3306/supplementary_data_collection?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root - password: 123456 + password: 1234 driver-class-name: com.mysql.cj.jdbc.Driver sql: init: -- Gitee From 810bece2ae6eb0320222729ed16739690608519c Mon Sep 17 00:00:00 2001 From: HuangJiahui <3236488932@qq.com> Date: Fri, 9 Jan 2026 08:58:53 +0800 Subject: [PATCH 05/44] =?UTF-8?q?=E6=95=8F=E6=84=9F=E8=AF=8D=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../teaching/DTO/DynamicTableRequestDTO.java | 17 ++++++ .../controller/SensitiveWordController.java | 6 ++ .../teaching/mapper/SensitiveWordMapper.java | 4 ++ .../teaching/mapper/xml/SensitiveWMapper.xml | 1 + .../sevice/ISensitiveWordService.java | 3 + .../sevice/impl/SensitiveWordServiceImpl.java | 59 ++++++++++++++++--- 6 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 backend/src/main/java/com/unionbigdata/teaching/DTO/DynamicTableRequestDTO.java diff --git a/backend/src/main/java/com/unionbigdata/teaching/DTO/DynamicTableRequestDTO.java b/backend/src/main/java/com/unionbigdata/teaching/DTO/DynamicTableRequestDTO.java new file mode 100644 index 0000000..4bb4a46 --- /dev/null +++ b/backend/src/main/java/com/unionbigdata/teaching/DTO/DynamicTableRequestDTO.java @@ -0,0 +1,17 @@ +package com.unionbigdata.teaching.DTO; +import lombok.Data; +import java.util.List; +import java.util.Map; + +/** + * 接收动态表格数据的DTO + */ +@Data +public class DynamicTableRequestDTO { + // 补充采集任务ID(关联该任务的字段配置) + private Integer taskId; + // 该表的字段名 + private List filedName; + // 动态表格行数据:每一行是“字段名→值”的键值对。一个Map可以装很多,一个Map存一行 + private List> tableRows; +} \ No newline at end of file diff --git a/backend/src/main/java/com/unionbigdata/teaching/controller/SensitiveWordController.java b/backend/src/main/java/com/unionbigdata/teaching/controller/SensitiveWordController.java index 58ea974..1ed91bd 100644 --- a/backend/src/main/java/com/unionbigdata/teaching/controller/SensitiveWordController.java +++ b/backend/src/main/java/com/unionbigdata/teaching/controller/SensitiveWordController.java @@ -2,6 +2,7 @@ package com.unionbigdata.teaching.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.unionbigdata.teaching.DTO.DynamicTableRequestDTO; import com.unionbigdata.teaching.DTO.SensitiveWordBatchDTO; import com.unionbigdata.teaching.common.Result; import com.unionbigdata.teaching.entity.SensitiveWord; @@ -64,4 +65,9 @@ public class SensitiveWordController { return Result.ok(sensitiveWordService.page(page, queryWrapper)); } + + @PostMapping("/dataFilter") + public Result checkAndReplaceSensitiveWord(@RequestBody DynamicTableRequestDTO dynamicDTO) {//如何接收不同表的实体? + return Result.ok(sensitiveWordService.checkAndReplaceSensitiveWord(dynamicDTO)); + } } diff --git a/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java b/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java index a58241e..ddbebf4 100644 --- a/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java +++ b/backend/src/main/java/com/unionbigdata/teaching/mapper/SensitiveWordMapper.java @@ -9,6 +9,10 @@ import java.util.List; @Mapper public interface SensitiveWordMapper extends BaseMapper { +/** + * 查询敏感词列表的方法 + * @return 返回敏感词列表,包含所有敏感词信息的集合 + */ List findSensitiveWordList(); /** diff --git a/backend/src/main/java/com/unionbigdata/teaching/mapper/xml/SensitiveWMapper.xml b/backend/src/main/java/com/unionbigdata/teaching/mapper/xml/SensitiveWMapper.xml index c78c798..bd031ce 100644 --- a/backend/src/main/java/com/unionbigdata/teaching/mapper/xml/SensitiveWMapper.xml +++ b/backend/src/main/java/com/unionbigdata/teaching/mapper/xml/SensitiveWMapper.xml @@ -2,6 +2,7 @@ +