版本更新

This commit is contained in:
Zhang.WH
2025-09-03 15:54:41 +08:00
parent 0b93d16b64
commit 8f82322d10
3290 changed files with 154339 additions and 23829 deletions

View File

@@ -0,0 +1,66 @@
package com.openhis.financial.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
import com.openhis.common.enums.ClaimUse;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 索赔管理Entity实体
*
* @author system
* @date 2025-02-20
*/
@Data
@TableName("fin_claim")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class Claim extends HisBaseEntity {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 交易号 */
private String traceNumber;
/** 状态 */
private Integer statusEnum;
/** 类别 */
private String typeCode;
/** (详细)索赔类别 */
private String subtypeCode;
/** 用途 */
private ClaimUse useEnum;
/** 索赔指向 */
private Integer insurerEnum;
/** condition_dis */
private String conditionDis;
/** procedure_id */
private String procedureIds;
/** item_ids */
private String itemIds;
/** 索赔涵盖时间 */
private Date billablePeriodStart;
/** 索赔涵盖时间 */
private Date billablePeriodEnd;
}

View File

@@ -0,0 +1,62 @@
package com.openhis.financial.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 索赔响应管理Entity实体
*
* @author system
* @date 2025-02-20
*/
@Data
@TableName("fin_claim_response")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class ClaimResponse extends HisBaseEntity {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 交易号 */
private Long traceNumber;
/** 状态 */
private Integer statusEnum;
/** 类别 */
private String typeCode;
/** (详细)索赔类别 */
private String subtypeCode;
/** 用途 */
private Integer useEnum;
/** 索赔指向 */
private Integer insurer;
/** 最终结果 */
private Integer outcomeEnum;
/** 索赔结果的额外文本信息 */
private String disposition;
/** 索赔结果 */
private Integer claimResult;
/** 索赔金额 */
private BigDecimal total;
}

View File

@@ -0,0 +1,88 @@
package com.openhis.financial.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 合同管理Entity实体
*
* @author system
* @date 2025-02-20
*/
@Data
@TableName("fin_contract")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class Contract extends HisBaseEntity {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 合同名称 */
private String contractName;
/** 状态 */
private Integer statusEnum;
/** 合同的类别 */
private Integer categoryEnum;
/** 合同编码 */
private String busNo;
/** 机构 */
private Long orgId;
/** 是否医保 */
private Integer ybFlag;
/** 優先使用標志 */
private Integer sort;
/** 医保区划 */
private String admVs;
//2025-06-18 新加字段医保相关配置信息从sys_option表迁移至本表
/** 医保PrvKey */
private String cliPrvKey;
/** 医保PubKey */
private String cliPubKey;
/** */
private String serverPubKey;//暂时不知用处
/** 医保终端授权范围 */
private String scope;
/** 医保终端授权类型 */
private String grantType;
/** 医保密码 */
private String password;
/** 医保账号 */
private String username;
/** 医保客户端密钥 */
private String clientSecret;
/** 医保客户端Id */
private String clientId;
/** fixmedinsCode */
private String fixmedinsCode;
/** fixmedinsName */
private String fixmedinsName;
}

View File

@@ -0,0 +1,62 @@
package com.openhis.financial.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 合同管理Entity实体
*
* @author system
* @date 2025-02-20
*/
@Data
@TableName("fin_payment_notice")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class PaymentNotice extends HisBaseEntity {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 状态 */
private Integer statusEnum;
/** 支付通知类型 */
private Integer typeEnum;
/** 付款实体ID */
private Long paypmentReconciliationId;
/** 被支付方 */
private Long payeeId;
/** 通知方式 */
private String wayCode;
/** 通知内容 */
private String contentText;
/** 被通知方 */
private String recipient;
/** 金额 */
private BigDecimal amount;
/** 支付状态 */
private Integer payStatus;
/** 机构 */
private Integer orgId;
}

View File

@@ -0,0 +1,79 @@
package com.openhis.financial.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 付款管理Entity实体
*
* @author system
* @date 2025-02-20
*/
@Data
@TableName("fin_payment_rec_detail")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class PaymentRecDetail extends HisBaseEntity {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 先前支付明细id */
private Long predecessorId;
/** 付款id */
private Long reconciliationId;
/** 付款类型 */
private Integer targetEnum;//暂时没用
/** 账户 */
private Long accountId;
/** 账户类型 */
private String accountCode;
/** 支付类型 */
private Integer payEnum;
/** 支付类型等级 */
private Integer payLevelEnum;
/** 金额 */
private BigDecimal amount;
/** 找零 */
private BigDecimal returnAmount;
/** 交款 */
private BigDecimal chargeAmount;
/** 支付平台返回交易号 医保批次号*/
private String payTransNo;
/** 支付平台返回交易信息 医保结算ID*/
private String payTransText;
/** 支付平台返回交易时间 */
private Date payTransDate;
/** 支付平台账前余额 */
private BigDecimal beforeBalance;
/** 支付平台账后余额 */
private BigDecimal afterBalance;
/** 单笔交易结果 */
private Integer resultEnum;
}

View File

@@ -0,0 +1,65 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.financial.domain;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 付款记录的快照(用于统计报表等使用)
*
* @author SunJQ
* @date 2025-08-08
*/
@Data
@TableName("fin_payment_rec_static")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class PaymentRecStatic extends HisBaseEntity {
/**
* id
*/
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
* 付款id
*/
private Long reconciliationId;
/**
* 统计方式1-字典fin_type_code2-医保十四项med_chrgitm_type 默认值为2
*/
private Integer countBy;
/**
* 编码字典码1时用财富分类字典2时用医保分类的字典
*/
private String typeCode;
/**
* 编码名称(字典名称)
*/
private String typeName;// 2025/08/08 李要求加此字段但是实际使用的时候该字段可能不好用要查字典然后save
/**
* 金额
*/
private BigDecimal amount;
/**
* 关联收费项Id
*/
private String chargeItemIds;
}

View File

