西藏巴青项目

药物禁配标准管理技术方案.md 9.2KB

药物禁配标准管理 — 技术方案

依据:同目录 药物禁配标准管理功能需求.md。本模块不设发布/下架;仅 知识库同步 维度与 CRUD;主表 + 配伍子表 一对多。库表、接口与其它标准模块实现相互独立。


1. 技术架构

说明
后端 RuoYi v3.9.2springboot2 分支):JDK 8、Spring Boot 2.x、Spring MVC、MyBatis、Druid
数据库 MySQL 5.7.39,InnoDB,utf8mb4
前端 若依 Vue2(与分支配套;路由、权限、字典按项目惯例)
知识库 HTTP 调用知识库后台管理服务;鉴权、URL、报文见《知识库接口对接说明》;本模块涉及添加/更新/删除(幂等)类变更,不涉及发布/下架可见性接口

分层ControllerService(状态校验、事务、子表全量替换、知识库编排)→ Mapper/XML → domain(小驼峰 JSON 与 Jackson 一致)。

实现包路径(当前仓库)com.ruoyi.web.modules.architecturecontroller / service / mapper / domain;校验辅助类 support/DrugIncompatibilityStandardValidationsupport/DrugIncompatibilityStandardRules

一致性(摘要)

  • 删除:本地删除前须 kb_sync_status=0;删除流程中按需求对知识库发幂等删除通知(无条目则对端忽略),失败策略(阻断本地删 vs 异步补偿)由与知识库约定二选一并在实现中固定;当前占位实现可无远程调用。
  • 移出:前置 kb_sync_status=1;成功后 kb_sync_status=0,清空 kb_doc_id
  • 同步:前置 kb_sync_status=0;成功后 kb_sync_status=1,写入 kb_doc_id(未对接 HTTP 时可占位 LOCAL-{id},与其它标准模块占位策略一致)。
  • 修改:仅 kb_sync_status=0;保存时删除该标准下全部子行再按请求顺序插入(全量替换),kb_sync_status / kb_doc_id 不以客户端提交为准(编辑时锁定为库内原值)。

2. 数据库设计

2.1 表 biz_drug_incompatibility_standard(主表)

字段 类型 非空 默认值 说明
id bigint(20) Y 自增 主键
main_drug_name varchar(64) Y 主药名称(业务 1~20 字符;保存前 trim;可重复,每条标准为一个配伍组)
compat_result varchar(64) N NULL 配伍结果(选填,本组共用,业务 ≤50 字符)
kb_sync_status tinyint(4) Y 0 0 未同步,1 已同步
kb_doc_id varchar(128) N NULL 知识库文档 ID
create_by / create_time / update_by / update_time 若依惯例
remark varchar(500) N NULL 备注

索引PRIMARY KEY (id)KEY idx_create_time (create_time)KEY idx_kb (kb_sync_status)

合法 kb_sync_status:仅 01;应用层禁止写入其它值。

DDL 示例

CREATE TABLE `biz_drug_incompatibility_standard` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `main_drug_name` varchar(64) NOT NULL COMMENT '主药名称1~20字',
  `compat_result` varchar(64) DEFAULT NULL COMMENT '配伍结果选填≤50字',
  `kb_sync_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '0未同步1已同步',
  `kb_doc_id` varchar(128) DEFAULT NULL COMMENT '知识库文档ID',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `idx_create_time` (`create_time`),
  KEY `idx_kb` (`kb_sync_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药物禁配标准主表';

2.2 表 biz_drug_incompatibility_companion(配伍子表)

字段 类型 非空 默认值 说明
id bigint(20) Y 自增 主键
standard_id bigint(20) Y 外键 → 主表 id
companion_drug_name varchar(64) Y 配伍药物名称(业务 1~20 字符)
sort_order int(11) Y 0 展示顺序;保存时按请求数组下标写入

索引与约束KEY idx_standard_id (standard_id)UNIQUE uk_std_companion (standard_id, companion_drug_name)(同标准下药名物理唯一);FOREIGN KEY (standard_id) REFERENCES biz_drug_incompatibility_standard(id) ON DELETE CASCADE

DDL 示例

