Przeglądaj źródła

交易市场平台(供应商)

wwh 1 miesiąc temu
rodzic
commit
97b66cc327

+ 1 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/architecture/support/BreedingStandardRules.java

@@ -68,7 +68,7 @@ public final class BreedingStandardRules
68 68
     {
69 69
         String ext = extensionOf(filenameOrPath);
70 70
         return ext.equals("pdf") || ext.equals("md") || ext.equals("doc") || ext.equals("docx")
71
-                || ext.equals("xls") || ext.equals("xlsx") || ext.equals("ppt") || ext.equals("pptx");
71
+                || ext.equals("xls") || ext.equals("xlsx") || ext.equals("pptx");
72 72
     }
73 73
 
74 74
     public static boolean isCoverExtensionAllowed(String filenameOrPath)

+ 3 - 0
baqing-admin/src/test/java/com/ruoyi/web/modules/architecture/support/BreedingStandardRulesTest.java

@@ -103,7 +103,10 @@ class BreedingStandardRulesTest
103 103
     void ut011_contentExt()
104 104
     {
105 105
         assertTrue(BreedingStandardRules.isContentExtensionAllowed("a.pdf"));
106
+        assertTrue(BreedingStandardRules.isContentExtensionAllowed("readme.md"));
106 107
         assertTrue(BreedingStandardRules.isContentExtensionAllowed("x.DOCX"));
108
+        assertTrue(BreedingStandardRules.isContentExtensionAllowed("slides.pptx"));
109
+        assertFalse(BreedingStandardRules.isContentExtensionAllowed("legacy.ppt"));
107 110
         assertFalse(BreedingStandardRules.isContentExtensionAllowed("a.exe"));
108 111
         assertFalse(BreedingStandardRules.isContentExtensionAllowed("noext"));
109 112
     }

+ 2 - 1
doc/养殖标准体系/养殖标准/养殖标准管理前端技术方案.md

@@ -145,7 +145,7 @@
145 145
 | 标准名称 | 必填,1~20 字(`ruleLen120`) |
146 146
 | 标准类型 | 必选 |
147 147
 | 简介 | 选填,≤50 字 |
148
-| 正文 | 必填(校验 `contentFilePath`);后缀 `pdf/md/doc/docx/xls/xlsx/ppt/pptx`;≤30MB;文件名不含英文逗号 |
148
+| 正文 | 必填(校验 `contentFilePath`);后缀 `pdf/md/doc/docx/xls/xlsx/pptx`;≤30MB;文件名不含英文逗号 |
149 149
 | 封面 | 选填;`jpg/jpeg/png`;≤10MB |
150 150
 
151 151
 上传地址:`VUE_APP_BASE_API + '/common/upload'`,Header `Authorization: Bearer {token}`。上传过程 `$modal.loading`,结束 `closeLoading`。
@@ -203,3 +203,4 @@
203 203
 | --- | --- |
204 204
 | 1.0 | 根据 `breedingManage/index.vue` 生成:双卡片 CRUD、资讯类别编码、双维状态机、附件上传、知识库与发布/下架 |
205 205
 | **1.1** | **2026-06-01**:标准类型改资讯类别编码(`parentCode=001&categoryType=1`);存量 `1`~`4` 回退展示;编辑/上传仅 **未发布+未同步**;类型加载失败与已同步编辑提示;下架回流 **(0,1)** 操作矩阵修正 |
206
+| **1.2** | **2026-05-20**:正文 `contentFileExts` 与提示文案对齐:`pdf`、`md`、`doc`、`docx`、`xls`、`xlsx`、`pptx`(移除 `ppt`) |

+ 1 - 1
doc/养殖标准体系/养殖标准/养殖标准管理功能需求-草稿.md

@@ -2,7 +2,7 @@
2 2
 
3 3
 
4 4
 
5
-1. 新增养殖标准:标准名称不能为空,长度 1–20;标准类型:繁育作业/饲养工作/免疫程序/环境调控,必填,支持单选;标准简介:限制50字内;标准内容:必填,支持后缀名为pdf、md、doc、docx、xls、xlsx、ppt,pptx等非结构化文档单选上传,文件大小30M以内;封面:支持后缀名为jpg、jpeg、png等图片单选上传,文件大小10M以内。
5
+1. 新增养殖标准:标准名称不能为空,长度 1–20;标准类型:繁育作业/饲养工作/免疫程序/环境调控,必填,支持单选;标准简介:限制50字内;标准内容:必填,支持后缀名为 pdf、md、doc、docx、xls、xlsx、pptx 等非结构化文档单选上传,文件大小30M以内;封面:支持后缀名为jpg、jpeg、png等图片单选上传,文件大小10M以内。
6 6
 2. 查询养殖标准列表:支持关键字(标准名称或标准简介)模糊匹配、标准类型精确匹配分页列出养殖标准列表。
7 7
 3. 修改养殖标准:标准名称、标准类型、标准简介、标准内容、封面均可修改。
8 8
 4. 删除养殖标准:删除数据同时删除相关文件,并通知知识库删除该养殖标准。

