|
|
|
|
@@ -29,9 +29,12 @@ import com.openhis.web.regdoctorstation.appservice.IAdviceManageAppService;
|
|
|
|
|
import com.openhis.web.regdoctorstation.dto.*;
|
|
|
|
|
import com.openhis.web.regdoctorstation.mapper.AdviceManageAppMapper;
|
|
|
|
|
import com.openhis.web.regdoctorstation.utils.RegPrescriptionUtils;
|
|
|
|
|
import com.openhis.workflow.domain.ActivityDefinition;
|
|
|
|
|
import com.openhis.workflow.domain.DeviceRequest;
|
|
|
|
|
import com.openhis.workflow.domain.ServiceRequest;
|
|
|
|
|
import com.openhis.workflow.service.IActivityDefinitionService;
|
|
|
|
|
import com.openhis.workflow.domain.ActivityDefinition;
|
|
|
|
|
import com.openhis.workflow.service.IDeviceDispenseService;
|
|
|
|
|
import com.openhis.workflow.service.IDeviceRequestService;
|
|
|
|
|
import com.openhis.workflow.service.IServiceRequestService;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -76,6 +79,12 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
|
|
|
|
|
@Resource
|
|
|
|
|
IActivityDefinitionService iActivityDefinitionService;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
IDeviceRequestService iDeviceRequestService;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
IDeviceDispenseService iDeviceDispenseService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询住院患者信息
|
|
|
|
|
*
|
|
|
|
|
@@ -167,13 +176,16 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
|
|
|
|
|
Long organizationId = regAdviceSaveParam.getOrganizationId();
|
|
|
|
|
// 医嘱分类信息
|
|
|
|
|
List<RegAdviceSaveDto> regAdviceSaveList = regAdviceSaveParam.getRegAdviceSaveList();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 药品
|
|
|
|
|
List<RegAdviceSaveDto> medicineList = regAdviceSaveList.stream()
|
|
|
|
|
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
|
|
|
|
|
// 诊疗活动
|
|
|
|
|
List<RegAdviceSaveDto> activityList = regAdviceSaveList.stream()
|
|
|
|
|
.filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
|
|
|
|
|
// 耗材 🔧 Bug #147 修复
|
|
|
|
|
List<RegAdviceSaveDto> deviceList = regAdviceSaveList.stream()
|
|
|
|
|
.filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
// 保存时,校验临时医嘱库存
|
|
|
|
|
if (AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType)) {
|
|
|
|
|
@@ -210,6 +222,11 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
|
|
|
|
|
*/
|
|
|
|
|
this.handService(activityList, startTime, authoredTime, curDate, adviceOpType, organizationId, signCode);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 🔧 Bug #147 修复:处理耗材请求
|
|
|
|
|
*/
|
|
|
|
|
this.handDevice(deviceList, startTime, authoredTime, curDate, adviceOpType, organizationId, signCode);
|
|
|
|
|
|
|
|
|
|
// 签发时,把草稿状态的账单更新为待收费
|
|
|
|
|
if (AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType) && !regAdviceSaveList.isEmpty()) {
|
|
|
|
|
// 签发的医嘱id集合
|
|
|
|
|
@@ -594,6 +611,150 @@ public class AdviceManageAppServiceImpl implements IAdviceManageAppService {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 🔧 Bug #147 修复:处理耗材
|
|
|
|
|
*/
|
|
|
|
|
private void handDevice(List<RegAdviceSaveDto> deviceList, Date startTime, Date authoredTime, Date curDate,
|
|
|
|
|
String adviceOpType, Long organizationId, String signCode) {
|
|
|
|
|
// 当前登录账号的科室id
|
|
|
|
|
Long orgId = SecurityUtils.getLoginUser().getOrgId();
|
|
|
|
|
// 获取当前登录用户的tenantId
|
|
|
|
|
Integer tenantId = SecurityUtils.getLoginUser().getTenantId();
|
|
|
|
|
// 保存操作
|
|
|
|
|
boolean is_save = AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType);
|
|
|
|
|
// 签发操作
|
|
|
|
|
boolean is_sign = AdviceOpType.SIGN_ADVICE.getCode().equals(adviceOpType);
|
|
|
|
|
|
|
|
|
|
// 删除
|
|
|
|
|
List<RegAdviceSaveDto> deleteList = deviceList.stream()
|
|
|
|
|
.filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList());
|
|
|
|
|
for (RegAdviceSaveDto regAdviceSaveDto : deleteList) {
|
|
|
|
|
iDeviceRequestService.removeById(regAdviceSaveDto.getRequestId());
|
|
|
|
|
// 删除已经产生的耗材发放信息
|
|
|
|
|
iDeviceDispenseService.deleteDeviceDispense(regAdviceSaveDto.getRequestId());
|
|
|
|
|
// 删除费用项
|
|
|
|
|
iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_DEVICE_REQUEST,
|
|
|
|
|
regAdviceSaveDto.getRequestId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 声明耗材请求
|
|
|
|
|
DeviceRequest deviceRequest;
|
|
|
|
|
// 声明费用项
|
|
|
|
|
ChargeItem chargeItem;
|
|
|
|
|
|
|
|
|
|
// 新增 + 修改 (长期医嘱)
|
|
|
|
|
List<RegAdviceSaveDto> longInsertOrUpdateList = deviceList.stream().filter(e -> TherapyTimeType.LONG_TERM
|
|
|
|
|
.getValue().equals(e.getTherapyEnum())
|
|
|
|
|
&& (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType())))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
for (RegAdviceSaveDto regAdviceSaveDto : longInsertOrUpdateList) {
|
|
|
|
|
deviceRequest = new DeviceRequest();
|
|
|
|
|
deviceRequest.setId(regAdviceSaveDto.getRequestId()); // 主键id
|
|
|
|
|
deviceRequest.setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态
|
|
|
|
|
deviceRequest.setTenantId(SecurityUtils.getLoginUser().getTenantId()); // 显式设置租户ID
|
|
|
|
|
if (is_sign) {
|
|
|
|
|
deviceRequest.setReqAuthoredTime(authoredTime); // 医嘱签发时间
|
|
|
|
|
}
|
|
|
|
|
// 保存时处理的字段属性
|
|
|
|
|
if (is_save) {
|
|
|
|
|
deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4));
|
|
|
|
|
deviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
|
|
|
|
|
deviceRequest.setQuantity(regAdviceSaveDto.getQuantity()); // 请求数量
|
|
|
|
|
deviceRequest.setUnitCode(regAdviceSaveDto.getUnitCode()); // 请求单位编码
|
|
|
|
|
deviceRequest.setLotNumber(regAdviceSaveDto.getLotNumber()); // 产品批号
|
|
|
|
|
deviceRequest.setCategoryEnum(regAdviceSaveDto.getCategoryEnum()); // 请求类型
|
|
|
|
|
deviceRequest.setDeviceDefId(regAdviceSaveDto.getAdviceDefinitionId());// 耗材定义id
|
|
|
|
|
deviceRequest.setPatientId(regAdviceSaveDto.getPatientId()); // 患者
|
|
|
|
|
deviceRequest.setRequesterId(regAdviceSaveDto.getPractitionerId()); // 开方医生
|
|
|
|
|
deviceRequest.setOrgId(regAdviceSaveDto.getFounderOrgId()); // 开方人科室
|
|
|
|
|
deviceRequest.setReqAuthoredTime(startTime); // 医嘱开始时间
|
|
|
|
|
deviceRequest.setPerformLocation(regAdviceSaveDto.getLocationId()); // 发放科室
|
|
|
|
|
deviceRequest.setEncounterId(regAdviceSaveDto.getEncounterId()); // 就诊id
|
|
|
|
|
deviceRequest.setPackageId(regAdviceSaveDto.getPackageId()); // 组套id
|
|
|
|
|
deviceRequest.setContentJson(regAdviceSaveDto.getContentJson()); // 请求内容json
|
|
|
|
|
deviceRequest.setYbClassEnum(regAdviceSaveDto.getYbClassEnum());// 类别医保编码
|
|
|
|
|
deviceRequest.setConditionId(regAdviceSaveDto.getConditionId()); // 诊断id
|
|
|
|
|
deviceRequest.setEncounterDiagnosisId(regAdviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id
|
|
|
|
|
}
|
|
|
|
|
iDeviceRequestService.saveOrUpdate(deviceRequest);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 新增 + 修改 (临时医嘱)
|
|
|
|
|
List<RegAdviceSaveDto> tempInsertOrUpdateList = deviceList.stream().filter(e -> TherapyTimeType.TEMPORARY
|
|
|
|
|
.getValue().equals(e.getTherapyEnum())
|
|
|
|
|
&& (DbOpType.INSERT.getCode().equals(e.getDbOpType()) || DbOpType.UPDATE.getCode().equals(e.getDbOpType())))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
for (RegAdviceSaveDto regAdviceSaveDto : tempInsertOrUpdateList) {
|
|
|
|
|
deviceRequest = new DeviceRequest();
|
|
|
|
|
deviceRequest.setId(regAdviceSaveDto.getRequestId()); // 主键id
|
|
|
|
|
deviceRequest.setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态
|
|
|
|
|
deviceRequest.setTenantId(SecurityUtils.getLoginUser().getTenantId()); // 显式设置租户ID
|
|
|
|
|
if (is_sign) {
|
|
|
|
|
deviceRequest.setReqAuthoredTime(authoredTime); // 医嘱签发时间
|
|
|
|
|
}
|
|
|
|
|
// 保存时处理的字段属性
|
|
|
|
|
if (is_save) {
|
|
|
|
|
deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4));
|
|
|
|
|
deviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
|
|
|
|
|
deviceRequest.setQuantity(regAdviceSaveDto.getQuantity()); // 请求数量
|
|
|
|
|
deviceRequest.setUnitCode(regAdviceSaveDto.getUnitCode()); // 请求单位编码
|
|
|
|
|
deviceRequest.setLotNumber(regAdviceSaveDto.getLotNumber()); // 产品批号
|
|
|
|
|
deviceRequest.setCategoryEnum(regAdviceSaveDto.getCategoryEnum()); // 请求类型
|
|
|
|
|
deviceRequest.setDeviceDefId(regAdviceSaveDto.getAdviceDefinitionId());// 耗材定义id
|
|
|
|
|
deviceRequest.setPatientId(regAdviceSaveDto.getPatientId()); // 患者
|
|
|
|
|
deviceRequest.setRequesterId(regAdviceSaveDto.getPractitionerId()); // 开方医生
|
|
|
|
|
deviceRequest.setOrgId(regAdviceSaveDto.getFounderOrgId()); // 开方人科室
|
|
|
|
|
deviceRequest.setReqAuthoredTime(startTime); // 医嘱开始时间
|
|
|
|
|
deviceRequest.setPerformLocation(regAdviceSaveDto.getLocationId()); // 发放科室
|
|
|
|
|
deviceRequest.setEncounterId(regAdviceSaveDto.getEncounterId()); // 就诊id
|
|
|
|
|
deviceRequest.setPackageId(regAdviceSaveDto.getPackageId()); // 组套id
|
|
|
|
|
deviceRequest.setContentJson(regAdviceSaveDto.getContentJson()); // 请求内容json
|
|
|
|
|
deviceRequest.setYbClassEnum(regAdviceSaveDto.getYbClassEnum());// 类别医保编码
|
|
|
|
|
deviceRequest.setConditionId(regAdviceSaveDto.getConditionId()); // 诊断id
|
|
|
|
|
deviceRequest.setEncounterDiagnosisId(regAdviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id
|
|
|
|
|
}
|
|
|
|
|
iDeviceRequestService.saveOrUpdate(deviceRequest);
|
|
|
|
|
|
|
|
|
|
// 保存时,保存耗材费用项
|
|
|
|
|
if (is_save) {
|
|
|
|
|
// 处理耗材发放
|
|
|
|
|
Long dispenseId = iDeviceDispenseService.handleDeviceDispense(deviceRequest,
|
|
|
|
|
regAdviceSaveDto.getDbOpType());
|
|
|
|
|
|
|
|
|
|
// 保存耗材费用项
|
|
|
|
|
chargeItem = new ChargeItem();
|
|
|
|
|
chargeItem.setId(regAdviceSaveDto.getChargeItemId()); // 费用项id
|
|
|
|
|
chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态
|
|
|
|
|
chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo()));
|
|
|
|
|
chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源
|
|
|
|
|
chargeItem.setPatientId(regAdviceSaveDto.getPatientId()); // 患者
|
|
|
|
|
chargeItem.setContextEnum(regAdviceSaveDto.getAdviceType()); // 类型
|
|
|
|
|
chargeItem.setEncounterId(regAdviceSaveDto.getEncounterId()); // 就诊id
|
|
|
|
|
chargeItem.setDefinitionId(regAdviceSaveDto.getDefinitionId()); // 费用定价ID
|
|
|
|
|
chargeItem.setDefDetailId(regAdviceSaveDto.getDefinitionDetailId()); // 定价子表主键
|
|
|
|
|
chargeItem.setEntererId(regAdviceSaveDto.getPractitionerId());// 开立人ID
|
|
|
|
|
chargeItem.setEnteredDate(curDate); // 开立时间
|
|
|
|
|
chargeItem.setServiceTable(CommonConstants.TableName.WOR_DEVICE_REQUEST);// 医疗服务类型
|
|
|
|
|
chargeItem.setServiceId(deviceRequest.getId()); // 医疗服务ID
|
|
|
|
|
chargeItem.setProductTable(regAdviceSaveDto.getAdviceTableName());// 产品所在表
|
|
|
|
|
chargeItem.setProductId(regAdviceSaveDto.getAdviceDefinitionId());// 收费项id
|
|
|
|
|
chargeItem.setAccountId(regAdviceSaveDto.getAccountId());// 关联账户ID
|
|
|
|
|
chargeItem.setRequestingOrgId(orgId); // 开立科室
|
|
|
|
|
chargeItem.setConditionId(regAdviceSaveDto.getConditionId()); // 诊断id
|
|
|
|
|
chargeItem.setEncounterDiagnosisId(regAdviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id
|
|
|
|
|
chargeItem.setDispenseId(dispenseId); // 发放ID
|
|
|
|
|
|
|
|
|
|
chargeItem.setQuantityValue(regAdviceSaveDto.getQuantity()); // 数量
|
|
|
|
|
chargeItem.setQuantityUnit(regAdviceSaveDto.getUnitCode()); // 单位
|
|
|
|
|
chargeItem.setUnitPrice(regAdviceSaveDto.getUnitPrice()); // 单价
|
|
|
|
|
chargeItem.setTotalPrice(regAdviceSaveDto.getTotalPrice()); // 总价
|
|
|
|
|
|
|
|
|
|
iChargeItemService.saveOrUpdate(chargeItem);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询住院医嘱请求数据
|
|
|
|
|
*
|
|
|
|
|
|