fix(doctorstation): 解决医嘱管理中不同类型医嘱的删除和撤回逻辑问题
- 分离不同状态的会诊医嘱,已作废医嘱直接从前端移除,其他状态医嘱调用后端API处理 - 修复普通医嘱删除逻辑,支持草稿和待签发状态的医嘱删除操作 - 宽松医嘱状态条件,支持statusEnum为1(草稿)或2(已签发)的医嘱进行撤回操作 - 修复前端adviceType与后端ItemType映射关系,药品类型值为1,耗材类型值为4,诊疗类型值为3 - 添加详细的调试日志用于追踪医嘱处理流程 - 优化医嘱分类逻辑,确保各类医嘱正确归类处理
This commit is contained in:
@@ -557,16 +557,20 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
}
|
||||
}
|
||||
|
||||
// 药品
|
||||
// 药品(前端adviceType=1)
|
||||
List<AdviceSaveDto> medicineList = adviceSaveList.stream()
|
||||
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
|
||||
// 耗材
|
||||
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())
|
||||
|| e.getAdviceType() == 1).collect(Collectors.toList());
|
||||
// 耗材(前端adviceType=4,后端ItemType.DEVICE=2)
|
||||
List<AdviceSaveDto> deviceList = adviceSaveList.stream()
|
||||
.filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
|
||||
// 诊疗活动(包括普通诊疗和会诊:前端会诊类型值为5)
|
||||
.filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())
|
||||
|| e.getAdviceType() == 4) // 🔧 BugFix: 前端耗材类型值为4
|
||||
.collect(Collectors.toList());
|
||||
// 诊疗活动(包括普通诊疗:前端adviceType=3,会诊:前端adviceType=5)
|
||||
List<AdviceSaveDto> activityList = adviceSaveList.stream()
|
||||
.filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())
|
||||
|| e.getAdviceType() == 5) // 🔧 BugFix: 会诊类型值为5,也归类到诊疗活动
|
||||
|| e.getAdviceType() == 3 // 🔧 BugFix: 前端诊疗类型值为3
|
||||
|| e.getAdviceType() == 5) // 🔧 BugFix: 前端会诊类型值为5
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 🔍 Debug日志: 记录分类结果
|
||||
|
||||
@@ -2005,10 +2005,30 @@ function handleDelete() {
|
||||
hasRequestId: !!item.requestId
|
||||
})));
|
||||
|
||||
if (draftConsultations.length > 0) {
|
||||
console.log('BugFix#219: 开始作废草稿状态会诊医嘱');
|
||||
// 🔧 BugFix: 分离不同状态的会诊医嘱
|
||||
let cancelledConsultations = draftConsultations.filter(item => item.statusEnum == 5); // 已作废
|
||||
let normalDraftConsultations = draftConsultations.filter(item => item.statusEnum != 5); // 其他状态
|
||||
|
||||
console.log('BugFix#219: cancelledConsultations=', cancelledConsultations.length, 'normalDraftConsultations=', normalDraftConsultations.length);
|
||||
|
||||
// 处理已作废的会诊医嘱(直接从前端列表移除)
|
||||
if (cancelledConsultations.length > 0) {
|
||||
console.log('BugFix#219: 已作废的会诊医嘱直接从前端移除');
|
||||
cancelledConsultations.forEach(item => {
|
||||
const index = prescriptionList.value.findIndex(p => p.uniqueKey === item.uniqueKey);
|
||||
if (index !== -1) {
|
||||
console.log('BugFix#219: 从列表中移除已作废会诊医嘱, index=', index, 'adviceName=', item.adviceName);
|
||||
prescriptionList.value.splice(index, 1);
|
||||
}
|
||||
});
|
||||
proxy.$modal.msgSuccess('会诊申请已删除');
|
||||
}
|
||||
|
||||
// 处理草稿/已提交的会诊医嘱(需要调用后端API)
|
||||
if (normalDraftConsultations.length > 0) {
|
||||
console.log('BugFix#219: 开始作废草稿/已提交状态会诊医嘱');
|
||||
// 草稿状态的会诊直接作废
|
||||
let deletePromises = draftConsultations.map(item => {
|
||||
let deletePromises = normalDraftConsultations.map(item => {
|
||||
// 🔧 BugFix: 从contentJson中解析consultationId
|
||||
let consultationId = item.requestId;
|
||||
try {
|
||||
@@ -2044,7 +2064,7 @@ function handleDelete() {
|
||||
if (successCount > 0) {
|
||||
console.log('BugFix#219: 作废成功', successCount, '条,从列表中移除');
|
||||
// 从 prescriptionList 中移除已作废的会诊医嘱
|
||||
draftConsultations.forEach(item => {
|
||||
normalDraftConsultations.forEach(item => {
|
||||
const index = prescriptionList.value.findIndex(p => p.uniqueKey === item.uniqueKey);
|
||||
if (index !== -1) {
|
||||
console.log('BugFix#219: 从列表中移除会诊医嘱, index=', index, 'adviceName=', item.adviceName);
|
||||
@@ -2054,7 +2074,10 @@ function handleDelete() {
|
||||
}
|
||||
getListInfo(false);
|
||||
});
|
||||
} else {
|
||||
}
|
||||
|
||||
// 如果没有草稿/已提交的会诊,且没有已作废的会诊,提示不可删除
|
||||
if (normalDraftConsultations.length == 0 && cancelledConsultations.length == 0) {
|
||||
console.log('BugFix#219: 没有符合条件的会诊医嘱可删除');
|
||||
proxy.$modal.msgWarning('所选会诊医嘱不可删除');
|
||||
}
|
||||
@@ -2070,14 +2093,39 @@ function handleDelete() {
|
||||
|
||||
let deleteList = [];
|
||||
let sum = 0; // 未保存总数量
|
||||
|
||||
// 🔧 BugFix: 添加调试日志
|
||||
console.log('BugFix#219: 普通医嘱删除处理, normalRows=', normalRows.map(item => ({
|
||||
adviceType: item.adviceType,
|
||||
statusEnum: item.statusEnum,
|
||||
requestId: item.requestId,
|
||||
adviceName: item.adviceName,
|
||||
uniqueKey: item.uniqueKey
|
||||
})));
|
||||
|
||||
console.log('BugFix#219: prescriptionList 中的所有医嘱=', prescriptionList.value.map(item => ({
|
||||
adviceType: item.adviceType,
|
||||
statusEnum: item.statusEnum,
|
||||
adviceName: item.adviceName,
|
||||
uniqueKey: item.uniqueKey
|
||||
})));
|
||||
|
||||
for (let i = prescriptionList.value.length - 1; i >= 0; i--) {
|
||||
let deleteItem = prescriptionList.value[i];
|
||||
let index = normalRows.findIndex((item) => item.uniqueKey === deleteItem.uniqueKey);
|
||||
// 🔧 BugFix: 添加调试日志
|
||||
if (index != -1) {
|
||||
console.log('BugFix#219: 找到匹配的医嘱, i=', i, 'uniqueKey=', deleteItem.uniqueKey,
|
||||
'statusEnum=', deleteItem.statusEnum, 'requestId=', deleteItem.requestId);
|
||||
}
|
||||
// 通过requestId判断是否已保存,如果选中项未保存 直接从数组中移除,如果已保存,调接口删除
|
||||
if (index != -1 && deleteItem.statusEnum == 1 && !deleteItem.requestId) {
|
||||
// 🔧 BugFix: 放宽条件,支持 statusEnum 为 1(草稿) 或 2(待签发/已签发) 的医嘱都可以删除
|
||||
if (index != -1 && (deleteItem.statusEnum == 1 || deleteItem.statusEnum == 2) && !deleteItem.requestId) {
|
||||
console.log('BugFix#219: 删除未保存的医嘱, i=', i);
|
||||
prescriptionList.value.splice(i, 1);
|
||||
sum++;
|
||||
} else if (index != -1 && deleteItem.statusEnum == 1 && deleteItem.requestId) {
|
||||
} else if (index != -1 && (deleteItem.statusEnum == 1 || deleteItem.statusEnum == 2) && deleteItem.requestId) {
|
||||
console.log('BugFix#219: 添加到删除列表, requestId=', deleteItem.requestId);
|
||||
deleteList.push({
|
||||
requestId: deleteItem.requestId,
|
||||
dbOpType: '3',
|
||||
@@ -2087,6 +2135,9 @@ function handleDelete() {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
console.log('BugFix#219: 普通医嘱删除列表, deleteList=', deleteList.length, 'sum=', sum);
|
||||
|
||||
handleEmrTreatment();
|
||||
updateExpandOrder([]);
|
||||
isAdding.value = false;
|
||||
@@ -3436,10 +3487,29 @@ function handleSingOut() {
|
||||
let submittedConsultations = consultationRows.filter(item => item.requestId);
|
||||
console.log('BugFix#219: 可处理的会诊医嘱=', submittedConsultations.length);
|
||||
|
||||
// 处理草稿状态的会诊(直接作废)
|
||||
if (submittedConsultations.length > 0) {
|
||||
console.log('BugFix#219: 开始处理会诊医嘱, 数量=', submittedConsultations.length);
|
||||
let processPromises = submittedConsultations.map(item => {
|
||||
// 🔧 BugFix: 分离已作废的会诊医嘱
|
||||
let cancelledConsultations = submittedConsultations.filter(item => item.statusEnum == 5); // 已作废
|
||||
let normalConsultations = submittedConsultations.filter(item => item.statusEnum != 5); // 其他状态
|
||||
|
||||
console.log('BugFix#219: cancelledConsultations=', cancelledConsultations.length, 'normalConsultations=', normalConsultations.length);
|
||||
|
||||
// 处理已作废的会诊医嘱(直接从前端列表移除)
|
||||
if (cancelledConsultations.length > 0) {
|
||||
console.log('BugFix#219: 已作废的会诊医嘱直接从前端移除');
|
||||
cancelledConsultations.forEach(item => {
|
||||
const index = prescriptionList.value.findIndex(p => p.uniqueKey === item.uniqueKey);
|
||||
if (index !== -1) {
|
||||
console.log('BugFix#219: 从列表中移除已作废会诊医嘱, index=', index, 'adviceName=', item.adviceName);
|
||||
prescriptionList.value.splice(index, 1);
|
||||
}
|
||||
});
|
||||
proxy.$modal.msgSuccess('会诊申请已移除');
|
||||
}
|
||||
|
||||
// 处理草稿/已提交的会诊医嘱(需要调用后端API)
|
||||
if (normalConsultations.length > 0) {
|
||||
console.log('BugFix#219: 开始处理会诊医嘱, 数量=', normalConsultations.length);
|
||||
let processPromises = normalConsultations.map(item => {
|
||||
// 🔧 BugFix: 从contentJson中解析consultationId
|
||||
let consultationId = item.requestId;
|
||||
try {
|
||||
@@ -3481,7 +3551,7 @@ function handleSingOut() {
|
||||
if (successCount > 0) {
|
||||
console.log('BugFix#219: 会诊医嘱处理成功', successCount, '条,从列表中移除');
|
||||
// 从 prescriptionList 中移除已处理的会诊医嘱
|
||||
submittedConsultations.forEach(item => {
|
||||
normalConsultations.forEach(item => {
|
||||
const index = prescriptionList.value.findIndex(p => p.uniqueKey === item.uniqueKey);
|
||||
if (index !== -1) {
|
||||
console.log('BugFix#219: 从列表中移除会诊医嘱, index=', index, 'adviceName=', item.adviceName);
|
||||
@@ -3491,7 +3561,10 @@ function handleSingOut() {
|
||||
}
|
||||
getListInfo(false);
|
||||
});
|
||||
} else {
|
||||
}
|
||||
|
||||
// 如果没有可处理的会诊,且没有已作废的会诊,提示不可撤回
|
||||
if (normalConsultations.length == 0 && cancelledConsultations.length == 0) {
|
||||
console.log('BugFix#219: 没有可处理的会诊医嘱');
|
||||
proxy.$modal.msgWarning('所选会诊医嘱不可撤回');
|
||||
}
|
||||
@@ -3505,10 +3578,21 @@ function handleSingOut() {
|
||||
|
||||
// 处理普通医嘱撤回
|
||||
if (normalRows.length > 0) {
|
||||
// 🔧 BugFix: 添加调试日志
|
||||
console.log('BugFix#219: 普通医嘱撤回处理, normalRows=', normalRows.map(item => ({
|
||||
adviceType: item.adviceType,
|
||||
statusEnum: item.statusEnum,
|
||||
requestId: item.requestId,
|
||||
adviceName: item.adviceName
|
||||
})));
|
||||
|
||||
// 🔧 BugFix: 放宽条件,支持 statusEnum 为 1(草稿) 或 2(已签发) 的医嘱都可以撤回
|
||||
let requestIdList = normalRows
|
||||
.filter((item) => item.statusEnum == 2)
|
||||
.filter((item) => item.statusEnum == 1 || item.statusEnum == 2)
|
||||
.map((item) => item.requestId);
|
||||
|
||||
console.log('BugFix#219: 可撤回的普通医嘱, requestIdList=', requestIdList);
|
||||
|
||||
if (requestIdList.length == 0) {
|
||||
proxy.$modal.msgWarning('所选普通医嘱无可撤回项');
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user