From d47c83eec543382ae1118d63ccc3ba8ed0eee268 Mon Sep 17 00:00:00 2001 From: Ranyunqiao <2499115710@qq.com> Date: Tue, 9 Jun 2026 15:46:52 +0800 Subject: [PATCH] bug 699 --- .../IInHospitalRegisterAppService.java | 16 ++ .../InHospitalRegisterAppServiceImpl.java | 180 ++++++++++++++++++ .../InHospitalRegisterController.java | 22 +++ .../dto/InHospitalRegisterQueryDto.java | 5 + ...WesternMedicineDispenseAppServiceImpl.java | 2 + .../InHospitalRegisterAppMapper.xml | 6 +- .../his/common/enums/EncounterZyStatus.java | 4 +- .../register/components/accomplishList.vue | 135 ++++++++++--- .../charge/register/components/api.js | 17 ++ .../register/components/patientRegister.vue | 56 +++++- .../register/components/registerForm.vue | 54 ++++-- node_modules/.vite/deps/_metadata.json | 8 - node_modules/.vite/deps/package.json | 3 - 13 files changed, 442 insertions(+), 66 deletions(-) delete mode 100644 node_modules/.vite/deps/_metadata.json delete mode 100644 node_modules/.vite/deps/package.json diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/appservice/IInHospitalRegisterAppService.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/appservice/IInHospitalRegisterAppService.java index 4ac9f5e04..9bca10e3d 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/appservice/IInHospitalRegisterAppService.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/appservice/IInHospitalRegisterAppService.java @@ -99,4 +99,20 @@ public interface IInHospitalRegisterAppService { * @return 病区列表 */ List getWardList(Long orgId); + + /** + * 修改住院登记信息 + * + * @param inHospitalInfoDto 登记dto + * @return 结果 + */ + R updateRegistration(InHospitalInfoDto inHospitalInfoDto); + + /** + * 作废住院登记 + * + * @param encounterId 住院就诊id + * @return 结果 + */ + R voidRegistration(Long encounterId); } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/appservice/impl/InHospitalRegisterAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/appservice/impl/InHospitalRegisterAppServiceImpl.java index f83f05090..e8eb82a25 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/appservice/impl/InHospitalRegisterAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/appservice/impl/InHospitalRegisterAppServiceImpl.java @@ -84,6 +84,9 @@ public class InHospitalRegisterAppServiceImpl implements IInHospitalRegisterAppS @Resource private YbManager ybManager; + @Resource + private IChargeItemService iChargeItemService; + /** * 门诊医生开住院申请 * @@ -362,6 +365,183 @@ public class InHospitalRegisterAppServiceImpl implements IInHospitalRegisterAppS return locationDtoList; } + /** + * 修改住院登记信息 + * + * @param inHospitalInfoDto 登记dto + * @return 结果 + */ + @Override + public R updateRegistration(InHospitalInfoDto inHospitalInfoDto) { + Long encounterId = inHospitalInfoDto.getEncounterId(); + if (encounterId == null) { + throw new ServiceException("就诊ID不能为空"); + } + Encounter encounter = iEncounterService.getById(encounterId); + if (encounter == null) { + throw new ServiceException("未找到该住院登记记录"); + } + // 仅"待入科"状态可修改 + if (!EncounterZyStatus.REGISTERED.getValue().equals(encounter.getStatusEnum())) { + throw new ServiceException("患者已入科接收,无法修改登记信息"); + } + + // 更新就诊信息 + encounter.setOrganizationId(inHospitalInfoDto.getInHospitalOrgId()); // 住院科室 + encounter.setPriorityEnum(inHospitalInfoDto.getPriorityEnum()); // 优先级(患者病情) + encounter.setAdmitSourceCode(inHospitalInfoDto.getAdmitSourceCode()); // 入院类型 + encounter.setInWayCode(inHospitalInfoDto.getInWayCode()); // 入院方式 + encounter.setStartTime(inHospitalInfoDto.getStartTime()); // 入院日期 + encounter.setRegistrarId(SecurityUtils.getLoginUser().getPractitionerId()); // 登记员 + iEncounterService.saveOrUpdate(encounter); + + // 更新病区信息 + EncounterLocation encounterLocation = iEncounterLocationService.getOne( + new LambdaQueryWrapper() + .eq(EncounterLocation::getEncounterId, encounterId) + .eq(EncounterLocation::getFormEnum, LocationForm.WARD.getValue())); + if (inHospitalInfoDto.getWardLocationId() != null) { + EncounterLocation encounterLocationReg = new EncounterLocation(); + if (encounterLocation != null) { + encounterLocationReg.setId(encounterLocation.getId()); + } + encounterLocationReg.setEncounterId(encounterId); + encounterLocationReg.setLocationId(inHospitalInfoDto.getWardLocationId()); + encounterLocationReg.setFormEnum(LocationForm.WARD.getValue()); + iEncounterLocationService.saveOrUpdate(encounterLocationReg); + } + + // 更新费用性质(contractNo)对应的账户信息 + if (inHospitalInfoDto.getContractNo() != null) { + boolean selfFunded = CommonConstants.BusinessName.DEFAULT_CONTRACT_NO.equals(inHospitalInfoDto.getContractNo()); + + // 查找自费账户(type_code='04') + Account cashAccount = iAccountService.getOne( + new LambdaQueryWrapper() + .eq(Account::getEncounterId, encounterId) + .eq(Account::getTypeCode, AccountType.PERSONAL_CASH_ACCOUNT.getCode())); + + // 查找非自费账户 + Account contractAccount = iAccountService.getOne( + new LambdaQueryWrapper() + .eq(Account::getEncounterId, encounterId) + .ne(Account::getTypeCode, AccountType.PERSONAL_CASH_ACCOUNT.getCode())); + + if (selfFunded) { + // 改为自费 + if (cashAccount != null) { + cashAccount.setContractNo(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO); + cashAccount.setEncounterFlag(Whether.YES.getValue()); + iAccountService.saveOrUpdate(cashAccount); + } else { + // 不存在自费账户时,创建一个 + Account newCashAccount = new Account(); + newCashAccount.setTypeCode(AccountType.PERSONAL_CASH_ACCOUNT.getCode()); + newCashAccount.setPatientId(encounter.getPatientId()); + newCashAccount.setEncounterId(encounterId); + newCashAccount.setContractNo(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO); + newCashAccount.setEncounterFlag(Whether.YES.getValue()); + newCashAccount.setBalanceAmount(BigDecimal.ZERO); + iAccountService.save(newCashAccount); + } + // 删除非自费账户 + if (contractAccount != null) { + iAccountService.removeById(contractAccount.getId()); + } + } else { + // 改为非自费 + if (cashAccount != null) { + cashAccount.setEncounterFlag(Whether.NO.getValue()); + iAccountService.saveOrUpdate(cashAccount); + } else { + // 不存在自费账户时,创建一个 + Account newCashAccount = new Account(); + newCashAccount.setTypeCode(AccountType.PERSONAL_CASH_ACCOUNT.getCode()); + newCashAccount.setPatientId(encounter.getPatientId()); + newCashAccount.setEncounterId(encounterId); + newCashAccount.setContractNo(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO); + newCashAccount.setEncounterFlag(Whether.NO.getValue()); + newCashAccount.setBalanceAmount(BigDecimal.ZERO); + iAccountService.save(newCashAccount); + } + // 更新或创建非自费账户 + String typeCode = StringUtils.isNotEmpty(inHospitalInfoDto.getTypeCoce()) + ? inHospitalInfoDto.getTypeCoce() + : AccountType.PERSONAL_CASH_ACCOUNT.getCode(); + if (contractAccount != null) { + contractAccount.setContractNo(inHospitalInfoDto.getContractNo()); + iAccountService.saveOrUpdate(contractAccount); + } else { + Account newAccount = new Account(); + newAccount.setTypeCode(typeCode); + newAccount.setPatientId(encounter.getPatientId()); + newAccount.setEncounterId(encounterId); + newAccount.setContractNo(inHospitalInfoDto.getContractNo()); + newAccount.setEncounterFlag(Whether.YES.getValue()); + iAccountService.save(newAccount); + } + } + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"住院登记"})); + } + + /** + * 作废住院登记 + * + * @param encounterId 住院就诊id + * @return 结果 + */ + @Override + public R voidRegistration(Long encounterId) { + if (encounterId == null) { + throw new ServiceException("就诊ID不能为空"); + } + Encounter encounter = iEncounterService.getById(encounterId); + if (encounter == null) { + throw new ServiceException("未找到该住院登记记录"); + } + // 仅"待入科"状态可作废 + if (!EncounterZyStatus.REGISTERED.getValue().equals(encounter.getStatusEnum())) { + throw new ServiceException("该患者已入科,请先通知护士站办理退科处理!"); + } + + // 检查预交金余额 + Account cashAccount = iAccountService.getOne( + new LambdaQueryWrapper() + .eq(Account::getEncounterId, encounterId) + .eq(Account::getTypeCode, AccountType.PERSONAL_CASH_ACCOUNT.getCode())); + if (cashAccount != null && cashAccount.getBalanceAmount() != null + && cashAccount.getBalanceAmount().compareTo(BigDecimal.ZERO) > 0) { + throw new ServiceException("该患者存在未退清的预交金,请先前往预交金页面办理退款!"); + } + + // 检查是否已产生计费 + long chargeCount = iChargeItemService.count( + new LambdaQueryWrapper() + .eq(ChargeItem::getEncounterId, encounterId)); + if (chargeCount > 0) { + throw new ServiceException("该患者已产生计费记录,无法作废登记!"); + } + + // 设置状态为已作废 + encounter.setStatusEnum(EncounterZyStatus.VOIDED.getValue()); + encounter.setRegistrarId(SecurityUtils.getLoginUser().getPractitionerId()); // 作废操作人 + iEncounterService.saveOrUpdate(encounter); + + // 清理账户记录 + if (cashAccount != null) { + iAccountService.removeById(cashAccount.getId()); + } + // 清理非自费账户 + iAccountService.remove( + new LambdaQueryWrapper() + .eq(Account::getEncounterId, encounterId) + .ne(Account::getTypeCode, AccountType.PERSONAL_CASH_ACCOUNT.getCode())); + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[]{"作废操作"})); + } + /** * 处理入院登记信息 * diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/controller/InHospitalRegisterController.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/controller/InHospitalRegisterController.java index d48b0aa93..2edb12f28 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/controller/InHospitalRegisterController.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/controller/InHospitalRegisterController.java @@ -142,4 +142,26 @@ public class InHospitalRegisterController { return R.ok(iInHospitalRegisterAppService.getWardList(orgId)); } + /** + * 修改住院登记信息 + * + * @param inHospitalInfoDto 登记dto + * @return 结果 + */ + @PutMapping(value = "/update-registration") + public R updateRegistration(@RequestBody InHospitalInfoDto inHospitalInfoDto) { + return iInHospitalRegisterAppService.updateRegistration(inHospitalInfoDto); + } + + /** + * 作废住院登记 + * + * @param encounterId 住院就诊id + * @return 结果 + */ + @PutMapping(value = "/void-registration") + public R voidRegistration(@RequestParam(value = "encounterId") Long encounterId) { + return iInHospitalRegisterAppService.voidRegistration(encounterId); + } + } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/dto/InHospitalRegisterQueryDto.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/dto/InHospitalRegisterQueryDto.java index 20d7faf09..c36e03203 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/dto/InHospitalRegisterQueryDto.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/inhospitalcharge/dto/InHospitalRegisterQueryDto.java @@ -95,4 +95,9 @@ public class InHospitalRegisterQueryDto { private String admitSourceCode; private String admitSourceCode_dictText; + /** + * 住院状态 + */ + private Integer statusEnum; + } diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java index 91377249e..1e9460f6a 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/pharmacymanage/appservice/impl/WesternMedicineDispenseAppServiceImpl.java @@ -155,6 +155,8 @@ public class WesternMedicineDispenseAppServiceImpl implements IWesternMedicineDi // 发药状态 List dispenseStatusOptions = new ArrayList<>(); + dispenseStatusOptions.add(new DispenseStatusOption(DispenseStatus.SUBMITTED.getValue(), + DispenseStatus.SUBMITTED.getInfo())); dispenseStatusOptions.add(new DispenseStatusOption(DispenseStatus.IN_PROGRESS.getValue(), DispenseStatus.IN_PROGRESS.getInfo())); dispenseStatusOptions.add(new DispenseStatusOption(DispenseStatus.COMPLETED.getValue(), diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalcharge/InHospitalRegisterAppMapper.xml b/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalcharge/InHospitalRegisterAppMapper.xml index 99f17153a..2bfcd98ed 100755 --- a/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalcharge/InHospitalRegisterAppMapper.xml +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/mapper/inhospitalcharge/InHospitalRegisterAppMapper.xml @@ -18,7 +18,8 @@ ihri.ward_name, ihri.contract_no, ihri.bus_no, - ihri.admit_source_code + ihri.admit_source_code, + ihri.status_enum from (SELECT ae.tenant_id, ae.ID AS encounter_id, ae.amb_encounter_id AS amb_encounter_id, @@ -32,7 +33,8 @@ al.NAME AS ward_name, aa.contract_no, ae.bus_no, - ae.admit_source_code + ae.admit_source_code, + ae.status_enum FROM adm_encounter AS ae LEFT JOIN adm_encounter AS ambae ON ae.amb_encounter_id = ambae. ID diff --git a/healthlink-his-server/healthlink-his-common/src/main/java/com/healthlink/his/common/enums/EncounterZyStatus.java b/healthlink-his-server/healthlink-his-common/src/main/java/com/healthlink/his/common/enums/EncounterZyStatus.java index 8fb9559a4..ceb055828 100755 --- a/healthlink-his-server/healthlink-his-common/src/main/java/com/healthlink/his/common/enums/EncounterZyStatus.java +++ b/healthlink-his-server/healthlink-his-common/src/main/java/com/healthlink/his/common/enums/EncounterZyStatus.java @@ -22,7 +22,9 @@ public enum EncounterZyStatus implements HisEnumInterface { PENDING_TRANSFER(6, "pending-transfer", "待转科"), - ALREADY_SETTLED(7, "already-settled", "已结算出院"); + ALREADY_SETTLED(7, "already-settled", "已结算出院"), + + VOIDED(8, "voided", "已作废"); @EnumValue private final Integer value; diff --git a/healthlink-his-ui/src/views/inHospitalManagement/charge/register/components/accomplishList.vue b/healthlink-his-ui/src/views/inHospitalManagement/charge/register/components/accomplishList.vue index 7b8997e2f..8cf5e8c94 100755 --- a/healthlink-his-ui/src/views/inHospitalManagement/charge/register/components/accomplishList.vue +++ b/healthlink-his-ui/src/views/inHospitalManagement/charge/register/components/accomplishList.vue @@ -18,17 +18,13 @@ 查询 - - - -
+ + + @@ -134,35 +178,32 @@ v-model:dialog-visible="patientRegisterVisible" :patient-info="patient" :in-hospital-info="inHospitalInfo" - title="登记" + :title="dialogTitle" :registration-type="registrationType" :already-edit="alreadyEdit" :no-file="noFile" - :is-registered="true" + :is-registered="!isEditMode" + :is-edit-mode="isEditMode" @ok-act="patientRegisterOK" @cancel-act="cancelAct" />