住院护士站-》医嘱执行页面:勾选医嘱后点击“执行选中”按钮无反应,无法完成执行操作.
疾病报告管理-》报告卡管理:审核报卡界面内容与门诊医生站登记界面不一致
This commit is contained in:
@@ -55,6 +55,7 @@ import java.math.RoundingMode;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.format.DateTimeParseException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -67,6 +68,10 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
|
||||
private static final List<DateTimeFormatter> EXECUTE_TIME_FORMATTERS = List.of(
|
||||
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"),
|
||||
DateTimeFormatter.ofPattern("yyyy-MM-dd H:mm:ss"));
|
||||
|
||||
@Resource
|
||||
AssignSeqUtil assignSeqUtil;
|
||||
|
||||
@@ -669,11 +674,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
for (AdviceExecuteDetailParam adviceExecuteDetailParam : adviceExecuteDetailList) {
|
||||
for (String executeTime : adviceExecuteDetailParam.getExecuteTimes()) {
|
||||
// 生成执行记录
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
// 转换为 LocalDateTime
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
// 转换为 Date
|
||||
Date exeDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
Date exeDate = parseExecuteTime(executeTime);
|
||||
// 根据执行记录新增不执行记录
|
||||
procedureService.addProcedureRecord(adviceExecuteDetailParam.getEncounterId(),
|
||||
adviceExecuteDetailParam.getPatientId(), adviceExecuteDetailParam.getRequestId(),
|
||||
@@ -701,16 +702,14 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
List<Long> medicationDefinitionIdList
|
||||
= medUseExeList.stream().map(MedicationRequestUseExe::getMedicationId).collect(Collectors.toList());
|
||||
// 医嘱详细信息
|
||||
Long orgId = SecurityUtils.getLoginUser().getOrgId();
|
||||
List<AdviceBaseDto> medicationInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null,
|
||||
medicationDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(1), null, null).getRecords();
|
||||
medicationDefinitionIdList, orgId, 1, 500, Whether.NO.getValue(), List.of(1), null, null).getRecords();
|
||||
|
||||
// 当前时间
|
||||
Date curDate = new Date();
|
||||
// 参与者id
|
||||
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
|
||||
// 当前登录账号的科室id
|
||||
Long orgId = SecurityUtils.getLoginUser().getOrgId();
|
||||
|
||||
// 长期
|
||||
MedicationRequest longMedicationRequest;
|
||||
ChargeItem chargeItem;
|
||||
@@ -737,11 +736,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
String minUnitCode = advice.getMinUnitCode();
|
||||
|
||||
// 生成执行记录
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
// 转换为 LocalDateTime
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
// 转换为 Date
|
||||
Date expectedDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
Date expectedDate = parseExecuteTime(executeTime);
|
||||
// 执行记录id
|
||||
Long procedureId = procedureService.addProcedureRecord(longMedicationRequest.getEncounterId(),
|
||||
longMedicationRequest.getPatientId(), longMedicationRequest.getId(),
|
||||
@@ -809,14 +804,24 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
chargeItemService.saveOrUpdate(chargeItem);
|
||||
} else {
|
||||
// 批次售卖情况
|
||||
throw new RuntimeException("[住院]批次售卖的情况暂未处理");
|
||||
|
||||
/* // 需要的药品数量(小单位)
|
||||
// 需要的药品数量(小单位)
|
||||
BigDecimal minUnitQuantity = medicationRequestUseExe.getMinUnitQuantity();
|
||||
if (minUnitQuantity == null || minUnitQuantity.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
throw new RuntimeException("药品执行数量异常,medicationId: "
|
||||
+ finalLongMedicationRequest.getMedicationId());
|
||||
}
|
||||
// 库存集合
|
||||
List<AdviceInventoryDto> inventoryList = advice.getInventoryList();
|
||||
if (inventoryList == null || inventoryList.isEmpty()) {
|
||||
throw new RuntimeException("药品库存不足,medicationId: "
|
||||
+ finalLongMedicationRequest.getMedicationId());
|
||||
}
|
||||
// 价格集合
|
||||
List<AdvicePriceDto> priceList = advice.getPriceList();
|
||||
if (priceList == null || priceList.isEmpty()) {
|
||||
throw new RuntimeException("未找到药品匹配的定价信息: "
|
||||
+ finalLongMedicationRequest.getMedicationId());
|
||||
}
|
||||
// 剩余需要分配的数量
|
||||
BigDecimal remainingQuantity = minUnitQuantity;
|
||||
|
||||
@@ -840,48 +845,52 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
}
|
||||
// 批次号
|
||||
String lotNumber = inventory.getLotNumber();
|
||||
if (lotNumber == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 根据批次库存量,生成发放
|
||||
longMedicationRequest.setQuantity(actualQuantity);// 小单位的数量
|
||||
longMedicationRequest.setUnitCode(minUnitCode); // 小单位
|
||||
longMedicationRequest.setLotNumber(lotNumber);
|
||||
MedicationRequest batchMedicationRequest = new MedicationRequest();
|
||||
BeanUtils.copyProperties(longMedicationRequest, batchMedicationRequest);
|
||||
batchMedicationRequest.setQuantity(actualQuantity);// 小单位的数量
|
||||
batchMedicationRequest.setUnitCode(minUnitCode); // 小单位
|
||||
batchMedicationRequest.setLotNumber(lotNumber);
|
||||
// 生成药品发放
|
||||
Long dispenseId = medicationDispenseService.generateMedicationDispense(longMedicationRequest,
|
||||
procedureId, exeDate);
|
||||
medicationDispenseService.generateMedicationDispense(batchMedicationRequest,
|
||||
procedureId, expectedDate);
|
||||
|
||||
// 生成账单
|
||||
chargeItem = new ChargeItem();
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.BILLABLE.getValue()); // 收费状态
|
||||
chargeItem.setBusNo(
|
||||
AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(longMedicationRequest.getBusNo()));
|
||||
AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(batchMedicationRequest.getBusNo()));
|
||||
chargeItem.setGenerateSourceEnum(GenerateSource.ORDER_EXECUTE.getValue()); // 生成来源
|
||||
chargeItem.setPrescriptionNo(longMedicationRequest.getPrescriptionNo()); // 处方号
|
||||
chargeItem.setPatientId(longMedicationRequest.getPatientId()); // 患者
|
||||
chargeItem.setPrescriptionNo(batchMedicationRequest.getPrescriptionNo()); // 处方号
|
||||
chargeItem.setPatientId(batchMedicationRequest.getPatientId()); // 患者
|
||||
chargeItem.setContextEnum(ChargeItemContext.MEDICATION.getValue()); // 类型
|
||||
chargeItem.setEncounterId(longMedicationRequest.getEncounterId()); // 就诊id
|
||||
chargeItem.setEncounterId(batchMedicationRequest.getEncounterId()); // 就诊id
|
||||
chargeItem.setEntererId(practitionerId);// 开立人ID
|
||||
chargeItem.setRequestingOrgId(orgId); // 开立科室
|
||||
chargeItem.setEnteredDate(curDate); // 开立时间
|
||||
chargeItem.setServiceTable(CommonConstants.TableName.MED_MEDICATION_REQUEST);// 医疗服务类型
|
||||
chargeItem.setServiceId(longMedicationRequest.getId()); // 医疗服务ID
|
||||
chargeItem.setServiceId(batchMedicationRequest.getId()); // 医疗服务ID
|
||||
chargeItem.setProductTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION);// 产品所在表
|
||||
chargeItem.setProductId(longMedicationRequest.getMedicationId());// 收费项id
|
||||
chargeItem.setProductId(batchMedicationRequest.getMedicationId());// 收费项id
|
||||
chargeItem.setAccountId(medicationRequestUseExe.getAccountId());// 关联账户ID
|
||||
chargeItem.setConditionId(longMedicationRequest.getConditionId()); // 诊断id
|
||||
chargeItem.setEncounterDiagnosisId(longMedicationRequest.getEncounterDiagnosisId()); // 就诊诊断id
|
||||
chargeItem.setConditionId(batchMedicationRequest.getConditionId()); // 诊断id
|
||||
chargeItem.setEncounterDiagnosisId(batchMedicationRequest.getEncounterDiagnosisId()); // 就诊诊断id
|
||||
chargeItem.setProcedureId(procedureId); // 执行id
|
||||
chargeItem.setDispenseTable(CommonConstants.TableName.MED_MEDICATION_DISPENSE); // 发放表名
|
||||
// chargeItem.setDispenseId(dispenseId); // 发放ID
|
||||
|
||||
// ------------------------------ 匹配定价信息
|
||||
// 在 priceList 中查找匹配的定价信息
|
||||
Optional<AdvicePriceDto> matchedPrice =
|
||||
priceList.stream().filter(p -> lotNumber.equals(p.getConditionValue())).findFirst();
|
||||
if (matchedPrice.isEmpty()) {
|
||||
AdvicePriceDto priceDto = matchedPrice.orElseGet(() -> priceList.stream().findFirst().orElse(null));
|
||||
if (priceDto == null) {
|
||||
throw new RuntimeException(
|
||||
"未找到匹配的定价信息,lotNumber: " + finalLongMedicationRequest.getLotNumber());
|
||||
"未找到匹配的定价信息,lotNumber: " + lotNumber);
|
||||
}
|
||||
AdvicePriceDto priceDto = matchedPrice.get();
|
||||
// 单价(大单位)
|
||||
BigDecimal price = priceDto.getPrice();
|
||||
// 单价(小单位)
|
||||
@@ -919,7 +928,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
|
||||
chargeItemService.saveOrUpdate(chargeItem);
|
||||
|
||||
}*/
|
||||
}
|
||||
if (remainingQuantity.compareTo(BigDecimal.ZERO) > 0) {
|
||||
throw new RuntimeException("药品库存不足,medicationId: "
|
||||
+ finalLongMedicationRequest.getMedicationId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -932,11 +945,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
BeanUtils.copyProperties(medicationRequestUseExe, tempMedicationRequest);
|
||||
|
||||
// 生成执行记录
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
// 转换为 LocalDateTime
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
// 转换为 Date
|
||||
Date expectedDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
Date expectedDate = parseExecuteTime(executeTime);
|
||||
// 执行记录id
|
||||
Long procedureId = procedureService.addProcedureRecord(tempMedicationRequest.getEncounterId(),
|
||||
tempMedicationRequest.getPatientId(), tempMedicationRequest.getId(),
|
||||
@@ -978,16 +987,14 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
List<Long> activityDefinitionIdList
|
||||
= actUseExeList.stream().map(ServiceRequestUseExe::getActivityId).collect(Collectors.toList());
|
||||
// 医嘱详细信息
|
||||
Long orgId = SecurityUtils.getLoginUser().getOrgId();
|
||||
List<AdviceBaseDto> activityInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null,
|
||||
activityDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(3), null, null).getRecords();
|
||||
activityDefinitionIdList, orgId, 1, 500, Whether.NO.getValue(), List.of(3), null, null).getRecords();
|
||||
|
||||
// 当前时间
|
||||
Date curDate = new Date();
|
||||
// 参与者id
|
||||
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
|
||||
// 当前登录账号的科室id
|
||||
Long orgId = SecurityUtils.getLoginUser().getOrgId();
|
||||
|
||||
Date clickDate = new Date();
|
||||
|
||||
// 长期
|
||||
@@ -1002,11 +1009,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
BeanUtils.copyProperties(serviceRequestUseExe, longServiceRequest);
|
||||
|
||||
// 生成执行记录
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
// 转换为 LocalDateTime
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
// 转换为 Date
|
||||
Date expectedDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
Date expectedDate = parseExecuteTime(executeTime);
|
||||
// 执行记录id
|
||||
Long procedureId = procedureService.addProcedureRecord(longServiceRequest.getEncounterId(),
|
||||
longServiceRequest.getPatientId(), longServiceRequest.getId(),
|
||||
@@ -1077,11 +1080,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
BeanUtils.copyProperties(serviceRequestUseExe, tempServiceRequest);
|
||||
|
||||
// 生成执行记录
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
// 转换为 LocalDateTime
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
// 转换为 Date
|
||||
Date expectedDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
Date expectedDate = parseExecuteTime(executeTime);
|
||||
// 执行记录id
|
||||
Long procedureId = procedureService.addProcedureRecord(tempServiceRequest.getEncounterId(),
|
||||
tempServiceRequest.getPatientId(), tempServiceRequest.getId(),
|
||||
@@ -1146,7 +1145,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
|
||||
// 耗材医嘱详细信息
|
||||
List<AdviceBaseDto> deviceInfos = doctorStationAdviceAppService
|
||||
.getAdviceBaseInfo(null, null, null, deviceIds, 0L, 1, 500, Whether.NO.getValue(), List.of(2), null, null)
|
||||
.getAdviceBaseInfo(null, null, null, deviceIds, orgId, 1, 500, Whether.NO.getValue(), List.of(2),
|
||||
null, null)
|
||||
.getRecords();
|
||||
|
||||
DeviceRequest deviceRequest;
|
||||
@@ -1405,6 +1405,18 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
return actUseExeList;
|
||||
}
|
||||
|
||||
private Date parseExecuteTime(String executeTime) {
|
||||
for (DateTimeFormatter formatter : EXECUTE_TIME_FORMATTERS) {
|
||||
try {
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
} catch (DateTimeParseException ignored) {
|
||||
// try next formatter
|
||||
}
|
||||
}
|
||||
throw new RuntimeException("无法解析执行时间: " + executeTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成退药单
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user