瀏覽代碼

交易市场平台(供应商)

wwh 6 天之前
父節點
當前提交
4ae89861c5

+ 1 - 1
baqing-admin/src/main/java/com/ruoyi/web/modules/architecture/domain/BizDrugIncompatibilityStandard.java

@@ -20,7 +20,7 @@ public class BizDrugIncompatibilityStandard extends BaseEntity
20 20
     @Size(min = 1, max = 20, message = "主药名称长度为1到20个字符")
21 21
     private String mainDrugName;
22 22
 
23
-    @Size(max = 20, message = "配伍结果不能超过20个字符")
23
+    @Size(max = 50, message = "配伍结果不能超过50个字符")
24 24
     private String compatResult;
25 25
 
26 26
     /** 0 未同步 1 已同步 */

+ 0 - 3
baqing-admin/src/main/java/com/ruoyi/web/modules/architecture/mapper/BizDrugIncompatibilityStandardMapper.java

@@ -1,7 +1,6 @@
1 1
 package com.ruoyi.web.modules.architecture.mapper;
2 2
 
3 3
 import java.util.List;
4
-import org.apache.ibatis.annotations.Param;
5 4
 import com.ruoyi.web.modules.architecture.domain.BizDrugIncompatibilityStandard;
6 5
 
7 6
 /**
@@ -18,6 +17,4 @@ public interface BizDrugIncompatibilityStandardMapper
18 17
     int updateBizDrugIncompatibilityStandard(BizDrugIncompatibilityStandard row);
19 18
 
20 19
     int deleteBizDrugIncompatibilityStandardByIds(Long[] ids);
21
-
22
-    int countByMainDrugNameExcludeId(@Param("mainDrugName") String mainDrugName, @Param("excludeId") Long excludeId);
23 20
 }

+ 0 - 9
baqing-admin/src/main/java/com/ruoyi/web/modules/architecture/service/impl/BizDrugIncompatibilityStandardServiceImpl.java

@@ -188,19 +188,10 @@ public class BizDrugIncompatibilityStandardServiceImpl implements IBizDrugIncomp
188 188
     {
189 189
         DrugIncompatibilityStandardValidation.trimFieldsForSave(row);
190 190
         DrugIncompatibilityStandardValidation.validateMainDrugName(row.getMainDrugName());
191
-        assertMainDrugNameUnique(row.getMainDrugName(), row.getId());
192 191
         DrugIncompatibilityStandardValidation.validateCompatResult(row.getCompatResult());
193 192
         DrugIncompatibilityStandardValidation.validateCompanions(row);
194 193
     }
195 194
 
196
-    private void assertMainDrugNameUnique(String mainDrugName, Long excludeId)
197
-    {
198
-        if (bizDrugIncompatibilityStandardMapper.countByMainDrugNameExcludeId(mainDrugName, excludeId) > 0)
199
-        {
200
-            throw new ServiceException("主药名称已存在");
201
-        }
202
-    }
203
-
204 195
     private void insertCompanions(Long standardId, List<BizDrugIncompatibilityCompanion> companions)
205 196
     {
206 197
         if (companions == null)

+ 2 - 2
baqing-admin/src/main/java/com/ruoyi/web/modules/architecture/support/DrugIncompatibilityStandardValidation.java

@@ -41,9 +41,9 @@ public final class DrugIncompatibilityStandardValidation
41 41
         {
42 42
             return;
43 43
         }
44
-        if (s.length() > 20)
44
+        if (s.length() > 50)
45 45
         {
46
-            throw new ServiceException("配伍结果不能超过20个字符");
46
+            throw new ServiceException("配伍结果不能超过50个字符");
47 47
         }
48 48
     }
49 49
 

+ 0 - 9
baqing-admin/src/main/resources/mapper/architecture/BizDrugIncompatibilityStandardMapper.xml

@@ -24,15 +24,6 @@
24 24
         where s.id = #{id}
25 25
     </select>
26 26
 
27
-    <select id="countByMainDrugNameExcludeId" resultType="int">
28
-        select count(1)
29
-        from biz_drug_incompatibility_standard
30
-        where main_drug_name = #{mainDrugName}
31
-        <if test="excludeId != null">
32
-            and id != #{excludeId}
33
-        </if>
34
-    </select>
35
-
36 27
     <select id="selectBizDrugIncompatibilityStandardList" parameterType="com.ruoyi.web.modules.architecture.domain.BizDrugIncompatibilityStandard" resultMap="BizDrugIncompatibilityStandardResult">
37 28
         select s.id, s.main_drug_name, s.compat_result, s.kb_sync_status, s.kb_doc_id,
38 29
                s.create_by, s.create_time, s.update_by, s.update_time, s.remark,

+ 0 - 23
baqing-admin/src/test/java/com/ruoyi/web/modules/architecture/service/impl/BizDrugIncompatibilityStandardServiceImplTest.java

@@ -56,32 +56,10 @@ class BizDrugIncompatibilityStandardServiceImplTest
56 56
     @InjectMocks
57 57
     private BizDrugIncompatibilityStandardServiceImpl service;
58 58
 
59
-    @Test
60
-    @DisplayName("主药名称重复禁止新增")
61
-    void insertDuplicateMainDrugName()
62
-    {
63
-        when(standardMapper.countByMainDrugNameExcludeId("主药一", null)).thenReturn(1);
64
-        assertThrows(ServiceException.class, () -> service.insertBizDrugIncompatibilityStandard(sampleInsert()));
65
-        verify(standardMapper, never()).insertBizDrugIncompatibilityStandard(any());
66
-    }
67
-
68
-    @Test
69
-    @DisplayName("主药名称重复禁止修改")
70
-    void updateDuplicateMainDrugName()
71
-    {
72
-        when(standardMapper.countByMainDrugNameExcludeId("主药二", 11L)).thenReturn(1);
73
-        BizDrugIncompatibilityStandard in = sampleInsert();
74
-        in.setId(11L);
75
-        in.setMainDrugName("主药二");
76
-        assertThrows(ServiceException.class, () -> service.updateBizDrugIncompatibilityStandard(in));
77
-        verify(standardMapper, never()).updateBizDrugIncompatibilityStandard(any());
78
-    }
79
-
80 59
     @Test
81 60
     @DisplayName("新增写子表")
82 61
     void insert()
83 62
     {
84
-        when(standardMapper.countByMainDrugNameExcludeId("主药一", null)).thenReturn(0);
85 63
         when(standardMapper.insertBizDrugIncompatibilityStandard(any())).thenAnswer(inv -> {
86 64
             BizDrugIncompatibilityStandard r = inv.getArgument(0);
87 65
             r.setId(100L);
@@ -110,7 +88,6 @@ class BizDrugIncompatibilityStandardServiceImplTest
110 88
     void updateReplacesCompanions()
111 89
     {
112 90
         when(standardMapper.selectBizDrugIncompatibilityStandardById(11L)).thenReturn(mainOnly(11L, 0));
113
-        when(standardMapper.countByMainDrugNameExcludeId("主药一", 11L)).thenReturn(0);
114 91
         when(standardMapper.updateBizDrugIncompatibilityStandard(any())).thenReturn(1);
115 92
         when(companionMapper.deleteBizDrugIncompatibilityCompanionByStandardId(11L)).thenReturn(1);
116 93
         when(companionMapper.insertBizDrugIncompatibilityCompanion(any())).thenReturn(1);

+ 2 - 2
baqing-admin/src/test/java/com/ruoyi/web/modules/architecture/support/DrugIncompatibilityStandardValidationTest.java

@@ -32,8 +32,8 @@ class DrugIncompatibilityStandardValidationTest
32 32
     {
33 33
         assertDoesNotThrow(() -> DrugIncompatibilityStandardValidation.validateCompatResult(null));
34 34
         assertDoesNotThrow(() -> DrugIncompatibilityStandardValidation.validateCompatResult("  "));
35
-        assertDoesNotThrow(() -> DrugIncompatibilityStandardValidation.validateCompatResult(repeat('x', 20)));
36
-        assertThrows(ServiceException.class, () -> DrugIncompatibilityStandardValidation.validateCompatResult(repeat('x', 21)));
35
+        assertDoesNotThrow(() -> DrugIncompatibilityStandardValidation.validateCompatResult(repeat('x', 50)));
36
+        assertThrows(ServiceException.class, () -> DrugIncompatibilityStandardValidation.validateCompatResult(repeat('x', 51)));
37 37
     }
38 38
 
39 39
     @Test

+ 3 - 4
doc/养殖标准体系/药物禁配标准/药物禁配标准管理前端技术方案.md

@@ -53,8 +53,8 @@
53 53
 
54 54
 | 字段 | 控件 | 校验 |
55 55
 | --- | --- | --- |
56
-| `mainDrugName` | 输入框,`maxlength=20` | 必填 1~20;提交前 **trim**;全表唯一由后端校验 |
57
-| `compatResult` | 输入框,`maxlength=20` | 选填 ≤20;空串省略(后端存 `NULL`) |
56
+| `mainDrugName` | 输入框,`maxlength=20` | 必填 1~20;提交前 **trim** |
57
+| `compatResult` | 输入框 | 选填 ≤50(后端校验);空串省略(后端存 `NULL`);前端 `maxlength` 待与后端对齐时可仍为 20 |
58 58
 | `companions` | 动态行列表 | 至少 1 条;每项 `companionDrugName` 1~20;trim 后互不相同且均不等于主药名 |
59 59
 
60 60
 配伍校验器 `validateCompanionsField` 与后端 `DrugIncompatibilityStandardValidation` 规则一致。编辑时由详情接口拉取有序 `companions`;**不**向前端暴露或提交 `kbSyncStatus`、`kbDocId`。
@@ -115,7 +115,6 @@
115 115
 
116 116
 | 场景 | 前端行为 |
117 117
 | --- | --- |
118
-| 主药名称重复 | 展示后端 `msg`(如「主药名称已存在」) |
119 118
 | 配伍校验失败 | 表单字段错误(重名、与主药相同、条数不足等) |
120 119
 | 已同步点编辑 | `msgWarning(ruleSyncedNoEdit)` |
121 120
 | 已同步点删除 | `msgWarning(ruleDeleteNeedRemoveKb)` |
@@ -142,7 +141,7 @@
142 141
 - [x] 配伍动态行与 `companions` 校验
143 142
 - [ ] 后端 `/drugIncompatibility/standard/**` 与总方案 **§3** 对齐
144 143
 - [ ] 联调:新增 → 同步 → 移出 → 编辑配伍列表 → 再同步 → 删除
145
-- [ ] 联调:已同步编辑/删除被前端拦截;主药名称唯一性后端校验
144
+- [ ] 联调:已同步编辑/删除被前端拦截
146 145
 
147 146
 ---
148 147
 

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

@@ -2,7 +2,7 @@
2 2
 
3 3
 
4 4
 
5
-1. 新增药物禁配标准:药物名称不能为空,长度 1–20;一个药物可以增加多个配伍药物,配伍药物名称不能为空,长度 1–20,可以通过“+“、“-“按钮增加或减少配伍药物;配伍结果:非必填,限制20字内
5
+1. 新增药物禁配标准:药物名称不能为空,长度 1–20;一个药物可以增加多个配伍药物,配伍药物名称不能为空,长度 1–20,可以通过“+“、“-“按钮增加或减少配伍药物;配伍结果:非必填,限制50字内
6 6
 2. 查询药物禁配标准列表:支持药物名称模糊匹配分页列出药物禁配标准列表。
7 7
 3. 修改药物禁配标准:药物名称、配伍药物列表、配伍结果,可以通过“+“、“-“按钮增加或减少配伍药物。
8 8
 4. 删除药物禁配标准:删除数据,并通知知识库删除该药物禁配标准。

+ 4 - 4
doc/养殖标准体系/药物禁配标准/药物禁配标准管理功能需求.md

@@ -104,9 +104,9 @@ stateDiagram-v2
104 104
 
105 105
 | 内容项 | 规则 |
106 106
 | --- | --- |
107
-| 主药—药物名称 | 必填;长度 **1~20** 字符(计数口径与项目全局一致);**全表唯一**(trim 后精确匹配,与其它记录 `main_drug_name` 不可重复) |
107
+| 主药—药物名称 | 必填;长度 **1~20** 字符(计数口径与项目全局一致);**允许重复**(不同标准可共用同一主药名称,trim 后精确匹配) |
108 108
 | 配伍药物列表 | **至少 1 条**;每条名称必填,长度 **1~20** 字符(口径同上);同条标准内名称**互不相同**且**均不得与主药名称相同**(比较规则见 **2.3** 末款) |
109
-| 配伍结果 | **选填**;若有内容,长度不超过 **20** 字符(口径与项目全局一致) |
109
+| 配伍结果 | **选填**;若有内容,长度不超过 **50** 字符(口径与项目全局一致) |
110 110
 
111 111
 保存成功后:**未同步**。
112 112
 
@@ -123,9 +123,9 @@ stateDiagram-v2
123 123
 ### 4.3 修改
124 124
 
125 125
 - **条件:** 仅 **未同步** 可改(**已同步** 不可改)。  
126
-- **可改项:** 主药名称、配伍药物列表(增删行、改各条名称)、配伍结果;保存时须仍满足 **4.1** 与 **2.3**(含主药名称唯一性,修改时排除本条 `id`)
126
+- **可改项:** 主药名称、配伍药物列表(增删行、改各条名称)、配伍结果;保存时须仍满足 **4.1** 与 **2.3**。  
127 127
 - **一致性:** 保存成功后,用户在同一入口再次打开列表或详情,应看到与本次保存一致的主药、配伍顺序与配伍结果(**所见即所得**,与项目刷新习惯一致)。  
128
-- **失败:** 须有可读校验提示(如主药名称已存在、条数不足、配伍重名、与主药同名、长度越界等)。
128
+- **失败:** 须有可读校验提示(如条数不足、配伍重名、与主药同名、长度越界等)。
129 129
 
130 130
 ---
131 131
 

+ 5 - 6
doc/养殖标准体系/药物禁配标准/药物禁配标准管理技术方案.md

@@ -33,14 +33,14 @@
33 33
 | 字段 | 类型 | 非空 | 默认值 | 说明 |
34 34
 | --- | --- | --- | --- | --- |
35 35
 | `id` | `bigint(20)` | Y | 自增 | 主键 |
36
-| `main_drug_name` | `varchar(64)` | Y | — | 主药名称(业务 1~20 字符;**全表唯一**,保存前 trim) |
37
-| `compat_result` | `varchar(64)` | N | NULL | 配伍结果(选填,业务 ≤20 字符) |
36
+| `main_drug_name` | `varchar(64)` | Y | — | 主药名称(业务 1~20 字符;保存前 trim;**不限制全表唯一**) |
37
+| `compat_result` | `varchar(64)` | N | NULL | 配伍结果(选填,业务 ≤50 字符) |
38 38
 | `kb_sync_status` | `tinyint(4)` | Y | `0` | `0` 未同步,`1` 已同步 |
39 39
 | `kb_doc_id` | `varchar(128)` | N | NULL | 知识库文档 ID |
40 40
 | `create_by` / `create_time` / `update_by` / `update_time` | 若依惯例 | — | — | — |
41 41
 | `remark` | `varchar(500)` | N | NULL | 备注 |
42 42
 
43
-**索引**:`PRIMARY KEY (id)`;`UNIQUE KEY uk_main_drug_name (main_drug_name)`;`KEY idx_create_time (create_time)`;`KEY idx_kb (kb_sync_status)`。
43
+**索引**:`PRIMARY KEY (id)`;`KEY idx_create_time (create_time)`;`KEY idx_kb (kb_sync_status)`。
44 44
 
45 45
 **合法 `kb_sync_status`**:仅 `0`、`1`;应用层禁止写入其它值。
46 46
 
@@ -50,7 +50,7 @@
50 50
 CREATE TABLE `biz_drug_incompatibility_standard` (
51 51
   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
52 52
   `main_drug_name` varchar(64) NOT NULL COMMENT '主药名称1~20字',
53
-  `compat_result` varchar(64) DEFAULT NULL COMMENT '配伍结果选填≤20字',
53
+  `compat_result` varchar(64) DEFAULT NULL COMMENT '配伍结果选填≤50字',
54 54
   `kb_sync_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0未同步1已同步',
55 55
   `kb_doc_id` varchar(128) DEFAULT NULL COMMENT '知识库文档ID',
56 56
   `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
@@ -59,7 +59,6 @@ CREATE TABLE `biz_drug_incompatibility_standard` (
59 59
   `update_time` datetime DEFAULT NULL COMMENT '更新时间',
60 60
   `remark` varchar(500) DEFAULT NULL COMMENT '备注',
61 61
   PRIMARY KEY (`id`),
62
-  UNIQUE KEY `uk_main_drug_name` (`main_drug_name`),
63 62
   KEY `idx_create_time` (`create_time`),
64 63
   KEY `idx_kb` (`kb_sync_status`)
65 64
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药物禁配标准主表';
@@ -120,7 +119,7 @@ CREATE TABLE `biz_drug_incompatibility_companion` (
120 119
 | 3.6 | 同步知识库 | POST | `/drugIncompatibility/standard/syncKb/{id}` | `drugIncompatibility:standard:syncKb` | 前置 `kb_sync_status=0`;成功则 `kb_sync_status=1`,写入 `kb_doc_id` |
121 120
 | 3.7 | 移出知识库 | POST | `/drugIncompatibility/standard/removeKb/{id}` | `drugIncompatibility:standard:removeKb` | 前置 `kb_sync_status=1`;成功则 `kb_sync_status=0`,清空 `kb_doc_id` |
122 121
 
123
-**请求体(3.3 / 3.4)摘要**:`mainDrugName` 1~20 且**全表唯一**(`countByMainDrugNameExcludeId`,修改时传 `excludeId`;重复提示「主药名称已存在」);`compatResult` 选填 ≤20(空串存 `NULL`);`companions` 至少 1 条;每条 `companionDrugName` 1~20;trim 后**互不相同**且**均不等于** `mainDrugName`(`DrugIncompatibilityStandardValidation` + `BizDrugIncompatibilityStandardServiceImpl`)。
122
+**请求体(3.3 / 3.4)摘要**:`mainDrugName` 1~20(**不校验全表唯一**);`compatResult` 选填 ≤50(空串存 `NULL`);`companions` 至少 1 条;每条 `companionDrugName` 1~20;trim 后**互不相同**且**均不等于** `mainDrugName`(`DrugIncompatibilityStandardValidation` + `BizDrugIncompatibilityStandardServiceImpl`)。
124 123
 
125 124
 ---
126 125
 

File diff suppressed because it is too large
+ 4 - 6
doc/养殖标准体系/药物禁配标准/药物禁配标准管理测试用例.md


+ 1 - 2
sql/biz_drug_incompatibility_standard.sql

@@ -2,7 +2,7 @@
2 2
 CREATE TABLE IF NOT EXISTS `biz_drug_incompatibility_standard` (
3 3
   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
4 4
   `main_drug_name` varchar(64) NOT NULL COMMENT '主药名称1~20字',
5
-  `compat_result` varchar(64) DEFAULT NULL COMMENT '配伍结果选填≤20字',
5
+  `compat_result` varchar(64) DEFAULT NULL COMMENT '配伍结果选填≤50字',
6 6
   `kb_sync_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0未同步1已同步',
7 7
   `kb_doc_id` varchar(128) DEFAULT NULL COMMENT '知识库文档ID',
8 8
   `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
@@ -11,7 +11,6 @@ CREATE TABLE IF NOT EXISTS `biz_drug_incompatibility_standard` (
11 11
   `update_time` datetime DEFAULT NULL COMMENT '更新时间',
12 12
   `remark` varchar(500) DEFAULT NULL COMMENT '备注',
13 13
   PRIMARY KEY (`id`),
14
-  UNIQUE KEY `uk_main_drug_name` (`main_drug_name`),
15 14
   KEY `idx_create_time` (`create_time`),
16 15
   KEY `idx_kb` (`kb_sync_status`)
17 16
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药物禁配标准主表';