CREATE TABLE `biz_drug_incompatibility_companion` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `standard_id` bigint(20) NOT NULL COMMENT '标准主表ID',
  `companion_drug_name` varchar(64) NOT NULL COMMENT '配伍药物名称1~20字',
  `sort_order` int(11) NOT NULL DEFAULT '0' COMMENT '展示顺序',
  PRIMARY KEY (`id`),
  KEY `idx_standard_id` (`standard_id`),
  UNIQUE KEY `uk_std_companion` (`standard_id`,`companion_drug_name`),
  CONSTRAINT `fk_dic_standard` FOREIGN KEY (`standard_id`) REFERENCES `biz_drug_incompatibility_standard` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='药物禁配标准配伍子表';

2.3 枚举(后端/字典建议)

字段 含义
kb_sync_status 0 未同步
1 已同步

列表聚合:列表 SQL 可子查询 companion_count(条数),非持久化列,仅用于表格展示。


3. 接口设计

统一响应AjaxResult / 分页 TableDataInfo(与 RuoYi 一致)。

Base Path/drugIncompatibility/standard(若项目有全局 context-path 或网关前缀,实际 URL 需拼接)。

权限标识(建议)drugIncompatibility:standard:list|query|add|edit|remove|syncKb|removeKb publish / offline

# 说明 Method URI 权限 要点
3.1 分页列表 GET /drugIncompatibility/standard/list drugIncompatibility:standard:list Query:pageNumpageSize(与项目列表默认一致)、keyword main_drug_name 模糊);返回行含 companionCount不含 companions 明细;排序建议 create_time DESC, id DESC
3.2 详情 GET /drugIncompatibility/standard/{id} drugIncompatibility:standard:query 返回主表字段 + companions 数组(按 sort_order 有序)
3.3 新增 POST /drugIncompatibility/standard drugIncompatibility:standard:add Body:mainDrugNamecompatResult(可空)、companions(≥1 条,每项 companionDrugName);落库 kb_sync_status=0kb_doc_id 空;同事务写子表
3.4 修改 PUT /drugIncompatibility/standard drugIncompatibility:standard:edit Body 含 id kb_sync_status=0;子表全量替换;接受客户端篡改 kb_sync_status / kb_doc_id(服务端锁定库内值后更新主表与其它字段)
3.5 删除 DELETE /drugIncompatibility/standard/{ids} drugIncompatibility:standard:remove kb_sync_status=0ids 逗号分隔;任一 id 为已同步则整单失败;删前/删后按约定调知识库幂等删除;子表随主表级联删除
3.6 同步知识库 POST /drugIncompatibility/standard/syncKb/{id} drugIncompatibility:standard:syncKb 前置 kb_sync_status=0;成功则 kb_sync_status=1,写入 kb_doc_id
3.7 移出知识库 POST /drugIncompatibility/standard/removeKb/{id} drugIncompatibility:standard:removeKb 前置 kb_sync_status=1;成功则 kb_sync_status=0,清空 kb_doc_id

请求体(3.3 / 3.4)摘要mainDrugName 1~20(可重复,每条记录为一个配伍组);compatResult 选填 ≤50,组内共用(空串存 NULL);companions 至少 1 条;每条 companionDrugName 1~20;trim 后互不相同均不等于 mainDrugNameDrugIncompatibilityStandardValidation + BizDrugIncompatibilityStandardServiceImpl)。

App 用药工具:配伍检查按命中药对取该组 compat_result;查询药物按组拼接展示 组内药物(配伍结果),多组以 分隔(见 doc/app/用药工具/)。


4. 与功能需求的对应(便于验收)

需求章节 技术落点
4.1 新增 2.12.2 + POST 3.3
4.2 列表 GET 3.1keywordmain_drug_name
4.3 修改 PUT 3.4kb_sync_status=0、子表替换)
4.4 删除 DELETE 3.5 + 知识库幂等删除(对接后)
4.5 / 4.6 知识库 POST 3.6 / 3.7
4.7 详情 GET 3.2
无发布/下架 无对应接口与表字段

5. 交付清单(勾选)

  • DDL:sql/biz_drug_incompatibility_standard.sql(与 2.12.2 一致)及菜单按钮权限 SQL
  • Domain / Mapper / XML / Service / Controller(包路径与项目 architecture 模块惯例一致即可)
  • 单测:校验类、状态规则、Service 状态守卫;接口测试:MockMvc 或集成环境
  • 与知识库真实 HTTP 对接(或占位策略)按《知识库接口对接说明》排期