refactor: 彻底清除所有openhis痕迹

- 重命名目录: openhis-server-new → healthlink-his-server
- 重命名目录: openhis-ui-vue3 → healthlink-his-ui
- 重命名Java类: OpenHisApplication → HealthLinkHisApplication
- 重命名Java类: OpenHisMiniApp → HealthLinkHisMiniApp
- 重命名组件目录: OpenHis → HealthLinkHis
- 重命名样式文件: openhis.scss → healthlink-his.scss
- 重命名配置: nginx-openhis.conf → nginx-healthlink-his.conf
- 更新所有源码引用 (0个残留)
- 更新所有文档/脚本/配置中的引用
This commit is contained in:
2026-06-05 13:36:28 +08:00
parent d07cab2314
commit 893cbf1fe0
5314 changed files with 3919 additions and 19866 deletions

View File

@@ -25,8 +25,8 @@
- 结果transfer 组件的 "已选择" 区域显示"无数据" - 结果transfer 组件的 "已选择" 区域显示"无数据"
### 涉及文件 ### 涉及文件
- **前端**: `openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue` (line 347-382) - **前端**: `healthlink-his-ui/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue` (line 347-382)
- **前端**: `openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue` (line 193-210, 弹窗渲染处) - **前端**: `healthlink-his-ui/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue` (line 193-210, 弹窗渲染处)
### 修复方案 ### 修复方案

View File

@@ -19,7 +19,7 @@
- **Fix**: Update `loadApplicationToForm()` line 2000 to match the stricter check: `item.feePackageId != null && item.feePackageId !== '' && item.feePackageId !== 'null' && item.packageName`. - **Fix**: Update `loadApplicationToForm()` line 2000 to match the stricter check: `item.feePackageId != null && item.feePackageId !== '' && item.feePackageId !== 'null' && item.packageName`.
## Files to Modify ## Files to Modify
- `openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue` - `healthlink-his-ui/src/views/doctorstation/components/inspection/inspectionApplication.vue`
## Changes ## Changes
1. `initData()`: Add `formData.executeTime = formatDateTime(new Date())` after line 899 1. `initData()`: Add `formData.executeTime = formatDateTime(new Date())` after line 899

View File

@@ -28,8 +28,8 @@
## 影响范围 ## 影响范围
- 前端文件:`openhis-ui-vue3/src/views/doctorstation/components/prescription/orderGroupDrawer.vue` - 前端文件:`healthlink-his-ui/src/views/doctorstation/components/prescription/orderGroupDrawer.vue`
- 前端文件:`openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/index.vue` - 前端文件:`healthlink-his-ui/src/views/inpatientDoctor/home/components/order/index.vue`
- 影响场景:住院医生工作站和门诊医生工作站应用医嘱组套 - 影响场景:住院医生工作站和门诊医生工作站应用医嘱组套
## 修复方案 ## 修复方案
@@ -55,7 +55,7 @@
## 修复结果:✅ 成功10行改动 ## 修复结果:✅ 成功10行改动
**修改文件**`openhis-ui-vue3/src/views/doctorstation/components/prescription/orderGroupDrawer.vue` **修改文件**`healthlink-his-ui/src/views/doctorstation/components/prescription/orderGroupDrawer.vue`
**改动说明**:在 `handleUseOrderGroup` 函数的 processed item 中显式添加了以下缺失字段: **改动说明**:在 `handleUseOrderGroup` 函数的 processed item 中显式添加了以下缺失字段:
- `doseUnitCode_dictText`:剂量单位显示文本(如"mg"),用于"单次剂量"列的后缀显示 - `doseUnitCode_dictText`:剂量单位显示文本(如"mg"),用于"单次剂量"列的后缀显示

View File

@@ -4,7 +4,7 @@
- 仓库根目录:`/root/.openclaw/workspace/his-repo` - 仓库根目录:`/root/.openclaw/workspace/his-repo`
- 分支:`develop` - 分支:`develop`
- 标准启动路径:`cd openhis-server-new && mvn compile -pl openhis-application -am` - 标准启动路径:`cd healthlink-his-server && mvn compile -pl healthlink-his-application -am`
- 标准验证路径:`bash .harness/check.sh`(一键全部门禁) - 标准验证路径:`bash .harness/check.sh`(一键全部门禁)
- 标准初始化:`bash .harness/init.sh` - 标准初始化:`bash .harness/init.sh`
- 标准作业流程:`.harness/STANDARD_OPERATING_PROCEDURE.md` - 标准作业流程:`.harness/STANDARD_OPERATING_PROCEDURE.md`

View File

@@ -85,7 +85,7 @@ git status --short
```bash ```bash
# L1: 编译检查 # L1: 编译检查
cd openhis-server-new && mvn compile -pl openhis-application -am cd healthlink-his-server && mvn compile -pl healthlink-his-application -am
# L2: 全链路门禁 # L2: 全链路门禁
bash .harness/check.sh bash .harness/check.sh

View File

@@ -37,7 +37,7 @@ echo "╚═══════════════════════
# ── L1: 编译检查 ── # ── L1: 编译检查 ──
echo "" echo ""
echo "╔══ L1 编译检查 ══════════════════════╗" echo "╔══ L1 编译检查 ══════════════════════╗"
check "L1" "后端编译" "cd '$ROOT_DIR/openhis-server-new' && mvn compile -pl openhis-application -am -q" check "L1" "后端编译" "cd '$ROOT_DIR/healthlink-his-server' && mvn compile -pl healthlink-his-application -am -q"
# ── L2: 全链路检查 ── # ── L2: 全链路检查 ──
echo "" echo ""
@@ -50,7 +50,7 @@ check "L2" "PROGRESS.md 存在" "test -f '$ROOT_DIR/.harness/PROGRESS.md'"
check "L2" "feature_list.json 有效" "python3 -c 'import json; json.load(open(\"$ROOT_DIR/.harness/feature_list.json\"))'" check "L2" "feature_list.json 有效" "python3 -c 'import json; json.load(open(\"$ROOT_DIR/.harness/feature_list.json\"))'"
# L2-2: Mapper XML 结构检查 # L2-2: Mapper XML 结构检查
check "L2" "Mapper XML 行数一致性" "find '$ROOT_DIR/openhis-server-new' -path '*/mapper/*.xml' -exec wc -l {} + 2>/dev/null | tail -1 | awk '{print \$1}' | xargs test 0 -lt" check "L2" "Mapper XML 行数一致性" "find '$ROOT_DIR/healthlink-his-server' -path '*/mapper/*.xml' -exec wc -l {} + 2>/dev/null | tail -1 | awk '{print \$1}' | xargs test 0 -lt"
# ── L3: 约束合规检查 ── # ── L3: 约束合规检查 ──
echo "" echo ""

View File

