refactor: split IChargeBillServiceImpl into focused services
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user