+ 2 - 1
doc/养殖标准体系/养殖标准/养殖标准管理功能需求.md

@@ -87,7 +87,7 @@
87 87
 | 标准名称 | 必填;长度 1~20 个字符(字符计数规则与项目全局一致,如按 Unicode 长度或字节需单独约定) |
88 88
 | 标准类型 | 必填;单选,取值须为第 **2.1** 节所列资讯类别编码之一 |
89 89
 | 标准简介 | **选填**;若有内容,长度不超过 **50 字**(字数口径与项目全局一致,如是否含标点、中英文计数方式) |
90
-| 标准内容 | **必填**;通过**单个**附件上传;允许后缀:`pdf`、`md`、`doc`、`docx`、`xls`、`xlsx`、`ppt`、`pptx`;单文件 ≤ **30 MB** |
90
+| 标准内容 | **必填**;通过**单个**附件上传;允许后缀:`pdf`、`md`、`doc`、`docx`、`xls`、`xlsx`、`pptx`;单文件 ≤ **30 MB** |
91 91
 | 封面 | 通过**单个**图片上传;允许后缀:`jpg`、`jpeg`、`png`(若有 `webp` 等产品需求可追加);单文件 ≤ **10 MB** |
92 92
 
93 93
 **必填字段汇总:** 标准名称、标准类型、标准内容。  
@@ -213,3 +213,4 @@
213 213
 - 列表分页默认 **每页 20 条**;列表默认 **创建时间倒序**。  
214 214
 - **已同步**禁止编辑,与休药期/药物禁配等模块对齐;改内容须 **移出 → 修改 → 再同步**。  
215 215
 - **标准名称**长度由 **3~20** 调整为 **1~20** 个字符,与 `养殖标准管理功能需求-草稿.md` 及饲喂/疫病/生长出栏等标准模块字段规则对齐。
216
+- **标准内容**正文附件白名单调整为:`pdf`、`md`、`doc`、`docx`、`xls`、`xlsx`、`pptx`(不再支持旧版 `ppt`);与 `BreedingStandardRules`、前端 `contentFileExts` 及通用上传白名单(含 `md`)一致。

+ 2 - 1
doc/养殖标准体系/养殖标准/养殖标准管理技术方案.md

@@ -182,7 +182,7 @@ ALTER TABLE `biz_breeding_standard`
182 182
 | **Method / URI** | `POST /breeding/standard` |
183 183
 | **权限** | `breeding:standard:add` |
184 184
 | **Body** | JSON:`standardName`、`standardType`、`introduction`(可空)、`contentFileUrl`、`contentFilePath`、`contentFileName`(正文附件名称,与上传返回 `originalFilename` 对齐)、`coverFileUrl`、`coverFilePath`(封面可空);正文须先上传 |
185
-| **校验** | 名称长度 **1~20**;`standard_type` 为资讯类别有效编码(**2.3**);简介字数、附件后缀与 ≤30MB、封面后缀与 ≤10MB |
185
+| **校验** | 名称长度 **1~20**;`standard_type` 为资讯类别有效编码(**2.3**);简介字数、正文后缀白名单 **`pdf`/`md`/`doc`/`docx`/`xls`/`xlsx`/`pptx`** 与 ≤30MB、封面后缀 **`jpg`/`jpeg`/`png`** 与 ≤10MB(`BreedingStandardRules.isContentExtensionAllowed`) |
186 186
 | **落库** | `publish_status=0`,`kb_sync_status=0`,时间字段由若依填充 |
187 187
 
188 188
 ### 3.4 修改
@@ -367,3 +367,4 @@ ALTER TABLE `biz_breeding_standard`
367 367
 | — | 新增 **第 4 章**:与 **知识库后台管理服务** HTTP 交互流程(同步、移出、发布、下架、删除联动);**已同步禁止修改**;**提示词查询接口** 供用户独立调用说明;原 §4~§6 顺延为 §5~§7 |
368 368
 | — | **§4.2** 变更通知统一携带:**操作类型(添加/删除)**、**标准名称**、**标准 HTTP 下载地址(content_file_url)**;**§4.3** 提问携带:**用户标识**、**问题内容** |
369 369
 | — | 对齐需求修订:**下架**回流为 `publish_status=0` + `kb_sync_status=1`,库内保留副本;**下架 ≠ 移出**;合法组合仅 **(0,0)(0,1)(1,1)**;删除规则与 **3.5 / 3.9** 同步更新 |
370
+| — | 正文附件白名单:`pdf/md/doc/docx/xls/xlsx/pptx`(不含 `ppt`);`md` 经 `/common/upload` 全局白名单放行 |

+ 3 - 2
doc/养殖标准体系/养殖标准/养殖标准管理测试用例.md

@@ -3,7 +3,7 @@
3 3
 > 依据:`养殖标准管理功能需求.md`、`养殖标准管理技术方案.md`  