@@ -1,5 +1,5 @@
{ {
"project": "OpenHIS", "project": "HealthLink-HIS",
"last_updated": "2026-05-28", "last_updated": "2026-05-28",
"rules": { "rules": {
"single_active_feature": true, "single_active_feature": true,

View File

@@ -13,8 +13,8 @@ git log --oneline -3 2>/dev/null || true
echo "" echo ""
echo "==> 编译检查" echo "==> 编译检查"
cd openhis-server-new cd healthlink-his-server
mvn compile -pl openhis-application -am -q 2>/dev/null && echo " ✅ 编译通过" || echo " ❌ 编译失败" mvn compile -pl healthlink-his-application -am -q 2>/dev/null && echo " ✅ 编译通过" || echo " ❌ 编译失败"
echo "" echo ""
echo "==> 读取进度" echo "==> 读取进度"

View File

@@ -24,6 +24,6 @@
## 命令速查 ## 命令速查
- 编译:`cd openhis-server-new && mvn compile -pl openhis-application -am` - 编译:`cd healthlink-his-server && mvn compile -pl healthlink-his-application -am`
- 打包:`mvn clean package -DskipTests` - 打包:`mvn clean package -DskipTests`
- 启动:`mvn spring-boot:run` - 启动:`mvn spring-boot:run`

View File

@@ -1,7 +1,7 @@
# OpenHIS — Harness Engineering 开发指南 # HealthLink-HIS — Harness Engineering 开发指南
> **模型决定上限Harness 决定底线。** > **模型决定上限Harness 决定底线。**
> 本文件是 OpenHIS 项目的 Harness Engineering 落地。整合了 OpenAI/Anthropic Harness Engineering 方法论与 walkinglabs 实战模式。 > 本文件是 HealthLink-HIS 项目的 Harness Engineering 落地。整合了 OpenAI/Anthropic Harness Engineering 方法论与 walkinglabs 实战模式。
> **🔴 铁律统一文件**: `/root/.codex/rules/IRON_LAWS.md` — 所有智能体必须遵守,运行时自动加载。 > **🔴 铁律统一文件**: `/root/.codex/rules/IRON_LAWS.md` — 所有智能体必须遵守,运行时自动加载。
> **📦 技能包安装**: https://github.com/paskaa/agentforge-harness-skill — 其他电脑一键安装所有铁律和技能。 > **📦 技能包安装**: https://github.com/paskaa/agentforge-harness-skill — 其他电脑一键安装所有铁律和技能。
@@ -10,7 +10,7 @@
## 📋 项目信息 ## 📋 项目信息
OpenHIS 医院管理系统 | Java 17 + Spring Boot + MyBatis Plus | Vue 3 + Element Plus | PostgreSQL HealthLink-HIS 医院管理系统 | Java 17 + Spring Boot + MyBatis Plus | Vue 3 + Element Plus | PostgreSQL
### 构建和运行 ### 构建和运行
@@ -21,25 +21,25 @@ cd /root/.openclaw/workspace/his-repo
bash .harness/init.sh bash .harness/init.sh
# 后端编译 # 后端编译
cd openhis-server-new && mvn compile -pl openhis-application -am cd healthlink-his-server && mvn compile -pl healthlink-his-application -am
# 后端打包 # 后端打包
mvn clean package -DskipTests mvn clean package -DskipTests
# 后端运行 # 后端运行
cd openhis-application && mvn spring-boot:run cd healthlink-his-application && mvn spring-boot:run
# 前端 # 前端
cd openhis-ui-vue3 && npm install && npm run dev cd healthlink-his-ui && npm install && npm run dev
``` ```
### 关键路径 ### 关键路径
``` ```
后端代码: openhis-server-new/openhis-application/src/main/java/com/ 后端代码: healthlink-his-server/healthlink-his-application/src/main/java/com/
后端配置: openhis-server-new/openhis-application/src/main/resources/ 后端配置: healthlink-his-server/healthlink-his-application/src/main/resources/
Mapper XML: .../mapper/ (regdoctorstation/, doctorstation/, ...) Mapper XML: .../mapper/ (regdoctorstation/, doctorstation/, ...)
前端代码: openhis-ui-vue3/src/ 前端代码: healthlink-his-ui/src/
Harness: .harness/ (init.sh, PROGRESS.md, feature_list.json, ...) Harness: .harness/ (init.sh, PROGRESS.md, feature_list.json, ...)
``` ```
@@ -89,7 +89,7 @@ Harness: .harness/ (init.sh, PROGRESS.md, feature_list.json, ...)
| 层级 | 命令 | 时间 | | 层级 | 命令 | 时间 |
|---|---|---| |---|---|---|
| L1 编译 | `mvn compile -pl openhis-application -am` | <30 | | L1 编译 | `mvn compile -pl healthlink-his-application -am` | <30 |
| L2 全链路 | 六环检查清单见下文 | <5 分钟 | | L2 全链路 | 六环检查清单见下文 | <5 分钟 |
| L3 审查 | 你人工审查 diff | 10-30 分钟 | | L3 审查 | 你人工审查 diff | 10-30 分钟 |
@@ -191,7 +191,7 @@ Harness: .harness/ (init.sh, PROGRESS.md, feature_list.json, ...)
### 数据库变更必须通过 Flyway 迁移(铁律) ### 数据库变更必须通过 Flyway 迁移(铁律)
凡涉及**新建表新增字段修改字段加索引** DDL 变更**必须**通过 Flyway 框架实现 凡涉及**新建表新增字段修改字段加索引** DDL 变更**必须**通过 Flyway 框架实现
1. `openhis-server-new/openhis-application/src/main/resources/db/migration/` 创建 `V{n}__描述.sql` 1. `healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/` 创建 `V{n}__描述.sql`
2. 版本号递增`V2`, `V3`, `V4`...双下划线分隔 2. 版本号递增`V2`, `V3`, `V4`...双下划线分隔
3. **禁止**直接在数据库执行 DDL 而不创建迁移文件 3. **禁止**直接在数据库执行 DDL 而不创建迁移文件
4. **禁止**修改已执行的迁移文件Flyway 会校验 checksum 4. **禁止**修改已执行的迁移文件Flyway 会校验 checksum
@@ -234,7 +234,7 @@ rg "状态枚举名\|相关方法名\|相关字段名" --type java --type vue
| 项目 | 规范 | | 项目 | 规范 |
|---|---| |---|---|
| 包结构 | `com.openhis`业务)、`com.core`核心 | | 包结构 | `com.healthlink.his`业务)、`com.core`核心 |
| 命名 | PascalCase方法 camelCase常量 SCREAMING_SNAKE_CASE | | 命名 | PascalCase方法 camelCase常量 SCREAMING_SNAKE_CASE |
| 注解 | `@Slf4j``@Data``@Service/@Controller/@Repository` | | 注解 | `@Slf4j``@Data``@Service/@Controller/@Repository` |
| 异常 | 统一异常处理业务异常继承 `RuntimeException` | | 异常 | 统一异常处理业务异常继承 `RuntimeException` |
@@ -250,7 +250,7 @@ rg "状态枚举名\|相关方法名\|相关字段名" --type java --type vue
### 导入顺序 ### 导入顺序
**Java** `java.*` `javax.*` 第三方 `com.core.*` `com.openhis.*` **Java** `java.*` `javax.*` 第三方 `com.core.*` `com.healthlink.his.*`
**Vue** `vue` 相关 第三方 `@/` 别名 相对路径 **Vue** `vue` 相关 第三方 `@/` 别名 相对路径
--- ---
@@ -272,8 +272,8 @@ rg "状态枚举名\|相关方法名\|相关字段名" --type java --type vue
|---|---| |---|---|
| 后端端口 | 18080 | | 后端端口 | 18080 |
| 前端端口 | 81 | | 前端端口 | 81 |
| API 前缀 | `/openhis` | | API 前缀 | `/healthlink-his` |
| Swagger | `/openhis/swagger-ui/index.html` | | Swagger | `/healthlink-his/swagger-ui/index.html` |
| 后端配置 | `application.yml` / `application-{profile}.yml` | | 后端配置 | `application.yml` / `application-{profile}.yml` |
| 前端配置 | `vite.config.js` / `.env.*` | | 前端配置 | `vite.config.js` / `.env.*` |

View File

@@ -27,7 +27,7 @@ if (data.anesthesiaTypeEnum != null) form.anesMethod = Number(data.anesthesiaTyp
## 影响范围 ## 影响范围
- **前端**: `openhis-ui-vue3/src/views/surgicalschedule/index.vue``handleEdit``handleView` 方法 - **前端**: `healthlink-his-ui/src/views/surgicalschedule/index.vue``handleEdit``handleView` 方法
- **后端**: 无需修改(字段已存在且正常返回) - **后端**: 无需修改(字段已存在且正常返回)
- **数据库**: 无需修改(字段已存在) - **数据库**: 无需修改(字段已存在)

View File

@@ -74,6 +74,6 @@
同时保留 `orderedDescFieldKeys` 用于打印功能(已有代码使用)。 同时保留 `orderedDescFieldKeys` 用于打印功能(已有代码使用)。
## 变更文件 ## 变更文件
- `openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/examineApplication.vue`(前端模板修改) - `healthlink-his-ui/src/views/inpatientDoctor/home/components/applicationShow/examineApplication.vue`(前端模板修改)
修复结果:✅ 成功5行改动+5/-8 修复结果:✅ 成功5行改动+5/-8

View File

@@ -4,8 +4,8 @@
| 序号 | 文件路径 | 修改类型 | 说明 | | 序号 | 文件路径 | 修改类型 | 说明 |
|------|---------|---------|------| |------|---------|---------|------|
| 1 | `his-source/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ScheduleSlotMapper.xml` | SQL 查询修改 | 性别字段直接从患者表获取 | | 1 | `his-source/healthlink-his-server/openhis-domain/src/main/resources/mapper/administration/ScheduleSlotMapper.xml` | SQL 查询修改 | 性别字段直接从患者表获取 |
| 2 | `his-source/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/TicketAppServiceImpl.java` | Java 代码修改 | 性别处理逻辑修改 | | 2 | `his-source/healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/TicketAppServiceImpl.java` | Java 代码修改 | 性别处理逻辑修改 |
--- ---
@@ -13,7 +13,7 @@
### 修改 1: ScheduleSlotMapper.xml ### 修改 1: ScheduleSlotMapper.xml
**文件:** `his-source/openhis-server-new/openhis-domain/src/main/resources/mapper/administration/ScheduleSlotMapper.xml` **文件:** `his-source/healthlink-his-server/openhis-domain/src/main/resources/mapper/administration/ScheduleSlotMapper.xml`
**修改位置:** 第97行 **修改位置:** 第97行
@@ -33,7 +33,7 @@ pinfo.gender_enum AS genderEnum,
### 修改 2: TicketAppServiceImpl.java ### 修改 2: TicketAppServiceImpl.java
**文件:** `his-source/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/TicketAppServiceImpl.java` **文件:** `his-source/healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/TicketAppServiceImpl.java`
**修改位置:** 第140-145行 **修改位置:** 第140-145行
@@ -75,7 +75,7 @@ if (genderEnum != null) {
### 修改 TicketSlotDTO.java ### 修改 TicketSlotDTO.java
**文件:** `his-source/openhis-server-new/openhis-domain/src/main/java/com/openhis/appointmentmanage/domain/TicketSlotDTO.java` **文件:** `his-source/healthlink-his-server/openhis-domain/src/main/java/com/openhis/appointmentmanage/domain/TicketSlotDTO.java`
**修改:** 添加 `genderEnum` 字段 **修改:** 添加 `genderEnum` 字段
@@ -96,7 +96,7 @@ public void setGenderEnum(Integer genderEnum) {
## 编译部署 ## 编译部署
```bash ```bash
cd his-source/openhis-server-new cd his-source/healthlink-his-server
mvn clean package -DskipTests mvn clean package -DskipTests
``` ```

View File

@@ -24,7 +24,7 @@
- 确保与挂号界面查询的数据来源一致 - 确保与挂号界面查询的数据来源一致
### 修改文件 ### 修改文件
- `his-source/openhis-server-new/openhis-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/TicketAppServiceImpl.java` - `his-source/healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/appointmentmanage/appservice/impl/TicketAppServiceImpl.java`
### 代码变更 ### 代码变更
```java ```java

View File

@@ -37,8 +37,8 @@ Planning Time: 4.349 ms
### 影响范围 ### 影响范围
**涉及文件:** **涉及文件:**
- `openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java` 后端手术分页查询实现需加缓存 - `healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java` 后端手术分页查询实现需加缓存
- `openhis-ui-vue3/src/views/inpatientDoctor/home/components/order/applicationForm/surgery.vue` 前端手术申请单组件需修复 loading 状态 - `healthlink-his-ui/src/views/inpatientDoctor/home/components/order/applicationForm/surgery.vue` 前端手术申请单组件需修复 loading 状态
**涉及数据表:** **涉及数据表:**
- `wor_activity_definition` 活动定义表手术项目源表10,102条手术记录 - `wor_activity_definition` 活动定义表手术项目源表10,102条手术记录

View File

@@ -35,8 +35,8 @@
中间状态(已校对=2、待接收=3、已接收=4由护理/医技等外部系统管理,本代码范围不涉及。 中间状态(已校对=2、待接收=3、已接收=4由护理/医技等外部系统管理,本代码范围不涉及。
### 涉及文件 ### 涉及文件
- `openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml` - `healthlink-his-server/healthlink-his-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml`
- `openhis-server-new/openhis-domain/src/main/java/com/openhis/document/domain/RequestForm.java` - `healthlink-his-server/openhis-domain/src/main/java/com/openhis/document/domain/RequestForm.java`
## 修复结果 ## 修复结果
@@ -55,6 +55,6 @@
- 添加 `status` 字段,补全领域模型 - 添加 `status` 字段,补全领域模型
### 验证 ### 验证
- ✅ Java 编译通过mvn compile -pl openhis-application -am -DskipTests - ✅ Java 编译通过mvn compile -pl healthlink-his-application -am -DskipTests
- ✅ XML 格式正确ElementTree 解析成功) - ✅ XML 格式正确ElementTree 解析成功)
- ✅ 改动量 > 3 行(+86/-49 - ✅ 改动量 > 3 行(+86/-49

View File

@@ -4,9 +4,9 @@
[住院护士站-三测单] 体征录入点击保存后缺乏执行反馈且窗口异常自动关闭 [住院护士站-三测单] 体征录入点击保存后缺乏执行反馈且窗口异常自动关闭
## 涉及文件 ## 涉及文件
- 前端: `openhis-ui-vue3/src/views/inpatientNurse/tprChart/components/addTprDialog.vue` - 前端: `healthlink-his-ui/src/views/inpatientNurse/tprChart/components/addTprDialog.vue`
- API: `openhis-ui-vue3/src/views/inpatientNurse/tprChart/components/api.js` - API: `healthlink-his-ui/src/views/inpatientNurse/tprChart/components/api.js`
- 父组件: `openhis-ui-vue3/src/views/inpatientNurse/tprChart/index.vue` - 父组件: `healthlink-his-ui/src/views/inpatientNurse/tprChart/index.vue`
## 根因分析 ## 根因分析

View File

@@ -4,8 +4,8 @@
- **项目名称**: 开源HIS改造落地 - **项目名称**: 开源HIS改造落地
- **当前分支**: develop - **当前分支**: develop
- **代码路径**: - **代码路径**:
- 前端: openhis-ui-vue3 - 前端: healthlink-his-ui
- 后端: openhis-server-new - 后端: healthlink-his-server
- ** Git仓库**: https://gitea.gentronhealth.com/wangyizhe/his - ** Git仓库**: https://gitea.gentronhealth.com/wangyizhe/his
- **禅道地址**: https://zentao.gentronhealth.com - **禅道地址**: https://zentao.gentronhealth.com

View File

@@ -6,7 +6,7 @@
**修复人:** 关羽 **修复人:** 关羽
**修复日期:** 2026-04-06 **修复日期:** 2026-04-06
**项目版本:** OpenHIS v2.0 **项目版本:** HealthLink-HIS v2.0
--- ---
@@ -23,13 +23,13 @@
- MyBatis 返回的 `register_time` 无法映射到前端的 `registerTime`,导致数据无法显示 - MyBatis 返回的 `register_time` 无法映射到前端的 `registerTime`,导致数据无法显示
**代码位置:** **代码位置:**
- 文件:`openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml` - 文件:`healthlink-his-server/healthlink-his-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml`
- 方法:`getCurrentDayEncounter` - 方法:`getCurrentDayEncounter`
- 行号:约第 72 行和第 88 行 - 行号:约第 72 行和第 88 行
### 二、修改步骤 ### 二、修改步骤
**文件:** `openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml` **文件:** `healthlink-his-server/healthlink-his-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml`
**修改 1字段别名修正第 72 行)** **修改 1字段别名修正第 72 行)**
```xml ```xml
@@ -77,12 +77,12 @@ ORDER BY T9.registerTime DESC
- 当前端未传递这些字段时,它们为 null导致数据库插入失败或 NullPointerException - 当前端未传递这些字段时,它们为 null导致数据库插入失败或 NullPointerException
**代码位置:** **代码位置:**
- 文件:`openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java` - 文件:`healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java`
- 方法:`handMedication()``handDevice()``handService()` - 方法:`handMedication()``handDevice()``handService()`
### 二、修改步骤 ### 二、修改步骤
**文件:** `openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java` **文件:** `healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java`
#### 修改 1handMedication 方法(约第 756 行) #### 修改 1handMedication 方法(约第 756 行)
@@ -160,7 +160,7 @@ if (adviceSaveDto.getFounderOrgId() == null) {
### 当前状态 ### 当前状态
已读取 `openhis-ui-vue3/src/views/charge/outpatientregistration/index.vue` 文件,未发现明显的 UI 布局问题。 已读取 `healthlink-his-ui/src/views/charge/outpatientregistration/index.vue` 文件,未发现明显的 UI 布局问题。
现有页面符合 Element Plus 组件库规范,布局合理。 现有页面符合 Element Plus 组件库规范,布局合理。
@@ -198,8 +198,8 @@ if (adviceSaveDto.getFounderOrgId() == null) {
| 序号 | 文件路径 | 修改类型 | 说明 | | 序号 | 文件路径 | 修改类型 | 说明 |
|------|---------|---------|------| |------|---------|---------|------|
| 1 | `openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml` | 字段别名修复 | 将 `register_time` 改为 `registerTime` | | 1 | `healthlink-his-server/healthlink-his-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml` | 字段别名修复 | 将 `register_time` 改为 `registerTime` |
| 2 | `openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java` | 新增字段补全逻辑 | 在三个医嘱处理方法中添加 `practitionerId``founderOrgId` 自动补全 | | 2 | `healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java` | 新增字段补全逻辑 | 在三个医嘱处理方法中添加 `practitionerId``founderOrgId` 自动补全 |
--- ---
@@ -207,13 +207,13 @@ if (adviceSaveDto.getFounderOrgId() == null) {
1. **后端部署:** 1. **后端部署:**
```bash ```bash
cd openhis-server-new cd healthlink-his-server
mvn clean package -DskipTests mvn clean package -DskipTests
``` ```
2. **重启服务:** 2. **重启服务:**
```bash ```bash
cd openhis-server-new/openhis-application cd healthlink-his-server/healthlink-his-application
mvn spring-boot:run mvn spring-boot:run
``` ```

View File

@@ -4,7 +4,7 @@
检验申请列表的【操作】列仅显示固定的"打印"和"删除"按钮,未根据申请单状态动态切换操作权限。 检验申请列表的【操作】列仅显示固定的"打印"和"删除"按钮,未根据申请单状态动态切换操作权限。
## 根因分析 ## 根因分析
文件 `openhis-ui-vue3/src/views/doctorstation/components/inspection/inspectionApplication.vue` 第97-104行 文件 `healthlink-his-ui/src/views/doctorstation/components/inspection/inspectionApplication.vue` 第97-104行
- 操作列模板中固定渲染"打印"和"删除"按钮,没有任何状态判断逻辑 - 操作列模板中固定渲染"打印"和"删除"按钮,没有任何状态判断逻辑
- 缺少"修改"和"撤回"按钮 - 缺少"修改"和"撤回"按钮
@@ -36,7 +36,7 @@
| 其他状态 | 已采证/已送检/报告已出/已作废 | 详情 | | 其他状态 | 已采证/已送检/报告已出/已作废 | 详情 |
### 涉及文件 ### 涉及文件
- `openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue` - 前端操作列动态按钮 - `healthlink-his-ui/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue` - 前端操作列动态按钮
- `openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/api.js` - 前端APIdeleteRequestForm, withdrawRequestForm - `healthlink-his-ui/src/views/inpatientDoctor/home/components/applicationShow/api.js` - 前端APIdeleteRequestForm, withdrawRequestForm
- `openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java` - 后端Controller/delete, /withdraw 端点) - `healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/regdoctorstation/controller/RequestFormManageController.java` - 后端Controller/delete, /withdraw 端点)
- `openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java` - 后端Service实现 - `healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java` - 后端Service实现

View File

@@ -844,7 +844,7 @@ import {
reject, reject,
submitApproval, submitApproval,
} from '../components/api'; } from '../components/api';
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue'; import TraceNoDialog from '@/components/HealthLinkHis/TraceNoDialog/index.vue';
import {formatDate, formatDateymd} from '@/utils/index'; import {formatDate, formatDateymd} from '@/utils/index';
import {ref} from 'vue'; import {ref} from 'vue';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';

View File

@@ -643,8 +643,8 @@ import {
getstocktakingDetail, getstocktakingDetail,
submitApproval, submitApproval,
} from '../components/api'; } from '../components/api';
import PopoverList from '@/components/OpenHis/popoverList/index.vue'; import PopoverList from '@/components/HealthLinkHis/popoverList/index.vue';
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue'; import TraceNoDialog from '@/components/HealthLinkHis/TraceNoDialog/index.vue';
import MedicineList from '../components/medicineList.vue'; import MedicineList from '../components/medicineList.vue';
import {formatDate} from '@/utils/index'; import {formatDate} from '@/utils/index';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';

View File

@@ -680,7 +680,7 @@ import {
reject, reject,
submitApproval, submitApproval,
} from '../lossReporting'; } from '../lossReporting';
import PopoverList from '@/components/OpenHis/popoverList/index.vue'; import PopoverList from '@/components/HealthLinkHis/popoverList/index.vue';
import transferManagement from './components/lossReporting.vue'; import transferManagement from './components/lossReporting.vue';
import {formatDate, formatDateymd} from '@/utils/index'; import {formatDate, formatDateymd} from '@/utils/index';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';

View File

@@ -128,7 +128,7 @@
<script setup> <script setup>
import {onMounted, reactive, ref} from 'vue'; import {onMounted, reactive, ref} from 'vue';
import {ElMessage, ElMessageBox} from 'element-plus'; import {ElMessage, ElMessageBox} from 'element-plus';
import {parseTime} from '@/utils/openhis'; import {parseTime} from '@/utils/his';
import Pagination from '@/components/Pagination'; import Pagination from '@/components/Pagination';
import { import {
cancelSupplyRequestData, cancelSupplyRequestData,

View File

@@ -159,7 +159,7 @@
<script setup> <script setup>
import {onMounted, reactive, ref} from 'vue'; import {onMounted, reactive, ref} from 'vue';
import {ElMessage} from 'element-plus'; import {ElMessage} from 'element-plus';
import {parseTime} from '@/utils/openhis'; import {parseTime} from '@/utils/his';
import Pagination from '@/components/Pagination'; import Pagination from '@/components/Pagination';
import request from '@/utils/request'; import request from '@/utils/request';
//import { getPriceAdjustmentPage, getPriceAdjustmentDetail, cancelPriceAdjustment } from './components/api'; //import { getPriceAdjustmentPage, getPriceAdjustmentDetail, cancelPriceAdjustment } from './components/api';

View File

@@ -765,7 +765,7 @@ import {
searchAllOrgData, searchAllOrgData,
searchHealthData, searchHealthData,
} from './components/api'; } from './components/api';
import PopoverList from '@/components/OpenHis/popoverList/index.vue'; import PopoverList from '@/components/HealthLinkHis/popoverList/index.vue';
import medicineList from './components/medicineList.vue'; import medicineList from './components/medicineList.vue';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';
import {ref, watch} from 'vue'; import {ref, watch} from 'vue';

View File

@@ -758,9 +758,9 @@ import {
reject, reject,
submitApproval, submitApproval,
} from "./components/api"; } from "./components/api";
import PopoverList from "@/components/OpenHis/popoverList/index.vue"; import PopoverList from "@/components/HealthLinkHis/popoverList/index.vue";
import MedicineList from "./components/medicineList.vue"; import MedicineList from "./components/medicineList.vue";
import TraceNoDialog from "@/components/OpenHis/TraceNoDialog/index.vue"; import TraceNoDialog from "@/components/HealthLinkHis/TraceNoDialog/index.vue";
import {formatDate, formatDateymd} from "@/utils/index"; import {formatDate, formatDateymd} from "@/utils/index";
import {useStore} from "@/store/store"; import {useStore} from "@/store/store";
import useUserStore from "@/store/modules/user"; import useUserStore from "@/store/modules/user";

View File

@@ -663,7 +663,7 @@ import {
getPharmacyList, getPharmacyList,
submitApproval, submitApproval,
} from './purchaseinventory'; } from './purchaseinventory';
import PopoverList from '@/components/OpenHis/popoverList/index.vue'; import PopoverList from '@/components/HealthLinkHis/popoverList/index.vue';
import MedicineList from './medicineList.vue'; import MedicineList from './medicineList.vue';
import {formatDate} from '@/utils/index'; import {formatDate} from '@/utils/index';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';

View File

@@ -633,13 +633,13 @@ import {
requisitionIssueApproved, requisitionIssueApproved,
submitApproval, submitApproval,
} from '../components/api'; } from '../components/api';
import PopoverList from '@/components/OpenHis/popoverList/index.vue'; import PopoverList from '@/components/HealthLinkHis/popoverList/index.vue';
import transferManagement from '../components/list.vue'; import transferManagement from '../components/list.vue';
import {formatDate} from '@/utils/index'; import {formatDate} from '@/utils/index';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';
import {useStore} from '@/store/store'; import {useStore} from '@/store/store';
import useTagsViewStore from '@/store/modules/tagsView'; import useTagsViewStore from '@/store/modules/tagsView';
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue' import TraceNoDialog from '@/components/HealthLinkHis/TraceNoDialog/index.vue'
/** 领用保存 IssueDto后端 Jackson 只认 yyyy-MM-dd HH:mm:ss库存接口可能回传 2025/4/2 00:00:00 等 */ /** 领用保存 IssueDto后端 Jackson 只认 yyyy-MM-dd HH:mm:ss库存接口可能回传 2025/4/2 00:00:00 等 */
function toIssueDateTimeStr(val) { function toIssueDateTimeStr(val) {

View File

@@ -643,8 +643,8 @@ import {
returnIssueApproved, returnIssueApproved,
submitTHApproval, submitTHApproval,
} from '../components/api'; } from '../components/api';
import PopoverList from '@/components/OpenHis/popoverList/index.vue'; import PopoverList from '@/components/HealthLinkHis/popoverList/index.vue';
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue'; import TraceNoDialog from '@/components/HealthLinkHis/TraceNoDialog/index.vue';
import transferManagement from '../components/list.vue'; import transferManagement from '../components/list.vue';
import {formatDate} from '@/utils/index'; import {formatDate} from '@/utils/index';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';

View File

@@ -789,7 +789,7 @@ import {
} from './components/api'; } from './components/api';
import {formatDate, formatDateymd} from '@/utils/index'; import {formatDate, formatDateymd} from '@/utils/index';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue'; import TraceNoDialog from '@/components/HealthLinkHis/TraceNoDialog/index.vue';
import {useStore} from '@/store/store'; import {useStore} from '@/store/store';
import useTagsViewStore from '@/store/modules/tagsView'; import useTagsViewStore from '@/store/modules/tagsView';

View File

@@ -635,7 +635,7 @@ import {formatDate} from '@/utils/index';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';
import {useStore} from '@/store/store'; import {useStore} from '@/store/store';
import useTagsViewStore from '@/store/modules/tagsView'; import useTagsViewStore from '@/store/modules/tagsView';
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue'; import TraceNoDialog from '@/components/HealthLinkHis/TraceNoDialog/index.vue';
const tagsViewStore = useTagsViewStore(); const tagsViewStore = useTagsViewStore();
const store = useStore(); const store = useStore();

View File

@@ -752,9 +752,9 @@ import {
reject, reject,
submitApproval, submitApproval,
} from '../components/transferManagement'; } from '../components/transferManagement';
import PopoverList from '@/components/OpenHis/popoverList/index.vue'; import PopoverList from '@/components/HealthLinkHis/popoverList/index.vue';
import transferManagement from '../components/transferManagement.vue'; import transferManagement from '../components/transferManagement.vue';
import TraceNoDialog from '@/components/OpenHis/TraceNoDialog/index.vue'; import TraceNoDialog from '@/components/HealthLinkHis/TraceNoDialog/index.vue';
import {formatDate, formatDateymd} from '@/utils/index'; import {formatDate, formatDateymd} from '@/utils/index';
import useUserStore from '@/store/modules/user'; import useUserStore from '@/store/modules/user';
import {useStore} from '@/store/store'; import {useStore} from '@/store/store';