@@ -0,0 +1,105 @@
package com.openhis.financial.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.core.common.core.domain.HisBaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 付款管理Entity实体
*
* @author system
* @date 2025-02-20
*/
@Data
@TableName("fin_payment_reconciliation")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
public class PaymentReconciliation extends HisBaseEntity {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 状态 */
private Integer statusEnum;
/** 关联ID */
private Long relationId;
/** 支付的业务标识符 */
private String paymentNo;
/** 付款类别 */
private Integer paymentEnum;
/** 付款实体ID */
private Long paymentReconciliationId;
/** 发起支付的工作流程类别 */
private Integer kindEnum;
/** 收款员 */
private Long entererId;
/** 支付发起人类型 */
private Integer issuerEnum;
/** 支付的患者ID */
private Long patientId;
/** 请求支付责任人ID */
private Long practitionerId;
/** 付款结果 */
private Integer outcomeEnum;
/** 支付位置 */
private Long locationId;
/** 到期时间 */
private Date expirationDate;
/** 应收金额 */
private BigDecimal tenderedAmount;
/** 找零金额 */
private BigDecimal returnedAmount;
/** 付款总额 */
private BigDecimal displayAmount;
/** 打印标识 */
private Integer printCount;
/** 合同编码 */
private String contractNo;//2025/05/08李自付和医保同时付费时只生成一条payment故此该字段在insert时先为null
/** 处方号集合 */
private String chargeItemIds;
/** 就诊ID */
private Long encounterId;
/** 结算时间 */
private Date billDate;
/** 发票编号 */
private Long invoiceId;
/** 关联账户Id */
private Long accountId;//2025/05/08李自付和医保同时付费时只生成一条payment故此该字段在insert时先为null
/** 医保结算id */
private String ybSettleIds;//记录医保结算id
/** 医保清算标志 */
private Integer ybClearFlag;//默认值0 未清算
}

View File

@@ -0,0 +1,17 @@
package com.openhis.financial.mapper;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.financial.domain.Claim;
/**
* 索赔管理Mapper接口
*
* @author system
* @date 2025-02-20
*/
@Repository
public interface ClaimMapper extends BaseMapper<Claim> {
}

View File

@@ -0,0 +1,17 @@
package com.openhis.financial.mapper;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.financial.domain.ClaimResponse;
/**
* 索赔响应管理Mapper接口
*
* @author system
* @date 2025-02-20
*/
@Repository
public interface ClaimResponseMapper extends BaseMapper<ClaimResponse> {
}

View File

@@ -0,0 +1,17 @@
package com.openhis.financial.mapper;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.financial.domain.Contract;
/**
* 合同管理Mapper接口
*
* @author system
* @date 2025-02-20
*/
@Repository
public interface ContractMapper extends BaseMapper<Contract> {
}

View File

@@ -0,0 +1,17 @@
package com.openhis.financial.mapper;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.financial.domain.PaymentNotice;
/**
* 合同管理Mapper接口
*
* @author system
* @date 2025-02-20
*/
@Repository
public interface PaymentNoticeMapper extends BaseMapper<PaymentNotice> {
}

View File

@@ -0,0 +1,28 @@
package com.openhis.financial.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.financial.domain.PaymentRecDetail;
import com.openhis.financial.model.PaymentRecDetailAccountResult;
/**
* 付款管理Mapper接口
*
* @author system
* @date 2025-02-20
*/
@Repository
public interface PaymentRecDetailMapper extends BaseMapper<PaymentRecDetail> {
/**
* 根据paymentId集合查询详情信息
*
* @param paymentIdList 集合
* @return 集合
*/
List<PaymentRecDetailAccountResult> getListByReconciliationIds(@Param("paymentIdList") List<Long> paymentIdList);
}

View File

@@ -0,0 +1,18 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.financial.mapper;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.financial.domain.PaymentRecStatic;
/**
* 付款管理Mapper接口
*
* @author SunJQ
* @date 2025-08-08
*/
@Repository
public interface PaymentRecStaticMapper extends BaseMapper<PaymentRecStatic> {}

View File

@@ -0,0 +1,17 @@
package com.openhis.financial.mapper;
import org.springframework.stereotype.Repository;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.openhis.financial.domain.PaymentReconciliation;
/**
* 付款管理Mapper接口
*
* @author system
* @date 2025-02-20
*/
@Repository
public interface PaymentReconciliationMapper extends BaseMapper<PaymentReconciliation> {
}

View File

@@ -0,0 +1,113 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.financial.model;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 付款详情与账户信息实体
*
* @author SunJQ
* @date 2025-08-05
*/
@Data
@Accessors(chain = true)
public class PaymentRecDetailAccountResult {
/** ID */
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/** 先前支付明细id */
private Long predecessorId;
/** 付款id */
private Long reconciliationId;
/** 付款类型 */
private Integer targetEnum;// 暂时没用
/** 账户 */
private Long accountId;
/** 账户类型 */
private String accountCode;
/** 支付类型 */
private Integer payEnum;
/** 支付类型等级 */
private Integer payLevelEnum;
/** 金额 */
private BigDecimal amount;
/** 找零 */
private BigDecimal returnAmount;
/** 交款 */
private BigDecimal chargeAmount;
/** 支付平台返回交易号 医保批次号 */
private String payTransNo;
/** 支付平台返回交易信息 医保结算ID */
private String payTransText;
/** 支付平台返回交易时间 */
private Date payTransDate;
/** 支付平台账前余额 */
private BigDecimal beforeBalance;
/** 支付平台账后余额 */
private BigDecimal afterBalance;
/** 单笔交易结果 */
private Integer resultEnum;
/** 状态枚举 */
private Integer statusEnum;
/** 结账状态枚举 */
private Integer billingStatusEnum;
// 2025.04.10 经确认此处原有的【1 CASH 个人现金账户 | 2 医保账户】改为【01医保电子凭证 | 02 居民身份证 | 03 社会保障卡 | 04 个人现金账户】
/** 账户类型编码 */
private String typeCode;
/** 编码 */
private String no;
/** 名称 */
private String name;
/** 患者id */
private Long patientId;
/** 就诊id */
private Long encounterId;
/** 账户余额 */
private BigDecimal balanceAmount;
/** 医保区域编码 */
private String ybAreaNo;
/** 合同编码 */
private String contractNo;
/** 欠费限制额度 */
private BigDecimal limitAccount;
/** 是否为就诊登记使用 */
private Integer encounterFlag;
}

