595 【住院护士站-医嘱校对】医嘱校对模块列表字段缺失严重,与医生站医嘱要素不一致,存在核对安全隐患
This commit is contained in:
@@ -230,6 +230,68 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
|||||||
if (e.getBirthDate() != null) {
|
if (e.getBirthDate() != null) {
|
||||||
e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate()));
|
e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------- Bug #595: 医嘱校对列表计算字段 ----------
|
||||||
|
|
||||||
|
// 单次剂量:剂量 + 单位
|
||||||
|
if (e.getDose() != null) {
|
||||||
|
String doseStr = e.getDose().stripTrailingZeros().toPlainString();
|
||||||
|
String unitStr = e.getDoseUnitCode_dictText() != null ? e.getDoseUnitCode_dictText() : "";
|
||||||
|
e.setSingleDose(doseStr + unitStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 总量:剂量 × 数量 + 单位(仅药品医嘱)
|
||||||
|
if (e.getDose() != null && e.getQuantity() != null) {
|
||||||
|
BigDecimal total = e.getDose().multiply(BigDecimal.valueOf(e.getQuantity()));
|
||||||
|
String totalStr = total.stripTrailingZeros().toPlainString();
|
||||||
|
String unitStr = e.getUnitCode_dictText() != null ? e.getUnitCode_dictText() : "";
|
||||||
|
e.setTotalAmount(totalStr + unitStr);
|
||||||
|
} else if (e.getQuantity() != null) {
|
||||||
|
String unitStr = e.getUnitCode_dictText() != null ? e.getUnitCode_dictText() : "";
|
||||||
|
e.setTotalAmount(e.getQuantity() + unitStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 频次/用法组合
|
||||||
|
StringBuilder freqBuilder = new StringBuilder();
|
||||||
|
if (e.getRateCode_dictText() != null && !e.getRateCode_dictText().isEmpty()) {
|
||||||
|
freqBuilder.append(e.getRateCode_dictText());
|
||||||
|
}
|
||||||
|
if (e.getMethodCode_dictText() != null && !e.getMethodCode_dictText().isEmpty()) {
|
||||||
|
if (freqBuilder.length() > 0) freqBuilder.append(" ");
|
||||||
|
freqBuilder.append(e.getMethodCode_dictText());
|
||||||
|
}
|
||||||
|
e.setFrequencyUsage(freqBuilder.length() > 0 ? freqBuilder.toString() : null);
|
||||||
|
|
||||||
|
// 开嘱医生
|
||||||
|
e.setOrderingDoctor(e.getRequesterId_dictText() != null
|
||||||
|
? e.getRequesterId_dictText() : e.getAdmittingDoctorName());
|
||||||
|
|
||||||
|
// 皮试状态 + 高亮
|
||||||
|
if (e.getSkinTestFlag() != null && e.getSkinTestFlag() == 1) {
|
||||||
|
e.setSkinTestStatus("需皮试");
|
||||||
|
e.setSkinTestHighlight(true);
|
||||||
|
} else if (e.getSkinTestFlag() != null && e.getSkinTestFlag() == 2) {
|
||||||
|
e.setSkinTestStatus("皮试通过");
|
||||||
|
e.setSkinTestHighlight(false);
|
||||||
|
} else {
|
||||||
|
e.setSkinTestStatus("无需");
|
||||||
|
e.setSkinTestHighlight(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 注射药品标记
|
||||||
|
e.setIsInjection(e.getInjectFlag() != null && e.getInjectFlag() == 1);
|
||||||
|
|
||||||
|
// 停嘱医生
|
||||||
|
e.setStopperName(e.getStopperName());
|
||||||
|
|
||||||
|
// 停嘱时间
|
||||||
|
e.setStopTime(e.getEndTime());
|
||||||
|
|
||||||
|
// 医嘱号
|
||||||
|
e.setOrderNo(e.getRequestId() != null ? e.getRequestId().toString() : null);
|
||||||
|
|
||||||
|
// 诊断(行级)
|
||||||
|
e.setDiagnosis(e.getConditionNames());
|
||||||
});
|
});
|
||||||
|
|
||||||
// 获取医嘱列表
|
// 获取医嘱列表
|
||||||
|
|||||||
@@ -259,4 +259,40 @@ public class InpatientAdviceDto {
|
|||||||
/** 发药状态 */
|
/** 发药状态 */
|
||||||
private Integer dispenseStatus;
|
private Integer dispenseStatus;
|
||||||
private String dispenseStatus_enumText;
|
private String dispenseStatus_enumText;
|
||||||
|
|
||||||
|
// ========== Bug #595 计算展示字段 ==========
|
||||||
|
|
||||||
|
/** 单次剂量(格式化:剂量+单位) */
|
||||||
|
private String singleDose;
|
||||||
|
|
||||||
|
/** 总量(格式化:剂量×数量+单位) */
|
||||||
|
private String totalAmount;
|
||||||
|
|
||||||
|
/** 频次/用法组合(如:tid 静滴) */
|
||||||
|
private String frequencyUsage;
|
||||||
|
|
||||||
|
/** 开嘱医生 */
|
||||||
|
private String orderingDoctor;
|
||||||
|
|
||||||
|
/** 皮试状态文本(需皮试/皮试通过/无需) */
|
||||||
|
private String skinTestStatus;
|
||||||
|
|
||||||
|
/** 皮试高亮标记(需皮试时为true) */
|
||||||
|
private Boolean skinTestHighlight;
|
||||||
|
|
||||||
|
/** 是否注射药品 */
|
||||||
|
private Boolean isInjection;
|
||||||
|
|
||||||
|
/** 停嘱医生 */
|
||||||
|
private String stopperName;
|
||||||
|
|
||||||
|
/** 停嘱时间 */
|
||||||
|
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private Date stopTime;
|
||||||
|
|
||||||
|
/** 医嘱号 */
|
||||||
|
private String orderNo;
|
||||||
|
|
||||||
|
/** 诊断(行级展示) */
|
||||||
|
private String diagnosis;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,7 +154,11 @@
|
|||||||
ii.account_id AS account_id,
|
ii.account_id AS account_id,
|
||||||
ii.performer_check_id,
|
ii.performer_check_id,
|
||||||
ii.category_code,
|
ii.category_code,
|
||||||
ii.dispense_status
|
ii.dispense_status,
|
||||||
|
ii.unit_price,
|
||||||
|
ii.total_price,
|
||||||
|
ii.stopper_id,
|
||||||
|
ii.stopper_name
|
||||||
FROM (( SELECT DISTINCT T1.encounter_id,
|
FROM (( SELECT DISTINCT T1.encounter_id,
|
||||||
T1.tenant_id,
|
T1.tenant_id,
|
||||||
#{medMedicationRequest} AS advice_table,
|
#{medMedicationRequest} AS advice_table,
|
||||||
@@ -199,7 +203,11 @@
|
|||||||
personal_account.balance_amount,
|
personal_account.balance_amount,
|
||||||
personal_account.id AS account_id,
|
personal_account.id AS account_id,
|
||||||
T2.category_code,
|
T2.category_code,
|
||||||
mmd.status_enum AS dispense_status
|
mmd.status_enum AS dispense_status,
|
||||||
|
NULL::numeric AS unit_price,
|
||||||
|
NULL::numeric AS total_price,
|
||||||
|
NULL::bigint AS stopper_id,
|
||||||
|
NULL::varchar AS stopper_name
|
||||||
FROM med_medication_request AS T1
|
FROM med_medication_request AS T1
|
||||||
LEFT JOIN med_medication_definition AS T2
|
LEFT JOIN med_medication_definition AS T2
|
||||||
ON T2.id = T1.medication_id
|
ON T2.id = T1.medication_id
|
||||||
@@ -341,7 +349,11 @@
|
|||||||
personal_account.balance_amount,
|
personal_account.balance_amount,
|
||||||
personal_account.id AS account_id,
|
personal_account.id AS account_id,
|
||||||
T2.category_code,
|
T2.category_code,
|
||||||
NULL::integer AS dispense_status
|
NULL::integer AS dispense_status,
|
||||||
|
NULL::numeric AS unit_price,
|
||||||
|
NULL::numeric AS total_price,
|
||||||
|
NULL::bigint AS stopper_id,
|
||||||
|
NULL::varchar AS stopper_name
|
||||||
FROM wor_service_request AS T1
|
FROM wor_service_request AS T1
|
||||||
LEFT JOIN wor_activity_definition AS T2
|
LEFT JOIN wor_activity_definition AS T2
|
||||||
ON T2.id = T1.activity_id
|
ON T2.id = T1.activity_id
|
||||||
|
|||||||
@@ -1,18 +1,19 @@
|
|||||||
<template>
|
<template>
|
||||||
<div style="height: calc(100vh - 126px)">
|
<div style="height: calc(100vh - 126px); display: flex; flex-direction: column; overflow: hidden">
|
||||||
<div
|
<div
|
||||||
style="
|
style="
|
||||||
height: 51px;
|
height: 51px;
|
||||||
border-bottom: 2px solid #e4e7ed;
|
border-bottom: 2px solid #e4e7ed;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
gap: 16px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
overflow: hidden;
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div>
|
<div style="display: flex; align-items: center; gap: 12px; flex-shrink: 1; min-width: 0;">
|
||||||
<el-radio-group
|
<el-radio-group
|
||||||
v-model="type"
|
v-model="type"
|
||||||
class="ml20"
|
|
||||||
@change="handleRadioChange"
|
@change="handleRadioChange"
|
||||||
>
|
>
|
||||||
<el-radio :value="null">
|
<el-radio :value="null">
|
||||||
@@ -26,7 +27,6 @@
|
|||||||
</el-radio>
|
</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
<el-button
|
<el-button
|
||||||
class="ml20"
|
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
@click="handleGetPrescription"
|
@click="handleGetPrescription"
|
||||||
@@ -34,21 +34,20 @@
|
|||||||
查询
|
查询
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div style="flex: 1; min-width: 0;"></div>
|
||||||
<span class="descriptions-item-label">全选:</span>
|
<div style="display: flex; align-items: center; gap: 12px; flex-shrink: 1; min-width: 0;">
|
||||||
|
<span class="descriptions-item-label" style="flex-shrink: 0;">全选:</span>
|
||||||
<el-switch
|
<el-switch
|
||||||
v-model="chooseAll"
|
v-model="chooseAll"
|
||||||
@change="handelSwitchChange"
|
@change="handelSwitchChange"
|
||||||
/>
|
/>
|
||||||
<el-button
|
<el-button
|
||||||
class="ml20"
|
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="handleCheck"
|
@click="handleCheck"
|
||||||
>
|
>
|
||||||
核对通过
|
核对通过
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
class="ml20 mr20"
|
|
||||||
type="danger"
|
type="danger"
|
||||||
:disabled="hasDispensedSelected"
|
:disabled="hasDispensedSelected"
|
||||||
@click="handleCancel"
|
@click="handleCancel"
|
||||||
@@ -59,7 +58,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
style="padding: 10px; background-color: #eef9fd; height: 100%; overflow-y: auto"
|
style="padding: 10px; background-color: #eef9fd; flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden"
|
||||||
>
|
>
|
||||||
<el-collapse
|
<el-collapse
|
||||||
v-if="prescriptionList.length > 0"
|
v-if="prescriptionList.length > 0"
|
||||||
@@ -69,8 +68,6 @@
|
|||||||
border-bottom: 0px;
|
border-bottom: 0px;
|
||||||
border-top: 0px;
|
border-top: 0px;
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
overflow-y: auto;
|
|
||||||
max-height: calc(100vh - 200px);
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<el-collapse-item
|
<el-collapse-item
|
||||||
@@ -81,12 +78,11 @@
|
|||||||
border: 2px solid #e4e7ed;
|
border: 2px solid #e4e7ed;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
overflow: hidden;
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div style="display: flex; justify-content: space-between; align-items: center">
|
<div style="display: flex; gap: 16px; align-items: center; width: 100%; min-width: 0; overflow: hidden">
|
||||||
<div>
|
<div style="flex: 1; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; padding-right: 12px;">
|
||||||
<span>{{ item[0].bedName + '【' + item[0].busNo + '】' }}</span>
|
<span>{{ item[0].bedName + '【' + item[0].busNo + '】' }}</span>
|
||||||
<span>
|
<span>
|
||||||
{{
|
{{
|
||||||
@@ -103,17 +99,18 @@
|
|||||||
<div
|
<div
|
||||||
style="
|
style="
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
|
||||||
gap: 20px;
|
gap: 20px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-right: 20px;
|
flex-shrink: 1;
|
||||||
|
min-width: 0;
|
||||||
|
overflow: hidden;
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div style="display: inline-block; margin-right: 10px">
|
<div style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0;">
|
||||||
<span class="descriptions-item-label">住院医生:</span>
|
<span class="descriptions-item-label">住院医生:</span>
|
||||||
<span>{{ item[0].requesterId_dictText }}</span>
|
<span>{{ item[0].requesterId_dictText }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div style="display: inline-block; margin-right: 10px">
|
<div style="white-space: nowrap; flex-shrink: 0;">
|
||||||
<div
|
<div
|
||||||
class="descriptions-item-label"
|
class="descriptions-item-label"
|
||||||
style="height: 20px; line-height: 20px; text-align: center; margin: 0"
|
style="height: 20px; line-height: 20px; text-align: center; margin: 0"
|
||||||
@@ -135,6 +132,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<div style="overflow-x: auto">
|
||||||
<vxe-table
|
<vxe-table
|
||||||
:ref="'tableRef' + index"
|
:ref="'tableRef' + index"
|
||||||
:data="item"
|
:data="item"
|
||||||
@@ -168,6 +166,7 @@
|
|||||||
<vxe-column
|
<vxe-column
|
||||||
title="医嘱内容"
|
title="医嘱内容"
|
||||||
field="adviceName"
|
field="adviceName"
|
||||||
|
min-width="220"
|
||||||
>
|
>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span>
|
<span>
|
||||||
@@ -217,7 +216,88 @@
|
|||||||
field="requestTime"
|
field="requestTime"
|
||||||
width="230"
|
width="230"
|
||||||
/>
|
/>
|
||||||
|
<vxe-column
|
||||||
|
title="开始时间"
|
||||||
|
field="startTime"
|
||||||
|
width="150"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<vxe-column
|
||||||
|
title="单次剂量"
|
||||||
|
field="singleDose"
|
||||||
|
width="100"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<vxe-column
|
||||||
|
title="总量"
|
||||||
|
field="totalAmount"
|
||||||
|
width="100"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<vxe-column
|
||||||
|
title="频次/用法"
|
||||||
|
field="frequencyUsage"
|
||||||
|
width="110"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<vxe-column
|
||||||
|
title="皮试"
|
||||||
|
field="skinTestStatus"
|
||||||
|
width="90"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tag
|
||||||
|
v-if="scope.row.skinTestStatus"
|
||||||
|
:type="scope.row.skinTestHighlight ? 'danger' : 'info'"
|
||||||
|
:class="{ 'skin-test-warning': scope.row.skinTestHighlight }"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
{{ scope.row.skinTestStatus }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column
|
||||||
|
title="注射药品"
|
||||||
|
field="isInjection"
|
||||||
|
width="90"
|
||||||
|
align="center"
|
||||||
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tag
|
||||||
|
v-if="scope.row.isInjection"
|
||||||
|
type="warning"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
注射
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
<vxe-column
|
||||||
|
title="开嘱医生"
|
||||||
|
field="orderingDoctor"
|
||||||
|
width="100"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<vxe-column
|
||||||
|
title="诊断"
|
||||||
|
field="diagnosis"
|
||||||
|
min-width="150"
|
||||||
|
/>
|
||||||
|
<vxe-column
|
||||||
|
title="停嘱时间"
|
||||||
|
field="stopTime"
|
||||||
|
width="150"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
|
<vxe-column
|
||||||
|
title="停嘱医生"
|
||||||
|
field="stopperName"
|
||||||
|
width="100"
|
||||||
|
align="center"
|
||||||
|
/>
|
||||||
</vxe-table>
|
</vxe-table>
|
||||||
|
</div>
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
<el-empty
|
<el-empty
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div style="display: flex; justify-content: space-between">
|
<div style="display: flex; height: 90vh; overflow: hidden">
|
||||||
<div style="width: 20%; height: 90vh; border-right: solid 2px #e4e7ed">
|
<div style="width: 20%; flex-shrink: 0; border-right: solid 2px #e4e7ed; overflow: hidden">
|
||||||
<div
|
<div
|
||||||
style="
|
style="
|
||||||
height: 40px;
|
height: 40px;
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
-->
|
-->
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
<div style="width: 100%">
|
<div style="flex: 1; min-width: 0; overflow: hidden">
|
||||||
<el-tabs
|
<el-tabs
|
||||||
v-model="activeName"
|
v-model="activeName"
|
||||||
class="centered-tabs"
|
class="centered-tabs"
|
||||||
|
|||||||
Reference in New Issue
Block a user