View File

@@ -1,8 +1,8 @@
{ {
"name": "openhis", "name": "healthlink-his",
"version": "3.8.10", "version": "3.8.10",
"description": "OpenHIS管理系统", "description": "HealthLink-HIS管理系统",
"author": "OpenHIS", "author": "HealthLink-HIS",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"scripts": { "scripts": {

View File

@@ -67,7 +67,7 @@
✅ 成功16行改动+16/-2 ✅ 成功16行改动+16/-2
修改文件:`openhis-server-new/openhis-common/src/main/java/com/openhis/common/aspectj/DictAspect.java` 修改文件:`healthlink-his-server/openhis-common/src/main/java/com/openhis/common/aspectj/DictAspect.java`
修复策略: 修复策略:
1. DictAspect 在 SQL 查询前检查 `_dictText` 字段是否已被手动填充,若已有值则跳过查询 1. DictAspect 在 SQL 查询前检查 `_dictText` 字段是否已被手动填充,若已有值则跳过查询

View File

@@ -89,6 +89,6 @@ END
医技接收时将 status_enum 从 10 (PROOFREAD) 更新为 11 (PENDING_RECEIVE)→12 (RECEIVED),检查后更新为 3 (COMPLETED)。 医技接收时将 status_enum 从 10 (PROOFREAD) 更新为 11 (PENDING_RECEIVE)→12 (RECEIVED),检查后更新为 3 (COMPLETED)。
## 涉及文件 ## 涉及文件
1. `openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java` — 枚举新增 1. `healthlink-his-server/openhis-common/src/main/java/com/openhis/common/enums/RequestStatus.java` — 枚举新增
2. `openhis-server-new/openhis-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml` — SQL CASE 修复 2. `healthlink-his-server/healthlink-his-application/src/main/resources/mapper/regdoctorstation/RequestFormManageAppMapper.xml` — SQL CASE 修复
3. `openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java` — 校对方法修改 3. `healthlink-his-server/openhis-domain/src/main/java/com/openhis/workflow/service/impl/ServiceRequestServiceImpl.java` — 校对方法修改

View File

@@ -49,8 +49,8 @@
## 2026-05-18 复核验证 ## 2026-05-18 复核验证
经二次代码审查确认: 经二次代码审查确认:
- `openhis-ui-vue3` 全目录搜索 `汇总发药申请`: **0个匹配** - `healthlink-his-ui` 全目录搜索 `汇总发药申请`: **0个匹配**
- `openhis-ui-vue3` 全目录搜索 `SummaryDrug`/`summaryDrug`: **0个匹配** - `healthlink-his-ui` 全目录搜索 `SummaryDrug`/`summaryDrug`: **0个匹配**
- `inpatientDoctor/home/index.vue` 标签页列表: 无"汇总发药申请"仅8个正常标签页 - `inpatientDoctor/home/index.vue` 标签页列表: 无"汇总发药申请"仅8个正常标签页
- `inpatientNurse/` 目录导航配置: 无残留引用 - `inpatientNurse/` 目录导航配置: 无残留引用
@@ -72,7 +72,7 @@
经全面代码审计确认: 经全面代码审计确认:
- `inpatientDoctor/home/index.vue` 标签页列表: 仅8个正常标签页住院病历、诊断录入、临床医嘱、检验申请、检查申请、手术申请、输血申请、报告查询无"汇总发药申请" - `inpatientDoctor/home/index.vue` 标签页列表: 仅8个正常标签页住院病历、诊断录入、临床医嘱、检验申请、检查申请、手术申请、输血申请、报告查询无"汇总发药申请"
- `inpatientNurse/constants/navigation.js`: 6个护士导航项无"汇总发药申请" - `inpatientNurse/constants/navigation.js`: 6个护士导航项无"汇总发药申请"
- `openhis-ui-vue3` 全目录搜索 `汇总发药申请`: 仅1处API注释`drug/inpatientMedicationDispensing/components/api.js`,药房模块,非医生界面) - `healthlink-his-ui` 全目录搜索 `汇总发药申请`: 仅1处API注释`drug/inpatientMedicationDispensing/components/api.js`,药房模块,非医生界面)
- 全目录搜索 `SummaryDrug`/`summaryDrug`: 0个匹配 - 全目录搜索 `SummaryDrug`/`summaryDrug`: 0个匹配
- 路由表无 `medicine-summary`/`medicineSummary` 相关入口 - 路由表无 `medicine-summary`/`medicineSummary` 相关入口
- 工作树状态: clean无需额外提交 - 工作树状态: clean无需额外提交

View File

@@ -36,6 +36,6 @@ getOrgLocListByOrgIdAndActivityDefinitionId(orgLoc.getOrganizationId(), orgLoc.g
3. **新增 Service 方法**`getOrgLocListByActivityDefinitionId(Long activityDefinitionId)` 用于按诊疗定义查询所有记录 3. **新增 Service 方法**`getOrgLocListByActivityDefinitionId(Long activityDefinitionId)` 用于按诊疗定义查询所有记录
## 涉及文件 ## 涉及文件
- `openhis-server-new/openhis-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java` - `healthlink-his-server/healthlink-his-application/src/main/java/com/openhis/web/basedatamanage/appservice/impl/OrganizationLocationAppServiceImpl.java`
- `openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationLocationService.java` - `healthlink-his-server/openhis-domain/src/main/java/com/openhis/administration/service/IOrganizationLocationService.java`
- `openhis-server-new/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java` - `healthlink-his-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/OrganizationLocationServiceImpl.java`

View File

@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# ============================================================ # ============================================================
# OpenHIS 前端部署脚本 # HealthLink-HIS 前端部署脚本
# 用法: bash deploy-frontend.sh [prod|test|staging|dev] # 用法: bash deploy-frontend.sh [prod|test|staging|dev]
# 默认: prod # 默认: prod
# ============================================================ # ============================================================
@@ -8,11 +8,11 @@ set -e
MODE=${1:-prod} MODE=${1:-prod}
PROJECT_DIR=$(cd "$(dirname "$0")/.." && pwd) PROJECT_DIR=$(cd "$(dirname "$0")/.." && pwd)
UI_DIR="$PROJECT_DIR/openhis-ui-vue3" UI_DIR="$PROJECT_DIR/healthlink-his-ui"
DIST_DIR="$UI_DIR/dist" DIST_DIR="$UI_DIR/dist"
echo "==========================================" echo "=========================================="
echo " OpenHIS 前端部署" echo " HealthLink-HIS 前端部署"
echo " 环境: $MODE" echo " 环境: $MODE"
echo " 目录: $UI_DIR" echo " 目录: $UI_DIR"
echo "==========================================" echo "=========================================="
@@ -72,11 +72,11 @@ echo ""
echo "[5/5] 部署方式:" echo "[5/5] 部署方式:"
echo "" echo ""
echo " 方式一: 复制到 Nginx" echo " 方式一: 复制到 Nginx"
echo " cp -r $DIST_DIR/* /usr/share/nginx/html/openhis/" echo " cp -r $DIST_DIR/* /usr/share/nginx/html/healthlink-his/"
echo " nginx -s reload" echo " nginx -s reload"
echo "" echo ""
echo " 方式二: 软链接(推荐,方便更新)" echo " 方式二: 软链接(推荐,方便更新)"
echo " ln -sfn $DIST_DIR /usr/share/nginx/html/openhis" echo " ln -sfn $DIST_DIR /usr/share/nginx/html/healthlink-his"
echo " nginx -s reload" echo " nginx -s reload"
echo "" echo ""
echo "==========================================" echo "=========================================="

View File

@@ -1,16 +1,16 @@
# ============================================================ # ============================================================
# OpenHIS 前端依赖问题排查与修复脚本 # HealthLink-HIS 前端依赖问题排查与修复脚本
# 用法: bash fix-deps.sh # 用法: bash fix-deps.sh
# ============================================================ # ============================================================
set -e set -e
PROJECT_DIR=$(cd "$(dirname "$0")/.." && pwd) PROJECT_DIR=$(cd "$(dirname "$0")/.." && pwd)
UI_DIR="$PROJECT_DIR/openhis-ui-vue3" UI_DIR="$PROJECT_DIR/healthlink-his-ui"
cd "$UI_DIR" cd "$UI_DIR"
echo "==========================================" echo "=========================================="
echo " OpenHIS 前端依赖诊断" echo " HealthLink-HIS 前端依赖诊断"
echo "==========================================" echo "=========================================="
echo "" echo ""

View File

@@ -1,22 +1,22 @@
# ============================================================ # ============================================================
# OpenHIS 前端 Nginx 配置 # HealthLink-HIS 前端 Nginx 配置
# 放到 /etc/nginx/conf.d/openhis.conf 或 include 到 nginx.conf # 放到 /etc/nginx/conf.d/openhis.conf 或 include 到 nginx.conf
# ============================================================ # ============================================================
server { server {
listen 80; listen 80;
server_name openhis.local; # 改成实际域名或 IP server_name healthlink-his.local; # 改成实际域名或 IP
# 前端静态文件 # 前端静态文件
location / { location / {
root /usr/share/nginx/html/openhis; root /usr/share/nginx/html/healthlink-his;
index index.html; index index.html;
try_files $uri $uri/ /index.html; # SPA 路由回退 try_files $uri $uri/ /index.html; # SPA 路由回退
} }
# 后端 API 代理 # 后端 API 代理
location /prd-api/ { location /prd-api/ {
proxy_pass http://127.0.0.1:18080/openhis/; proxy_pass http://127.0.0.1:18082/healthlink-his/;
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@@ -35,14 +35,14 @@ server {
# 静态资源缓存(带 hash 的文件长期缓存) # 静态资源缓存(带 hash 的文件长期缓存)
location ~* /assets/.*\.(js|css|woff2?|ttf|eot|png|jpg|jpeg|gif|svg|ico)$ { location ~* /assets/.*\.(js|css|woff2?|ttf|eot|png|jpg|jpeg|gif|svg|ico)$ {
root /usr/share/nginx/html/openhis; root /usr/share/nginx/html/healthlink-his;
expires 365d; expires 365d;
add_header Cache-Control "public, immutable"; add_header Cache-Control "public, immutable";
} }
# index.html 不缓存(保证更新及时生效) # index.html 不缓存(保证更新及时生效)
location = /index.html { location = /index.html {
root /usr/share/nginx/html/openhis; root /usr/share/nginx/html/healthlink-his;
add_header Cache-Control "no-cache, no-store, must-revalidate"; add_header Cache-Control "no-cache, no-store, must-revalidate";
} }
} }

View File

@@ -1,4 +1,4 @@
# OpenHIS 后端组件升级方案 # HealthLink-HIS 后端组件升级方案
> **编制日期**: 2026-06-04 > **编制日期**: 2026-06-04
> **基线**: Spring Boot 2.5.15 + MyBatis Plus 3.5.5 > **基线**: Spring Boot 2.5.15 + MyBatis Plus 3.5.5
@@ -22,7 +22,7 @@
| 项 | 内容 | | 项 | 内容 |
|---|---| |---|---|
| **风险等级** | 🔴 高 — 1.69 有 CVE 安全漏洞 | | **风险等级** | 🔴 高 — 1.69 有 CVE 安全漏洞 |
| **变更文件** | `openhis-server-new/pom.xml` | | **变更文件** | `healthlink-his-server/pom.xml` |
| **当前值** | `<bcprov-jdk15on.version>1.69</bcprov-jdk15on.version>` | | **当前值** | `<bcprov-jdk15on.version>1.69</bcprov-jdk15on.version>` |
| **操作** | 删除 jdk15on改用 jdk18on | | **操作** | 删除 jdk15on改用 jdk18on |
| **新增依赖** | `org.bouncycastle:bcprov-jdk18on:1.80`<br>`org.bouncycastle:bcpkix-jdk18on:1.80` | | **新增依赖** | `org.bouncycastle:bcprov-jdk18on:1.80`<br>`org.bouncycastle:bcpkix-jdk18on:1.80` |

View File

@@ -1,6 +1,6 @@
# Flyway 数据库迁移使用指南 # Flyway 数据库迁移使用指南
> **项目**: OpenHIS 医院管理系统 > **项目**: HealthLink-HIS 医院管理系统
> **数据库**: PostgreSQL 192.168.110.252:15432 (schema: hisdev) > **数据库**: PostgreSQL 192.168.110.252:15432 (schema: hisdev)
> **Flyway 版本**: 8.5.x (Spring Boot 2.7 管理) > **Flyway 版本**: 8.5.x (Spring Boot 2.7 管理)
> **编制日期**: 2026-06-04 > **编制日期**: 2026-06-04
@@ -19,7 +19,7 @@
**迁移文件目录:** **迁移文件目录:**
``` ```
openhis-server-new/openhis-application/src/main/resources/db/migration/ healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/
``` ```
**当前状态:** **当前状态:**
@@ -92,9 +92,9 @@ CREATE INDEX idx_surgery_stats_tenant ON surgery_schedule_stats(tenant_id);
**Step 2启动应用** **Step 2启动应用**
```bash ```bash
cd openhis-server-new cd healthlink-his-server
mvn clean package -DskipTests mvn clean package -DskipTests
java -jar openhis-application/target/openhis-application.jar --spring.profiles.active=dev --server.port=18082 java -jar healthlink-his-application/target/healthlink-his-application.jar --spring.profiles.active=dev --server.port=18082
``` ```
**Step 3Flyway 自动执行** **Step 3Flyway 自动执行**
@@ -214,7 +214,7 @@ PGPASSWORD=Jchl1528 psql -h 192.168.110.252 -p 15432 -U postgresql -d postgresql
-c "SET search_path TO hisdev; DROP TABLE IF EXISTS clinic_referral;" -c "SET search_path TO hisdev; DROP TABLE IF EXISTS clinic_referral;"
# 3. 删除迁移文件 # 3. 删除迁移文件
rm openhis-server-new/openhis-application/src/main/resources/db/migration/V6__create_clinic_referral_table.sql rm healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V6__create_clinic_referral_table.sql
# 4. 重启应用 # 4. 重启应用
``` ```
@@ -252,7 +252,7 @@ SELECT MAX(version) AS current_version FROM flyway_schema_history;
## 九、文件清单 ## 九、文件清单
``` ```
openhis-server-new/openhis-application/src/main/resources/db/migration/ healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/
├── README.md # 使用说明 ├── README.md # 使用说明
├── V1__baseline_marker.sql # 基线标记(空文件) ├── V1__baseline_marker.sql # 基线标记(空文件)
├── V2__xxx.sql # 你的第一个迁移 ├── V2__xxx.sql # 你的第一个迁移

View File

@@ -3,7 +3,7 @@
> **编制人:** 陈琳 > **编制人:** 陈琳
> **编制日期:** 2026-05-01 > **编制日期:** 2026-05-01
> **统计范围:** 2026-04-01 至 2026-05-01 > **统计范围:** 2026-04-01 至 2026-05-01
> **项目版本:** OpenHIS v2.0 > **项目版本:** HealthLink-HIS v2.0
> **文档版本:** v1.0 > **文档版本:** v1.0
--- ---

View File

@@ -25,7 +25,7 @@ MyBatis Plus 3.5.16 的 `mybatis-plus-boot-starter` 在 `dependencyManagement`
**解决方案:在父 pom.xml 中显式锁定关键依赖版本** **解决方案:在父 pom.xml 中显式锁定关键依赖版本**
```xml ```xml
<!-- 在 openhis-server-new/pom.xml 的 <properties> 中添加 --> <!-- 在 healthlink-his-server/pom.xml 的 <properties> 中添加 -->
<!-- 锁定 Spring Boot 管理的核心依赖版本,防止被 BOM 覆盖 --> <!-- 锁定 Spring Boot 管理的核心依赖版本,防止被 BOM 覆盖 -->
<spring-boot.version>2.5.15</spring-boot.version> <spring-boot.version>2.5.15</spring-boot.version>
<spring-boot-dependencies.version>2.5.15</spring-boot-dependencies.version> <spring-boot-dependencies.version>2.5.15</spring-boot-dependencies.version>
@@ -99,7 +99,7 @@ MyBatis Plus 3.5.16 的 `mybatis-plus-boot-starter` 在 `dependencyManagement`
### Step 2: 添加 BOM 覆盖(关键!) ### Step 2: 添加 BOM 覆盖(关键!)
`openhis-server-new/pom.xml``<dependencyManagement>` 中添加: `healthlink-his-server/pom.xml``<dependencyManagement>` 中添加:
```xml ```xml
<!-- 覆盖 MyBatis Plus 导入的 Spring Boot BOM保持 2.5.15 --> <!-- 覆盖 MyBatis Plus 导入的 Spring Boot BOM保持 2.5.15 -->
@@ -115,7 +115,7 @@ MyBatis Plus 3.5.16 的 `mybatis-plus-boot-starter` 在 `dependencyManagement`
### Step 3: 编译验证 ### Step 3: 编译验证
```bash ```bash
cd openhis-server-new cd healthlink-his-server
mvn clean compile -DskipTests mvn clean compile -DskipTests
``` ```
@@ -136,7 +136,7 @@ mvn clean compile -DskipTests
### Step 5: 提交代码 ### Step 5: 提交代码
```bash ```bash
git add openhis-server-new/pom.xml git add healthlink-his-server/pom.xml
git commit -m "chore(deps): MyBatis Plus 3.5.5 → 3.5.16" git commit -m "chore(deps): MyBatis Plus 3.5.5 → 3.5.16"
git push origin develop git push origin develop
``` ```

View File

@@ -9,7 +9,7 @@
## 执行原则 ## 执行原则
1. **渐进式合入** — 每次只合一个组件,验证通过再合下一个 1. **渐进式合入** — 每次只合一个组件,验证通过再合下一个
2. **保留业务代码**`com.openhis.*` 目录不动,只改脚手架层 2. **保留业务代码**`com.healthlink.his.*` 目录不动,只改脚手架层
3. **兼容优先** — 优先合入无侵入的独立组件 3. **兼容优先** — 优先合入无侵入的独立组件
4. **验证必做** — 每步完成后跑 `npm run dev` + 核心页面冒烟 4. **验证必做** — 每步完成后跑 `npm run dev` + 核心页面冒烟
@@ -209,7 +209,7 @@ router.beforeEach(async (to, from) => {
**操作:** **操作:**
```bash ```bash
cd openhis-server-new cd healthlink-his-server
mvn clean package -DskipTests mvn clean package -DskipTests
# 验证启动正常 # 验证启动正常
``` ```
@@ -229,7 +229,7 @@ mvn clean package -DskipTests
**操作:** **操作:**
```bash ```bash
cd openhis-ui-vue3 cd healthlink-his-ui
npm install vue-router@^4.6.4 echarts@^5.6.0 npm install vue-router@^4.6.4 echarts@^5.6.0
npm run dev # 验证无报错 npm run dev # 验证无报错
``` ```

View File

@@ -1,4 +1,4 @@
# OpenHIS 组件升级日志 # HealthLink-HIS 组件升级日志
> 每次升级后在此记录,方便跨 session 追踪进度。 > 每次升级后在此记录,方便跨 session 追踪进度。

View File

@@ -1,7 +1,7 @@
# OpenHIS 二次开发版本 — 组件升级计划 # HealthLink-HIS 二次开发版本 — 组件升级计划
> **编制日期**: 2026-06-03 > **编制日期**: 2026-06-03
> **对比基线**: Gitee `tntlinking-opensource/openhis-itai-pro` 2.0 分支 > **对比基线**: Gitee `tntlinking-opensource/healthlink-his` 2.0 分支
> **目标**: 在不破坏现有业务的前提下,逐步引入高价值组件升级 > **目标**: 在不破坏现有业务的前提下,逐步引入高价值组件升级
--- ---
@@ -23,7 +23,7 @@
| 项目 | 详情 | | 项目 | 详情 |
|---|---| |---|---|
| **文件** | `openhis-server-new/pom.xml` | | **文件** | `healthlink-his-server/pom.xml` |
| **变更** | `<bcprov-jdk15on.version>1.69</bcprov-jdk15on.version>` → 删除,改用 jdk18on | | **变更** | `<bcprov-jdk15on.version>1.69</bcprov-jdk15on.version>` → 删除,改用 jdk18on |
| **新依赖** | `org.bouncycastle:bcprov-jdk18on:1.80` + `org.bouncycastle:bcpkix-jdk18on:1.80` | | **新依赖** | `org.bouncycastle:bcprov-jdk18on:1.80` + `org.bouncycastle:bcpkix-jdk18on:1.80` |
| **原因** | 1.69 有已知安全漏洞1.80 支持国密 SM2/SM3 算法 | | **原因** | 1.69 有已知安全漏洞1.80 支持国密 SM2/SM3 算法 |
@@ -34,7 +34,7 @@
| 项目 | 详情 | | 项目 | 详情 |
|---|---| |---|---|
| **文件** | `openhis-ui-vue3/package.json` | | **文件** | `healthlink-his-ui/package.json` |
| **变更** | `"vue-router": "^4.3.0"``"^4.5.1"` | | **变更** | `"vue-router": "^4.3.0"``"^4.5.1"` |
| **风险** | 低 — 4.x 小版本API 兼容 | | **风险** | 低 — 4.x 小版本API 兼容 |
| **验证** | 前端 `npm run dev` → 测试所有页面路由跳转、返回、权限拦截 | | **验证** | 前端 `npm run dev` → 测试所有页面路由跳转、返回、权限拦截 |
@@ -49,7 +49,7 @@
| 项目 | 详情 | | 项目 | 详情 |
|---|---| |---|---|
| **文件** | `openhis-ui-vue3/package.json` | | **文件** | `healthlink-his-ui/package.json` |
| **变更** | `"echarts": "^5.4.3"``"^6.0.0"` | | **变更** | `"echarts": "^5.4.3"``"^6.0.0"` |
| **影响面** | `rg "echarts" --type vue --type js` 搜索所有图表组件 | | **影响面** | `rg "echarts" --type vue --type js` 搜索所有图表组件 |
| **Breaking Changes** | ECharts 6 主要变更Tree-shaking 更彻底、部分 API 重命名 | | **Breaking Changes** | ECharts 6 主要变更Tree-shaking 更彻底、部分 API 重命名 |
@@ -60,7 +60,7 @@
| 项目 | 详情 | | 项目 | 详情 |
|---|---| |---|---|
| **文件** | `openhis-ui-vue3/package.json` + 所有引用文件 | | **文件** | `healthlink-his-ui/package.json` + 所有引用文件 |
| **变更** | `"lodash-es": "^4.17.21"` → 删除,添加 `"es-toolkit": "^1.41.0"` | | **变更** | `"lodash-es": "^4.17.21"` → 删除,添加 `"es-toolkit": "^1.41.0"` |
| **迁移映射** | `_.cloneDeep``cloneDeep``_.debounce``debounce``_.isEqual``isEqual``_.get``get` | | **迁移映射** | `_.cloneDeep``cloneDeep``_.debounce``debounce``_.isEqual``isEqual``_.get``get` |
| **影响面** | `rg "from 'lodash-es'" --type vue --type js` 逐个替换 | | **影响面** | `rg "from 'lodash-es'" --type vue --type js` 逐个替换 |
@@ -71,7 +71,7 @@
| 项目 | 详情 | | 项目 | 详情 |
|---|---| |---|---|
| **文件** | `openhis-server-new/pom.xml` (parent) + `openhis-application/pom.xml` | | **文件** | `healthlink-his-server/pom.xml` (parent) + `healthlink-his-application/pom.xml` |
| **新增依赖** | `org.mapstruct:mapstruct:1.5.5.Final` + `mapstruct-processor` + `lombok-mapstruct-binding` | | **新增依赖** | `org.mapstruct:mapstruct:1.5.5.Final` + `mapstruct-processor` + `lombok-mapstruct-binding` |
| **使用方式** | 新增 `@Mapper(componentModel = "spring")` 接口替代 `BeanUtils.copyProperties` | | **使用方式** | 新增 `@Mapper(componentModel = "spring")` 接口替代 `BeanUtils.copyProperties` |
| **策略** | **渐进式** — 不改造现有代码,仅新功能使用 MapStruct | | **策略** | **渐进式** — 不改造现有代码,仅新功能使用 MapStruct |

View File

@@ -13,8 +13,8 @@ Bug #632 修复完成。核心问题是 JavaScript `&&` 运算符的经典陷阱
| # | #
## 修复文件 ## 修复文件
.../src/main/java/com/openhis/lab/domain/InspectionPackage.java | 3 +++ .../src/main/java/com/healthlink/his/lab/domain/InspectionPackage.java | 3 +++
.../src/main/java/com/openhis/lab/domain/InspectionPackageDetail.java | 3 +++ .../src/main/java/com/healthlink/his/lab/domain/InspectionPackageDetail.java | 3 +++
## 流程时间线 ## 流程时间线
| 时间 | 智能体 | 事件 | 状态 | 耗时 | | 时间 | 智能体 | 事件 | 状态 | 耗时 |

View File

@@ -115,5 +115,5 @@ form.purchaseinventoryList[index].sourceLocationId =
2. 确保 `unitList` 包含必要的字典文本字段 2. 确保 `unitList` 包含必要的字典文本字段
## 影响范围 ## 影响范围
- 前端文件:openhis-ui-vue3/src/views/medicationmanagement/requisitionManagement/requisitionManagement/index.vue - 前端文件:healthlink-his-ui/src/views/medicationmanagement/requisitionManagement/requisitionManagement/index.vue
- 涉及函数:`selectRow``handleLocationClick` - 涉及函数:`selectRow``handleLocationClick`

View File

@@ -26,7 +26,7 @@
**与 Bug #433 对比**Bug #433 是"麻醉方法回显为代码"和"外请专家姓名数据未加载",根因也是字典数据缺失。本次 Bug #462 属于同类问题——字典类型已创建但生产环境的数据记录未同步插入。 **与 Bug #433 对比**Bug #433 是"麻醉方法回显为代码"和"外请专家姓名数据未加载",根因也是字典数据缺失。本次 Bug #462 属于同类问题——字典类型已创建但生产环境的数据记录未同步插入。
## 影响范围 ## 影响范围
- **前端文件**`openhis-ui-vue3/src/views/catalog/diagnosistreatment/components/diagnosisTreatmentDialog.vue`(仅一处引用) - **前端文件**`healthlink-his-ui/src/views/catalog/diagnosistreatment/components/diagnosisTreatmentDialog.vue`(仅一处引用)
- **后端文件**:无代码变更,纯数据问题 - **后端文件**:无代码变更,纯数据问题
- **数据库表**`hisprd.sys_dict_data`插入7条标本数据 - **数据库表**`hisprd.sys_dict_data`插入7条标本数据
- **影响接口**`GET /system/dict/data/type/specimen_code` - **影响接口**`GET /system/dict/data/type/specimen_code`

View File

@@ -16,7 +16,7 @@
## 二、项目结构 ## 二、项目结构
``` ```
openhis-ui-vue3/ healthlink-his-ui/
├── tests/ ├── tests/
│ ├── e2e/ │ ├── e2e/
│ │ ├── fixtures/ # 测试夹具 │ │ ├── fixtures/ # 测试夹具
@@ -187,7 +187,7 @@ npx playwright test --ui
# Spug 构建后阶段添加 # Spug 构建后阶段添加
- name: E2E Testing - name: E2E Testing
script: | script: |
cd openhis-ui-vue3 cd healthlink-his-ui
npx playwright install --with-deps chromium npx playwright install --with-deps chromium
npm run test:e2e -- --reporter=html npm run test:e2e -- --reporter=html
# 测试失败则阻断发布 # 测试失败则阻断发布

View File

@@ -1,4 +1,4 @@
# OpenHIS 铁律 # HealthLink-HIS 铁律
## 铁律 #1: 修改完必须测试 ## 铁律 #1: 修改完必须测试
**任何代码修改后,必须完成以下测试才能提交:** **任何代码修改后,必须完成以下测试才能提交:**

View File

@@ -175,7 +175,7 @@ mvn clean compile -DskipTests
### Step 7: 启动测试 ### Step 7: 启动测试
```bash ```bash
java -jar openhis-application/target/openhis-application.jar --spring.profiles.active=dev --server.port=18082 java -jar healthlink-his-application/target/healthlink-his-application.jar --spring.profiles.active=dev --server.port=18082
``` ```
### Step 8: 检查控制台输出 ### Step 8: 检查控制台输出

View File

@@ -45,7 +45,7 @@ public class SwaggerConfig {
private Info apiInfo() { private Info apiInfo() {
return new Info() return new Info()
.title("开放医院管理系统 - 接口文档") .title("开放医院管理系统 - 接口文档")
.description("OpenHIS API 文档,基于 Springdoc OpenAPI 3.0") .description("HealthLink-HIS API 文档,基于 Springdoc OpenAPI 3.0")
.contact(new Contact().name(coreConfig.getName())) .contact(new Contact().name(coreConfig.getName()))
.version("版本号: " + coreConfig.getVersion()); .version("版本号: " + coreConfig.getVersion());
} }

Some files were not shown because too many files have changed in this diff Show More