View File

@@ -0,0 +1,28 @@
package com.openhis.financial.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import liquibase.pro.packaged.D;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
@Data
@Accessors(chain = true)
public class PaymentRecDetailDto {
private Long id;
/** 账户 */
private Long accountId;
/** 支付类型 */
private Integer payEnum;
/** 支付类型 */
private String payEnumText;
/** 金额 */
private BigDecimal amount;
}

View File

@@ -0,0 +1,121 @@
package com.openhis.financial.model;
import com.openhis.yb.dto.Clinic2206FundPaymentResult;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@Accessors(chain = true)
public class PaymentResult {
// 主键字段
private String mdtrtId; // 就诊ID
private String setlId;// 结算id
private String psnNo; // 人员编号
private String psnName; // 人员姓名
private String psnCertType; // 人员证件类型
private String certno; // 证件号码
private String gend; // 性别
private String naty; // 民族
private Date brdy; // 出生日期
private BigDecimal age; // 年龄
private String insutype; // 险种类型
private String psnType; // 人员类别
private String cvlservFlag; // 公务员标志
private Date setlTime; // 结算时间
private String mdtrtCertType; // 就诊凭证类型
private String medType; // 医疗类别
private BigDecimal medfeeSumamt; // 医疗费总额
private BigDecimal fulamtOwnpayAmt; // 全自费金额
private BigDecimal overlmtSelfpay; // 超限价自费费用
private BigDecimal preselfpayAmt; // 先行自付金额
private BigDecimal inscpScpAmt; // 符合政策范围金额
private BigDecimal actPayDedc; // 实际支付起付线
private BigDecimal hifpPay; // 基本医疗保险统筹基金支出
private BigDecimal poolPropSelfpay; // 基本医疗保险统筹基金支付比例
private BigDecimal cvlservPay; // 公务员医疗补助资金支出
private BigDecimal hifesPay; // 企业补充医疗保险基金支出
private BigDecimal hifmiPay; // 居民大病保险资金支出
private BigDecimal hifobPay; // 职工大额医疗费用补助基金支出
private BigDecimal mafPay; // 医疗救助基金支出
private BigDecimal othPay; // 其他支出
private BigDecimal fundPaySumamt; // 基金支付总额
private BigDecimal psnPartAmt; // 个人负担总金额
private BigDecimal acctPay; // 个人账户支出
private BigDecimal psnCashPay; // 个人现金支出
private BigDecimal hospPartAmt; // 医院负担金额
private BigDecimal balc; // 余额
private BigDecimal acctMulaidPay; // 个人账户共济支付金额
private String medinsSetlId; // 医药机构结算ID 存放发送方报文ID
private String clrOptins; // 清算经办机构
private String clrWay; // 清算方式
private String clrType; // 清算类别
private BigDecimal hifdmPay; // 伤残人员医疗保障基金支出
private String expContent; // 字段扩展
private List<Clinic2206FundPaymentResult> setldetail;// 结算详细信息
private String chrgBchno; // 收费批次号
private String paymentNo; // 收费批次号
private Long accountId; // 收费批次号
public PaymentResult() {
this.setMedfeeSumamt(new BigDecimal("0.0")).setFulamtOwnpayAmt(new BigDecimal("0.0"))
.setOverlmtSelfpay(new BigDecimal("0.0")).setPreselfpayAmt(new BigDecimal("0.0"))
.setInscpScpAmt(new BigDecimal("0.0")).setActPayDedc(new BigDecimal("0.0"))
.setHifpPay(new BigDecimal("0.0")).setPoolPropSelfpay(new BigDecimal("0.0"))
.setCvlservPay(new BigDecimal("0.0")).setHifesPay(new BigDecimal("0.0")).setHifmiPay(new BigDecimal("0.0"))
.setHifobPay(new BigDecimal("0.00")).setMafPay(new BigDecimal("0.0")).setOthPay(new BigDecimal("0.0"))
.setFundPaySumamt(new BigDecimal("0.0")).setPsnPartAmt(new BigDecimal("0.0"))
.setAcctPay(new BigDecimal("0.0")).setPsnCashPay(new BigDecimal("0.0"))
.setHospPartAmt(new BigDecimal("0.0")).setBalc(new BigDecimal("0.0"))
.setAcctMulaidPay(new BigDecimal("0.0")).setHifdmPay(new BigDecimal("0.0"));
}
}

View File

@@ -0,0 +1,24 @@
package com.openhis.financial.model;
import com.openhis.administration.domain.ChargeItem;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class PaymentedItemModel {
/** 就诊id */
private Long encounterId;
/** 层级 */
private String busNo;
/** 医疗类型 */
private String medType;
/** 总价 */
private BigDecimal totalPrice;
/** 总价 */
private Long chargeItemId;
}

View File