4 4
 > **执行方式**:均在管理后台通过菜单进入「养殖标准管理」及相关页面完成操作(登录、上传、查询、弹窗确认、列表操作等)。知识库异常类用例通过**临时停服务、断网或错误配置**后在页面触发并观察提示。
5 5
 
6
-**通用前置(无特殊说明)**:具备本模块菜单及对应按钮权限的账号已登录;知识库可用;`biz_information_category` 已种子化。正文白名单后缀任选其一:`pdf/md/doc/docx/xls/xlsx/ppt/pptx`(≤30MB);封面:`jpg/jpeg/png`(≤10MB)。**标准类型编码**:`001001` 繁育作业、`001002` 饲养工作、`001003` 免疫程序、`001004` 环境调控(`parentCode=001`,`categoryType=1`)。
6
+**通用前置(无特殊说明)**:具备本模块菜单及对应按钮权限的账号已登录;知识库可用;`biz_information_category` 已种子化。正文白名单后缀任选其一:`pdf/md/doc/docx/xls/xlsx/pptx`(≤30MB);封面:`jpg/jpeg/png`(≤10MB)。**标准类型编码**:`001001` 繁育作业、`001002` 饲养工作、`001003` 免疫程序、`001004` 环境调控(`parentCode=001`,`categoryType=1`)。
7 7
 
8 8
 **测试类型说明(表内简称)**:功能测试=正向与主流程;异常测试=非法输入、服务失败、附件不合规等;业务规则测试=状态机、按钮显隐与操作禁忌(不重在必填报错);权限测试=角色与越权;集成测试=跨模块/端到端串联。**测试工具**:默认指 **Chrome 或 Edge 浏览器** 访问管理后台。
9 9
 
@@ -27,7 +27,7 @@
27 27
 | YZ-BZ-UT-008 | 参数校验 | 标准名称长度 | 单元测试 | JUnit5 | 1~20 | — | 传入「」「甲」「12」「…20字」「…21字」调用校验 | 空失败;1 字与 2 字及 20 字成功;21 字失败 |
28 28
 | YZ-BZ-UT-009 | 参数校验 | 简介长度 | 单元测试 | JUnit5 | 选填 ≤50 | — | null/空串通过;51 字失败 | 符合需求 |
29 29
 | YZ-BZ-UT-010 | 参数校验 | 标准类型编码 | 单元测试 | JUnit5 | 有效资讯编码 | Mock 子集含 001001~001004 | 空、`999999` 失败;001001 等合法编码通过 | 与技术方案 §2.3 一致 |
30
-| YZ-BZ-UT-011 | 附件校验 | 正文后缀白名单 | 单元测试 | JUnit5 | pdf/md/doc… | — | `validateContentSuffix("a.pdf")` true;`.exe` false | 与白名单一致 |
30
+| YZ-BZ-UT-011 | 附件校验 | 正文后缀白名单 | 单元测试 | JUnit5 | pdf/md/doc… | — | `a.pdf`、`readme.md`、`slides.pptx` true;`.ppt`、`.exe` false | 与白名单一致 |
31 31
 | YZ-BZ-UT-012 | 附件校验 | 封面后缀 | 单元测试 | JUnit5 | jpg/jpeg/png | — | `.bmp` false | 与白名单一致 |
32 32
 | YZ-BZ-UT-013 | Service | 修改已发布抛业务异常 | 单元测试 | JUnit5+Mockito | 守卫分支 | Mock 查库 publish=1 | 调用 `update(...)` | 抛 ServiceException 或返回失败,不写库 |
33 33
 | YZ-BZ-UT-014 | Service | 同步成功写 kb | 单元测试 | JUnit5+Mockito | 调知识库+更新状态 | Mock KB 成功、Mapper update | `syncKb(id)` | `kb_sync_status=1`,`kb_doc_id` 非空 |
@@ -135,3 +135,4 @@
135 135
 | 1.3 | 章节顺序调整为:**一、单元测试** → **二、接口测试** → **三、界面测试(UI)**;文首三部分说明同步 |
136 136
 | 1.4 | 对齐 `养殖标准管理功能需求.md`:下架回流 **未发布+已同步**;下架≠移出;合法组合不含「已下架」稳态;**YZ-BZ-API-016**、UT/UI 预期同步修订 |
137 137
 | 1.5 | **标准类型**改为资讯类别编码(`001001`~`001004`);同步 UT-010、API-002 及 UI 类型筛选 |
138
+| 1.6 | **2026-05-20**:正文白名单调整为 `pdf/md/doc/docx/xls/xlsx/pptx`(不含 `ppt`);**YZ-BZ-UT-011** 补充 `md`、`pptx` 通过及 `.ppt` 拒绝 |

+ 1 - 1
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java

@@ -30,7 +30,7 @@ public class MimeTypeUtils
30 30
             // 图片
31 31
             "bmp", "gif", "jpg", "jpeg", "png",
32 32
             // word excel powerpoint
33
-            "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",
33
+            "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt", "md",
34 34
             // 压缩文件
35 35
             "rar", "zip", "gz", "bz2",
36 36
             // 视频格式