refactor: split IChargeBillServiceImpl into focused services

This commit is contained in:
2026-06-21 05:19:38 +08:00
parent 4460ceae66
commit 83671834ca
4 changed files with 2504 additions and 2708 deletions

View File

@@ -0,0 +1,611 @@
package com.healthlink.his.web.paymentmanage.appservice.impl;
import com.core.common.utils.JsonUtils;
import tools.jackson.databind.JsonNode;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.core.common.enums.DelFlag;
import com.core.common.exception.ServiceException;
import com.core.common.utils.*;
import com.healthlink.his.administration.domain.*;
import com.healthlink.his.administration.dto.ChargeItemBaseInfoDto;
import com.healthlink.his.administration.service.*;
import com.healthlink.his.clinical.domain.Condition;
import com.healthlink.his.clinical.domain.ConditionDefinition;
import com.healthlink.his.clinical.service.IConditionDefinitionService;
import com.healthlink.his.clinical.service.IConditionService;
import com.healthlink.his.common.constant.CommonConstants;
import com.healthlink.his.common.constant.YbCommonConstants;
import com.healthlink.his.common.enums.*;
import com.healthlink.his.yb.enums.YbPayment;
import com.healthlink.his.financial.domain.PaymentRecDetail;
import com.healthlink.his.financial.domain.PaymentReconciliation;
import com.healthlink.his.financial.service.IContractService;
import com.healthlink.his.financial.service.IPaymentRecDetailService;
import com.healthlink.his.financial.service.IPaymentReconciliationService;
import com.healthlink.his.medication.domain.Medication;
import com.healthlink.his.medication.domain.MedicationDefinition;
import com.healthlink.his.medication.service.IMedicationDefinitionService;
import com.healthlink.his.medication.service.IMedicationService;
import com.healthlink.his.web.paymentmanage.dto.*;
import com.healthlink.his.web.paymentmanage.mapper.ChargeBillMapper;
import com.healthlink.his.workflow.domain.ActivityDefinition;
import com.healthlink.his.workflow.domain.ServiceRequest;
import com.healthlink.his.workflow.service.IActivityDefinitionService;
import com.healthlink.his.workflow.service.IServiceRequestService;
import com.healthlink.his.yb.domain.InfoPerson;
import com.healthlink.his.yb.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 收费票据查询服务 - 处理票据查询/搜索相关方法
*/
@Component
@Slf4j
public class ChargeBillQueryService {
@Autowired
private IAccountService iAccountService;
@Autowired
private IEncounterService iEncounterService;
@Autowired
private IEncounterParticipantService iEncounterParticipantService;
@Autowired
private IInvoiceService iInvoiceService;
@Autowired
private IPaymentReconciliationService paymentReconciliationService;
@Autowired
private IPaymentRecDetailService paymentRecDetailService;
@Autowired
private IChargeItemService chargeItemService;
@Autowired
private IPatientService iPatientService;
@Autowired
private IChargeItemDefinitionService iChargeItemDefinitionService;
@Autowired
private IPerinfoService iPerinfoService;
@Autowired
private IEncounterDiagnosisService iEncounterDiagnosisService;
@Autowired
private IOrganizationService iOrganizationService;
@Autowired
private IConditionDefinitionService iConditionDefinitionService;
@Autowired
private IConditionService iConditionService;
@Autowired
private ChargeBillMapper chargeBillMapper;
@Autowired
private IMedicationService iMedicationService;
@Autowired
private IMedicationDefinitionService iMedicationDefinitionService;
@Autowired
private IDeviceDefinitionService iDeviceDefinitionService;
@Autowired
private IActivityDefinitionService iActivityDefinitionService;
@Autowired
private IServiceRequestService iServiceRequestService;
@Autowired
private IPractitionerService iPractitionerService;
@Autowired
private IHealthcareServiceService iHealthcareServiceService;
@Autowired
private IContractService iContractService;
public Map getDetail(Long paymentId) {
Map<String, Object> map = new HashMap<>();
PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(paymentId);
if (paymentReconciliation == null) {
throw new ServiceException("未查询到付款信息");
}
map.put("paymentId", paymentReconciliation.getPaymentNo());
map.put("paymentAmount", paymentReconciliation.getTenderedAmount());
Practitioner practitioner = iPractitionerService.getById(paymentReconciliation.getEntererId());
map.put("paymentEmployee", practitioner == null ? "" : practitioner.getName());
map.put("chargeTime", paymentReconciliation.getBillDate());
Patient patient = iPatientService.getById(paymentReconciliation.getPatientId());
if (patient == null) {
throw new ServiceException("未查询到患者信息");
}
map.put("patientName", patient.getName());
map.put("sex", patient.getGenderEnum());
map.put("idCardNo", patient.getIdCard());
map.put("birthDay", patient.getBirthDate());
map.put("age", AgeCalculatorUtil.calculateAge(patient.getBirthDate()));
Encounter encounter = iEncounterService.getById(paymentReconciliation.getEncounterId());
if (patient == null) {
throw new ServiceException("未查询到就诊信息");
}
map.put("classEnum", encounter.getYbClassEnum());
map.put("regNo", encounter.getBusNo());
List<EncounterParticipant> encounterParticipantListByTypeCode = iEncounterParticipantService.getEncounterParticipantListByTypeCode(encounter.getId(), ParticipantType.ADMITTER);
if (!encounterParticipantListByTypeCode.isEmpty()) {
Practitioner doctor = iPractitionerService.getById(encounterParticipantListByTypeCode.get(0).getPractitionerId());
map.put("doctor", doctor == null ? "" : doctor.getName());
}
List<PaymentRecDetail> paymentRecDetails = paymentRecDetailService
.list(new LambdaQueryWrapper<PaymentRecDetail>().eq(PaymentRecDetail::getReconciliationId, paymentId));
if (paymentRecDetails.isEmpty()) {
throw new ServiceException("未查询到付款信息");
}
map.put("detail", paymentRecDetails);
BigDecimal amount = BigDecimal.ZERO;
for (PaymentRecDetail paymentRecDetail : paymentRecDetails) {
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_YB_ZH_PAY.getValue())) {
map.put("ybAccountPay", paymentRecDetail.getAmount());
amount = amount.add(paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.BALC.getValue())) {
map.put("ybAccountBalc", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_FUND_PAY.getValue())) {
map.put("ybFundPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_TC_FUND_AMOUNT.getValue())) {
map.put("ybTcPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_GWY_BZ_VALUE.getValue())) {
map.put("ybGWYPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.OTHER_PAY.getValue())) {
map.put("ybOtherPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_DE_BZ_VALUE.getValue())) {
map.put("ybDELPPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_ZG_DE_BZ_VALUE.getValue())) {
map.put("ybDELPPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.E_WALLET.getValue())) {
map.put("ybWallet", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SUPPLEMENTARY_INSURANCE.getValue())) {
map.put("ybWallet", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_VALUE.getValue())) {
map.put("cash", paymentRecDetail.getAmount());
amount = amount.add(paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_VX_VALUE.getValue())) {
map.put("wxCash", paymentRecDetail.getAmount());
amount = amount.add(paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_ALI_VALUE.getValue())) {
map.put("aliCash", paymentRecDetail.getAmount());
amount = amount.add(paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.INSCP_SCP_AMT.getValue())) {
map.put("FHZCAmount", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.INSCP_SCP_AMT.getValue())) {
map.put("FHZCAmount", paymentRecDetail.getAmount());
}
}
map.put("realAmount", amount);
Invoice invoice = iInvoiceService.getOne(new LambdaQueryWrapper<Invoice>()
.eq(Invoice::getReconciliationId, paymentId).eq(Invoice::getStatusEnum, InvoiceStatus.ISSUED.getValue())
.orderByDesc(Invoice::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1));
if (invoice != null) {
map.put("invoiceNo", invoice.getBillNo());
map.put("pictureUrl", invoice.getPictureUrl());
}
List<Long> chargeItemIdList = Arrays.stream(paymentReconciliation.getChargeItemIds().split(","))
.map(Long::parseLong).collect(Collectors.toList());
List<ChargeItem> chargeItemList = chargeItemService.list(new LambdaQueryWrapper<ChargeItem>()
.in(ChargeItem::getId, chargeItemIdList).eq(ChargeItem::getDeleteFlag, DelFlag.NO.getCode()));
List<ChargeItemDetailVO> chargeItemDetailList = new ArrayList<>();
ChargeItemDetailVO chargeItemDetailVO;
for (ChargeItem chargeItem : chargeItemList) {
chargeItemDetailVO = new ChargeItemDetailVO();
BeanUtils.copyProperties(chargeItem, chargeItemDetailVO);
if (CommonConstants.TableName.MED_MEDICATION_DEFINITION.equals(chargeItem.getProductTable())) {
MedicationDefinition medication = iMedicationDefinitionService.getById(chargeItem.getProductId());
Medication medicationDef = iMedicationService
.list(new LambdaQueryWrapper<Medication>().eq(Medication::getMedicationDefId, medication.getId()))
.get(0);
chargeItemDetailVO.setDirClass(medication.getChrgitmLv() + "").setChargeItemName(medication.getName())
.setTotalPrice(chargeItem.getTotalPrice()).setQuantityUnit(chargeItem.getQuantityUnit())
.setTotalVolume(medicationDef.getTotalVolume()).setQuantityValue(chargeItem.getQuantityValue());
} else if (CommonConstants.TableName.ADM_DEVICE_DEFINITION.equals(chargeItem.getProductTable())) {
DeviceDefinition device = iDeviceDefinitionService.getById(chargeItem.getProductId());
chargeItemDetailVO.setDirClass(device.getChrgitmLv() + "").setChargeItemName(device.getName())
.setTotalPrice(chargeItem.getTotalPrice()).setQuantityUnit(chargeItem.getQuantityUnit())
.setTotalVolume(device.getSize()).setQuantityValue(chargeItem.getQuantityValue());
} else if (CommonConstants.TableName.WOR_ACTIVITY_DEFINITION.equals(chargeItem.getProductTable())) {
if (chargeItem.getProductId() != null && chargeItem.getProductId() > 0) {
ActivityDefinition activity = iActivityDefinitionService.getById(chargeItem.getProductId());
chargeItemDetailVO.setDirClass(activity.getChrgitmLv() + "").setChargeItemName(activity.getName())
.setTotalPrice(chargeItem.getTotalPrice()).setQuantityUnit(chargeItem.getQuantityUnit())
.setTotalVolume("").setQuantityValue(chargeItem.getQuantityValue());
} else {
ServiceRequest serviceRequest = iServiceRequestService.getById(chargeItem.getServiceId());
String itemName = "未知项目";
String dirClass = "3";
if (serviceRequest != null && serviceRequest.getContentJson() != null) {
try {
JsonNode json = JsonUtils.parse(serviceRequest.getContentJson());
if (json.has("adviceName")) {
itemName = json.path("adviceName").asText();
}
} catch (Exception e) {
log.warn("解析ServiceRequest.contentJson失败: {}", e.getMessage());
}
}
chargeItemDetailVO.setDirClass(dirClass).setChargeItemName(itemName)
.setTotalPrice(chargeItem.getTotalPrice()).setQuantityUnit(chargeItem.getQuantityUnit())
.setTotalVolume("").setQuantityValue(chargeItem.getQuantityValue());
}
} else {
HealthcareService healthcareService = iHealthcareServiceService.getById(chargeItem.getServiceId());
chargeItemDetailVO.setDirClass("3").setChargeItemName(healthcareService.getName())
.setTotalPrice(chargeItem.getTotalPrice()).setQuantityUnit(chargeItem.getQuantityUnit())
.setTotalVolume("").setQuantityValue(chargeItem.getQuantityValue());
}
chargeItemDetailList.add(chargeItemDetailVO);
}
map.put("chargeItem", chargeItemDetailList);
if (chargeItemList.isEmpty()) {
throw new ServiceException("未查询到收费项");
}
if (encounter == null) {
throw new ServiceException("未查询到就诊信息");
}
map.put("classEnum", encounter.getYbClassEnum());
map.put("regNo", encounter.getBusNo());
Account account = iAccountService.getOne(new LambdaQueryWrapper<Account>()
.eq(Account::getEncounterId, encounter.getId()).eq(Account::getEncounterFlag, Whether.YES.getValue()));
if (account == null) {
throw new ServiceException("未查询到就诊信息");
}
InfoPerson perinfo = iPerinfoService.getOne(new LambdaQueryWrapper<InfoPerson>()
.eq(InfoPerson::getCertno, patient.getIdCard()).eq(InfoPerson::getTenantId, patient.getTenantId())
.orderByDesc(InfoPerson::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1));
if (perinfo != null) {
map.put("personType", perinfo.getInsutype());
map.put("insuplcAdmdvs", perinfo.getInsuplcAdmdvs());
}
com.healthlink.his.financial.domain.Contract contract
= iContractService.getOne(new LambdaQueryWrapper<com.healthlink.his.financial.domain.Contract>()
.eq(com.healthlink.his.financial.domain.Contract::getBusNo, account.getContractNo()));
if (contract == null) {
throw new ServiceException("未查询到合同信息");
}
map.put("contractName", contract.getContractName());
EncounterDiagnosis encounterDiagnosis = iEncounterDiagnosisService.getOne(
new LambdaQueryWrapper<EncounterDiagnosis>().eq(EncounterDiagnosis::getEncounterId, encounter.getId())
.eq(EncounterDiagnosis::getMaindiseFlag, Whether.YES.getValue())
.eq(EncounterDiagnosis::getDeleteFlag, DelFlag.NO.getCode())
.orderByDesc(EncounterDiagnosis::getDiagSrtNo).last(YbCommonConstants.sqlConst.LIMIT1));
if (encounterDiagnosis != null) {
Condition condition = iConditionService.getById(encounterDiagnosis.getConditionId());
if (condition != null) {
ConditionDefinition conditionDefinition
= iConditionDefinitionService.getOne(new LambdaQueryWrapper<ConditionDefinition>()
.eq(ConditionDefinition::getId, condition.getDefinitionId()));
if (conditionDefinition != null) {
map.put("conditionDefinition", conditionDefinition.getName());
}
}
}
BigDecimal sum01 = BigDecimal.ZERO;
BigDecimal sum02 = BigDecimal.ZERO;
BigDecimal sum03 = BigDecimal.ZERO;
BigDecimal sum04 = BigDecimal.ZERO;
BigDecimal sum05 = BigDecimal.ZERO;
BigDecimal sum06 = BigDecimal.ZERO;
BigDecimal sum07 = BigDecimal.ZERO;
BigDecimal sum08 = BigDecimal.ZERO;
BigDecimal sum09 = BigDecimal.ZERO;
BigDecimal sum10 = BigDecimal.ZERO;
BigDecimal sum11 = BigDecimal.ZERO;
BigDecimal sum12 = BigDecimal.ZERO;
BigDecimal sum13 = BigDecimal.ZERO;
BigDecimal sum14 = BigDecimal.ZERO;
for (ChargeItem chargeItem : chargeItemList) {
Long definitionId = chargeItem.getDefinitionId();
ChargeItemDefinition chargeItemDefinition = null;
if (definitionId != null && definitionId > 0) {
chargeItemDefinition = iChargeItemDefinitionService.getById(definitionId);
}
if (chargeItemDefinition == null) {
sum03 = sum03.add(chargeItem.getTotalPrice());
continue;
}
com.healthlink.his.yb.enums.YbMedChrgItmType medChrgItmType
= com.healthlink.his.yb.enums.YbMedChrgItmType.getByCode(Integer.parseInt(chargeItemDefinition.getYbType()));
switch (medChrgItmType) {
case BED_FEE:
sum01 = sum01.add(chargeItem.getTotalPrice());
break;
case DIAGNOSTIC_FEE:
sum02 = sum02.add(chargeItem.getTotalPrice());
break;
case CHECK_FEE:
sum03 = sum03.add(chargeItem.getTotalPrice());
break;
case DIAGNOSTIC_TEST_FEE:
sum04 = sum04.add(chargeItem.getTotalPrice());
break;
case MEDICAL_EXPENSE_FEE:
sum05 = sum05.add(chargeItem.getTotalPrice());
break;
case OPERATION_FEE:
sum06 = sum06.add(chargeItem.getTotalPrice());
break;
case NURSING_FEE:
sum07 = sum07.add(chargeItem.getTotalPrice());
break;
case SANITARY_MATERIALS_FEE:
sum08 = sum08.add(chargeItem.getTotalPrice());
break;
case WEST_MEDICINE:
sum09 = sum09.add(chargeItem.getTotalPrice());
break;
case CHINESE_MEDICINE_SLICES_FEE:
sum10 = sum10.add(chargeItem.getTotalPrice());
break;
case CHINESE_MEDICINE_FEE:
sum11 = sum11.add(chargeItem.getTotalPrice());
break;
case GENERAL_CONSULTATION_FEE:
sum12 = sum12.add(chargeItem.getTotalPrice());
break;
case REGISTRATION_FEE:
sum13 = sum13.add(chargeItem.getTotalPrice());
break;
default:
sum14 = sum14.add(chargeItem.getTotalPrice());
break;
}
}
map.put("BED_FEE", sum01);
map.put("DIAGNOSTIC_FEE", sum02);
map.put("CHECK_FEE", sum03);
map.put("DIAGNOSTIC_TEST_FEE", sum04);
map.put("MEDICAL_EXPENSE_FEE", sum05);
map.put("OPERATION_FEE", sum06);
map.put("NURSING_FEE", sum07);
map.put("SANITARY_MATERIALS_FEE", sum08);
map.put("WEST_MEDICINE", sum09);
map.put("CHINESE_MEDICINE_SLICES_FEE", sum10);
map.put("CHINESE_MEDICINE_FEE", sum11);
map.put("GENERAL_CONSULTATION_FEE", sum12);
map.put("REGISTRATION_FEE", sum13);
map.put("OTHER_FEE", sum14);
var loginUser = SecurityUtils.getLoginUser();
String fixmedinsName = loginUser.getOptionJsonValue(CommonConstants.Option.FIXMEDINS_NAME);
String fixmedinsCode = loginUser.getOptionJsonValue(CommonConstants.Option.FIXMEDINS_CODE);
map.put("fixmedinsName", fixmedinsName);
map.put("fixmedinsCode", fixmedinsCode);
return map;
}
public Map getReceiptDetailsND(Long paymentId) {
Map<String, Object> map = new HashMap<>();
PaymentReconciliation paymentReconciliation = paymentReconciliationService.getById(paymentId);
if (paymentReconciliation == null) {
throw new ServiceException("未查询到付款信息");
}
map.put("paymentId", paymentReconciliation.getPaymentNo());
map.put("paymentAmount", paymentReconciliation.getTenderedAmount());
Practitioner practitioner = iPractitionerService.getById(paymentReconciliation.getEntererId());
map.put("paymentEmployee", practitioner == null ? "" : practitioner.getName());
map.put("chargeTime", paymentReconciliation.getBillDate());
Patient patient = iPatientService.getById(paymentReconciliation.getPatientId());
if (patient == null) {
throw new ServiceException("未查询到患者信息");
}
map.put("patientName", patient.getName());
map.put("sex", patient.getGenderEnum());
map.put("idCardNo", patient.getIdCard());
map.put("birthDay", patient.getBirthDate());
List<PaymentRecDetail> paymentRecDetails = paymentRecDetailService.list(
new LambdaQueryWrapper<PaymentRecDetail>().eq(PaymentRecDetail::getReconciliationId, paymentId));
if (paymentRecDetails.isEmpty()) {
throw new ServiceException("未查询到付款信息");
}
map.put("detail", paymentRecDetails);
for (PaymentRecDetail paymentRecDetail : paymentRecDetails) {
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_YB_ZH_PAY.getValue())) {
map.put("ybAccountPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.BALC.getValue())) {
map.put("ybAccountBalc", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_FUND_PAY.getValue())) {
map.put("ybFundPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_TC_FUND_AMOUNT.getValue())) {
map.put("ybTcPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_GWY_BZ_VALUE.getValue())) {
map.put("ybGWYPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.OTHER_PAY.getValue())) {
map.put("ybOtherPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_DE_BZ_VALUE.getValue())) {
map.put("ybDELPPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.YB_BC_ZG_DE_BZ_VALUE.getValue())) {
map.put("ybDELPPay", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.E_WALLET.getValue())) {
map.put("ybWallet", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SUPPLEMENTARY_INSURANCE.getValue())) {
map.put("ybWallet", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_VALUE.getValue())) {
map.put("cash", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_VX_VALUE.getValue())) {
map.put("wxCash", paymentRecDetail.getAmount());
}
if (Objects.equals(paymentRecDetail.getPayEnum(), YbPayment.SELF_CASH_ALI_VALUE.getValue())) {
map.put("aliCash", paymentRecDetail.getAmount());
}
}
Invoice invoice = iInvoiceService.getOne(new LambdaQueryWrapper<Invoice>().eq(Invoice::getReconciliationId,
paymentId).eq(Invoice::getStatusEnum, InvoiceStatus.ISSUED.getValue()).orderByDesc(Invoice::getCreateTime)
.last(YbCommonConstants.sqlConst.LIMIT1));
if (invoice != null) {
map.put("invoiceNo", invoice.getBillNo());
map.put("pictureUrl", invoice.getPictureUrl());
}
List<Long> chargeItemIds = Arrays.stream(paymentReconciliation.getChargeItemIds().split(",")).map(
Long::parseLong)
.collect(Collectors.toList());
List<ChargeItemBaseInfoDto> chargeItemBaseInfoByIds = chargeItemService.getChargeItemBaseInfoByIds(
chargeItemIds);
for (ChargeItemBaseInfoDto chargeItemBaseInfoById : chargeItemBaseInfoByIds) {
if (chargeItemBaseInfoById.getDeptName() == null) {
throw new ServiceException("收费项" + chargeItemBaseInfoById.getName() + "无开单科室");
}
if (chargeItemBaseInfoById.getTypeCode() == null) {
throw new ServiceException("收费项" + chargeItemBaseInfoById.getName() + "无财务分类");
}
if (!CommonConstants.BusinessName.DEFAULT_CONTRACT_NO.equals(chargeItemBaseInfoById.getContractNo())) {
Object o = map.get(chargeItemBaseInfoById.getContractNo() + "-" + chargeItemBaseInfoById.getTypeCode());
if (o == null) {
map.put(chargeItemBaseInfoById.getContractNo() + "-" + chargeItemBaseInfoById.getTypeCode(),
chargeItemBaseInfoById.getTotalPrice());
} else {
BigDecimal bigDecimal = new BigDecimal(String.valueOf(o));
bigDecimal = bigDecimal.add(chargeItemBaseInfoById.getTotalPrice());
map.put(chargeItemBaseInfoById.getContractNo() + "-" + chargeItemBaseInfoById.getTypeCode(),
bigDecimal);
}
} else {
Object o = map.get(chargeItemBaseInfoById.getDeptName() + "-" + chargeItemBaseInfoById.getTypeCode());
if (o == null) {
map.put(chargeItemBaseInfoById.getDeptName() + "-" + chargeItemBaseInfoById.getTypeCode(),
chargeItemBaseInfoById.getTotalPrice());
} else {
BigDecimal bigDecimal = new BigDecimal(String.valueOf(o));
bigDecimal = bigDecimal.add(chargeItemBaseInfoById.getTotalPrice());
map.put(chargeItemBaseInfoById.getDeptName() + "-" + chargeItemBaseInfoById.getTypeCode(),
bigDecimal);
}
}
}
Encounter encounter = iEncounterService.getById(paymentReconciliation.getEncounterId());
if (encounter == null) {
throw new ServiceException("未查询到就诊信息");
}
map.put("classEnum", encounter.getYbClassEnum());
map.put("regNo", encounter.getBusNo());
InfoPerson perinfo = iPerinfoService.getOne(new LambdaQueryWrapper<InfoPerson>().eq(InfoPerson::getCertno,
patient.getIdCard()).eq(InfoPerson::getTenantId, patient.getTenantId())
.orderByDesc(InfoPerson::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1));
if (perinfo != null) {
map.put("personType", perinfo.getInsutype());
map.put("insuplcAdmdvs", perinfo.getInsuplcAdmdvs());
}
EncounterDiagnosis encounterDiagnosis = iEncounterDiagnosisService.getOne(
new LambdaQueryWrapper<EncounterDiagnosis>().eq(EncounterDiagnosis::getEncounterId, encounter.getId()).eq(
EncounterDiagnosis::getMaindiseFlag, Whether.YES.getValue()).eq(EncounterDiagnosis::getDeleteFlag,
DelFlag.NO.getCode()).orderByDesc(EncounterDiagnosis::getDiagSrtNo)
.last(YbCommonConstants.sqlConst.LIMIT1));
if (encounterDiagnosis != null) {
Condition condition = iConditionService.getById(encounterDiagnosis.getConditionId());
if (condition != null) {
ConditionDefinition conditionDefinition = iConditionDefinitionService.getOne(
new LambdaQueryWrapper<ConditionDefinition>().eq(ConditionDefinition::getId,
condition.getDefinitionId()));
if (conditionDefinition != null) {
map.put("conditionDefinition", conditionDefinition.getName());
}
}
}
var loginUser = SecurityUtils.getLoginUser();
String fixmedinsName = loginUser.getOptionJsonValue(CommonConstants.Option.FIXMEDINS_NAME);
String fixmedinsCode = loginUser.getOptionJsonValue(CommonConstants.Option.FIXMEDINS_CODE);
map.put("fixmedinsName", fixmedinsName);
map.put("fixmedinsCode", fixmedinsCode);
return map;
}
public Map getYbEncounterType(Long encounterId) {
HashMap<String, Object> map = new HashMap<>();
Encounter encounter = iEncounterService.getById(encounterId);
if (encounter == null) {
throw new ServiceException("未查询到就诊信息");
}
Patient patient = iPatientService.getById(encounter.getPatientId());
if (patient == null) {
throw new ServiceException("未查询到患者信息");
}
Account ybAccount = iAccountService.getYbAccount(encounter.getId());
if (ybAccount == null) {
map.put("insutype", "自费");
return map;
}
com.healthlink.his.financial.domain.Contract contract = iContractService.getContract(ybAccount.getContractNo());
if (contract == null) {
throw new ServiceException("未查询到合同信息");
}
InfoPerson perinfo = iPerinfoService.getOne(new LambdaQueryWrapper<InfoPerson>().eq(InfoPerson::getCertno,
patient.getIdCard()).eq(InfoPerson::getTenantId, patient.getTenantId())
.orderByDesc(InfoPerson::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1));
if (perinfo != null) {
com.healthlink.his.yb.enums.YbMdcsType byCode = com.healthlink.his.yb.enums.YbMdcsType.getByCode(perinfo.getInsutype());
map.put("insutype", contract.getBusNo() + "-" + byCode.getInfo());
return map;
}
map.put("insutype", "自费");
return map;
}
}

View File

@@ -0,0 +1,88 @@
package com.healthlink.his.web.paymentmanage.appservice.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.core.common.core.domain.R;
import com.core.common.enums.DelFlag;
import com.core.common.exception.ServiceException;
import com.core.common.utils.*;
import com.healthlink.his.workflow.domain.ActivityDefinition;
import com.healthlink.his.workflow.service.IActivityDefinitionService;
import com.healthlink.his.common.constant.CommonConstants;
import com.healthlink.his.yb.dto.Catalogue1312Output;
import com.healthlink.his.yb.dto.Catalogue1312QueryParam;
import com.healthlink.his.yb.service.IYbHttpUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.*;
/**
* 收费票据统计服务 - 处理报表/统计相关方法
*/
@Component
@Slf4j
public class ChargeBillStatisticsService {
@Autowired
private IActivityDefinitionService iActivityDefinitionService;
@Autowired
private IYbHttpUtils ybHttpUtils;
public R<?> checkYbNo() {
List<ActivityDefinition> list = iActivityDefinitionService.list(
new LambdaQueryWrapper<ActivityDefinition>().isNotNull(ActivityDefinition::getYbNo)
.eq(ActivityDefinition::getDeleteFlag, DelFlag.NO.getCode()));
List<ActivityDefinition> outList = new ArrayList<>();
List<ActivityDefinition> voicList = new ArrayList<>();
if (list.isEmpty()) {
throw new ServiceException("没查到有医保码的诊疗定义");
}
for (ActivityDefinition activityDefinition : list) {
Date nowTime = new Date();
Catalogue1312QueryParam catalogue1312QueryParam = new Catalogue1312QueryParam();
catalogue1312QueryParam.setHilistCode(activityDefinition.getYbNo());
catalogue1312QueryParam.setInsuplcAdmdvs(
SecurityUtils.getLoginUser().getOptionJsonValue(CommonConstants.Option.INSUPLC_ADMDVS));
LocalDate localDate = LocalDate.parse("2025-01-01");
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
catalogue1312QueryParam.setUpdtTime(date);
catalogue1312QueryParam.setPageNum(1);
catalogue1312QueryParam.setPageSize(10);
catalogue1312QueryParam.setDecryptFlag("0");
List<Catalogue1312Output> outputList = ybHttpUtils.queryYbCatalogue(catalogue1312QueryParam);
if (outputList != null && !outputList.isEmpty() && outputList.get(0) != null) {
Catalogue1312Output catalogue1312Output = outputList.get(0);
if (catalogue1312Output.getValiFlag() != null && catalogue1312Output.getValiFlag().equals("1")) {
Date enddate = catalogue1312Output.getEnddate();
if (enddate == null) {
// OK
} else {
if (!DateUtils.isFuture(enddate)) {
outList.add(activityDefinition);
}
}
} else {
voicList.add(activityDefinition);
}
}
}
HashMap<Object, Object> hashMap = new HashMap<>();
hashMap.put("失效列表", voicList);
hashMap.put("过期列表", outList);
return R.ok(hashMap);
}
}