@@ -0,0 +1,85 @@
package com.openhis.financial.model;
import com.alibaba.fastjson2.annotation.JSONField;
import com.openhis.yb.dto.Clinic2206FundPaymentResult;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class PrePaymentResult {
@JSONField(name = "medfee_sumamt")
private BigDecimal medfeeSumamt; // 医疗费总额
@JSONField(name = "fulamt_ownpay_amt")
private BigDecimal fulamtOwnpayAmt; // 全自费金额
@JSONField(name = "overlmt_selfpay")
private BigDecimal overlmtSelfpay; // 超限价自费费用
@JSONField(name = "preselfpay_amt")
private BigDecimal preselfpayAmt; // 先行自付金额
@JSONField(name = "inscp_scp_amt")
private BigDecimal inscpScpAmt; // 符合政策范围金额
@JSONField(name = "act_pay_dedc")
private BigDecimal actPayDedc; // 实际支付起付线
@JSONField(name = "hifp_pay")
private BigDecimal hifpPay; // 基本医疗保险统筹基金支出
@JSONField(name = "pool_prop_selfpay")
private BigDecimal poolPropSelfpay; // 基本医疗保险统筹基金支付比例
@JSONField(name = "cvlserv_pay")
private BigDecimal cvlservPay; // 公务员医疗补助资金支出
@JSONField(name = "hifes_pay")
private BigDecimal hifesPay; // 企业补充医疗保险基金支出
@JSONField(name = "hifmi_pay")
private BigDecimal hifmiPay; // 居民大病保险资金支出
@JSONField(name = "hifob_pay")
private BigDecimal hifobPay; // 职工大额医疗费用补助基金支出
@JSONField(name = "maf_pay")
private BigDecimal mafPay; // 医疗救助基金支出
@JSONField(name = "oth_pay")
private BigDecimal othPay; // 其他支出
@JSONField(name = "fund_pay_sumamt")
private BigDecimal fundPaySumamt; // 基金支付总额
@JSONField(name = "psn_part_amt")
private BigDecimal psnPartAmt; // 个人负担总金额
@JSONField(name = "acct_pay")
private BigDecimal acctPay; // 个人账户支出
@JSONField(name = "psn_cash_pay")
private BigDecimal psnCashPay; // 个人现金支出
@JSONField(name = "hosp_part_amt")
private BigDecimal hospPartAmt; // 医院负担金额
@JSONField(name = "hifdm_pay")
private BigDecimal hifdmPay;
@JSONField(name = "acct_mulaid_pay")
private BigDecimal acctMulaidPay; // 个人账户共济支付金额
private List<Clinic2206FundPaymentResult> setldetail;// 结算详细信息
private String mdtrtCertNo; // 就诊凭证编号
private String chrgBchno; // 收费批次号
private String busNo; // 挂号采访码
private Long accountId; // 账号ID码
}

View File

@@ -0,0 +1,23 @@
package com.openhis.financial.model;
import com.openhis.financial.domain.PaymentRecDetail;
import com.openhis.financial.domain.PaymentReconciliation;
import com.openhis.financial.mapper.PaymentReconciliationMapper;
import com.openhis.yb.dto.Clinic2206FundPaymentResult;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@Data
@Accessors(chain = true)
public class PrePaymentResultModel {
private List<PaymentRecDetailDto> details;
private PaymentReconciliation paymentReconciliation;
private String paymentId;
}

View File

@@ -0,0 +1,14 @@
package com.openhis.financial.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.financial.domain.ClaimResponse;
/**
* 索赔响应管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IClaimResponseService extends IService<ClaimResponse> {
}

View File

@@ -0,0 +1,14 @@
package com.openhis.financial.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.financial.domain.Claim;
/**
* 索赔管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IClaimService extends IService<Claim> {
}

View File

@@ -0,0 +1,100 @@
package com.openhis.financial.service;
import java.util.List;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.financial.domain.Contract;
/**
* 合同管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IContractService extends IService<Contract> {
/**
* 根据医保码找合同信息
*
* @param contractNo 医保码
* @return 合同实体
*/
Contract getByContractNo(String contractNo);
/**
* 查询租户合同信息分页
*
* @param tenantId 租户ID
* @param pageNum 当前页
* @param pageSize 每页多少条
* @return 租户合同信息分页
*/
IPage<Contract> getTenantContractPage(Integer tenantId, Integer pageNum, Integer pageSize);
/**
* 查询租户合同信息详情
*
* @param id ID
* @return 租户合同信息详情
*/
Contract getTenantContractDetail(Long id);
/**
* 新增租户合同信息
*
* @param contract 合同管理实体
*/
void addTenantContract(Contract contract);
/**
* 编辑租户合同信息
*
* @param contract 合同管理实体
*/
void editTenantContract(Contract contract);
/**
* 删除租户合同信息
*
* @param id ID
*/
void delTenantContract(Long id);
/**
* 查詢合同的集合
*
* @return
*/
List<Contract> getContractList();
/**
* 查詢合同的集合
*
* @return
*/
List<Contract> getRedisContractList();
/**
* 通過合同編碼查詢合同
*
* @return
*/
Contract getContract(String contractNo);
/**
* 根据参保地信息找到对应的合同
*
* @param insuplcAdmdvs
* @return
*/
Contract getContractByInsuplcAdmdvs(String insuplcAdmdvs);
/**
* 查詢合同的集合
*
* @return 合同集合
*/
List<Contract> getContractListByYb();
}

View File

@@ -0,0 +1,14 @@
package com.openhis.financial.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.financial.domain.PaymentNotice;
/**
* 合同管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IPaymentNoticeService extends IService<PaymentNotice> {
}

View File

@@ -0,0 +1,34 @@
package com.openhis.financial.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.common.enums.PaymentResult;
import com.openhis.financial.domain.PaymentRecDetail;
import com.openhis.financial.model.PaymentRecDetailAccountResult;
/**
* 付款管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IPaymentRecDetailService extends IService<PaymentRecDetail> {
/**
* 根据paymentId更改结算结果
*
* @param id id
* @param paid PaymentResult
*/
void updateResultByPaymentId(Long id, PaymentResult paid);
/**
* 根据paymentId集合查询详情信息
*
* @param paymentIdList 集合
* @return 集合
*/
List<PaymentRecDetailAccountResult> getListByReconciliationIds(List<Long> paymentIdList);
}

View File

@@ -0,0 +1,31 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.financial.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.administration.dto.ChargeItemDefInfo;
import com.openhis.common.enums.PaymentStatisticalMethod;
import com.openhis.common.enums.PaymentType;
import com.openhis.financial.domain.PaymentRecStatic;
/**
* 付款管理Service接口
*
* @author SunJQ
* @date 2025-08-08
*/
public interface IPaymentRecStaticService extends IService<PaymentRecStatic> {
/**
* 批量保存付款快照信息
*
* @param paymentId 付款id
* @param paymentType 付款/退款
* @param paymentStatisticalMethod 统计方式:字典/医保分类
* @param chargeItemDefInfoList chargeItem基础信息
*/
void savePaymentRecStatics(Long paymentId, PaymentType paymentType,
PaymentStatisticalMethod paymentStatisticalMethod, List<ChargeItemDefInfo> chargeItemDefInfoList);
}

View File

