bug 349 350 351 354 356 357
This commit is contained in:
@@ -134,7 +134,7 @@ public class DoctorScheduleAppServiceImpl implements IDoctorScheduleAppService {
|
||||
|
||||
if (poolSaved) {
|
||||
// 创建号源槽
|
||||
List<ScheduleSlot> slots = createScheduleSlots(pool.getId().intValue(), newSchedule.getLimitNumber(),
|
||||
List<ScheduleSlot> slots = createScheduleSlots(pool.getId(), newSchedule.getLimitNumber(),
|
||||
newSchedule.getStartTime(), newSchedule.getEndTime());
|
||||
boolean slotsSaved = scheduleSlotService.saveBatch(slots);
|
||||
|
||||
@@ -224,7 +224,7 @@ public class DoctorScheduleAppServiceImpl implements IDoctorScheduleAppService {
|
||||
|
||||
if (poolSaved) {
|
||||
// 创建号源槽
|
||||
List<ScheduleSlot> slots = createScheduleSlots(pool.getId().intValue(), newSchedule.getLimitNumber(),
|
||||
List<ScheduleSlot> slots = createScheduleSlots(pool.getId(), newSchedule.getLimitNumber(),
|
||||
newSchedule.getStartTime(), newSchedule.getEndTime());
|
||||
boolean slotsSaved = scheduleSlotService.saveBatch(slots);
|
||||
|
||||
@@ -384,7 +384,7 @@ public class DoctorScheduleAppServiceImpl implements IDoctorScheduleAppService {
|
||||
/**
|
||||
* 创建号源槽
|
||||
*/
|
||||
private List<ScheduleSlot> createScheduleSlots(Integer poolId, Integer limitNumber, LocalTime startTime,
|
||||
private List<ScheduleSlot> createScheduleSlots(Long poolId, Integer limitNumber, LocalTime startTime,
|
||||
LocalTime endTime) {
|
||||
List<ScheduleSlot> slots = new ArrayList<>();
|
||||
|
||||
@@ -514,7 +514,7 @@ public class DoctorScheduleAppServiceImpl implements IDoctorScheduleAppService {
|
||||
.in("pool_id", poolIds));
|
||||
|
||||
if (ObjectUtil.isNotEmpty(slots)) {
|
||||
List<Integer> slotIds = slots.stream().map(ScheduleSlot::getId)
|
||||
List<Long> slotIds = slots.stream().map(ScheduleSlot::getId)
|
||||
.collect(java.util.stream.Collectors.toList());
|
||||
// 3. 逻辑删除所有号源槽
|
||||
scheduleSlotService.removeByIds(slotIds);
|
||||
|
||||
@@ -581,8 +581,33 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
.collect(Collectors.groupingBy(Practitioner::getOrgId));
|
||||
|
||||
// 构建树形结构
|
||||
// 过滤条件:科室分类只要包含"门诊(编码1)"或"住院(编码2)"其一,即可显示
|
||||
List<DepartmentTreeDto> treeList = new ArrayList<>();
|
||||
for (Organization dept : deptList) {
|
||||
// 过滤科室:只显示包含门诊(1)或住院(2)分类的科室
|
||||
String classEnum = dept.getClassEnum();
|
||||
boolean needShow = false;
|
||||
|
||||
if (classEnum != null && !classEnum.isEmpty()) {
|
||||
// 拆分分类编码,检查是否包含 1 或 2
|
||||
String[] codes = classEnum.split(",");
|
||||
for (String code : codes) {
|
||||
code = code.trim();
|
||||
if ("1".equals(code) || "2".equals(code)) {
|
||||
needShow = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 如果没有分类,默认显示
|
||||
needShow = true;
|
||||
}
|
||||
|
||||
if (!needShow) {
|
||||
// 既不包含门诊也不包含住院,跳过
|
||||
continue;
|
||||
}
|
||||
|
||||
DepartmentTreeDto treeDto = new DepartmentTreeDto();
|
||||
treeDto.setId(dept.getId());
|
||||
treeDto.setLabel(dept.getName());
|
||||
@@ -599,12 +624,11 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
treeDto.setChildren(children);
|
||||
} else {
|
||||
treeDto.setChildren(new ArrayList<>());
|
||||
}
|
||||
|
||||
// 只添加有医生的科室
|
||||
treeList.add(treeDto);
|
||||
}
|
||||
// 没有医生的科室不添加到列表中
|
||||
}
|
||||
|
||||
|
||||
return treeList;
|
||||
@@ -1340,9 +1364,13 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
throw new IllegalArgumentException("会诊申请不存在");
|
||||
}
|
||||
|
||||
// 只有已提交状态才能确认
|
||||
if (request.getConsultationStatus() != ConsultationStatusEnum.SUBMITTED.getCode()) {
|
||||
throw new IllegalArgumentException("只有已提交状态的会诊申请才能确认");
|
||||
// 会诊必须处于已提交或已确认状态才能确认
|
||||
// - 已提交(10):还没有医生确认
|
||||
// - 已确认(20):已有部分医生确认,允许其他医生继续确认(每个医生独立确认,类似已读)
|
||||
// - 已签名(30)或已完成(40):不能再确认
|
||||
if (request.getConsultationStatus() != null &&
|
||||
request.getConsultationStatus() >= ConsultationStatusEnum.SIGNED.getCode()) {
|
||||
throw new IllegalArgumentException("会诊已签名或完成,无法再确认");
|
||||
}
|
||||
|
||||
// 2. 获取当前登录医生信息
|
||||
@@ -1360,26 +1388,20 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
throw new IllegalArgumentException("您不在被邀请的医生列表中");
|
||||
}
|
||||
|
||||
log.info("会诊确认检查:currentPhysicianId={}, invitedId={}, invitedStatus={}, CONFIRMED.code={}",
|
||||
currentPhysicianId, invited.getId(), invited.getInvitedStatus(), ConsultationStatusEnum.CONFIRMED.getCode());
|
||||
if (invited.getInvitedStatus() != null && invited.getInvitedStatus() >= ConsultationStatusEnum.CONFIRMED.getCode()) {
|
||||
throw new IllegalArgumentException("您已经确认过了,无需重复确认");
|
||||
}
|
||||
|
||||
// 4. 更新邀请记录(存储会诊意见)
|
||||
// 格式:科室-会诊确认参加医师:意见内容
|
||||
// 兼容:若前端未填写“会诊确认参加医师”,则回退为当前医生姓名
|
||||
String confirmingPhysicianText =
|
||||
StringUtils.hasText(dto.getConfirmingPhysician()) ? dto.getConfirmingPhysician().trim() : currentPhysicianName;
|
||||
String formattedOpinion = String.format("%s-%s:%s",
|
||||
currentDeptName,
|
||||
confirmingPhysicianText,
|
||||
dto.getConsultationOpinion());
|
||||
|
||||
// 直接存储用户输入的原始意见内容,不添加医师姓名前缀
|
||||
invited.setInvitedStatus(ConsultationStatusEnum.CONFIRMED.getCode()); // 已确认
|
||||
invited.setConfirmOpinion(formattedOpinion);
|
||||
invited.setConfirmOpinion(dto.getConsultationOpinion()); // 直接存储原始意见,不添加前缀
|
||||
invited.setConfirmTime(new Date());
|
||||
consultationInvitedMapper.updateById(invited);
|
||||
|
||||
log.info("医生 {} 确认会诊,意见:{}", currentPhysicianName, formattedOpinion);
|
||||
log.info("医生 {} 确认会诊", currentPhysicianName);
|
||||
|
||||
// 5. 更新会诊申请的确认计数
|
||||
Integer confirmedCount = (request.getConfirmedCount() == null ? 0 : request.getConfirmedCount()) + 1;
|
||||
|
||||
@@ -599,27 +599,40 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
}
|
||||
}
|
||||
|
||||
// 药品(前端adviceType=1)
|
||||
// 药品(前端adviceType=1=西药, 2=中成药 → 都属于药品后端分类)
|
||||
List<AdviceSaveDto> medicineList = adviceSaveList.stream()
|
||||
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())
|
||||
|| e.getAdviceType() == 1).collect(Collectors.toList());
|
||||
|| e.getAdviceType() == 1
|
||||
|| e.getAdviceType() == 2) // 前端中成药类型值为2 → 也属于药品分类
|
||||
.collect(Collectors.toList());
|
||||
// 耗材(前端adviceType=4,后端ItemType.DEVICE=2)
|
||||
List<AdviceSaveDto> deviceList = adviceSaveList.stream()
|
||||
.filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())
|
||||
|| e.getAdviceType() == 4) // 前端耗材类型值为4
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 诊疗活动(前端adviceType=3诊疗、adviceType=5会诊、adviceType=6手术)
|
||||
// 诊疗活动(前端adviceType=3诊疗、adviceType=5会诊、adviceType=6手术、adviceType=23检查 → 都属于诊疗后端分类)
|
||||
List<AdviceSaveDto> activityList = adviceSaveList.stream()
|
||||
.filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())
|
||||
|| e.getAdviceType() == 3 // 前端诊疗类型值为3
|
||||
|| e.getAdviceType() == 5 // 前端会诊类型值为5
|
||||
|| ItemType.SURGERY.getValue().equals(e.getAdviceType())) // 🔧 BugFix#318: 手术类型值为6
|
||||
|| e.getAdviceType() == 6 // 前端手术类型值为6
|
||||
|| e.getAdviceType() == 23 // 前端检查类型值为23
|
||||
|| ItemType.SURGERY.getValue().equals(e.getAdviceType())) // 后端手术类型值为6
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 🔍 Debug日志: 记录分类结果
|
||||
// 🔍 Debug日志日志: 记录分类结果
|
||||
log.info("BugFix#219: 医嘱分类完成 - 药品:{}, 耗材:{}, 诊疗:{}",
|
||||
medicineList.size(), deviceList.size(), activityList.size());
|
||||
// 🔍 Debug日志: 打印所有医嘱的adviceType
|
||||
for (AdviceSaveDto dto : adviceSaveList) {
|
||||
log.info("BugFix#219: 医嘱详情 - adviceType:{}, requestId:{}, adviceName:{}, dbOpType:{}",
|
||||
dto.getAdviceType(), dto.getRequestId(),
|
||||
dto.getContentJson() != null && dto.getContentJson().contains("adviceName")
|
||||
? dto.getContentJson().substring(0, Math.min(100, dto.getContentJson().length()))
|
||||
: "N/A",
|
||||
dto.getDbOpType());
|
||||
}
|
||||
|
||||
// 统计各类删除操作
|
||||
long medDeleteCount = medicineList.stream().filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).count();
|
||||
@@ -679,15 +692,110 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
|
||||
// 签发时,把草稿状态的账单更新为待收费
|
||||
if (AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType) && !adviceSaveList.isEmpty()) {
|
||||
// 签发的医嘱id集合
|
||||
// 签发的医嘱id集合 - 收集所有需要签发的医嘱ID
|
||||
List<Long> requestIds = adviceSaveList.stream()
|
||||
.filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null)
|
||||
.collect(Collectors.toList()).stream().map(AdviceSaveDto::getRequestId)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 🔧 BugFix: 批量更新药品请求状态为已签发(ACTIVE=2)
|
||||
if (!requestIds.isEmpty() && !medicineList.isEmpty()) {
|
||||
List<Long> medicineIds = medicineList.stream()
|
||||
.filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null)
|
||||
.map(AdviceSaveDto::getRequestId)
|
||||
.collect(Collectors.toList());
|
||||
if (!medicineIds.isEmpty()) {
|
||||
log.info("BugFix: 准备批量更新药品医嘱状态,medicineIds={}", medicineIds);
|
||||
UpdateWrapper<MedicationRequest> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.in("id", medicineIds);
|
||||
updateWrapper.set("status_enum", RequestStatus.ACTIVE.getValue());
|
||||
boolean updateResult = iMedicationRequestService.update(null, updateWrapper);
|
||||
log.info("BugFix: 批量更新药品医嘱状态为已签发,count={}, result={}", medicineIds.size(), updateResult);
|
||||
|
||||
// 🔧 BugFix: 如果批量更新失败,尝试逐个更新
|
||||
if (!updateResult) {
|
||||
log.warn("BugFix: 批量更新药品医嘱状态失败,尝试逐个更新");
|
||||
for (Long medicineId : medicineIds) {
|
||||
try {
|
||||
MedicationRequest updateReq = new MedicationRequest();
|
||||
updateReq.setId(medicineId);
|
||||
updateReq.setStatusEnum(RequestStatus.ACTIVE.getValue());
|
||||
boolean singleResult = iMedicationRequestService.updateById(updateReq);
|
||||
log.info("BugFix: 逐个更新药品医嘱状态,id={}, result={}", medicineId, singleResult);
|
||||
} catch (Exception e) {
|
||||
log.error("BugFix: 逐个更新药品医嘱状态失败,id={}", medicineId, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 🔧 BugFix: 批量更新耗材请求状态为已签发(ACTIVE=2)
|
||||
if (!requestIds.isEmpty() && !deviceList.isEmpty()) {
|
||||
List<Long> deviceIds = deviceList.stream()
|
||||
.filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null)
|
||||
.map(AdviceSaveDto::getRequestId)
|
||||
.collect(Collectors.toList());
|
||||
if (!deviceIds.isEmpty()) {
|
||||
log.info("BugFix: 准备批量更新耗材医嘱状态,deviceIds={}", deviceIds);
|
||||
UpdateWrapper<DeviceRequest> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.in("id", deviceIds);
|
||||
updateWrapper.set("status_enum", RequestStatus.ACTIVE.getValue());
|
||||
boolean updateResult = iDeviceRequestService.update(null, updateWrapper);
|
||||
log.info("BugFix: 批量更新耗材医嘱状态为已签发,count={}, result={}", deviceIds.size(), updateResult);
|
||||
|
||||
// 🔧 BugFix: 如果批量更新失败,尝试逐个更新
|
||||
if (!updateResult) {
|
||||
log.warn("BugFix: 批量更新耗材医嘱状态失败,尝试逐个更新");
|
||||
for (Long deviceId : deviceIds) {
|
||||
try {
|
||||
DeviceRequest updateReq = new DeviceRequest();
|
||||
updateReq.setId(deviceId);
|
||||
updateReq.setStatusEnum(RequestStatus.ACTIVE.getValue());
|
||||
boolean singleResult = iDeviceRequestService.updateById(updateReq);
|
||||
log.info("BugFix: 逐个更新耗材医嘱状态,id={}, result={}", deviceId, singleResult);
|
||||
} catch (Exception e) {
|
||||
log.error("BugFix: 逐个更新耗材医嘱状态失败,id={}", deviceId, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 🔧 BugFix: 批量更新诊疗请求状态为已签发(ACTIVE=2)
|
||||
if (!requestIds.isEmpty() && !activityList.isEmpty()) {
|
||||
List<Long> activityIds = activityList.stream()
|
||||
.filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null)
|
||||
.map(AdviceSaveDto::getRequestId)
|
||||
.collect(Collectors.toList());
|
||||
if (!activityIds.isEmpty()) {
|
||||
log.info("BugFix: 准备批量更新诊疗医嘱状态,activityIds={}", activityIds);
|
||||
UpdateWrapper<ServiceRequest> updateWrapper = new UpdateWrapper<>();
|
||||
updateWrapper.in("id", activityIds);
|
||||
updateWrapper.set("status_enum", RequestStatus.ACTIVE.getValue());
|
||||
boolean updateResult = iServiceRequestService.update(null, updateWrapper);
|
||||
log.info("BugFix: 批量更新诊疗医嘱状态为已签发,count={}, result={}", activityIds.size(), updateResult);
|
||||
|
||||
// 🔧 BugFix: 如果批量更新失败,尝试逐个更新
|
||||
if (!updateResult) {
|
||||
log.warn("BugFix: 批量更新诊疗医嘱状态失败,尝试逐个更新");
|
||||
for (Long activityId : activityIds) {
|
||||
try {
|
||||
ServiceRequest updateReq = new ServiceRequest();
|
||||
updateReq.setId(activityId);
|
||||
updateReq.setStatusEnum(RequestStatus.ACTIVE.getValue());
|
||||
boolean singleResult = iServiceRequestService.updateById(updateReq);
|
||||
log.info("BugFix: 逐个更新诊疗医嘱状态,id={}, result={}", activityId, singleResult);
|
||||
} catch (Exception e) {
|
||||
log.error("BugFix: 逐个更新诊疗医嘱状态失败,id={}", activityId, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 就诊id
|
||||
Long encounterId = adviceSaveList.get(0).getEncounterId();
|
||||
|
||||
// 使用安全的更新方法,避免并发冲突
|
||||
// 使用安全的更新方法,避免并发冲突 - 更新费用项状态
|
||||
iChargeItemService.updateChargeStatusByConditionSafe(
|
||||
encounterId,
|
||||
ChargeItemStatus.DRAFT.getValue(),
|
||||
@@ -734,11 +842,14 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
// 声明费用项
|
||||
ChargeItem chargeItem;
|
||||
// 新增 + 修改
|
||||
// 🔧 BugFix: 如果 requestId 不为空说明是已存在的医嘱,需要更新,即使 dbOpType 不匹配也应该包含进来
|
||||
List<AdviceSaveDto> insertOrUpdateList = medicineList.stream()
|
||||
.filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
|
||||
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType())))
|
||||
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType())
|
||||
|| e.getRequestId() != null))
|
||||
.collect(Collectors.toList());
|
||||
// 删除
|
||||
// 🔧 BugFix: 如果 dbOpType 不匹配但 requestId 存在,仍然允许删除(增加健壮性)
|
||||
List<AdviceSaveDto> deleteList = medicineList.stream()
|
||||
.filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList());
|
||||
// 校验删除的医嘱是否已经收费
|
||||
@@ -1151,9 +1262,11 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
// 声明费用项
|
||||
ChargeItem chargeItem;
|
||||
// 新增 + 修改
|
||||
// 🔧 BugFix: 如果 requestId 不为空说明是已存在的医嘱,需要更新,即使 dbOpType 不匹配也应该包含进来
|
||||
List<AdviceSaveDto> insertOrUpdateList = deviceList.stream()
|
||||
.filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
|
||||
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType())))
|
||||
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType())
|
||||
|| e.getRequestId() != null))
|
||||
.collect(Collectors.toList());
|
||||
// 删除
|
||||
List<AdviceSaveDto> deleteList = deviceList.stream()
|
||||
@@ -1439,9 +1552,11 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
// 声明费用项
|
||||
ChargeItem chargeItem;
|
||||
// 新增 + 修改
|
||||
// 🔧 BugFix: 如果 requestId 不为空说明是已存在的医嘱,需要更新,即使 dbOpType 不匹配也应该包含进来
|
||||
List<AdviceSaveDto> insertOrUpdateList = activityList.stream()
|
||||
.filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType())
|
||||
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType())))
|
||||
|| DbOpType.UPDATE.getCode().equals(e.getDbOpType())
|
||||
|| e.getRequestId() != null))
|
||||
.collect(Collectors.toList());
|
||||
// 删除
|
||||
List<AdviceSaveDto> deleteList = activityList.stream()
|
||||
|
||||
@@ -778,10 +778,10 @@ public class CommonConstants {
|
||||
Integer BOOKED = 1;
|
||||
/** 已取消 / 已停诊 */
|
||||
Integer CANCELLED = 2;
|
||||
/** 已锁定 */
|
||||
Integer LOCKED = 3;
|
||||
/** 已签到 / 已取号 */
|
||||
Integer CHECKED_IN = 4;
|
||||
Integer CHECKED_IN = 3;
|
||||
/** 已锁定 */
|
||||
Integer LOCKED = 4;
|
||||
/** 已退号 */
|
||||
Integer RETURNED = 5;
|
||||
}
|
||||
|
||||
@@ -23,15 +23,15 @@ import java.util.Date;
|
||||
public class ScheduleSlot extends HisBaseEntity {
|
||||
/** 明细主键 */
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Integer id;
|
||||
private Long id;
|
||||
|
||||
/** 号源池ID */
|
||||
private Integer poolId;
|
||||
private Long poolId;
|
||||
|
||||
/** 序号 */
|
||||
private Integer seqNo;
|
||||
|
||||
/** 序号状态: 0-可用,1-已预约,2-已取消/已停诊,3-已锁定,4-已签到,5-已退号 */
|
||||
/** 序号状态: 0-可用,1-已预约,2-已取消/已停诊,3-已签到,4-已锁定,5-已退号 */
|
||||
private Integer status;
|
||||
|
||||
/** 预约订单ID */
|
||||
|
||||
@@ -53,5 +53,5 @@ public interface SchedulePoolMapper extends BaseMapper<SchedulePool> {
|
||||
AND locked_num > 0
|
||||
AND delete_flag = '0'
|
||||
""")
|
||||
int updatePoolStatsOnCheckIn(@Param("poolId") Integer poolId);
|
||||
int updatePoolStatsOnCheckIn(@Param("poolId") Long poolId);
|
||||
}
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
WHEN LOWER(CONCAT('', s.status)) IN ('0', 'unbooked', 'available') THEN 0
|
||||
WHEN LOWER(CONCAT('', s.status)) IN ('1', 'booked') THEN 1
|
||||
WHEN LOWER(CONCAT('', s.status)) IN ('2', 'cancelled', 'canceled', 'stopped') THEN 2
|
||||
WHEN LOWER(CONCAT('', s.status)) IN ('3', 'locked') THEN 3
|
||||
WHEN LOWER(CONCAT('', s.status)) IN ('4', 'checked', 'checked_in', 'checkin') THEN 4
|
||||
WHEN LOWER(CONCAT('', s.status)) IN ('3', 'checked', 'checked_in', 'checkin') THEN 3
|
||||
WHEN LOWER(CONCAT('', s.status)) IN ('4', 'locked') THEN 4
|
||||
WHEN LOWER(CONCAT('', s.status)) IN ('5', 'returned') THEN 5
|
||||
ELSE NULL
|
||||
END
|
||||
@@ -32,8 +32,8 @@
|
||||
WHEN LOWER(CONCAT('', p.status)) IN ('0', 'unbooked', 'available') THEN 0
|
||||
WHEN LOWER(CONCAT('', p.status)) IN ('1', 'booked') THEN 1
|
||||
WHEN LOWER(CONCAT('', p.status)) IN ('2', 'cancelled', 'canceled', 'stopped') THEN 2
|
||||
WHEN LOWER(CONCAT('', p.status)) IN ('3', 'locked') THEN 3
|
||||
WHEN LOWER(CONCAT('', p.status)) IN ('4', 'checked', 'checked_in', 'checkin') THEN 4
|
||||
WHEN LOWER(CONCAT('', p.status)) IN ('3', 'checked', 'checked_in', 'checkin') THEN 3
|
||||
WHEN LOWER(CONCAT('', p.status)) IN ('4', 'locked') THEN 4
|
||||
WHEN LOWER(CONCAT('', p.status)) IN ('5', 'returned') THEN 5
|
||||
ELSE NULL
|
||||
END
|
||||
@@ -86,7 +86,8 @@
|
||||
ORDER BY
|
||||
p.schedule_date,
|
||||
p.doctor_id,
|
||||
s.expect_time
|
||||
s.expect_time,
|
||||
s.seq_no ASC
|
||||
</select>
|
||||
|
||||
<select id="selectTicketSlotById" resultType="com.openhis.appointmentmanage.domain.TicketSlotDTO">
|
||||
@@ -319,7 +320,7 @@
|
||||
</when>
|
||||
<when test="'checked'.equals(query.status) or '已取号'.equals(query.status)">
|
||||
AND (
|
||||
<include refid="slotStatusNormExpr" /> = 4
|
||||
<include refid="slotStatusNormExpr" /> = 3
|
||||
OR (
|
||||
<include refid="slotStatusNormExpr" /> = 1
|
||||
AND <include refid="orderStatusNormExpr" /> = 2
|
||||
@@ -350,7 +351,8 @@
|
||||
</where>
|
||||
ORDER BY
|
||||
p.schedule_date DESC,
|
||||
s.expect_time ASC
|
||||
s.expect_time ASC,
|
||||
s.seq_no ASC
|
||||
</select>
|
||||
|
||||
<select id="selectDoctorAvailabilitySummary" resultType="com.openhis.appointmentmanage.domain.DoctorAvailabilityDTO">
|
||||
|
||||
@@ -174,10 +174,10 @@ export const SlotStatus = {
|
||||
BOOKED: 1,
|
||||
/** 已取消 / 已停诊 */
|
||||
CANCELLED: 2,
|
||||
/** 已锁定 */
|
||||
LOCKED: 3,
|
||||
/** 已签到 / 已取号 */
|
||||
CHECKED_IN: 4,
|
||||
CHECKED_IN: 3,
|
||||
/** 已锁定 */
|
||||
LOCKED: 4,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -187,8 +187,8 @@ export const SlotStatusDescriptions = {
|
||||
0: '未预约',
|
||||
1: '已预约',
|
||||
2: '已停诊',
|
||||
3: '已锁定',
|
||||
4: '已取号',
|
||||
3: '已取号',
|
||||
4: '已锁定',
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -325,8 +325,10 @@ export function singOut(data) {
|
||||
* 获取患者本次就诊处方
|
||||
*/
|
||||
export function getPrescriptionList(encounterId) {
|
||||
// 添加时间戳参数防止浏览器缓存,确保签发后总能获取到最新数据
|
||||
const timestamp = Date.now();
|
||||
return request({
|
||||
url: '/doctor-station/advice/request-base-info?encounterId=' + encounterId,
|
||||
url: '/doctor-station/advice/request-base-info?encounterId=' + encounterId + '&t=' + timestamp,
|
||||
method: 'get',
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1010,6 +1010,13 @@ const mapAdviceTypeLabel = (type, adviceTableName) => {
|
||||
if (type === 2 && adviceTableName === 'adm_device_definition') {
|
||||
return '耗材';
|
||||
}
|
||||
|
||||
// 🔧 Bug Fix: 处理检查类型(adviceType=23)
|
||||
// 检查类型属于诊疗类,应该显示为"检查"
|
||||
if (type === 23) {
|
||||
return '检查';
|
||||
}
|
||||
|
||||
const found = adviceTypeList.value.find((item) => item.value === type);
|
||||
return found ? found.label : '';
|
||||
};
|
||||
@@ -2559,9 +2566,25 @@ function handleSave(prescriptionId) {
|
||||
if (res.code === 200) {
|
||||
proxy.$modal.msgSuccess('签发成功');
|
||||
isSaving.value = false;
|
||||
|
||||
// 🔧 Bug Fix: 签发成功后立即更新本地医嘱状态,确保用户看到的状态是正确的
|
||||
// 遍历签发的医嘱列表,更新本地状态
|
||||
saveList.forEach((item) => {
|
||||
// 在当前列表中找到对应的医嘱
|
||||
const index = prescriptionList.value.findIndex(p => p.uniqueKey === item.uniqueKey);
|
||||
if (index !== -1) {
|
||||
// 更新状态:从待签发(1)改为已签发(2)
|
||||
prescriptionList.value[index].statusEnum = 2;
|
||||
// 更新保存状态
|
||||
prescriptionList.value[index].isSaved = true;
|
||||
console.log('BugFix: 更新本地医嘱状态,adviceName=', item.adviceName, 'statusEnum=', 2);
|
||||
}
|
||||
});
|
||||
|
||||
// 刷新列表数据(从后端获取最新状态)
|
||||
getListInfo(false);
|
||||
bindMethod.value = {};
|
||||
nextId.value == 1;
|
||||
nextId.value = 1;
|
||||
} else {
|
||||
proxy.$modal.msgError(res.message);
|
||||
isSaving.value = false;
|
||||
|
||||
Reference in New Issue
Block a user