fix(#613): 请修复 Bug #613:【医嘱校对/住院医生工作站】医嘱“退回”流程缺失反馈机制:护士端退回无原因录入,医生端缺失原因显示
根因: - Bug #请修复 Bug #613 存在的问题 修复: - 后端修复完成。共修改 13 个文件,打通了从护士端退回 → Service 写入 backReason/reasonText → 医生端 Mapper 查询展示的完整数据链路。编译验证通过。
This commit is contained in:
@@ -36,4 +36,7 @@ public class PerformInfoDto {
|
|||||||
/** 分组id */
|
/** 分组id */
|
||||||
@JsonSerialize(using = ToStringSerializer.class)
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
private Long groupId;
|
private Long groupId;
|
||||||
|
|
||||||
|
/** 退回原因 */
|
||||||
|
private String backReason;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2286,7 +2286,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
|||||||
log.info("BugFix: signOffAdvice - 签退所有请求,状态改为待签发, requestIdList={}", requestIdList);
|
log.info("BugFix: signOffAdvice - 签退所有请求,状态改为待签发, requestIdList={}", requestIdList);
|
||||||
|
|
||||||
// 尝试签退药品请求(只有存在的才会更新)
|
// 尝试签退药品请求(只有存在的才会更新)
|
||||||
iMedicationRequestService.updateDraftStatusBatch(requestIdList, null, null);
|
iMedicationRequestService.updateDraftStatusBatch(requestIdList, null, null, null);
|
||||||
// 尝试签退耗材请求(只有存在的才会更新)
|
// 尝试签退耗材请求(只有存在的才会更新)
|
||||||
iDeviceRequestService.updateDraftStatusBatch(requestIdList);
|
iDeviceRequestService.updateDraftStatusBatch(requestIdList);
|
||||||
// 尝试签退诊疗请求(只有存在的才会更新)
|
// 尝试签退诊疗请求(只有存在的才会更新)
|
||||||
|
|||||||
@@ -121,6 +121,11 @@ public class RequestBaseDto {
|
|||||||
* 请求状态
|
* 请求状态
|
||||||
*/
|
*/
|
||||||
private Integer statusEnum;
|
private Integer statusEnum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 退回原因
|
||||||
|
*/
|
||||||
|
private String reasonText;
|
||||||
private String statusEnum_enumText;
|
private String statusEnum_enumText;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ import java.time.ZoneId;
|
|||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.format.DateTimeParseException;
|
import java.time.format.DateTimeParseException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -405,15 +407,21 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
|||||||
}
|
}
|
||||||
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
|
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
|
||||||
Date checkDate = new Date();
|
Date checkDate = new Date();
|
||||||
|
// 从请求中提取退回原因(所有项目共享同一原因)
|
||||||
|
String backReason = performInfoList.stream()
|
||||||
|
.map(PerformInfoDto::getBackReason)
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
if (!serviceRequestList.isEmpty()) {
|
if (!serviceRequestList.isEmpty()) {
|
||||||
// 更新服务请求状态待发送
|
// 更新服务请求状态待发送
|
||||||
serviceRequestService.updateDraftStatus(
|
serviceRequestService.updateDraftStatus(
|
||||||
serviceRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate);
|
serviceRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate, backReason);
|
||||||
}
|
}
|
||||||
if (!medRequestList.isEmpty()) {
|
if (!medRequestList.isEmpty()) {
|
||||||
// 更新药品请求状态待发送
|
// 更新药品请求状态待发送
|
||||||
medicationRequestService.updateDraftStatusBatch(
|
medicationRequestService.updateDraftStatusBatch(
|
||||||
medRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate);
|
medRequestList.stream().map(PerformInfoDto::getRequestId).toList(), practitionerId, checkDate, backReason);
|
||||||
}
|
}
|
||||||
return R.ok(null, "退回成功");
|
return R.ok(null, "退回成功");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ public class OutpatientInfusionAppServiceImpl implements IOutpatientInfusionAppS
|
|||||||
}
|
}
|
||||||
boolean result = serviceRequestService.updateCancelledStatus(serviceReqId, now, practitionerId, orgId);
|
boolean result = serviceRequestService.updateCancelledStatus(serviceReqId, now, practitionerId, orgId);
|
||||||
// 更新主服务请求状态为待执行
|
// 更新主服务请求状态为待执行
|
||||||
serviceRequestService.updateDraftStatus(List.of(serviceRequest.getBasedOnId()), null, null);
|
serviceRequestService.updateDraftStatus(List.of(serviceRequest.getBasedOnId()), null, null, null);
|
||||||
if (result) {
|
if (result) {
|
||||||
// 判断是否全部取消执行
|
// 判断是否全部取消执行
|
||||||
boolean exists = serviceRequestMapper.exists(new LambdaQueryWrapper<ServiceRequest>()
|
boolean exists = serviceRequestMapper.exists(new LambdaQueryWrapper<ServiceRequest>()
|
||||||
|
|||||||
@@ -1016,7 +1016,7 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
|
|||||||
}
|
}
|
||||||
if (!medicineRequestIds.isEmpty()) {
|
if (!medicineRequestIds.isEmpty()) {
|
||||||
// 根据请求id更新请求状态
|
// 根据请求id更新请求状态
|
||||||
iMedicationRequestService.updateDraftStatusBatch(medicineRequestIds, null, null);
|
iMedicationRequestService.updateDraftStatusBatch(medicineRequestIds, null, null, null);
|
||||||
}
|
}
|
||||||
if (!activityRequestIds.isEmpty()) {
|
if (!activityRequestIds.isEmpty()) {
|
||||||
// 根据请求id更新请求状态
|
// 根据请求id更新请求状态
|
||||||
|
|||||||
@@ -516,6 +516,7 @@
|
|||||||
T1.patient_id AS patient_id,
|
T1.patient_id AS patient_id,
|
||||||
'med_medication_definition' AS advice_table_name,
|
'med_medication_definition' AS advice_table_name,
|
||||||
T1.medication_id AS advice_definition_id
|
T1.medication_id AS advice_definition_id
|
||||||
|
, T1.back_reason AS reason_text
|
||||||
FROM med_medication_request AS T1
|
FROM med_medication_request AS T1
|
||||||
LEFT JOIN med_medication_definition AS T2 ON T2.ID = T1.medication_id
|
LEFT JOIN med_medication_definition AS T2 ON T2.ID = T1.medication_id
|
||||||
AND T2.delete_flag = '0'
|
AND T2.delete_flag = '0'
|
||||||
@@ -577,6 +578,7 @@
|
|||||||
T1.patient_id AS patient_id,
|
T1.patient_id AS patient_id,
|
||||||
'med_medication_definition' AS advice_table_name,
|
'med_medication_definition' AS advice_table_name,
|
||||||
T3.ID AS advice_definition_id
|
T3.ID AS advice_definition_id
|
||||||
|
, T2.back_reason AS reason_text
|
||||||
FROM adm_charge_item AS T1
|
FROM adm_charge_item AS T1
|
||||||
INNER JOIN med_medication_request AS T2 ON T2.ID = T1.service_id AND T2.delete_flag = '0'
|
INNER JOIN med_medication_request AS T2 ON T2.ID = T1.service_id AND T2.delete_flag = '0'
|
||||||
LEFT JOIN med_medication_definition AS T3 ON T3.ID = T2.medication_id AND T3.delete_flag = '0'
|
LEFT JOIN med_medication_definition AS T3 ON T3.ID = T2.medication_id AND T3.delete_flag = '0'
|
||||||
@@ -637,6 +639,7 @@
|
|||||||
CI.patient_id AS patient_id,
|
CI.patient_id AS patient_id,
|
||||||
'adm_device_definition' AS advice_table_name,
|
'adm_device_definition' AS advice_table_name,
|
||||||
CI.product_id AS advice_definition_id
|
CI.product_id AS advice_definition_id
|
||||||
|
, NULL AS reason_text
|
||||||
FROM adm_charge_item AS CI
|
FROM adm_charge_item AS CI
|
||||||
LEFT JOIN adm_charge_item_definition CID ON CID.id = CI.definition_id AND CID.delete_flag = '0'
|
LEFT JOIN adm_charge_item_definition CID ON CID.id = CI.definition_id AND CID.delete_flag = '0'
|
||||||
LEFT JOIN wor_device_request DR ON DR.id = CI.service_id AND DR.delete_flag = '0'
|
LEFT JOIN wor_device_request DR ON DR.id = CI.service_id AND DR.delete_flag = '0'
|
||||||
@@ -691,6 +694,7 @@
|
|||||||
T1.patient_id AS patient_id,
|
T1.patient_id AS patient_id,
|
||||||
'adm_device_definition' AS advice_table_name,
|
'adm_device_definition' AS advice_table_name,
|
||||||
T1.device_def_id AS advice_definition_id
|
T1.device_def_id AS advice_definition_id
|
||||||
|
, NULL AS reason_text
|
||||||
FROM wor_device_request AS T1
|
FROM wor_device_request AS T1
|
||||||
LEFT JOIN adm_device_definition AS T2 ON T2.ID = T1.device_def_id
|
LEFT JOIN adm_device_definition AS T2 ON T2.ID = T1.device_def_id
|
||||||
AND T2.delete_flag = '0'
|
AND T2.delete_flag = '0'
|
||||||
@@ -747,6 +751,7 @@
|
|||||||
T1.patient_id AS patient_id,
|
T1.patient_id AS patient_id,
|
||||||
'wor_activity_definition' AS advice_table_name,
|
'wor_activity_definition' AS advice_table_name,
|
||||||
T1.activity_id AS advice_definition_id
|
T1.activity_id AS advice_definition_id
|
||||||
|
, T1.reason_text AS reason_text
|
||||||
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
|
||||||
|
|||||||
@@ -111,6 +111,9 @@ public class MedicationRequest extends HisBaseEntity {
|
|||||||
/** 支持用药信息 */
|
/** 支持用药信息 */
|
||||||
private String supportInfo;
|
private String supportInfo;
|
||||||
|
|
||||||
|
/** 退回原因 */
|
||||||
|
private String backReason;
|
||||||
|
|
||||||
/** 请求开始时间 */
|
/** 请求开始时间 */
|
||||||
private Date reqAuthoredTime;
|
private Date reqAuthoredTime;
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public interface IMedicationRequestService extends IService<MedicationRequest> {
|
|||||||
* @param practitionerId 校对人
|
* @param practitionerId 校对人
|
||||||
* @param checkDate 校对时间
|
* @param checkDate 校对时间
|
||||||
*/
|
*/
|
||||||
void updateDraftStatusBatch(List<Long> requestIdList, Long practitionerId, Date checkDate);
|
void updateDraftStatusBatch(List<Long> requestIdList, Long practitionerId, Date checkDate, String backReason);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新请求状态:取消
|
* 更新请求状态:取消
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class MedicationRequestServiceImpl extends ServiceImpl<MedicationRequestM
|
|||||||
* @param checkDate 校对时间
|
* @param checkDate 校对时间
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void updateDraftStatusBatch(List<Long> requestIdList, Long practitionerId, Date checkDate) {
|
public void updateDraftStatusBatch(List<Long> requestIdList, Long practitionerId, Date checkDate, String backReason) {
|
||||||
LambdaUpdateWrapper<MedicationRequest> updateWrapper =
|
LambdaUpdateWrapper<MedicationRequest> updateWrapper =
|
||||||
new LambdaUpdateWrapper<MedicationRequest>().in(MedicationRequest::getId, requestIdList)
|
new LambdaUpdateWrapper<MedicationRequest>().in(MedicationRequest::getId, requestIdList)
|
||||||
.set(MedicationRequest::getStatusEnum, RequestStatus.DRAFT.getValue());
|
.set(MedicationRequest::getStatusEnum, RequestStatus.DRAFT.getValue());
|
||||||
@@ -54,6 +54,9 @@ public class MedicationRequestServiceImpl extends ServiceImpl<MedicationRequestM
|
|||||||
if (checkDate != null) {
|
if (checkDate != null) {
|
||||||
updateWrapper.set(MedicationRequest::getCheckTime, checkDate);
|
updateWrapper.set(MedicationRequest::getCheckTime, checkDate);
|
||||||
}
|
}
|
||||||
|
if (backReason != null) {
|
||||||
|
updateWrapper.set(MedicationRequest::getBackReason, backReason);
|
||||||
|
}
|
||||||
baseMapper.update(null, updateWrapper);
|
baseMapper.update(null, updateWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ public interface IServiceRequestService extends IService<ServiceRequest> {
|
|||||||
* @param practitionerId 校对人
|
* @param practitionerId 校对人
|
||||||
* @param checkDate 校对时间
|
* @param checkDate 校对时间
|
||||||
*/
|
*/
|
||||||
void updateDraftStatus(List<Long> serviceRequestIdList, Long practitionerId, Date checkDate);
|
void updateDraftStatus(List<Long> serviceRequestIdList, Long practitionerId, Date checkDate, String backReason);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新服务状态:待发送
|
* 更新服务状态:待发送
|
||||||
|
|||||||
@@ -172,9 +172,15 @@ public class ServiceRequestServiceImpl extends ServiceImpl<ServiceRequestMapper,
|
|||||||
* @param checkDate 校对时间
|
* @param checkDate 校对时间
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void updateDraftStatus(List<Long> serviceRequestIdList, Long practitionerId, Date checkDate) {
|
public void updateDraftStatus(List<Long> serviceRequestIdList, Long practitionerId, Date checkDate, String backReason) {
|
||||||
baseMapper.update(new ServiceRequest().setStatusEnum(RequestStatus.DRAFT.getValue())
|
ServiceRequest updateEntity = new ServiceRequest()
|
||||||
.setPerformerCheckId(SecurityUtils.getLoginUser().getPractitionerId()).setCheckTime(DateUtils.getNowDate()),
|
.setStatusEnum(RequestStatus.DRAFT.getValue())
|
||||||
|
.setPerformerCheckId(SecurityUtils.getLoginUser().getPractitionerId())
|
||||||
|
.setCheckTime(DateUtils.getNowDate());
|
||||||
|
if (backReason != null && !backReason.isEmpty()) {
|
||||||
|
updateEntity.setReasonText(backReason);
|
||||||
|
}
|
||||||
|
baseMapper.update(updateEntity,
|
||||||
new LambdaUpdateWrapper<ServiceRequest>().in(ServiceRequest::getId, serviceRequestIdList)
|
new LambdaUpdateWrapper<ServiceRequest>().in(ServiceRequest::getId, serviceRequestIdList)
|
||||||
.eq(ServiceRequest::getDeleteFlag, DelFlag.NO.getCode()));
|
.eq(ServiceRequest::getDeleteFlag, DelFlag.NO.getCode()));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
-- Bug #613: 医嘱退回流程 — med_medication_request 表缺少退回原因字段
|
||||||
|
-- 执行前检查:如果列已存在则跳过
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1 FROM information_schema.columns
|
||||||
|
WHERE table_name = 'med_medication_request' AND column_name = 'back_reason'
|
||||||
|
) THEN
|
||||||
|
ALTER TABLE med_medication_request ADD COLUMN back_reason VARCHAR(500) DEFAULT NULL;
|
||||||
|
COMMENT ON COLUMN med_medication_request.back_reason IS '退回原因';
|
||||||
|
END IF;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
Reference in New Issue
Block a user