@@ -0,0 +1,98 @@
package com.openhis.financial.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.openhis.common.enums.PaymentKind;
import com.openhis.common.enums.PaymentStatus;
import com.openhis.common.enums.ybenums.YbMdtrtCertType;
import com.openhis.financial.domain.Contract;
import com.openhis.financial.domain.PaymentReconciliation;
import com.openhis.financial.model.PaymentResult;
import com.openhis.financial.model.PaymentedItemModel;
import com.openhis.financial.model.PrePaymentResult;
import com.openhis.yb.dto.PaymentInpatientDto;
/**
* 付款管理Service接口
*
* @author system
* @date 2025-02-20
*/
public interface IPaymentReconciliationService extends IService<PaymentReconciliation> {
/**
* 根据支付id获取对应收费项目的id列表
*
* @param paymentIdList 支付id列表
* @return 收费项目的id列表
*/
List<Long> getChargeItemIdListByPayment(List<Long> paymentIdList);
/**
* 更新付款状态:退款中
*
* @param paymentIdList 支付id列表
*/
void updateRefundingStatus(List<Long> paymentIdList);
/**
* 【门诊预结算】
*
* @param ybMdtrtCertType 医保凭证类型
* @param busiCardInfo 读卡获取的密钥
* @param contractBusNo 合同编号
* @param paymentedItemList 收费项
* @return 结果
*/
PrePaymentResult preSettle(YbMdtrtCertType ybMdtrtCertType, String busiCardInfo, String contractBusNo,
List<PaymentedItemModel> paymentedItemList);
/**
* 【门诊结算】
*
* @param contract 合同
* @param payTransNo 收费批次号
* @param byValue 医保凭证类型
* @param busiCardInfo 读卡获取的密钥
* @param minpacuntDrugTracCnt 追溯码相关
* @param mcsTracCnt 追溯码相关
* @return 结算结果
*/
PaymentResult settle(Contract contract, String payTransNo, YbMdtrtCertType byValue, String busiCardInfo,
Integer minpacuntDrugTracCnt, Integer mcsTracCnt);
/**
* 更改付款状态
*
* @param id paymentId
* @param success 付款状态
*/
void updatePaymentStatusById(Long id, PaymentStatus success);
/**
* 更改状态
*
* @param id 主键id
* @param success 付款状态
* @param settleId 医保结算id
*/
void updatePaymentStatusAndSettleIdsById(Long id, PaymentStatus success, List<String> settleId);
/**
* 【住院结算】
*
* @param contract 合同
* @param paymentDto 收费参数
* @return 结算结果
*/
PaymentResult inpatientSettle(Contract contract, PaymentInpatientDto paymentDto);
/**
* 查询付款实体
*
* @param encounterId 就诊id
* @return 付款实体
*/
PaymentReconciliation getByEncounterId(Long encounterId, PaymentKind kindEnum);
}

View File

@@ -0,0 +1,19 @@
package com.openhis.financial.service.impl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.openhis.financial.domain.ClaimResponse;
import com.openhis.financial.mapper.ClaimResponseMapper;
import com.openhis.financial.service.IClaimResponseService;
/**
* 索赔响应管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Service
public class ClaimResponseServiceImpl extends ServiceImpl<ClaimResponseMapper, ClaimResponse> implements IClaimResponseService {
}

View File

@@ -0,0 +1,19 @@
package com.openhis.financial.service.impl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.openhis.financial.domain.Claim;
import com.openhis.financial.mapper.ClaimMapper;
import com.openhis.financial.service.IClaimService;
/**
* 索赔管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Service
public class ClaimServiceImpl extends ServiceImpl<ClaimMapper, Claim> implements IClaimService {
}

View File

@@ -0,0 +1,177 @@
package com.openhis.financial.service.impl;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.core.common.core.redis.RedisCache;
import com.core.common.enums.DeleteFlag;
import com.core.common.utils.SecurityUtils;
import com.openhis.common.constant.YbCommonConstants;
import com.openhis.common.enums.Whether;
import com.openhis.financial.domain.Contract;
import com.openhis.financial.mapper.ContractMapper;
import com.openhis.financial.service.IContractService;
/**
* 合同管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Service
public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> implements IContractService {
@Autowired
private RedisCache redisCache;
/**
*
* @param contractNo 医保码
* @return
*/
@Override
public Contract getByContractNo(String contractNo) {
return baseMapper.selectOne(new LambdaUpdateWrapper<Contract>().eq(Contract::getBusNo, contractNo)
.last(YbCommonConstants.sqlConst.LIMIT1));
}
/**
* 查询租户合同信息分页
*
* @param tenantId 租户ID
* @param pageNum 当前页
* @param pageSize 每页多少条
* @return 租户合同信息分页
*/
@Override
public IPage<Contract> getTenantContractPage(Integer tenantId, Integer pageNum, Integer pageSize) {
return baseMapper.selectPage(new Page<>(pageNum, pageSize), new LambdaQueryWrapper<Contract>()
.eq(Contract::getTenantId, tenantId).eq(Contract::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode()));
}
/**
* 查询租户合同信息详情
*
* @param id ID
* @return 租户合同信息详情
*/
@Override
public Contract getTenantContractDetail(Long id) {
return baseMapper.selectById(id);
}
/**
* 新增租户合同信息
*
* @param contract 合同管理实体
*/
@Override
public void addTenantContract(Contract contract) {
baseMapper.insert(contract);
}
/**
* 编辑租户合同信息
*
* @param contract 合同管理实体
*/
@Override
public void editTenantContract(Contract contract) {
baseMapper.updateById(contract);
}
/**
* 删除租户合同信息
*
* @param id ID
*/
@Override
public void delTenantContract(Long id) {
baseMapper.update(new Contract(), new LambdaUpdateWrapper<Contract>().eq(Contract::getId, id)
.set(Contract::getDeleteFlag, DeleteFlag.DELETED.getCode()));
}
/**
* 查詢合同的集合
*
* @return
*/
@Override
public List<Contract> getContractList() {
return baseMapper.selectList(
new LambdaQueryWrapper<Contract>().eq(Contract::getTenantId, SecurityUtils.getLoginUser().getTenantId()));
}
/**
* 查詢合同的集合
*
* @return
*/
@Override
@Cacheable(value = "contractListCache", key = "'contractList'")
public List<Contract> getRedisContractList() {
return getContractList();
}
/**
* 查詢合同的集合
*
* @return
*/
@Override
public Contract getContract(String contractNo) {
List<Contract> contractList = getRedisContractList();
for (Contract contract : contractList) {
if (contractNo.equals(contract.getBusNo())) {
return contract;
}
}
return null;
}
/**
* 根据参保地信息找到对应的合同
*
* @param insuplcAdmdvs
* @return
*/
@Override
public Contract getContractByInsuplcAdmdvs(String insuplcAdmdvs) {
List<Contract> contractList = getRedisContractList();
for (Contract contract : contractList) {
if (insuplcAdmdvs.equals(contract.getBusNo())) {
return contract;
}
}
if (!contractList.isEmpty()) {
Optional<Contract> max = contractList.stream().max(Comparator.comparingInt(Contract::getSort));
if (max.isPresent()) {
return max.get();
}
}
return null;
}
/**
* 查詢合同的集合
*
* @return 合同集合
*/
@Override
public List<Contract> getContractListByYb() {
return baseMapper.selectList(new LambdaQueryWrapper<Contract>().eq(Contract::getYbFlag, Whether.YES.getValue())
.eq(Contract::getTenantId, SecurityUtils.getLoginUser().getTenantId()));
}
}

