595 【住院护士站-医嘱校对】医嘱校对模块列表字段缺失严重,与医生站医嘱要素不一致,存在核对安全隐患
This commit is contained in:
@@ -230,6 +230,68 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
if (e.getBirthDate() != null) {
|
||||
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 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.performer_check_id,
|
||||
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,
|
||||
T1.tenant_id,
|
||||
#{medMedicationRequest} AS advice_table,
|
||||
@@ -199,7 +203,11 @@
|
||||
personal_account.balance_amount,
|
||||
personal_account.id AS account_id,
|
||||
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
|
||||
LEFT JOIN med_medication_definition AS T2
|
||||
ON T2.id = T1.medication_id
|
||||
@@ -341,7 +349,11 @@
|
||||
personal_account.balance_amount,
|
||||
personal_account.id AS account_id,
|
||||
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
|
||||
LEFT JOIN wor_activity_definition AS T2
|
||||
ON T2.id = T1.activity_id
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
<template>
|
||||
<div style="height: calc(100vh - 126px)">
|
||||
<div style="height: calc(100vh - 126px); display: flex; flex-direction: column; overflow: hidden">
|
||||
<div
|
||||
style="
|
||||
height: 51px;
|
||||
border-bottom: 2px solid #e4e7ed;
|
||||
display: flex;
|
||||
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
|
||||
v-model="type"
|
||||
class="ml20"
|
||||
@change="handleRadioChange"
|
||||
>
|
||||
<el-radio :value="null">
|
||||
@@ -26,7 +27,6 @@
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<el-button
|
||||
class="ml20"
|
||||
type="primary"
|
||||
plain
|
||||
@click="handleGetPrescription"
|
||||
@@ -34,21 +34,20 @@
|
||||
查询
|
||||
</el-button>
|
||||
</div>
|
||||
<div>
|
||||
<span class="descriptions-item-label">全选:</span>
|
||||
<div style="flex: 1; min-width: 0;"></div>
|
||||
<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
|
||||
v-model="chooseAll"
|
||||
@change="handelSwitchChange"
|
||||
/>
|
||||
<el-button
|
||||
class="ml20"
|
||||
type="primary"
|
||||
@click="handleCheck"
|
||||
>
|
||||
核对通过
|
||||
</el-button>
|
||||
<el-button
|
||||
class="ml20 mr20"
|
||||
type="danger"
|
||||
:disabled="hasDispensedSelected"
|
||||
@click="handleCancel"
|
||||
@@ -59,7 +58,7 @@
|
||||
</div>
|
||||
<div
|
||||
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
|
||||
v-if="prescriptionList.length > 0"
|
||||
@@ -69,8 +68,6 @@
|
||||
border-bottom: 0px;
|
||||
border-top: 0px;
|
||||
border-radius: 0px;
|
||||
overflow-y: auto;
|
||||
max-height: calc(100vh - 200px);
|
||||
"
|
||||
>
|
||||
<el-collapse-item
|
||||
@@ -81,12 +78,11 @@
|
||||
border: 2px solid #e4e7ed;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 10px;
|
||||
overflow: hidden;
|
||||
"
|
||||
>
|
||||
<template #title>
|
||||
<div style="display: flex; justify-content: space-between; align-items: center">
|
||||
<div>
|
||||
<div style="display: flex; gap: 16px; align-items: center; width: 100%; min-width: 0; overflow: hidden">
|
||||
<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>
|
||||
{{
|
||||
@@ -103,17 +99,18 @@
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
gap: 20px;
|
||||
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>{{ item[0].requesterId_dictText }}</span>
|
||||
</div>
|
||||
<div style="display: inline-block; margin-right: 10px">
|
||||
<div style="white-space: nowrap; flex-shrink: 0;">
|
||||
<div
|
||||
class="descriptions-item-label"
|
||||
style="height: 20px; line-height: 20px; text-align: center; margin: 0"
|
||||
@@ -135,6 +132,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div style="overflow-x: auto">
|
||||
<vxe-table
|
||||
:ref="'tableRef' + index"
|
||||
:data="item"
|
||||
@@ -168,6 +166,7 @@
|
||||
<vxe-column
|
||||
title="医嘱内容"
|
||||
field="adviceName"
|
||||
min-width="220"
|
||||
>
|
||||
<template #default="scope">
|
||||
<span>
|
||||
@@ -217,7 +216,88 @@
|
||||
field="requestTime"
|
||||
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>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
<el-empty
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<div style="width: 20%; height: 90vh; border-right: solid 2px #e4e7ed">
|
||||
<div style="display: flex; height: 90vh; overflow: hidden">
|
||||
<div style="width: 20%; flex-shrink: 0; border-right: solid 2px #e4e7ed; overflow: hidden">
|
||||
<div
|
||||
style="
|
||||
height: 40px;
|
||||
@@ -37,7 +37,7 @@
|
||||
-->
|
||||
</el-tabs>
|
||||
</div>
|
||||
<div style="width: 100%">
|
||||
<div style="flex: 1; min-width: 0; overflow: hidden">
|
||||
<el-tabs
|
||||
v-model="activeName"
|
||||
class="centered-tabs"
|
||||
|
||||
Reference in New Issue
Block a user