diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index 7c0f2db0..f12e7712 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -40,6 +40,7 @@ import com.openhis.workflow.service.IServiceRequestService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; @@ -118,7 +119,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp String safeSearchKey = searchKey != null ? searchKey : ""; String safeAdviceTypesStr = ""; if (adviceTypes != null && !adviceTypes.isEmpty()) { - safeAdviceTypesStr = String.join(",", adviceTypes.stream().map(String::valueOf).collect(Collectors.toList())); + safeAdviceTypesStr = String.join(",", + adviceTypes.stream().map(String::valueOf).collect(Collectors.toList())); } String safeOrganizationId = organizationId != null ? organizationId.toString() : ""; String safePricingFlag = pricingFlag != null ? pricingFlag.toString() : ""; @@ -141,8 +143,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp orderPricingSource = orderPricing; } // 开药时药房允许多选开关 - String pharmacyMultipleChoiceSwitch - = TenantOptionUtil.getOptionContent(TenantOptionDict.PHARMACY_MULTIPLE_CHOICE_SWITCH); + String pharmacyMultipleChoiceSwitch = TenantOptionUtil + .getOptionContent(TenantOptionDict.PHARMACY_MULTIPLE_CHOICE_SWITCH); // 药房允许多选 boolean pharmacyMultipleChoice = Whether.YES.getCode().equals(pharmacyMultipleChoiceSwitch); @@ -152,7 +154,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp IPage adviceBaseInfo = doctorStationAdviceAppMapper.getAdviceBaseInfo( new Page<>(pageNo, pageSize), PublicationStatus.ACTIVE.getValue(), organizationId, CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, - CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, pricingFlag, adviceDefinitionIdParamList, adviceTypes, + CommonConstants.TableName.WOR_ACTIVITY_DEFINITION, pricingFlag, adviceDefinitionIdParamList, + adviceTypes, queryWrapper); List adviceBaseDtoList = adviceBaseInfo.getRecords(); @@ -162,22 +165,22 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp } // 医嘱定义ID集合 - List adviceDefinitionIdList - = adviceBaseDtoList.stream().map(AdviceBaseDto::getAdviceDefinitionId).collect(Collectors.toList()); + List adviceDefinitionIdList = adviceBaseDtoList.stream().map(AdviceBaseDto::getAdviceDefinitionId) + .collect(Collectors.toList()); // 费用定价主表ID集合 - List chargeItemDefinitionIdList - = adviceBaseDtoList.stream().map(AdviceBaseDto::getChargeItemDefinitionId).collect(Collectors.toList()); + List chargeItemDefinitionIdList = adviceBaseDtoList.stream().map(AdviceBaseDto::getChargeItemDefinitionId) + .collect(Collectors.toList()); // 医嘱库存集合 - List adviceInventoryList - = doctorStationAdviceAppMapper.getAdviceInventory(locationId, adviceDefinitionIdList, - CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue()); + List adviceInventoryList = doctorStationAdviceAppMapper.getAdviceInventory(locationId, + adviceDefinitionIdList, + CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR, PublicationStatus.ACTIVE.getValue()); // 待发放个数信息 List adviceDraftInventoryList = doctorStationAdviceAppMapper.getAdviceDraftInventory( CommonConstants.TableName.MED_MEDICATION_DEFINITION, CommonConstants.TableName.ADM_DEVICE_DEFINITION, DispenseStatus.DRAFT.getValue(), DispenseStatus.PREPARATION.getValue()); // 预减库存 - List adviceInventory - = adviceUtils.subtractInventory(adviceInventoryList, adviceDraftInventoryList); + List adviceInventory = adviceUtils.subtractInventory(adviceInventoryList, + adviceDraftInventoryList); // 查询取药科室配置 List medLocationConfig = doctorStationAdviceAppMapper.getMedLocationConfig(organizationId); // 将配置转为 {categoryCode -> 允许的locationId集合} @@ -212,7 +215,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp for (int i = 0; i < chargeItemDefinitionIdList.size(); i += batchSize) { int endIndex = Math.min(i + batchSize, chargeItemDefinitionIdList.size()); List batch = chargeItemDefinitionIdList.subList(i, endIndex); - mainCharge.addAll(doctorStationAdviceAppMapper.getMainCharge(batch, PublicationStatus.ACTIVE.getValue())); + mainCharge + .addAll(doctorStationAdviceAppMapper.getMainCharge(batch, PublicationStatus.ACTIVE.getValue())); } } String unitCode = ""; // 包装单位 @@ -228,13 +232,14 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // fallthrough to 耗材处理逻辑(保持原有逻辑) // 每一条医嘱的库存集合信息 , 包装单位库存前端计算 - List inventoryList = adviceInventory.stream().filter(e -> - baseDto.getAdviceDefinitionId() != null && e.getItemId() != null - && baseDto.getAdviceDefinitionId().equals(e.getItemId()) - && baseDto.getAdviceTableName() != null && e.getItemTable() != null - && baseDto.getAdviceTableName().equals(e.getItemTable()) - && (pharmacyMultipleChoice - || (baseDto.getPositionId() == null || (e.getLocationId() != null && baseDto.getPositionId().equals(e.getLocationId()))))) + List inventoryList = adviceInventory + .stream().filter(e -> baseDto.getAdviceDefinitionId() != null && e.getItemId() != null + && baseDto.getAdviceDefinitionId().equals(e.getItemId()) + && baseDto.getAdviceTableName() != null && e.getItemTable() != null + && baseDto.getAdviceTableName().equals(e.getItemTable()) + && (pharmacyMultipleChoice + || (baseDto.getPositionId() == null || (e.getLocationId() != null + && baseDto.getPositionId().equals(e.getLocationId()))))) .collect(Collectors.toList()); // 库存信息 baseDto.setInventoryList(inventoryList); @@ -251,13 +256,15 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 第一步:在medLocationConfig中匹配categoryCode AdviceInventoryDto result1 = medLocationConfig.stream() .filter(dto -> baseDto.getCategoryCode() != null && dto.getCategoryCode() != null - && baseDto.getCategoryCode().equals(dto.getCategoryCode())).findFirst() + && baseDto.getCategoryCode().equals(dto.getCategoryCode())) + .findFirst() .orElse(null); if (result1 != null) { // 第二步:在inventoryList中匹配locationId AdviceInventoryDto result2 = inventoryList.stream() .filter(dto -> result1.getLocationId() != null && dto.getLocationId() != null - && result1.getLocationId().equals(dto.getLocationId())).findFirst() + && result1.getLocationId().equals(dto.getLocationId())) + .findFirst() .orElse(null); if (result2 != null && result2.getLotNumber() != null) { baseDto.setDefaultLotNumber(result2.getLotNumber()); @@ -296,13 +303,14 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp baseDto.setPriceList(priceDtoList); } else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(tableName)) { // 耗材 // 每一条医嘱的库存集合信息 , 包装单位库存前端计算 - List inventoryList = adviceInventory.stream().filter(e -> - baseDto.getAdviceDefinitionId() != null && e.getItemId() != null - && baseDto.getAdviceDefinitionId().equals(e.getItemId()) - && baseDto.getAdviceTableName() != null && e.getItemTable() != null - && baseDto.getAdviceTableName().equals(e.getItemTable()) - && (pharmacyMultipleChoice - || (baseDto.getPositionId() == null || (e.getLocationId() != null && baseDto.getPositionId().equals(e.getLocationId()))))) + List inventoryList = adviceInventory + .stream().filter(e -> baseDto.getAdviceDefinitionId() != null && e.getItemId() != null + && baseDto.getAdviceDefinitionId().equals(e.getItemId()) + && baseDto.getAdviceTableName() != null && e.getItemTable() != null + && baseDto.getAdviceTableName().equals(e.getItemTable()) + && (pharmacyMultipleChoice + || (baseDto.getPositionId() == null || (e.getLocationId() != null + && baseDto.getPositionId().equals(e.getLocationId()))))) .collect(Collectors.toList()); // 库存信息 baseDto.setInventoryList(inventoryList); @@ -319,13 +327,15 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 第一步:在medLocationConfig中匹配categoryCode AdviceInventoryDto result1 = medLocationConfig.stream() .filter(dto -> baseDto.getCategoryCode() != null && dto.getCategoryCode() != null - && baseDto.getCategoryCode().equals(dto.getCategoryCode())).findFirst() + && baseDto.getCategoryCode().equals(dto.getCategoryCode())) + .findFirst() .orElse(null); if (result1 != null) { // 第二步:在inventoryList中匹配locationId AdviceInventoryDto result2 = inventoryList.stream() .filter(dto -> result1.getLocationId() != null && dto.getLocationId() != null - && result1.getLocationId().equals(dto.getLocationId())).findFirst() + && result1.getLocationId().equals(dto.getLocationId())) + .findFirst() .orElse(null); if (result2 != null && result2.getLotNumber() != null) { baseDto.setDefaultLotNumber(result2.getLotNumber()); @@ -363,13 +373,15 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 价格信息 baseDto.setPriceList(priceDtoList); } else if (CommonConstants.TableName.WOR_ACTIVITY_DEFINITION.equals(tableName)) { // 诊疗 - List priceList - = mainCharge.stream().filter(e -> baseDto.getChargeItemDefinitionId() != null && e.getDefinitionId() != null + List priceList = mainCharge.stream() + .filter(e -> baseDto.getChargeItemDefinitionId() != null && e.getDefinitionId() != null && baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId())) - .collect(Collectors.toList()); + .collect(Collectors.toList()); // 价格信息 baseDto.setPriceList(priceList); - // 活动类型:字典转换框架会自动填充 activityType_dictText,无需手动设置 + // 活动类型 + baseDto.setActivityType_enumText( + EnumUtils.getInfoByValue(ActivityType.class, baseDto.getActivityType())); } } @@ -380,7 +392,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp * 查询医嘱绑定信息 * * @param typeCode 1:用法绑东西 2:诊疗绑东西 - * @param itemNo 用法的code 或者 诊疗定义id + * @param itemNo 用法的code 或者 诊疗定义id * @return 医嘱绑定信息 */ @Override @@ -392,10 +404,11 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp * 门诊保存/签发医嘱 * * @param adviceSaveParam 医嘱表单信息 - * @param adviceOpType 医嘱操作类型 + * @param adviceOpType 医嘱操作类型 * @return 结果 */ @Override + @Transactional(rollbackFor = Exception.class) public R saveAdvice(AdviceSaveParam adviceSaveParam, String adviceOpType) { try { // 患者挂号对应的科室id @@ -416,10 +429,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp * 保存时,校验库存 */ if (AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType)) { - List medUpdateList - = medicineList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList()); - List devUpdateList - = deviceList.stream().filter(e -> e.getRequestId() != null).collect(Collectors.toList()); + List medUpdateList = medicineList.stream().filter(e -> e.getRequestId() != null) + .collect(Collectors.toList()); + List devUpdateList = deviceList.stream().filter(e -> e.getRequestId() != null) + .collect(Collectors.toList()); // 编辑时,释放本身占用的库存发放 for (AdviceSaveDto adviceSaveDto : medUpdateList) { iMedicationDispenseService.deleteMedicationDispense(adviceSaveDto.getRequestId()); @@ -428,9 +441,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp iDeviceDispenseService.deleteDeviceDispense(adviceSaveDto.getRequestId()); } - List needCheckList - = adviceSaveList.stream().filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) - && !ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + List needCheckList = adviceSaveList.stream() + .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) + && !ItemType.ACTIVITY.getValue().equals(e.getAdviceType())) + .collect(Collectors.toList()); // 校验库存 String tipRes = adviceUtils.checkInventory(needCheckList); if (tipRes != null) { @@ -445,8 +459,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp /** * 处理药品请求 */ - List medRequestIdList - = this.handMedication(medicineList, curDate, adviceOpType, organizationId, signCode); + List medRequestIdList = this.handMedication(medicineList, curDate, adviceOpType, organizationId, + signCode); /** * 处理诊疗项目请求 @@ -463,7 +477,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 签发的医嘱id集合 List requestIds = adviceSaveList.stream() .filter(e -> !DbOpType.DELETE.getCode().equals(e.getDbOpType()) && e.getRequestId() != null) - .collect(Collectors.toList()).stream().map(AdviceSaveDto::getRequestId).collect(Collectors.toList()); + .collect(Collectors.toList()).stream().map(AdviceSaveDto::getRequestId) + .collect(Collectors.toList()); // 就诊id Long encounterId = adviceSaveList.get(0).getEncounterId(); iChargeItemService.update(new LambdaUpdateWrapper() @@ -477,7 +492,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp clearRelatedCache(); return R.ok(medRequestIdList, - MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[]{"门诊医嘱"})); + MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] { "门诊医嘱" })); } catch (Exception e) { // 异常处理 throw e; @@ -499,6 +514,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp Long organizationId, String signCode) { // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); + // 获取当前登录用户的tenantId + Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); + // 获取当前登录用户名 + String currentUsername = SecurityUtils.getUsername(); // 保存操作 boolean is_save = AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType); // 签发操作 @@ -508,9 +527,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 声明费用项 ChargeItem chargeItem; // 新增 + 修改 - List insertOrUpdateList - = medicineList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) - || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList()); + List insertOrUpdateList = medicineList.stream() + .filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) + || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) + .collect(Collectors.toList()); // 删除 List deleteList = medicineList.stream() .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); @@ -535,7 +555,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp adviceSaveDto.getRequestId()); // 删除基于这个药品生成的需要执行的诊疗请求 iServiceRequestService.remove( - new LambdaQueryWrapper().eq(ServiceRequest::getBasedOnId, adviceSaveDto.getRequestId()) + new LambdaQueryWrapper() + .eq(ServiceRequest::getBasedOnId, adviceSaveDto.getRequestId()) .isNotNull(ServiceRequest::getBasedOnTable) .eq(ServiceRequest::getStatusEnum, RequestStatus.COMPLETED.getValue())); } @@ -552,8 +573,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp medicationRequest.setId(adviceSaveDto.getRequestId()); // 主键id medicationRequest.setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue()); // 请求状态 medicationRequest.setPrescriptionNo(adviceSaveDto.getPrescriptionNo()); // 处方号 - medicationRequest.setTenantId(SecurityUtils.getLoginUser().getTenantId()); // 显式设置租户ID medicationRequest.setGroupId(adviceSaveDto.getGroupId()); // 组号 + medicationRequest.setTenantId(tenantId); // 设置租户id + medicationRequest.setCreateBy(currentUsername); // 设置创建人 + medicationRequest.setCreateTime(curDate); // 设置创建时间 if (is_sign) { medicationRequest.setSignCode(signCode); } @@ -598,8 +621,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp } if (is_save) { // 处理药品发放 - Long dispenseId - = iMedicationDispenseService.handleMedicationDispense(medicationRequest, adviceSaveDto.getDbOpType()); + Long dispenseId = iMedicationDispenseService.handleMedicationDispense(medicationRequest, + adviceSaveDto.getDbOpType()); // 保存药品费用项 chargeItem = new ChargeItem(); @@ -624,6 +647,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp chargeItem.setConditionId(adviceSaveDto.getConditionId()); // 诊断id chargeItem.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); // 就诊诊断id chargeItem.setDispenseId(dispenseId); // 发放ID + chargeItem.setTenantId(tenantId); // 设置租户ID (修复本次报错) + chargeItem.setCreateBy(currentUsername); // 设置创建人 + chargeItem.setCreateTime(curDate); // 设置创建时间 chargeItem.setQuantityValue(adviceSaveDto.getQuantity()); // 数量 chargeItem.setQuantityUnit(adviceSaveDto.getUnitCode()); // 单位 @@ -648,6 +674,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp private void handDevice(List deviceList, Date curDate, String adviceOpType) { // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); + // 获取当前登录用户的tenantId + Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); + // 获取当前登录用户名 + String currentUsername = SecurityUtils.getUsername(); // 保存操作 boolean is_save = AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType); // 签发操作 @@ -656,9 +686,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 声明费用项 ChargeItem chargeItem; // 新增 + 修改 - List insertOrUpdateList - = deviceList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) - || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList()); + List insertOrUpdateList = deviceList.stream() + .filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) + || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) + .collect(Collectors.toList()); // 删除 List deleteList = deviceList.stream() .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); @@ -691,6 +722,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 显式设置审计字段,防止自动填充机制失效 deviceRequest.setCreateBy(SecurityUtils.getLoginUser().getUsername()); deviceRequest.setCreateTime(new Date()); + deviceRequest.setTenantId(tenantId); // 设置租户id + deviceRequest.setCreateBy(currentUsername); // 设置创建人 + deviceRequest.setCreateTime(curDate); // 设置创建时间 // 保存时,处理数据(请求,发放,账单) if (is_save) { @@ -720,12 +754,15 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp iDeviceRequestService.saveOrUpdate(deviceRequest); if (is_save) { // 处理耗材发放 - Long dispenseId - = iDeviceDispenseService.handleDeviceDispense(deviceRequest, adviceSaveDto.getDbOpType()); + Long dispenseId = iDeviceDispenseService.handleDeviceDispense(deviceRequest, + adviceSaveDto.getDbOpType()); // 保存耗材费用项 chargeItem = new ChargeItem(); chargeItem.setId(adviceSaveDto.getChargeItemId()); // 费用项id + chargeItem.setTenantId(tenantId); // 补全租户ID + chargeItem.setCreateBy(currentUsername); // 补全创建人 + chargeItem.setCreateTime(curDate); // 补全创建时间 chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo())); chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 @@ -768,6 +805,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp String signCode) { // 当前登录账号的科室id Long orgId = SecurityUtils.getLoginUser().getOrgId(); + // 获取当前登录用户的tenantId + Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); + // 获取当前登录用户名 + String currentUsername = SecurityUtils.getUsername(); // 保存操作 boolean is_save = AdviceOpType.SAVE_ADVICE.getCode().equals(adviceOpType); // 签发操作 @@ -776,9 +817,10 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 声明费用项 ChargeItem chargeItem; // 新增 + 修改 - List insertOrUpdateList - = activityList.stream().filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) - || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))).collect(Collectors.toList()); + List insertOrUpdateList = activityList.stream() + .filter(e -> (DbOpType.INSERT.getCode().equals(e.getDbOpType()) + || DbOpType.UPDATE.getCode().equals(e.getDbOpType()))) + .collect(Collectors.toList()); // 删除 List deleteList = activityList.stream() .filter(e -> DbOpType.DELETE.getCode().equals(e.getDbOpType())).collect(Collectors.toList()); @@ -797,7 +839,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp for (AdviceSaveDto adviceSaveDto : deleteList) { iServiceRequestService.removeById(adviceSaveDto.getRequestId());// 删除诊疗 iServiceRequestService.remove( - new LambdaQueryWrapper().eq(ServiceRequest::getParentId, adviceSaveDto.getRequestId()));// 删除诊疗套餐对应的子项 + new LambdaQueryWrapper().eq(ServiceRequest::getParentId, + adviceSaveDto.getRequestId()));// 删除诊疗套餐对应的子项 // 删除费用项 iChargeItemService.deleteByServiceTableAndId(CommonConstants.TableName.WOR_SERVICE_REQUEST, adviceSaveDto.getRequestId()); @@ -807,6 +850,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp serviceRequest = new ServiceRequest(); serviceRequest.setId(adviceSaveDto.getRequestId()); // 主键id serviceRequest.setStatusEnum(is_save ? RequestStatus.DRAFT.getValue() : RequestStatus.ACTIVE.getValue());// 请求状态 + serviceRequest.setTenantId(tenantId); // 设置租户id + serviceRequest.setCreateBy(currentUsername); // 设置创建人 + serviceRequest.setCreateTime(curDate); // 设置创建时间 serviceRequest.setTenantId(SecurityUtils.getLoginUser().getTenantId()); // 显式设置租户ID if (is_sign) { serviceRequest.setSignCode(signCode); @@ -845,6 +891,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp if (is_save) { chargeItem = new ChargeItem(); chargeItem.setId(adviceSaveDto.getChargeItemId()); // 费用项id + chargeItem.setTenantId(tenantId); // 补全租户ID + chargeItem.setCreateBy(currentUsername); // 补全创建人 + chargeItem.setCreateTime(curDate); // 补全创建时间 chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态 chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo())); chargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); // 生成来源 @@ -868,11 +917,6 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp chargeItem.setUnitPrice(adviceSaveDto.getUnitPrice()); // 单价 chargeItem.setTotalPrice(adviceSaveDto.getTotalPrice()); // 总价 - // 显式设置审计字段,防止自动填充机制失效 - chargeItem.setTenantId(SecurityUtils.getLoginUser().getTenantId()); - chargeItem.setCreateBy(SecurityUtils.getLoginUser().getUsername()); - chargeItem.setCreateTime(new Date()); - iChargeItemService.saveOrUpdate(chargeItem); // 第一次保存时,处理诊疗套餐的子项信息 @@ -894,6 +938,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp } } } + // 只有在签发时 if (is_sign) { // 发送跨系统申请 diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java index 85bc48d9..c8a86f02 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationDiagnosisAppServiceImpl.java @@ -215,6 +215,12 @@ public class DoctorStationDiagnosisAppServiceImpl implements IDoctorStationDiagn condition.setYbNo(saveDiagnosisChildParam.getYbNo()); condition.setRecordedDatetime(new Date()); condition.setRecorderId(SecurityUtils.getLoginUser().getPractitionerId());// 记录人 + // 设置租户ID,避免数据库约束错误 + condition.setTenantId(SecurityUtils.getLoginUser().getTenantId()); + // 设置创建人,避免数据库约束错误 + condition.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + // 设置创建时间,避免数据库约束错误 + condition.setCreateTime(new Date()); iConditionService.saveOrUpdate(condition); saveDiagnosisChildParam.setConditionId(condition.getId()); } @@ -230,6 +236,12 @@ public class DoctorStationDiagnosisAppServiceImpl implements IDoctorStationDiagn encounterDiagnosis.setMedTypeCode(saveDiagnosisChildParam.getMedTypeCode());// 医疗类型 encounterDiagnosis.setDiagnosisDesc(saveDiagnosisChildParam.getDiagnosisDesc()); // 诊断描述 encounterDiagnosis.setIptDiseTypeCode(saveDiagnosisChildParam.getIptDiseTypeCode()); // 患者疾病诊断类型代码 + // 设置租户ID,避免数据库约束错误 + encounterDiagnosis.setTenantId(SecurityUtils.getLoginUser().getTenantId()); + // 设置创建人,避免数据库约束错误 + encounterDiagnosis.setCreateBy(SecurityUtils.getLoginUser().getUsername()); + // 设置创建时间,避免数据库约束错误 + encounterDiagnosis.setCreateTime(new Date()); iEncounterDiagnosisService.saveOrUpdate(encounterDiagnosis); } return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"诊断"})); diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceBaseDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceBaseDto.java index 2827c391..3befa8fb 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceBaseDto.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceBaseDto.java @@ -111,6 +111,10 @@ public class AdviceBaseDto { @Dict(dictCode = "activity_category_code") private Integer activityType; private String activityType_dictText; + /** + * 活动类型枚举文本 (手动赋值用) + */ + private String activityType_enumText; /** * 是否皮试 diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java index 9fda4e41..93a3263b 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/medication/service/impl/MedicationDispenseServiceImpl.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.core.common.enums.DelFlag; import com.core.common.utils.AssignSeqUtil; import com.core.common.utils.DateUtils; +import com.core.common.utils.SecurityUtils; import com.openhis.common.enums.AssignSeqEnum; import com.openhis.common.enums.DispenseStatus; import com.openhis.medication.domain.MedicationDispense; @@ -29,301 +30,344 @@ import java.util.List; */ @Service public class MedicationDispenseServiceImpl extends ServiceImpl - implements IMedicationDispenseService { + implements IMedicationDispenseService { - @Resource - AssignSeqUtil assignSeqUtil; + @Resource + AssignSeqUtil assignSeqUtil; - /** - * 处理药品发放信息 - * - * @param medicationRequest 药品请求信息 - * @param dbOpType db操作类型 - * @return 发放id - */ - @Override - public Long handleMedicationDispense(MedicationRequest medicationRequest, String dbOpType) { - MedicationDispense medicationDispense = new MedicationDispense(); - // 药品发放id - medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4)); - // 药品发放状态 - medicationDispense.setStatusEnum(DispenseStatus.DRAFT.getValue()); - // 状态变更时间 - medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); - // 发药类型 - medicationDispense.setDispenseEnum(medicationRequest.getCategoryEnum()); - // 药品编码 - medicationDispense.setMedicationId(medicationRequest.getMedicationId()); - // 请求数量 - medicationDispense.setQuantity(medicationRequest.getQuantity()); - // 请求单位编码 - medicationDispense.setUnitCode(medicationRequest.getUnitCode()); - // 产品批号 - medicationDispense.setLotNumber(medicationRequest.getLotNumber()); - // 患者id - medicationDispense.setPatientId(medicationRequest.getPatientId()); - // 就诊id - medicationDispense.setEncounterId(medicationRequest.getEncounterId()); - // 支持用药信息 - medicationDispense.setSupportInfo(medicationRequest.getSupportInfo()); - // 发药人 - medicationDispense.setPractitionerId(medicationRequest.getPractitionerId()); - // 发放药房 - medicationDispense.setLocationId(medicationRequest.getPerformLocation()); - // 药品请求id - medicationDispense.setMedReqId(medicationRequest.getId()); - // 已发药数量 - medicationDispense.setDispenseQuantity(BigDecimal.ZERO); - // 用法 - medicationDispense.setMethodCode(medicationRequest.getMethodCode()); - // 用药频次 - medicationDispense.setFrequencyCode(medicationRequest.getRateCode()); - // 单次剂量 - medicationDispense.setDose(medicationRequest.getDose()); - // 剂量单位 - medicationDispense.setDoseUnitCode(medicationRequest.getDoseUnitCode()); - // 单次最大剂量 - medicationDispense.setMaxUnit(medicationRequest.getMaxDose()); + /** + * 处理药品发放信息 + * + * @param medicationRequest 药品请求信息 + * @param dbOpType db操作类型 + * @return 发放id + */ + @Override + public Long handleMedicationDispense(MedicationRequest medicationRequest, String dbOpType) { + MedicationDispense medicationDispense = new MedicationDispense(); + // 药品发放id + medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4)); + // 药品发放状态 + medicationDispense.setStatusEnum(DispenseStatus.DRAFT.getValue()); + // 状态变更时间 + medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); - // 获取当前时间 - LocalDateTime now = LocalDateTime.now(); - // 增加2小时 - LocalDateTime newTime = now.plusHours(2); - // 转换为Date对象(如果需要保持使用Date类型) - Date limitTime = Date.from(newTime.atZone(ZoneId.systemDefault()).toInstant()); - // 设置限制发药时间 - medicationDispense.setLimitTime(limitTime); + // 【关键修改】设置创建时间,解决数据库 not-null 报错 + medicationDispense.setCreateTime(DateUtils.getNowDate()); - baseMapper.insert(medicationDispense); + // 发药类型 + medicationDispense.setDispenseEnum(medicationRequest.getCategoryEnum()); + // 药品编码 + medicationDispense.setMedicationId(medicationRequest.getMedicationId()); + // 请求数量 + medicationDispense.setQuantity(medicationRequest.getQuantity()); + // 请求单位编码 + medicationDispense.setUnitCode(medicationRequest.getUnitCode()); + // 产品批号 + medicationDispense.setLotNumber(medicationRequest.getLotNumber()); + // 患者id + medicationDispense.setPatientId(medicationRequest.getPatientId()); + // 就诊id + medicationDispense.setEncounterId(medicationRequest.getEncounterId()); + // 支持用药信息 + medicationDispense.setSupportInfo(medicationRequest.getSupportInfo()); + // 发药人 + medicationDispense.setPractitionerId(medicationRequest.getPractitionerId()); + // 发放药房 + medicationDispense.setLocationId(medicationRequest.getPerformLocation()); + // 药品请求id + medicationDispense.setMedReqId(medicationRequest.getId()); + // 已发药数量 + medicationDispense.setDispenseQuantity(BigDecimal.ZERO); + // 用法 + medicationDispense.setMethodCode(medicationRequest.getMethodCode()); + // 用药频次 + medicationDispense.setFrequencyCode(medicationRequest.getRateCode()); + // 单次剂量 + medicationDispense.setDose(medicationRequest.getDose()); + // 剂量单位 + medicationDispense.setDoseUnitCode(medicationRequest.getDoseUnitCode()); + // 单次最大剂量 + medicationDispense.setMaxUnit(medicationRequest.getMaxDose()); -// if (DbOpType.INSERT.getCode().equals(dbOpType)) { -// baseMapper.insert(medicationDispense); -// } else if (DbOpType.UPDATE.getCode().equals(dbOpType)) { -// baseMapper.update(medicationDispense, new LambdaUpdateWrapper() -// .eq(MedicationDispense::getMedReqId, medicationRequest.getId())); -// } - return medicationDispense.getId(); - } + // 获取当前时间 + LocalDateTime now = LocalDateTime.now(); + // 增加2小时 + LocalDateTime newTime = now.plusHours(2); + // 转换为Date对象 + Date limitTime = Date.from(newTime.atZone(ZoneId.systemDefault()).toInstant()); + // 设置限制发药时间 + medicationDispense.setLimitTime(limitTime); - /** - * 医嘱执行生成药品发放,状态为待配药 - * - * @param medicationRequest 药品医嘱请求 - * @param procedureId 执行记录id - * @param plannedDispenseTime 预定发药时间 - * @return 发放id - */ - @Override - public Long generateMedicationDispense(MedicationRequest medicationRequest, Long procedureId, - Date plannedDispenseTime) { - MedicationDispense medicationDispense = new MedicationDispense(); - // 执行id - medicationDispense.setProcedureId(procedureId); - // 预定发药时间 - medicationDispense.setPlannedDispenseTime(plannedDispenseTime); - // 药品发放id - medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4)); - // 药品发放状态 - medicationDispense.setStatusEnum(DispenseStatus.PREPARATION.getValue()); - // 状态变更时间 - medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); - // 发药类型 - medicationDispense.setDispenseEnum(medicationRequest.getCategoryEnum()); - // 药品编码 - medicationDispense.setMedicationId(medicationRequest.getMedicationId()); - // 请求数量 - medicationDispense.setQuantity(medicationRequest.getQuantity()); - // 请求单位编码 - medicationDispense.setUnitCode(medicationRequest.getUnitCode()); - // 产品批号 - medicationDispense.setLotNumber(medicationRequest.getLotNumber()); - // 患者id - medicationDispense.setPatientId(medicationRequest.getPatientId()); - // 就诊id - medicationDispense.setEncounterId(medicationRequest.getEncounterId()); - // 支持用药信息 - medicationDispense.setSupportInfo(medicationRequest.getSupportInfo()); - // 发药人 - medicationDispense.setPractitionerId(medicationRequest.getPractitionerId()); - // 发放药房 - medicationDispense.setLocationId(medicationRequest.getPerformLocation()); - // 药品请求id - medicationDispense.setMedReqId(medicationRequest.getId()); - // 已发药数量 - medicationDispense.setDispenseQuantity(BigDecimal.ZERO); - // 用法 - medicationDispense.setMethodCode(medicationRequest.getMethodCode()); - // 用药频次 - medicationDispense.setFrequencyCode(medicationRequest.getRateCode()); - // 单次剂量 - medicationDispense.setDose(medicationRequest.getDose()); - // 剂量单位 - medicationDispense.setDoseUnitCode(medicationRequest.getDoseUnitCode()); - // 单次最大剂量 - medicationDispense.setMaxUnit(medicationRequest.getMaxDose()); - // 获取当前时间 - LocalDateTime now = LocalDateTime.now(); - // 增加12小时 - LocalDateTime newTime = now.plusHours(12); - // 转换为Date对象(如果需要保持使用Date类型) - Date limitTime = Date.from(newTime.atZone(ZoneId.systemDefault()).toInstant()); - // 设置限制发药时间 - medicationDispense.setLimitTime(limitTime); + // 【关键修改】手动设置租户ID和创建人,确保 create_by 非空 + try { + // 尝试获取当前登录用户 + medicationDispense.setTenantId(SecurityUtils.getLoginUser().getTenantId()); + medicationDispense.setCreateBy(SecurityUtils.getUsername()); + } catch (Exception e) { + // 如果获取失败(如系统自动执行),使用默认值兜底,防止数据库报错 + medicationDispense.setTenantId(1); + medicationDispense.setCreateBy("system"); + } - baseMapper.insert(medicationDispense); + // 执行插入 + // 注意:如果您需要区分新增和修改,请取消下面注释并根据 dbOpType 判断 + // if (DbOpType.UPDATE.getCode().equals(dbOpType)) { + // baseMapper.update(medicationDispense, new LambdaUpdateWrapper() + // .eq(MedicationDispense::getMedReqId, medicationRequest.getId())); + // } else { + baseMapper.insert(medicationDispense); + // } - return medicationDispense.getId(); - } + return medicationDispense.getId(); + } - /** - * 删除药品发放信息 - * - * @param medReqId 药品请求id - */ - @Override - public void deleteMedicationDispense(Long medReqId) { - baseMapper.delete(new LambdaQueryWrapper().eq(MedicationDispense::getMedReqId, medReqId)); - } + /** + * 医嘱执行生成药品发放,状态为待配药 + * + * @param medicationRequest 药品医嘱请求 + * @param procedureId 执行记录id + * @param plannedDispenseTime 预定发药时间 + * @return 发放id + */ + @Override + public Long generateMedicationDispense(MedicationRequest medicationRequest, Long procedureId, + Date plannedDispenseTime) { + MedicationDispense medicationDispense = new MedicationDispense(); + // 执行id + medicationDispense.setProcedureId(procedureId); + // 预定发药时间 + medicationDispense.setPlannedDispenseTime(plannedDispenseTime); + // 药品发放id + medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4)); + // 药品发放状态 + medicationDispense.setStatusEnum(DispenseStatus.PREPARATION.getValue()); + // 状态变更时间 + medicationDispense.setStatusChangedTime(DateUtils.getNowDate()); + // 发药类型 + medicationDispense.setDispenseEnum(medicationRequest.getCategoryEnum()); + // 药品编码 + medicationDispense.setMedicationId(medicationRequest.getMedicationId()); + // 请求数量 + medicationDispense.setQuantity(medicationRequest.getQuantity()); + // 请求单位编码 + medicationDispense.setUnitCode(medicationRequest.getUnitCode()); + // 产品批号 + medicationDispense.setLotNumber(medicationRequest.getLotNumber()); + // 患者id + medicationDispense.setPatientId(medicationRequest.getPatientId()); + // 就诊id + medicationDispense.setEncounterId(medicationRequest.getEncounterId()); + // 支持用药信息 + medicationDispense.setSupportInfo(medicationRequest.getSupportInfo()); + // 发药人 + medicationDispense.setPractitionerId(medicationRequest.getPractitionerId()); + // 发放药房 + medicationDispense.setLocationId(medicationRequest.getPerformLocation()); + // 药品请求id + medicationDispense.setMedReqId(medicationRequest.getId()); + // 已发药数量 + medicationDispense.setDispenseQuantity(BigDecimal.ZERO); + // 用法 + medicationDispense.setMethodCode(medicationRequest.getMethodCode()); + // 用药频次 + medicationDispense.setFrequencyCode(medicationRequest.getRateCode()); + // 单次剂量 + medicationDispense.setDose(medicationRequest.getDose()); + // 剂量单位 + medicationDispense.setDoseUnitCode(medicationRequest.getDoseUnitCode()); + // 单次最大剂量 + medicationDispense.setMaxUnit(medicationRequest.getMaxDose()); - /** - * 更新未发放药品状态:停止发放 - * - * @param medDisIdList 发放id列表 - * @param refund 停止原因:退费 - */ - @Override - public void updateStopDispenseStatus(List medDisIdList, Integer refund) { - baseMapper.update( - new MedicationDispense().setStatusEnum(DispenseStatus.STOPPED.getValue()).setNotPerformedReasonEnum(refund), - new LambdaUpdateWrapper().in(MedicationDispense::getId, medDisIdList)); - } + // 获取当前时间 + LocalDateTime now = LocalDateTime.now(); + // 增加12小时 + LocalDateTime newTime = now.plusHours(12); + // 转换为Date对象(如果需要保持使用Date类型) + Date limitTime = Date.from(newTime.atZone(ZoneId.systemDefault()).toInstant()); + // 设置限制发药时间 + medicationDispense.setLimitTime(limitTime); + // 手动设置租户ID和创建人 + try { + medicationDispense.setTenantId(SecurityUtils.getLoginUser().getTenantId()); + medicationDispense.setCreateBy(SecurityUtils.getUsername()); + } catch (Exception e) { + // 如果获取登录用户信息失败,使用默认值 + medicationDispense.setTenantId(1); // 默认租户ID + medicationDispense.setCreateBy("system"); // 默认创建人 + } - /** - * 更新药品状态:待配药 - * - * @param medicationRequestIdList 请求id列表 - */ - @Override - public void updatePreparationDispenseStatus(List medicationRequestIdList) { - baseMapper.update(null, - new LambdaUpdateWrapper() - .set(MedicationDispense::getStatusEnum, DispenseStatus.PREPARATION.getValue()) - .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) - .in(MedicationDispense::getMedReqId, medicationRequestIdList)); - } + baseMapper.insert(medicationDispense); - /** - * 更新药品状态:暂停 - * - * @param medReqIdList 请求id列表 - */ - @Override - public void updateOnHoldDispenseStatus(List medReqIdList) { - baseMapper.update(null, - new LambdaUpdateWrapper() - .set(MedicationDispense::getStatusEnum, DispenseStatus.ON_HOLD.getValue()) - .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) - .in(MedicationDispense::getMedReqId, medReqIdList)); - } + return medicationDispense.getId(); + } - /** - * 验证是否发过药 - * - * @param medicationDefId 药品定义id - * @return 验证结果 - */ - @Override - public boolean verifyAbleEdit(Long medicationDefId) { - return baseMapper.exists( - new LambdaQueryWrapper().eq(MedicationDispense::getMedicationId, medicationDefId) - .and(q -> q.eq(MedicationDispense::getStatusEnum, DispenseStatus.COMPLETED.getValue()).or() - .eq(MedicationDispense::getStatusEnum, DispenseStatus.REFUNDED.getValue())) - .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); - } + /** + * 删除药品发放信息 + * + * @param medReqId 药品请求id + */ + @Override + public void deleteMedicationDispense(Long medReqId) { + baseMapper.delete(new LambdaQueryWrapper().eq(MedicationDispense::getMedReqId, + medReqId)); + } - /** - * 通过请求id获取药品发放信息 - * - * @param requestIdList 请求id - * @return 发放信息 - */ - @Override - public List selectByRequestIdList(List requestIdList) { - return baseMapper - .selectList(new LambdaQueryWrapper().in(MedicationDispense::getMedReqId, requestIdList) - .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); - } + /** + * 更新未发放药品状态:停止发放 + * + * @param medDisIdList 发放id列表 + * @param refund 停止原因:退费 + */ + @Override + public void updateStopDispenseStatus(List medDisIdList, Integer refund) { + baseMapper.update( + new MedicationDispense().setStatusEnum(DispenseStatus.STOPPED.getValue()) + .setNotPerformedReasonEnum(refund), + new LambdaUpdateWrapper().in(MedicationDispense::getId, + medDisIdList)); + } - /** - * 更新药品状态:已汇总 - * - * @param medDispenseId 发放id列表 - */ - @Override - public void updateDispenseStatusSummarized(List medDispenseId, String busNo) { - baseMapper.update(null, - new LambdaUpdateWrapper() - .set(MedicationDispense::getStatusEnum, DispenseStatus.SUMMARIZED.getValue()) - .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) - .set(MedicationDispense::getSummaryNo, busNo).in(MedicationDispense::getId, medDispenseId) - .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); - } + /** + * 更新药品状态:待配药 + * + * @param medicationRequestIdList 请求id列表 + */ + @Override + public void updatePreparationDispenseStatus(List medicationRequestIdList) { + baseMapper.update(null, + new LambdaUpdateWrapper() + .set(MedicationDispense::getStatusEnum, + DispenseStatus.PREPARATION.getValue()) + .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) + .in(MedicationDispense::getMedReqId, medicationRequestIdList)); + } - /** - * 通过执行id获取药品发放信息 - * - * @param procedureIdList 执行id列表 - * @return 发放信息 - */ - @Override - public List getMedDispenseByProcedureId(List procedureIdList) { - return baseMapper.selectList( - new LambdaQueryWrapper().in(MedicationDispense::getProcedureId, procedureIdList) - .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); - } + /** + * 更新药品状态:暂停 + * + * @param medReqIdList 请求id列表 + */ + @Override + public void updateOnHoldDispenseStatus(List medReqIdList) { + baseMapper.update(null, + new LambdaUpdateWrapper() + .set(MedicationDispense::getStatusEnum, + DispenseStatus.ON_HOLD.getValue()) + .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) + .in(MedicationDispense::getMedReqId, medReqIdList)); + } - /** - * 取消汇总 - * - * @param summaryNoList 汇总单号 - * @return 取消结果 - */ - @Override - public boolean cancelMedicationSummary(List summaryNoList) { - int result = baseMapper.update(null, - new LambdaUpdateWrapper() - .set(MedicationDispense::getStatusEnum, DispenseStatus.PREPARATION.getValue()) - .set(MedicationDispense::getSummaryNo, null).in(MedicationDispense::getSummaryNo, summaryNoList) - .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); - return result > 0; - } + /** + * 验证是否发过药 + * + * @param medicationDefId 药品定义id + * @return 验证结果 + */ + @Override + public boolean verifyAbleEdit(Long medicationDefId) { + return baseMapper.exists( + new LambdaQueryWrapper() + .eq(MedicationDispense::getMedicationId, medicationDefId) + .and(q -> q.eq(MedicationDispense::getStatusEnum, + DispenseStatus.COMPLETED.getValue()).or() + .eq(MedicationDispense::getStatusEnum, + DispenseStatus.REFUNDED.getValue())) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + } - /** - * 更新药品发放状态 - * - * @param dispenseIdList 发放id列表 - * @param dispenseStatus 发放状态 - */ - @Override - public void updateDispenseStatus(List dispenseIdList, Integer dispenseStatus) { - baseMapper.update(null, - new LambdaUpdateWrapper().set(MedicationDispense::getStatusEnum, dispenseStatus) - .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) - .in(MedicationDispense::getId, dispenseIdList) - .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); - } + /** + * 通过请求id获取药品发放信息 + * + * @param requestIdList 请求id + * @return 发放信息 + */ + @Override + public List selectByRequestIdList(List requestIdList) { + return baseMapper + .selectList(new LambdaQueryWrapper() + .in(MedicationDispense::getMedReqId, requestIdList) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + } - /** - * 通过汇总单号获取药品发放信息 - * - * @param summaryNoList 汇总单号列表 - * @return 发放信息 - */ - @Override - public List getMedDispenseBySummaryNo(List summaryNoList) { - return baseMapper - .selectList(new LambdaQueryWrapper().in(MedicationDispense::getSummaryNo, summaryNoList) - .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode()) - .eq(MedicationDispense::getStatusEnum, DispenseStatus.SUMMARIZED.getValue())); - } + /** + * 更新药品状态:已汇总 + * + * @param medDispenseId 发放id列表 + */ + @Override + public void updateDispenseStatusSummarized(List medDispenseId, String busNo) { + baseMapper.update(null, + new LambdaUpdateWrapper() + .set(MedicationDispense::getStatusEnum, + DispenseStatus.SUMMARIZED.getValue()) + .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) + .set(MedicationDispense::getSummaryNo, busNo) + .in(MedicationDispense::getId, medDispenseId) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + } + + /** + * 通过执行id获取药品发放信息 + * + * @param procedureIdList 执行id列表 + * @return 发放信息 + */ + @Override + public List getMedDispenseByProcedureId(List procedureIdList) { + return baseMapper.selectList( + new LambdaQueryWrapper() + .in(MedicationDispense::getProcedureId, procedureIdList) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + } + + /** + * 取消汇总 + * + * @param summaryNoList 汇总单号 + * @return 取消结果 + */ + @Override + public boolean cancelMedicationSummary(List summaryNoList) { + int result = baseMapper.update(null, + new LambdaUpdateWrapper() + .set(MedicationDispense::getStatusEnum, + DispenseStatus.PREPARATION.getValue()) + .set(MedicationDispense::getSummaryNo, null) + .in(MedicationDispense::getSummaryNo, summaryNoList) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + return result > 0; + } + + /** + * 更新药品发放状态 + * + * @param dispenseIdList 发放id列表 + * @param dispenseStatus 发放状态 + */ + @Override + public void updateDispenseStatus(List dispenseIdList, Integer dispenseStatus) { + baseMapper.update(null, + new LambdaUpdateWrapper() + .set(MedicationDispense::getStatusEnum, dispenseStatus) + .set(MedicationDispense::getStatusChangedTime, DateUtils.getNowDate()) + .in(MedicationDispense::getId, dispenseIdList) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode())); + } + + /** + * 通过汇总单号获取药品发放信息 + * + * @param summaryNoList 汇总单号列表 + * @return 发放信息 + */ + @Override + public List getMedDispenseBySummaryNo(List summaryNoList) { + return baseMapper + .selectList(new LambdaQueryWrapper() + .in(MedicationDispense::getSummaryNo, summaryNoList) + .eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode()) + .eq(MedicationDispense::getStatusEnum, + DispenseStatus.SUMMARIZED.getValue())); + } } diff --git a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java index 5928c13f..36ecd8e3 100644 --- a/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java +++ b/openhis-server-new/openhis-domain/src/main/java/com/openhis/workflow/service/impl/DeviceDispenseServiceImpl.java @@ -77,6 +77,9 @@ public class DeviceDispenseServiceImpl extends ServiceImpl { - console.log('[adviceBaseList] getList() 响应数据:', { - total: res.data?.total, - recordsCount: res.data?.records?.length || 0, - firstRecord: res.data?.records?.[0]?.adviceName || '无数据', - adviceType: queryParams.value.adviceType - }); - adviceBaseList.value = res.data.records || []; - total.value = res.data.total || 0; - nextTick(() => { - currentIndex.value = 0; - if (adviceBaseList.value.length > 0) { - adviceBaseRef.value?.setCurrentRow(adviceBaseList.value[0]); - } - }); - }).catch((err) => { - console.error('[adviceBaseList] getList() 请求失败:', err); - adviceBaseList.value = []; - total.value = 0; - }); } // 处理键盘事件 diff --git a/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue b/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue index 58772e5a..1f1ef711 100644 --- a/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/prescription/prescriptionlist.vue @@ -7,20 +7,10 @@ 保存 签发 撤回 - + 组套 - + 历史 组合 @@ -28,22 +18,13 @@ 删除 诊断: - + 费用性质: - + 合计金额:{{ totalAmount ? totalAmount.toFixed(2) : 0 }}元 @@ -67,26 +48,12 @@ 刷新 - +