View File

@@ -0,0 +1,19 @@
package com.openhis.financial.service.impl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.openhis.financial.domain.PaymentNotice;
import com.openhis.financial.mapper.PaymentNoticeMapper;
import com.openhis.financial.service.IPaymentNoticeService;
/**
* 合同管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Service
public class PaymentNoticeServiceImpl extends ServiceImpl<PaymentNoticeMapper, PaymentNotice> implements IPaymentNoticeService {
}

View File

@@ -0,0 +1,47 @@
package com.openhis.financial.service.impl;
import java.util.List;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.openhis.common.enums.PaymentResult;
import com.openhis.financial.domain.PaymentRecDetail;
import com.openhis.financial.mapper.PaymentRecDetailMapper;
import com.openhis.financial.model.PaymentRecDetailAccountResult;
import com.openhis.financial.service.IPaymentRecDetailService;
/**
* 付款管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Service
public class PaymentRecDetailServiceImpl extends ServiceImpl<PaymentRecDetailMapper, PaymentRecDetail>
implements IPaymentRecDetailService {
/**
* 根据paymentId更改结算结果
*
* @param id id
* @param paid PaymentResult
*/
@Override
public void updateResultByPaymentId(Long id, PaymentResult paid) {
baseMapper.update(new PaymentRecDetail().setResultEnum(PaymentResult.PAID.getValue()),
new LambdaQueryWrapper<PaymentRecDetail>().eq(PaymentRecDetail::getReconciliationId, id));
}
/**
* 根据paymentId集合查询详情信息
*
* @param paymentIdList 集合
* @return 集合
*/
@Override
public List<PaymentRecDetailAccountResult> getListByReconciliationIds(List<Long> paymentIdList) {
return baseMapper.getListByReconciliationIds(paymentIdList);
}
}

View File

@@ -0,0 +1,93 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.financial.service.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.openhis.administration.dto.ChargeItemDefInfo;
import com.openhis.common.enums.PaymentStatisticalMethod;
import com.openhis.common.enums.PaymentType;
import com.openhis.financial.domain.PaymentRecStatic;
import com.openhis.financial.mapper.PaymentRecStaticMapper;
import com.openhis.financial.service.IPaymentRecStaticService;
/**
* 付款管理Service业务层处理
*
* @author SunJQ
* @date 2025-08-08
*/
@Service
public class PaymentRecStaticServiceImpl extends ServiceImpl<PaymentRecStaticMapper, PaymentRecStatic>
implements IPaymentRecStaticService {
/**
* 批量保存付款快照信息
*
* @param paymentId 付款id
* @param paymentType 付款/退款
* @param paymentStatisticalMethod 统计方式:字典/医保分类
* @param chargeItemDefInfoList chargeItem基础信息
*/
@Override
public void savePaymentRecStatics(Long paymentId, PaymentType paymentType,
PaymentStatisticalMethod paymentStatisticalMethod, List<ChargeItemDefInfo> chargeItemDefInfoList) {
if (chargeItemDefInfoList.isEmpty()) {
return;
}
Map<String, List<ChargeItemDefInfo>> collect;
List<PaymentRecStatic> paymentRecStatics = new ArrayList<>();
if (paymentStatisticalMethod == PaymentStatisticalMethod.FIN_TYPE_CODE) {
collect = chargeItemDefInfoList.stream().collect(Collectors.groupingBy(ChargeItemDefInfo::getTypeCode));
getPaymentRecStaticList(paymentId, paymentType, paymentStatisticalMethod, collect, paymentRecStatics);
} else if (paymentStatisticalMethod == PaymentStatisticalMethod.MED_CHRGITM_TYPE) {
collect = chargeItemDefInfoList.stream().collect(Collectors.groupingBy(ChargeItemDefInfo::getYbType));
getPaymentRecStaticList(paymentId, paymentType, paymentStatisticalMethod, collect, paymentRecStatics);
} else {
collect = chargeItemDefInfoList.stream().collect(Collectors.groupingBy(ChargeItemDefInfo::getTypeCode));
getPaymentRecStaticList(paymentId, paymentType, PaymentStatisticalMethod.FIN_TYPE_CODE, collect,
paymentRecStatics);
collect = chargeItemDefInfoList.stream().collect(Collectors.groupingBy(ChargeItemDefInfo::getYbType));
getPaymentRecStaticList(paymentId, paymentType, PaymentStatisticalMethod.MED_CHRGITM_TYPE, collect,
paymentRecStatics);
}
saveBatch(paymentRecStatics);
}
/**
*
* @param paymentId 付款id
* @param paymentType 付款/退款
* @param paymentStatisticalMethod 统计方式:字典/医保分类
* @param collect map
* @param paymentRecStatics 集合
*/
public void getPaymentRecStaticList(Long paymentId, PaymentType paymentType,
PaymentStatisticalMethod paymentStatisticalMethod, Map<String, List<ChargeItemDefInfo>> collect,
List<PaymentRecStatic> paymentRecStatics) {
PaymentRecStatic paymentRecStatic;
BigDecimal bigDecimal;
for (Map.Entry<String, List<ChargeItemDefInfo>> stringListEntry : collect.entrySet()) {
paymentRecStatic = new PaymentRecStatic();
bigDecimal = BigDecimal.ZERO;
for (ChargeItemDefInfo chargeItemDefInfo : stringListEntry.getValue()) {
bigDecimal = bigDecimal.add(chargeItemDefInfo.getTotalPrice().multiply(paymentType.getMultiplier()));
}
paymentRecStatic.setAmount(bigDecimal).setReconciliationId(paymentId).setTypeCode(stringListEntry.getKey())
.setChargeItemIds(JSON.toJSONString(
stringListEntry.getValue().stream().map(ChargeItemDefInfo::getId).collect(Collectors.toList())))
.setCountBy(paymentStatisticalMethod.getValue());
paymentRecStatics.add(paymentRecStatic);
}
// return paymentRecStatics;
}
}

