Compare commits
13 Commits
4a72fceec2
...
f7b1e6589c
| Author | SHA1 | Date | |
|---|---|---|---|
| f7b1e6589c | |||
| 0d536ea800 | |||
| 254c8d8046 | |||
| 9c1753eb55 | |||
| 0b1882c82a | |||
| 1662db161f | |||
| 848d8e0043 | |||
| 4fdb8dc06d | |||
| da0bb81fdb | |||
| 4bef2498b8 | |||
| d12cde14ba | |||
| 226d3192f1 | |||
| b063a2fb20 |
@@ -1,7 +1,7 @@
|
||||
# HealthLink-HIS 代码模块索引
|
||||
|
||||
> 供 LLM 快速定位代码。每个模块列出 Controller → Service → Mapper 关键文件。
|
||||
> 最后更新: 2026-06-14 00:00 (298 个 Controller)
|
||||
> 最后更新: 2026-06-14 18:00 (298 个 Controller)
|
||||
|
||||
## 关键词 → 模块速查
|
||||
|
||||
|
||||
15
MD/bugs/BUG_503_ANALYSIS.md
Normal file
15
MD/bugs/BUG_503_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #503 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 503
|
||||
- 标题: 【住院发退药】发药明细与发药汇总单数据触发时机不一致,存在业务脱节风险
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: guanyu
|
||||
15
MD/bugs/BUG_606_ANALYSIS.md
Normal file
15
MD/bugs/BUG_606_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #606 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 606
|
||||
- 标题: 门诊术中安排-医嘱】预览列表字段显示及逻辑异常(涉及单位、频次、执行时间)
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: zhaoyun
|
||||
15
MD/bugs/BUG_611_ANALYSIS.md
Normal file
15
MD/bugs/BUG_611_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #611 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 611
|
||||
- 标题: 【住院护士站-住院记账】“补费”弹窗确认按钮位置过深且未固定,建议将核心操作与汇总信息上移
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: zhaoyun
|
||||
15
MD/bugs/BUG_613_ANALYSIS.md
Normal file
15
MD/bugs/BUG_613_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #613 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 613
|
||||
- 标题: 【医嘱校对/住院医生工作站】医嘱“退回”流程缺失反馈机制:护士端退回无原因录入,医生端缺失原因显示
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: zhaoyun
|
||||
15
MD/bugs/BUG_616_ANALYSIS.md
Normal file
15
MD/bugs/BUG_616_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #616 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 616
|
||||
- 标题: 【住院医生工作站-临床医嘱】医嘱录入频次下拉框缺少英文缩写(字典键值)显示,不符合临床书写习惯
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: zhaoyun
|
||||
15
MD/bugs/BUG_617_ANALYSIS.md
Normal file
15
MD/bugs/BUG_617_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #617 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 617
|
||||
- 标题: [住院登记] “费用性质”字段保存逻辑错误(登记选择医保保存后变为全自费)
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: guanyu
|
||||
15
MD/bugs/BUG_637_ANALYSIS.md
Normal file
15
MD/bugs/BUG_637_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #637 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 637
|
||||
- 标题: [住院护士站-体温单] 选中患者后系统上下文不同步,导致无法触发“变更体温单”录入弹窗
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: zhaoyun
|
||||
15
MD/bugs/BUG_638_ANALYSIS.md
Normal file
15
MD/bugs/BUG_638_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #638 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 638
|
||||
- 标题: [分诊排队管理] 智能候选池数据过滤失效,导致跨科室患者数据错误显示
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: guanyu
|
||||
15
MD/bugs/BUG_643_ANALYSIS.md
Normal file
15
MD/bugs/BUG_643_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #643 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 643
|
||||
- 标题: [门诊手术安排-术中医嘱] 删除已生成的临时医嘱提示成功,但点击刷新后医嘱重新出现
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: zhaoyun
|
||||
15
MD/bugs/BUG_730_ANALYSIS.md
Normal file
15
MD/bugs/BUG_730_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #730 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 730
|
||||
- 标题: 【门诊医生工作站】医嘱下的个人组套都是空的删不掉
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: zhaoyun
|
||||
24
MD/bugs/BUG_751_ANALYSIS.md
Normal file
24
MD/bugs/BUG_751_ANALYSIS.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Bug #751 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 751
|
||||
- 标题: 【门诊医生站-医嘱】点击"新增"医嘱时未展示详细参数编辑面板
|
||||
- 严重程度: 一般
|
||||
- 模块: doctorstation
|
||||
|
||||
## 根因分析
|
||||
**直接原因**:前端"新增医嘱"按钮的点击事件未正确打开参数编辑面板。
|
||||
**涉及文件**:
|
||||
- `healthlink-his-ui/src/views/doctorstation/components/OrderPanel.vue` — 医嘱面板主组件
|
||||
- `healthlink-his-ui/src/views/doctorstation/components/OrderForm.vue` — 医嘱编辑表单
|
||||
|
||||
**修复方案**:
|
||||
1. 检查 OrderPanel.vue 中"新增"按钮的 @click 事件绑定
|
||||
2. 确认 OrderForm 组件是否正确引入和渲染
|
||||
3. 检查 v-if/v-show 条件是否阻止了面板显示
|
||||
|
||||
## 涉及模块
|
||||
- 前端: doctorstation
|
||||
- 后端: 无需修改
|
||||
|
||||
FIXER_ID: zhaoyun
|
||||
15
MD/bugs/BUG_754_ANALYSIS.md
Normal file
15
MD/bugs/BUG_754_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #754 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 754
|
||||
- 标题: 【住院医生工作站-临床医嘱】删除“待签发”出院带药医嘱时,系统提示“删除成功”但医嘱状态未变更为“已作废”
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: zhaoyun
|
||||
15
MD/bugs/BUG_755_ANALYSIS.md
Normal file
15
MD/bugs/BUG_755_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #755 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 755
|
||||
- 标题: 【门诊医生工作站】新增医嘱时明明有显示库存数量,但是确无法保存成功,显示无库存
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: guanyu
|
||||
15
MD/bugs/BUG_756_ANALYSIS.md
Normal file
15
MD/bugs/BUG_756_ANALYSIS.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Bug #756 分析报告
|
||||
|
||||
## 基本信息
|
||||
- Bug ID: 756
|
||||
- 标题: 【门诊医生工作站】在诊断里修改并保存会出现报错:Cannot deserialize value of type `com.core.common.core.domain.entity.SysDictData` from Array value (token `JsonToken.START_ARRAY`) at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: java.util.ArrayList[0])
|
||||
- 严重程度: 3
|
||||
- 模块:
|
||||
|
||||
## 根因分析
|
||||
(待深入分析)
|
||||
|
||||
## 修复方案
|
||||
(待分析后确定)
|
||||
|
||||
FIXER_ID: guanyu
|
||||
32
docs/bug-fixes/bug-644.md
Normal file
32
docs/bug-fixes/bug-644.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Bug #644 修复报告
|
||||
|
||||
## 基本信息
|
||||
- **标题**: Bug #644 测试完成,请验收。提出人: chenxj。
|
||||
- **提出人**: chenxj
|
||||
- **修复时间**: 00:24:37 ~ 00:32:06
|
||||
- **修复耗时**: 347.9s
|
||||
- **Commit**: `bd50c58dd`
|
||||
- **测试结果**: ❌ FAIL
|
||||
|
||||
## 根因分析
|
||||
## 变更摘要
|
||||
|
||||
### 根因分析
|
||||
|
||||
**Issue 1 — 状态不同步**:`getInpatientAdvicePage` 方法中,执行记录(`exePerformRecordList`)的计算被包裹在 `if (exeStatus != null)` 条件内,只有在"医嘱执行"页签(传 `exeStatus` 参数)时才计算。"已校对"页签不传 `exeStatus`,因此执行记录永远不会被
|
||||
|
||||
## 修复文件
|
||||
.../impl/AdviceProcessAppServiceImpl.java | 89 +++++++++++++++-------
|
||||
.../dto/InpatientAdviceDto.java | 3 +
|
||||
|
||||
## 流程时间线
|
||||
| 时间 | 智能体 | 事件 | 状态 | 耗时 |
|
||||
|------|--------|------|------|------|
|
||||
| 00:24:37 | guanyu | fix_start | ⏳ | 0.0s |
|
||||
| 00:25:39 | guanyu | fix_retry | ❓ | 0.0s |
|
||||
| 00:32:06 | guanyu | fix_done | ✅ | 347.9s |
|
||||
| 00:32:09 | zhugeliang | analyze_done | ✅ | 0.0s |
|
||||
| 00:32:11 | chenlin | doc_done | ✅ | <1s |
|
||||
|
||||
## 全流程
|
||||
诸葛亮分析 → guanyu 修复 → 张飞测试 → 华佗验收 → 陈琳归档
|
||||
@@ -165,6 +165,18 @@ public class EmergencyController {
|
||||
@PostMapping("/rescue/add")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> addRescue(@RequestBody EmergencyRescue rescue) {
|
||||
// Bug#743: 修复 patientId 为 null 时数据库 NOT NULL 约束冲突
|
||||
// 如果传了 triageId 但没传 patientId,从分诊记录自动关联患者
|
||||
if (rescue.getPatientId() == null && rescue.getTriageId() != null) {
|
||||
EmergencyTriage triage = triageService.getById(rescue.getTriageId());
|
||||
if (triage != null) {
|
||||
rescue.setPatientId(triage.getPatientId());
|
||||
}
|
||||
}
|
||||
// 校验:patientId 必须存在(数据库 NOT NULL 约束)
|
||||
if (rescue.getPatientId() == null) {
|
||||
return R.fail("患者ID不能为空,请提供患者ID或分诊ID");
|
||||
}
|
||||
rescue.setRescueStart(new Date());
|
||||
rescue.setCreateTime(new Date());
|
||||
rescueService.save(rescue);
|
||||
|
||||
@@ -2,10 +2,15 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.healthlink.his.web.patientmanage.mapper.PatientManageMapper">
|
||||
<!-- 病人信息相关查询-->
|
||||
<!-- Bug#717: 移除无用关联子查询 identifier_no(DTO无对应字段),
|
||||
避免 TenantLineInnerInterceptor 用 JSqlParser 解析 SQL 时因裸列名导致 country_code ambiguous -->
|
||||
<select id="getPatientPage" resultType="com.healthlink.his.web.patientmanage.dto.PatientBaseInfoDto">
|
||||
SELECT
|
||||
(
|
||||
SELECT api.identifier_no
|
||||
FROM adm_patient_identifier api
|
||||
WHERE api.tenant_id = p.tenant_id
|
||||
AND api.patient_id = p.id
|
||||
LIMIT 1
|
||||
) AS identifier_no,
|
||||
p.tenant_id,
|
||||
p.id,
|
||||
p.active_flag,
|
||||
@@ -54,7 +59,7 @@
|
||||
FROM adm_patient p
|
||||
<where>
|
||||
p.delete_flag = '0'
|
||||
<if test="ew != null and ew.sqlSegment != null and ew.sqlSegment != ''">
|
||||
<if test="ew.sqlSegment != null and ew.sqlSegment != ''">
|
||||
AND ${ew.sqlSegment}
|
||||
</if>
|
||||
</where>
|
||||
@@ -99,7 +104,7 @@
|
||||
LEFT JOIN adm_patient AS pt ON enc.patient_id = pt.ID AND pt.delete_flag = '0'
|
||||
<where>
|
||||
enc.delete_flag = '0'
|
||||
<if test="ew != null and ew.sqlSegment != null and ew.sqlSegment != ''">
|
||||
<if test="ew.sqlSegment != null and ew.sqlSegment != ''">
|
||||
AND ${ew.sqlSegment}
|
||||
</if>
|
||||
</where>
|
||||
|
||||
@@ -306,7 +306,7 @@
|
||||
null AS skin_test_flag,
|
||||
null AS inject_flag,
|
||||
null AS group_id,
|
||||
COALESCE(T1.content_json::jsonb->>'adviceName', T2.NAME, T1.content_json::jsonb->>'surgeryName') AS advice_name,
|
||||
COALESCE(T2.NAME, T1.content_json::jsonb->>'surgeryName', T1.content_json::jsonb->>'adviceName') AS advice_name,
|
||||
'' AS volume,
|
||||
'' AS lot_number,
|
||||
T1.quantity AS quantity,
|
||||
|
||||
@@ -64,13 +64,15 @@
|
||||
|
||||
<script setup>
|
||||
import {ref} from 'vue';
|
||||
import {getTcmCondition, getTcmSyndrome} from '@/views/doctorstation/components/api';
|
||||
import {getTcmCondition, getTcmSyndrome, saveTcmDiagnosis} from '@/views/doctorstation/components/api';
|
||||
|
||||
const condition = ref('');
|
||||
const syndrome = ref('');
|
||||
const conditionOptions = ref([]);
|
||||
const syndromeOptions = ref([]);
|
||||
const diagnosisList = ref([]);
|
||||
const conditionYbNoMap = {};
|
||||
const syndromeYbNoMap = {};
|
||||
const openDiagnosis = ref(false);
|
||||
const emit = defineEmits(['flush']);
|
||||
const { proxy } = getCurrentInstance();
|
||||
@@ -83,19 +85,31 @@ const props = defineProps({
|
||||
function open() {}
|
||||
|
||||
function submit() {
|
||||
// 提交逻辑
|
||||
if (!condition.value || !syndrome.value) {
|
||||
proxy.$modal.msgWarning('请选择诊断和证候');
|
||||
return; // 确保选择了诊断和证候
|
||||
return;
|
||||
}
|
||||
|
||||
// 构建诊断数据,调用API保存到服务器
|
||||
const diagnosisChildList = [{
|
||||
conditionCode: condition.value,
|
||||
syndromeCode: syndrome.value,
|
||||
}];
|
||||
// syndromeGroupNo 使用时间戳,确保同组病证关联
|
||||
const syndromeGroupNo = String(Date.now());
|
||||
|
||||
// 构建诊断数据,字段名对齐后端 SaveDiagnosisChildParam
|
||||
const diagnosisChildList = [
|
||||
{
|
||||
definitionId: condition.value,
|
||||
ybNo: conditionYbNoMap[condition.value] || '',
|
||||
syndromeGroupNo: syndromeGroupNo,
|
||||
verificationStatusEnum: 4,
|
||||
maindiseFlag: 1,
|
||||
},
|
||||
{
|
||||
definitionId: syndrome.value,
|
||||
ybNo: syndromeYbNoMap[syndrome.value] || '',
|
||||
syndromeGroupNo: syndromeGroupNo,
|
||||
verificationStatusEnum: 4,
|
||||
},
|
||||
];
|
||||
|
||||
// 调用API保存到服务器
|
||||
saveTcmDiagnosis({
|
||||
patientId: props.patientInfo.patientId,
|
||||
encounterId: props.patientInfo.encounterId,
|
||||
@@ -119,17 +133,25 @@ function openDialog() {
|
||||
// 获取中医诊断选项
|
||||
getTcmCondition().then((res) => {
|
||||
conditionOptions.value = res.data.records.map((item) => ({
|
||||
value: item.ybNo,
|
||||
value: item.id,
|
||||
label: item.name,
|
||||
}));
|
||||
// 保存 ybNo 映射,提交时使用
|
||||
res.data.records.forEach((item) => {
|
||||
conditionYbNoMap[item.id] = item.ybNo;
|
||||
});
|
||||
});
|
||||
|
||||
// 获取中医证候选项
|
||||
getTcmSyndrome().then((res) => {
|
||||
syndromeOptions.value = res.data.records.map((item) => ({
|
||||
value: item.ybNo,
|
||||
value: item.id,
|
||||
label: item.name,
|
||||
}));
|
||||
// 保存 ybNo 映射,提交时使用
|
||||
res.data.records.forEach((item) => {
|
||||
syndromeYbNoMap[item.id] = item.ybNo;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
@click="() => (row.methodCode_dictText = dict.label)"
|
||||
@keyup="handleEnter('methodCode')"
|
||||
:key="dict.value"
|
||||
:label="dict.value + ' ' + dict.label"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
@@ -360,7 +360,7 @@
|
||||
<div class="form-group">
|
||||
<el-form-item label="给药途径:" prop="methodCode" class="required-field" data-prop="methodCode">
|
||||
<el-select v-model="row.methodCode" placeholder="给药途径" clearable filterable style="width: 120px">
|
||||
<el-option v-for="dict in config.methodCode" @click="() => (row.methodCode_dictText = dict.label)" :key="dict.value" :label="dict.value + ' ' + dict.label" :value="dict.value" />
|
||||
<el-option v-for="dict in config.methodCode" @click="() => (row.methodCode_dictText = dict.label)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="用药频次:" prop="rateCode" class="required-field" data-prop="rateCode">
|
||||
|
||||
Reference in New Issue
Block a user