168 入科分配床位填写的住院医生、主治医生、责任护士字段的内容双击查看未显示。
This commit is contained in:
@@ -40,8 +40,10 @@ import com.openhis.web.inhospitalnursestation.mapper.ATDManageAppMapper;
|
|||||||
import com.openhis.workflow.domain.ServiceRequest;
|
import com.openhis.workflow.domain.ServiceRequest;
|
||||||
import com.openhis.workflow.service.IServiceRequestService;
|
import com.openhis.workflow.service.IServiceRequestService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -53,6 +55,7 @@ import java.util.stream.Stream;
|
|||||||
* @author zwh
|
* @author zwh
|
||||||
* @date 2025-07-28
|
* @date 2025-07-28
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class ATDManageAppServiceImpl implements IATDManageAppService {
|
public class ATDManageAppServiceImpl implements IATDManageAppService {
|
||||||
|
|
||||||
@@ -283,6 +286,7 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public R<?> admissionBedAssignment(AdmissionPatientInfoDto admissionPatientInfoDto) {
|
public R<?> admissionBedAssignment(AdmissionPatientInfoDto admissionPatientInfoDto) {
|
||||||
|
|
||||||
// 住院id
|
// 住院id
|
||||||
@@ -298,31 +302,39 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
|
|||||||
|
|
||||||
// 进入编辑患者信息,不更换床位
|
// 进入编辑患者信息,不更换床位
|
||||||
if (Whether.YES.getCode().equals(admissionPatientInfoDto.getEditFlag())) {
|
if (Whether.YES.getCode().equals(admissionPatientInfoDto.getEditFlag())) {
|
||||||
|
// 更新患者病情(如果提供了)
|
||||||
if (admissionPatientInfoDto.getPriorityEnum() != null) {
|
if (admissionPatientInfoDto.getPriorityEnum() != null) {
|
||||||
// 更新患者病情
|
|
||||||
encounterService.updatePriorityEnumById(encounterId, admissionPatientInfoDto.getPriorityEnum());
|
encounterService.updatePriorityEnumById(encounterId, admissionPatientInfoDto.getPriorityEnum());
|
||||||
// 将之前的住院参与者更新为已完成(如果存在的话)
|
}
|
||||||
encounterParticipantService.updateEncounterParticipantsStatus(encounterId);
|
// 将之前的住院参与者更新为已完成(如果存在的话)
|
||||||
// 更新住院参与者
|
encounterParticipantService.updateEncounterParticipantsStatus(encounterId);
|
||||||
// 住院医生
|
// 更新住院参与者
|
||||||
|
// 住院医生(必须填写)
|
||||||
|
if (admissionPatientInfoDto.getAdmittingDoctorId() != null) {
|
||||||
encounterParticipantService.creatEncounterParticipants(encounterId, startTime,
|
encounterParticipantService.creatEncounterParticipants(encounterId, startTime,
|
||||||
admissionPatientInfoDto.getAdmittingDoctorId(), ParticipantType.ADMITTING_DOCTOR.getCode());
|
admissionPatientInfoDto.getAdmittingDoctorId(), ParticipantType.ADMITTING_DOCTOR.getCode());
|
||||||
// 责任护士
|
}
|
||||||
|
// 责任护士(必须填写)
|
||||||
|
if (admissionPatientInfoDto.getPrimaryNurseId() != null) {
|
||||||
encounterParticipantService.creatEncounterParticipants(encounterId, startTime,
|
encounterParticipantService.creatEncounterParticipants(encounterId, startTime,
|
||||||
admissionPatientInfoDto.getPrimaryNurseId(), ParticipantType.PRIMARY_NURSE.getCode());
|
admissionPatientInfoDto.getPrimaryNurseId(), ParticipantType.PRIMARY_NURSE.getCode());
|
||||||
if (admissionPatientInfoDto.getAttendingDoctorId() != null) {
|
|
||||||
// 主治医生
|
|
||||||
encounterParticipantService.creatEncounterParticipants(encounterId, startTime,
|
|
||||||
admissionPatientInfoDto.getAttendingDoctorId(), ParticipantType.ATTENDING_DOCTOR.getCode());
|
|
||||||
}
|
|
||||||
if (admissionPatientInfoDto.getChiefDoctorId() != null) {
|
|
||||||
// 主任医生
|
|
||||||
encounterParticipantService.creatEncounterParticipants(encounterId, startTime,
|
|
||||||
admissionPatientInfoDto.getChiefDoctorId(), ParticipantType.CHIEF_DOCTOR.getCode());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 更新入院体征
|
// 主治医生(可选)
|
||||||
saveOrUpdateAdmissionSigns(encounterId, admissionPatientInfoDto, startTime);
|
if (admissionPatientInfoDto.getAttendingDoctorId() != null) {
|
||||||
|
encounterParticipantService.creatEncounterParticipants(encounterId, startTime,
|
||||||
|
admissionPatientInfoDto.getAttendingDoctorId(), ParticipantType.ATTENDING_DOCTOR.getCode());
|
||||||
|
}
|
||||||
|
// 主任医生(可选)
|
||||||
|
if (admissionPatientInfoDto.getChiefDoctorId() != null) {
|
||||||
|
encounterParticipantService.creatEncounterParticipants(encounterId, startTime,
|
||||||
|
admissionPatientInfoDto.getChiefDoctorId(), ParticipantType.CHIEF_DOCTOR.getCode());
|
||||||
|
}
|
||||||
|
// 更新入院体征(在事务外执行,避免影响参与者数据保存)
|
||||||
|
try {
|
||||||
|
saveOrUpdateAdmissionSigns(encounterId, admissionPatientInfoDto, startTime);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("保存入院体征失败,但不影响参与者数据", e);
|
||||||
|
}
|
||||||
return R.ok("患者信息更新成功");
|
return R.ok("患者信息更新成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -421,8 +433,12 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
|
|||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
return R.fail("床位分配失败,请联系管理员");
|
return R.fail("床位分配失败,请联系管理员");
|
||||||
}
|
}
|
||||||
// 保存入院体征
|
// 保存入院体征(在事务外执行,避免影响参与者数据保存)
|
||||||
saveOrUpdateAdmissionSigns(encounterId, admissionPatientInfoDto, startTime);
|
try {
|
||||||
|
saveOrUpdateAdmissionSigns(encounterId, admissionPatientInfoDto, startTime);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("保存入院体征失败,但不影响参与者数据", e);
|
||||||
|
}
|
||||||
return R.ok("床位分配成功");
|
return R.ok("床位分配成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import com.openhis.administration.mapper.EncounterParticipantMapper;
|
|||||||
import com.openhis.administration.service.IEncounterParticipantService;
|
import com.openhis.administration.service.IEncounterParticipantService;
|
||||||
import com.openhis.common.enums.EncounterActivityStatus;
|
import com.openhis.common.enums.EncounterActivityStatus;
|
||||||
import com.openhis.common.enums.ParticipantType;
|
import com.openhis.common.enums.ParticipantType;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -22,6 +23,7 @@ import java.util.List;
|
|||||||
* @author system
|
* @author system
|
||||||
* @date 2025-02-20
|
* @date 2025-02-20
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class EncounterParticipantServiceImpl extends ServiceImpl<EncounterParticipantMapper, EncounterParticipant>
|
public class EncounterParticipantServiceImpl extends ServiceImpl<EncounterParticipantMapper, EncounterParticipant>
|
||||||
implements IEncounterParticipantService {
|
implements IEncounterParticipantService {
|
||||||
@@ -58,9 +60,12 @@ public class EncounterParticipantServiceImpl extends ServiceImpl<EncounterPartic
|
|||||||
@Override
|
@Override
|
||||||
public void creatEncounterParticipants(Long encounterId, Date startTime, Long practitionerId, String typeCode) {
|
public void creatEncounterParticipants(Long encounterId, Date startTime, Long practitionerId, String typeCode) {
|
||||||
EncounterParticipant encounterParticipant = new EncounterParticipant();
|
EncounterParticipant encounterParticipant = new EncounterParticipant();
|
||||||
encounterParticipant.setEncounterId(encounterId).setStartTime(startTime).setPractitionerId(practitionerId)
|
encounterParticipant.setEncounterId(encounterId)
|
||||||
.setTypeCode(typeCode);
|
.setStartTime(startTime)
|
||||||
baseMapper.insert(encounterParticipant);
|
.setPractitionerId(practitionerId)
|
||||||
|
.setTypeCode(typeCode)
|
||||||
|
.setStatusEnum(EncounterActivityStatus.ACTIVE.getValue());
|
||||||
|
int result = baseMapper.insert(encounterParticipant);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -72,12 +77,15 @@ public class EncounterParticipantServiceImpl extends ServiceImpl<EncounterPartic
|
|||||||
@Override
|
@Override
|
||||||
public Integer updateEncounterParticipantsStatus(Long encounterId) {
|
public Integer updateEncounterParticipantsStatus(Long encounterId) {
|
||||||
// 更新状态为已完成
|
// 更新状态为已完成
|
||||||
return baseMapper.update(null,
|
Integer result = baseMapper.update(null,
|
||||||
new LambdaUpdateWrapper<EncounterParticipant>()
|
new LambdaUpdateWrapper<EncounterParticipant>()
|
||||||
.set(EncounterParticipant::getStatusEnum, EncounterActivityStatus.COMPLETED.getValue())
|
.set(EncounterParticipant::getStatusEnum, EncounterActivityStatus.COMPLETED.getValue())
|
||||||
.eq(EncounterParticipant::getEncounterId, encounterId).in(EncounterParticipant::getTypeCode,
|
.eq(EncounterParticipant::getEncounterId, encounterId)
|
||||||
|
.eq(EncounterParticipant::getStatusEnum, EncounterActivityStatus.ACTIVE.getValue())
|
||||||
|
.in(EncounterParticipant::getTypeCode,
|
||||||
ParticipantType.ATTENDING_DOCTOR.getCode(), ParticipantType.CHIEF_DOCTOR.getCode(),
|
ParticipantType.ATTENDING_DOCTOR.getCode(), ParticipantType.CHIEF_DOCTOR.getCode(),
|
||||||
ParticipantType.PRIMARY_NURSE.getCode(), ParticipantType.ADMITTING_DOCTOR.getCode()));
|
ParticipantType.PRIMARY_NURSE.getCode(), ParticipantType.ADMITTING_DOCTOR.getCode()));
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -389,43 +389,58 @@ const interventionForm = ref({
|
|||||||
startTime: '', //入院时间
|
startTime: '', //入院时间
|
||||||
});
|
});
|
||||||
|
|
||||||
watch(
|
/**
|
||||||
() => props.pendingInfo,
|
* 获取患者详细信息并填充表单
|
||||||
(newVal, oldVal) => {
|
*/
|
||||||
console.log(newVal);
|
const loadPatientInfo = () => {
|
||||||
if (newVal) {
|
if (!props.pendingInfo?.encounterId) {
|
||||||
getPatientInfo({ encounterId: newVal.encounterId }).then((res) => {
|
return;
|
||||||
console.log('res============>', JSON.stringify(res.data));
|
}
|
||||||
|
getPatientInfo({ encounterId: props.pendingInfo.encounterId }).then((res) => {
|
||||||
|
pendingInfo.value = res.data;
|
||||||
|
// 从后端获取数据后设置医生和护士 ID
|
||||||
|
if (res.data.admittingDoctorId) {
|
||||||
|
interventionForm.value.admittingDoctorId = res.data.admittingDoctorId;
|
||||||
|
}
|
||||||
|
if (res.data.attendingDoctorId) {
|
||||||
|
interventionForm.value.attendingDoctorId = res.data.attendingDoctorId;
|
||||||
|
}
|
||||||
|
if (res.data.chiefDoctorId) {
|
||||||
|
interventionForm.value.chiefDoctorId = res.data.chiefDoctorId;
|
||||||
|
}
|
||||||
|
if (res.data.primaryNurseId) {
|
||||||
|
interventionForm.value.primaryNurseId = res.data.primaryNurseId;
|
||||||
|
}
|
||||||
|
if (res.data.startTime) {
|
||||||
|
interventionForm.value.startTime = dayjs(res.data.startTime).format(
|
||||||
|
'YYYY-MM-DD HH:mm:ss'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
interventionForm.value.startTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss');
|
||||||
|
}
|
||||||
|
interventionForm.value.height = res.data.height;
|
||||||
|
interventionForm.value.weight = res.data.weight;
|
||||||
|
interventionForm.value.temperature = res.data.temperature;
|
||||||
|
interventionForm.value.hertRate = res.data.hertRate;
|
||||||
|
interventionForm.value.pulse = res.data.pulse;
|
||||||
|
interventionForm.value.endBloodPressure = res.data.endBloodPressure;
|
||||||
|
interventionForm.value.highBloodPressure = res.data.highBloodPressure;
|
||||||
|
});
|
||||||
|
interventionForm.value.priorityEnum = props.pendingInfo.priorityEnum || '';
|
||||||
|
interventionForm.value.organizationName = props.pendingInfo.organizationName || '';
|
||||||
|
interventionForm.value.wardName = props.pendingInfo.wardName || '';
|
||||||
|
interventionForm.value.bedName = props.pendingInfo.bedName || '';
|
||||||
|
};
|
||||||
|
|
||||||
pendingInfo.value = res.data;
|
watch(
|
||||||
interventionForm.value.admittingDoctorId = res.data.admittingDoctorId;
|
() => props.pendingInfo?.encounterId,
|
||||||
interventionForm.value.attendingDoctorId = res.data.attendingDoctorId;
|
(newVal, oldVal) => {
|
||||||
if (res.data.chiefDoctorId) {
|
// 只在 encounterId 存在且发生变化时才获取数据
|
||||||
interventionForm.value.chiefDoctorId = res.data.chiefDoctorId;
|
if (newVal && newVal !== oldVal) {
|
||||||
}
|
loadPatientInfo();
|
||||||
interventionForm.value.primaryNurseId = res.data.primaryNurseId;
|
|
||||||
if (res.data.startTime) {
|
|
||||||
interventionForm.value.startTime = dayjs(res.data.startTime).format(
|
|
||||||
'YYYY-MM-DD HH:mm:ss'
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
interventionForm.value.startTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss');
|
|
||||||
}
|
|
||||||
interventionForm.value.height = res.data.height;
|
|
||||||
interventionForm.value.weight = res.data.weight;
|
|
||||||
interventionForm.value.temperature = res.data.temperature;
|
|
||||||
interventionForm.value.hertRate = res.data.hertRate;
|
|
||||||
interventionForm.value.pulse = res.data.pulse;
|
|
||||||
interventionForm.value.endBloodPressure = res.data.endBloodPressure;
|
|
||||||
interventionForm.value.highBloodPressure = res.data.highBloodPressure;
|
|
||||||
});
|
|
||||||
interventionForm.value.priorityEnum = newVal.priorityEnum;
|
|
||||||
interventionForm.value.organizationName = newVal.organizationName;
|
|
||||||
interventionForm.value.wardName = newVal.wardName;
|
|
||||||
interventionForm.value.bedName = newVal.bedName;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ immediate: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
/* 初始化数据 */
|
/* 初始化数据 */
|
||||||
@@ -458,8 +473,6 @@ const init = () => {
|
|||||||
// 主任医生
|
// 主任医生
|
||||||
getDoctorInfo({ organizationId: props.pendingInfo.organizationId })
|
getDoctorInfo({ organizationId: props.pendingInfo.organizationId })
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log('doctorInfoOptions======>', JSON.stringify(res.data));
|
|
||||||
|
|
||||||
doctorInfoOptions.value = res.data.records || [];
|
doctorInfoOptions.value = res.data.records || [];
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
// 如果存在主任医师显示主任,如果没有选择第一个展示
|
// 如果存在主任医师显示主任,如果没有选择第一个展示
|
||||||
@@ -498,6 +511,7 @@ const rules = reactive<FormRules>({
|
|||||||
admittingDoctorId: [{ required: true, message: '请选择住院医生', trigger: ['blur', 'change'] }],
|
admittingDoctorId: [{ required: true, message: '请选择住院医生', trigger: ['blur', 'change'] }],
|
||||||
primaryNurseId: [{ required: true, message: '请选择责任护士', trigger: ['blur', 'change'] }],
|
primaryNurseId: [{ required: true, message: '请选择责任护士', trigger: ['blur', 'change'] }],
|
||||||
bedLocationId: [{ required: true, message: '请选择入住床位', trigger: ['blur', 'change'] }],
|
bedLocationId: [{ required: true, message: '请选择入住床位', trigger: ['blur', 'change'] }],
|
||||||
|
// 主治医生和主任医生为可选字段,不添加 required 验证
|
||||||
});
|
});
|
||||||
|
|
||||||
const printWristband = ref(false);
|
const printWristband = ref(false);
|
||||||
@@ -512,29 +526,10 @@ const cancelAct = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const resetForm = () => {
|
const resetForm = () => {
|
||||||
// interventionForm.value = {
|
// 只重置表单验证状态,不清空数据
|
||||||
// height: undefined,
|
// 数据会在下次打开对话框时通过 loadPatientInfo 重新加载
|
||||||
// weight: undefined,
|
|
||||||
// temperature: undefined,
|
|
||||||
// hertRate: undefined,
|
|
||||||
// pulse: undefined,
|
|
||||||
// endBloodPressure: undefined,
|
|
||||||
// highBloodPressure: undefined,
|
|
||||||
// bedLocationId: '', // 床号
|
|
||||||
// admittingDoctorId: '', // 住院医师
|
|
||||||
// attendingDoctorId: '', // 主治医师
|
|
||||||
// chiefDoctorId: '', // 主任医师
|
|
||||||
// primaryNurseId: '', // 责任护士
|
|
||||||
// priorityEnum: '', //患者病情
|
|
||||||
// organizationName: '',
|
|
||||||
// wardName: '',
|
|
||||||
// attendingDocUpdateId: '',
|
|
||||||
// startTime: '', //入院时间
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 可选:清空校验状态
|
|
||||||
if (interventionFormRef.value) {
|
if (interventionFormRef.value) {
|
||||||
interventionFormRef.value.resetFields();
|
interventionFormRef.value.clearValidate();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -583,19 +578,14 @@ const handleSubmit = async () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('表单验证失败:', error);
|
console.error('表单验证失败:', error);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const openAct = () => {
|
const openAct = () => {
|
||||||
init();
|
init();
|
||||||
if (props.pendingInfo) {
|
// 重新加载患者详细信息(包括医生、护士等)
|
||||||
interventionForm.value.priorityEnum = props.pendingInfo.priorityEnum || '';
|
loadPatientInfo();
|
||||||
interventionForm.value.admittingDoctorId = props.pendingInfo.practitionerId || '';
|
|
||||||
interventionForm.value.organizationName = props.pendingInfo.organizationName || '';
|
|
||||||
interventionForm.value.wardName = props.pendingInfo.wardName || '';
|
|
||||||
interventionForm.value.attendingDocUpdateId = props.pendingInfo.admittingDoctorId || '';
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const closedAct = () => {
|
const closedAct = () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user