View File

@@ -0,0 +1,271 @@
package com.openhis.financial.service.impl;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.SecurityUtils;
import com.core.common.utils.StringUtils;
import com.openhis.common.constant.CommonConstants;
import com.openhis.common.constant.YbCommonConstants;
import com.openhis.common.enums.DelFlag;
import com.openhis.common.enums.PaymentKind;
import com.openhis.common.enums.PaymentStatus;
import com.openhis.common.enums.ybenums.YbMdtrtCertType;
import com.openhis.common.enums.ybenums.YbMedType;
import com.openhis.financial.domain.Contract;
import com.openhis.financial.domain.PaymentReconciliation;
import com.openhis.financial.mapper.PaymentReconciliationMapper;
import com.openhis.financial.model.PaymentResult;
import com.openhis.financial.model.PaymentedItemModel;
import com.openhis.financial.model.PrePaymentResult;
import com.openhis.financial.service.IContractService;
import com.openhis.financial.service.IPaymentReconciliationService;
import com.openhis.yb.dto.Clinic2206OrderOutput;
import com.openhis.yb.dto.ClinicReg2201Output;
import com.openhis.yb.dto.PaymentInpatientDto;
import com.openhis.yb.dto.Yb2304OutputSetlInfo;
import com.openhis.yb.model.Clinic2207OrderModel;
import com.openhis.yb.service.YbManager;
/**
* 付款管理Service业务层处理
*
* @author system
* @date 2025-02-20
*/
@Service
public class PaymentReconciliationServiceImpl extends ServiceImpl<PaymentReconciliationMapper, PaymentReconciliation>
implements IPaymentReconciliationService {
@Resource
private AssignSeqUtil assignSeqUtil;
@Autowired
private IContractService iContractService;
@Autowired
private YbManager ybManager;
/**
* 根据支付id获取对应收费项目的id列表
*
* @param paymentIdList 支付id列表
* @return 收费项目的id列表
*/
@Override
public List<Long> getChargeItemIdListByPayment(List<Long> paymentIdList) {
// 根据支付id获取支付信息
List<PaymentReconciliation> paymentReconciliationList =
baseMapper.selectList(new LambdaQueryWrapper<PaymentReconciliation>()
.select(PaymentReconciliation::getChargeItemIds).in(PaymentReconciliation::getId, paymentIdList));
if (paymentReconciliationList.isEmpty()) {
return null;
}
// 拆解所有的chargeItemId拼装成一个集合
List<String> chargeItemIdList = paymentReconciliationList.stream().map(PaymentReconciliation::getChargeItemIds)
.collect(Collectors.toList());
List<Long> chargeItemIds = new ArrayList<>();
for (String chargeItemId : chargeItemIdList) {
if (StringUtils.isNotEmpty(chargeItemId)) {
chargeItemIds.addAll(Arrays
.stream(
chargeItemId.replaceAll("\\[", "").replaceAll("\\]", "").split(CommonConstants.Common.COMMA))
.map(Long::parseLong).collect(Collectors.toList()));
}
}
// 将收费项目集合转换成列表
return chargeItemIds;
}
/**
* 更新付款状态:退款中
*
* @param paymentIdList 支付id列表
*/
@Override
public void updateRefundingStatus(List<Long> paymentIdList) {
baseMapper.update(new PaymentReconciliation().setStatusEnum(PaymentStatus.REFUNDING.getValue()),
new LambdaUpdateWrapper<PaymentReconciliation>().in(PaymentReconciliation::getId, paymentIdList));
}
/**
* PS对chargeItem分付款方式 2025/05/23 ChargeItem分完付款方式之后医保支付的ChargeItem还要分特慢病和普通门诊特慢病等支付与常规门诊支付传参不一样
*/
/**
* 【预结算】
*
* @param ybMdtrtCertType 医保凭证类型
* @param busiCardInfo 读卡获取的密钥
* @param contractBusNo 合同编号
* @param paymentedItemList 收费项
* @return 预结算结果
*/
@Override
public PrePaymentResult preSettle(YbMdtrtCertType ybMdtrtCertType, String busiCardInfo, String contractBusNo,
List<PaymentedItemModel> paymentedItemList) {
PrePaymentResult prePaymentResult = null;
String ybSwitchFlag = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH);
if (ybSwitchFlag.equals("0")) {
contractBusNo = CommonConstants.BusinessName.DEFAULT_CONTRACT_NO;
}
Contract contract = iContractService.getContract(contractBusNo);
switch (contractBusNo) {
case CommonConstants.BusinessName.DEFAULT_CONTRACT_NO:
prePaymentResult = new PrePaymentResult();
BigDecimal sumAmount = BigDecimal.ZERO;
for (PaymentedItemModel item : paymentedItemList) {
sumAmount = sumAmount.add(item.getTotalPrice());
}
prePaymentResult.setMedfeeSumamt(sumAmount);
prePaymentResult.setFulamtOwnpayAmt(sumAmount);
prePaymentResult.setPsnPartAmt(sumAmount);
prePaymentResult.setPsnCashPay(sumAmount);
prePaymentResult.setChrgBchno(CommonConstants.BusinessName.DEFAULT_CONTRACT_NO);
break;
case "229900":// 吉林省医保
case "220199":// 长春市医保(农大)
case "220100":// 长春市医保(长大)
Map<String, List<PaymentedItemModel>> collect =
paymentedItemList.stream().collect(Collectors.groupingBy(PaymentedItemModel::getMedType));
PrePaymentResult result;
for (Map.Entry<String, List<PaymentedItemModel>> medTypeKV : collect.entrySet()) {
Clinic2206OrderOutput clinic2206OrderOutput = null;
ClinicReg2201Output reg2201Output = null;
if (!medTypeKV.getKey().equals(YbMedType.GENERAL_OUTPATIENT.getValue()) && "1".equals(
SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.YB_SWITCH))) {
// 不是普通门诊就诊类型,补充挂号信息
reg2201Output = ybManager.createRegWithMedType(contract, ybMdtrtCertType, busiCardInfo,
medTypeKV.getValue().get(0).getEncounterId(),
YbMedType.getByValue(medTypeKV.getValue().get(0).getMedType()));
reg2201Output.setMedType(medTypeKV.getKey());// 2025/06/05慢病挂号后上传2206信息报错2201返回值没有medType此处更正赋值
} else {
// 从数据库里取reg2201
reg2201Output =
ybManager.getClinicRegByEncounterId(medTypeKV.getValue().get(0).getEncounterId());
}
// 调用预结算
clinic2206OrderOutput = ybManager.preSettle(contract, medTypeKV.getValue().get(0).getEncounterId(),
ybMdtrtCertType, busiCardInfo, reg2201Output, "01", medTypeKV.getValue().stream()
.map(PaymentedItemModel::getChargeItemId).collect(Collectors.toList()),
YbMedType.getByValue(medTypeKV.getKey()));
prePaymentResult = new PrePaymentResult();
BeanUtils.copyProperties(clinic2206OrderOutput, prePaymentResult);
}
break;
default:
break;
}
return prePaymentResult;
}
/**
* 【门诊结算】
*
* @param contract 合同
* @param payTransNo 支付批次号
* @param ybMdtrtCertType 凭证类型
* @param busiCardInfo 读卡获取到的凭证
* @param minpacuntDrugTracCnt 追溯码相关信息
* @param mcsTracCnt 追溯码相关信息
* @return 结算结果
*/
@Override
public PaymentResult settle(Contract contract, String payTransNo, YbMdtrtCertType ybMdtrtCertType,
String busiCardInfo, Integer minpacuntDrugTracCnt, Integer mcsTracCnt) {
PaymentResult paymentResult = null;
if (!CommonConstants.BusinessName.DEFAULT_CONTRACT_NO.equals(payTransNo)) {
// 医保支付 todo支付的详细信息在于结算中已经存好了但是还没有存储卡余额
Clinic2207OrderModel clinic2207OrderModel =
ybManager.settle(contract, payTransNo, busiCardInfo, ybMdtrtCertType, minpacuntDrugTracCnt, mcsTracCnt);
paymentResult = new PaymentResult();
BeanUtils.copyProperties(clinic2207OrderModel, paymentResult);
} else {
// 自费返回new实体
paymentResult = new PaymentResult();
}
return paymentResult;
}
/**
* 【住院结算】
*
* @param contract 合同
* @param paymentDto 收费参数
* @return 结算结果
*/
@Override
public PaymentResult inpatientSettle(Contract contract, PaymentInpatientDto paymentDto) {
PaymentResult paymentResult = null;
if (!CommonConstants.BusinessName.DEFAULT_CONTRACT_NO.equals(contract.getBusNo())) {
// 医保支付 todo支付的详细信息在于结算中已经存好了但是还没有存储卡余额
Yb2304OutputSetlInfo yb2304OutputSetlInfo = ybManager.inpatientSettle(contract, paymentDto);
paymentResult = new PaymentResult();
BeanUtils.copyProperties(yb2304OutputSetlInfo, paymentResult);
} else {
// 自费返回new实体
paymentResult = new PaymentResult();
}
return paymentResult;
}
/**
* 更改付款状态
*
* @param id paymentId
* @param success 付款状态
*/
@Override
public void updatePaymentStatusById(Long id, PaymentStatus success) {
baseMapper.update(new PaymentReconciliation().setStatusEnum(success.getValue()),
new LambdaQueryWrapper<PaymentReconciliation>().eq(PaymentReconciliation::getId, id));
}
/**
* 更改payment状态以及医保支付结算id
*
* @param id 主键id
* @param success 状态
* @param settleId 医保结算id
*/
@Override
public void updatePaymentStatusAndSettleIdsById(Long id, PaymentStatus success, List<String> settleId) {
if (settleId.isEmpty()) {
baseMapper.update(new PaymentReconciliation().setStatusEnum(success.getValue()),
new LambdaQueryWrapper<PaymentReconciliation>().eq(PaymentReconciliation::getId, id));
} else {
baseMapper.update(
new PaymentReconciliation().setStatusEnum(success.getValue())
.setYbSettleIds(String.join(",", settleId)),
new LambdaQueryWrapper<PaymentReconciliation>().eq(PaymentReconciliation::getId, id));
}
}
/**
* 查询付款实体
*
* @param encounterId 就诊id
* @return 付款实体
*/
@Override
public PaymentReconciliation getByEncounterId(Long encounterId, PaymentKind paymentKind) {
return baseMapper.selectOne(new LambdaQueryWrapper<PaymentReconciliation>()
.eq(PaymentReconciliation::getEncounterId, encounterId)
.eq(PaymentReconciliation::getKindEnum, PaymentKind.HOSPITAL_DEPOSIT.getValue())
.eq(PaymentReconciliation::getDeleteFlag, DelFlag.NO.getCode()).last(YbCommonConstants.sqlConst.LIMIT1));
}
}