后端最新版本同步

This commit is contained in:
Zhang.WH
2025-09-25 10:43:25 +08:00
parent 1276dc4adb
commit c8014404f1
355 changed files with 10070 additions and 5578 deletions

View File

@@ -1,6 +1,7 @@
package com.openhis.yb.dto;
import com.openhis.financial.domain.PaymentRecDetail;
import lombok.Data;
/**
@@ -13,9 +14,12 @@ public class PaymentDecDetailUniAccountDto extends PaymentRecDetail {
*/
private String contractNo;
//险种类型
// 险种类型
private String insutype;
//医疗类别
// 医疗类别
private String medType;
// 医疗费用总额
private String medfeeSumamt;
}

View File

@@ -0,0 +1,43 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.yb.dto;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 医保5205接口请求参数
*
* @author SunJQ
* @date 2025-09-22
*/
@Data
@Accessors(chain = true)
public class Yb5205InputSpecialDisease {
/**
* 患者编号
*/
private String psnNo;
/**
* 开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date begntime;
/**
* 结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endtime;
}

View File

@@ -0,0 +1,219 @@
/*
* Copyright ©2023 CJB-CNIT Team. All rights reserved
*/
package com.openhis.yb.dto;
import java.math.BigDecimal;
import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
/**
* 【5205】接口返回结果
*
* @author SunJQ
* @date 2025-09-22
*/
@Data
public class Yb5205OutputSpecialDisease {
/**
* 费用明细流水号
*/
@JSONField(name = "feedetl_sn")
private String feedetlSn;
/**
* 处方/医嘱号
*/
@JSONField(name = "rx_drord_no")
private String rxDrordNo;
/**
* 定点医药机构编号
*/
@JSONField(name = "fixmedins_code")
private String fixmedinsCode;
/**
* 定点医药机构名称
*/
@JSONField(name = "fixmedins_name")
private String fixmedinsName;
/**
* 人员编号
*/
@JSONField(name = "psn_no")
private String psnNo;
/**
* 医疗类别
*/
@JSONField(name = "med_type")
private String medType;
/**
* 费用发生时间
*/
@JSONField(name = "fee_ocur_time", format = "yyyy-MM-dd HH:mm:ss")
private Date feeOcurTime;
/**
* 数量
*/
@JSONField(name = "cnt")
private BigDecimal cnt;
/**
* 单价
*/
@JSONField(name = "pric")
private BigDecimal pric;
/**
* 收费项目等级
*/
@JSONField(name = "chrgitm_lv")
private String chrgitmLv;
/**
* 医保目录编码
*/
@JSONField(name = "hilist_code")
private String hilistCode;
/**
* 医保目录名称
*/
@JSONField(name = "hilist_name")
private String hilistName;
/**
* 目录类别
*/
@JSONField(name = "list_type")
private String listType;
/**
* 医疗目录编码
*/
@JSONField(name = "med_list_codg")
private String medListCodg;
/**
* 医药机构目录编码
*/
@JSONField(name = "medins_list_codg")
private String medinsListCodg;
/**
* 医药机构目录名称
*/
@JSONField(name = "medins_list_name")
private String medinsListName;
/**
* 医疗收费项目类别
*/
@JSONField(name = "med_chrgitm_type")
private String medChrgitmType;
/**
* 商品名
*/
@JSONField(name = "prodname")
private String prodname;
/**
* 规格
*/
@JSONField(name = "spec")
private String spec;
/**
* 剂型名称
*/
@JSONField(name = "dosform_name")
private String dosformName;
/**
* 限制使用标志
*/
@JSONField(name = "lmt_used_flag")
private String lmtUsedFlag;
/**
* 医院制剂标志
*/
@JSONField(name = "hosp_prep_flag")
private String hospPrepFlag;
/**
* 医院审批标志
*/
@JSONField(name = "hosp_appr_flag")
private String hospApprFlag;
/**
* 中药使用方式
*/
@JSONField(name = "tcmdrug_used_way")
private String tcmdrugUsedWay;
/**
* 生产地类别
*/
@JSONField(name = "prodplac_type")
private String prodplacType;
/**
* 基本药物标志
*/
@JSONField(name = "bas_medn_flag")
private String basMednFlag;
/**
* 医保谈判药品标志
*/
@JSONField(name = "hi_nego_drug_flag")
private String hiNegoDrugFlag;
/**
* 儿童用药标志
*/
@JSONField(name = "chld_medc_flag")
private String chldMedcFlag;
/**
* 外检标志
*/
@JSONField(name = "etip_flag")
private String etipFlag;
/**
* 外检医院编码
*/
@JSONField(name = "etip_hosp_code")
private String etipHospCode;
/**
* 出院带药标志
*/
@JSONField(name = "dscg_tkdrug_flag")
private String dscgTkdrugFlag;
/**
* 目录特项标志
*/
@JSONField(name = "list_sp_item_flag")
private String listSpItemFlag;
/**
* 生育费用标志
*/
@JSONField(name = "matn_fee_flag")
private String matnFeeFlag;
}

View File

@@ -709,6 +709,20 @@ public class YbDao {
return ybUtil.getMedicalDirectory3301Param(tableName, id);
}
/**
* 【3301】医保目录对照参数作成药品
*
* @param categoryCode 药品分类
* @param busNo 药品编号
* @param name 药品编号
* @param ybNo 医保编码
* @return 医保目录对照参数
*/
public MedicalDirectory3301Param getMedicalDirectory3301ParamMedication(String categoryCode, String busNo,
String name, String ybNo) {
return ybUtil.getMedicalDirectory3301ParamMedication(categoryCode, busNo, name, ybNo);
}
/**
* 【3302】目录对照撤销
*
@@ -720,6 +734,19 @@ public class YbDao {
return ybUtil.getMedicalDirectory3302Param(tableName, id);
}
/**
* 【3302】医保目录对照撤销参数作成药品
*
* @param categoryCode 药品分类
* @param busNo 药品编号
* @param ybNo 医保编码
* @return 医保目录对照撤销参数
*/
public MedicalDirectory3302Param getMedicalDirectory3302ParamMedication(String categoryCode, String busNo,
String ybNo) {
return ybUtil.getMedicalDirectory3302ParamMedication(categoryCode, busNo, ybNo);
}
/**
* 【3201】医药机构费用结算对总账
*
@@ -1404,6 +1431,11 @@ public class YbDao {
// 基金支付
settlement3201Dto.setFundPaySumAmt(
paymentDecDetailUniAccountDto.getAmount().add(settlement3201Dto.getFundPaySumAmt()));
// 合计医疗费用
settlement3201Dto
.setMedFeeSumAmt(new BigDecimal(paymentDecDetailUniAccountDto.getMedfeeSumamt() == null
? "0.0" : paymentDecDetailUniAccountDto.getMedfeeSumamt())
.add(settlement3201Dto.getMedFeeSumAmt()));
count++;
}
if (YbPayment.SELF_YB_ZH_PAY.getValue().equals(paymentDecDetailUniAccountDto.getPayEnum())) {
@@ -1417,13 +1449,13 @@ public class YbDao {
settlement3201Dto.setAcctGjPay(
paymentDecDetailUniAccountDto.getAmount().add(settlement3201Dto.getAcctGjPay()));
}
if (YbPayment.SELF_PAY.getValue().equals(paymentDecDetailUniAccountDto.getPayEnum())
|| YbPayment.OTHER_PAY.getValue().equals(paymentDecDetailUniAccountDto.getPayEnum())
|| YbPayment.YB_FUND_PAY.getValue().equals(paymentDecDetailUniAccountDto.getPayEnum())) {
// 合计医疗费用
settlement3201Dto.setMedFeeSumAmt(
paymentDecDetailUniAccountDto.getAmount().add(settlement3201Dto.getMedFeeSumAmt()));
}
// if (YbPayment.SELF_PAY.getValue().equals(paymentDecDetailUniAccountDto.getPayEnum())
// || YbPayment.OTHER_PAY.getValue().equals(paymentDecDetailUniAccountDto.getPayEnum())
// || YbPayment.YB_FUND_PAY.getValue().equals(paymentDecDetailUniAccountDto.getPayEnum())) {
// // 合计医疗费用
// settlement3201Dto.setMedFeeSumAmt(
// paymentDecDetailUniAccountDto.getAmount().add(settlement3201Dto.getMedFeeSumAmt()));
// }
}
// 结算笔数
settlement3201Dto.setFixMedInsSetlCnt(count);
@@ -1985,9 +2017,9 @@ public class YbDao {
.setFeeOcurTime(chargeItemBaseInfoDto.getEnteredDate()).setMedListCodg(chargeItemBaseInfoDto.getYbNo())
.setMedinsListCodg(chargeItemBaseInfoDto.getBaseBusNo())
.setDetItemFeeSumamt(chargeItemBaseInfoDto.getTotalPrice())
.setCnt(new BigDecimal(chargeItemBaseInfoDto.getQuantityValue()))
.setPric(chargeItemBaseInfoDto.getUnitPrice()).setBilgDeptName(chargeItemBaseInfoDto.getDeptName())
.setBilgDrName(chargeItemBaseInfoDto.getDoctName()).setBilgDeptCodg(chargeItemBaseInfoDto.getDeptYbNo())
.setCnt(chargeItemBaseInfoDto.getQuantityValue()).setPric(chargeItemBaseInfoDto.getUnitPrice())
.setBilgDeptName(chargeItemBaseInfoDto.getDeptName()).setBilgDrName(chargeItemBaseInfoDto.getDoctName())
.setBilgDeptCodg(chargeItemBaseInfoDto.getDeptYbNo())
.setBilgDrCodg(chargeItemBaseInfoDto.getDoctYbNo());
yb2301InputFeeDetailList.add(yb2301InputFeeDetail);
@@ -2232,7 +2264,7 @@ public class YbDao {
}
List<EncounterLocation> encounterLocationList = iEncounterLocationService.getEncounterLocationList(encounterId,
LocationForm.BED, EncounterLocationStatus.ACTIVE);
LocationForm.BED, EncounterActivityStatus.ACTIVE);
if (encounterLocationList.isEmpty()) {
throw new ServiceException("未查询到床位信息");
}
@@ -2364,7 +2396,7 @@ public class YbDao {
}
List<EncounterLocation> encounterLocationList = iEncounterLocationService.getEncounterLocationList(encounterId,
LocationForm.BED, EncounterLocationStatus.ACTIVE);
LocationForm.BED, EncounterActivityStatus.ACTIVE);
if (encounterLocationList.isEmpty()) {
throw new ServiceException("未查询到床位信息");
}
@@ -2558,7 +2590,7 @@ public class YbDao {
}
List<EncounterLocation> encounterLocationList = iEncounterLocationService.getEncounterLocationList(encounterId,
LocationForm.BED, EncounterLocationStatus.ACTIVE);
LocationForm.BED, EncounterActivityStatus.ACTIVE);
if (encounterLocationList.isEmpty()) {
throw new ServiceException("未查询到床位信息");
}
@@ -2719,4 +2751,28 @@ public class YbDao {
return yb2405InputInpatient;
}
/**
* 【5205】结果
*
* @param patientId 患者id
* @param begntime 开始时间
* @param endtime 结束时间
* @return 5205结果
*/
public Yb5205InputSpecialDisease yb5205SpecialDiseaseDrugRecordSearch(Long patientId, Date begntime, Date endtime) {
Patient patient = iPatientService.getById(patientId);
if (patient == null) {
throw new ServiceException("未查询到患者信息");
}
InfoPerson perInfoByIdCard = iPerinfoService.getPerInfoByIdCard(patient.getIdCard(), patient.getTenantId());
if (perInfoByIdCard == null) {
throw new ServiceException("未查询到患者医保读卡信息");
}
Yb5205InputSpecialDisease yb5205InputSpecialDisease = new Yb5205InputSpecialDisease();
yb5205InputSpecialDisease.setBegntime(begntime).setEndtime(endtime).setPsnNo(perInfoByIdCard.getPsnNo());
return yb5205InputSpecialDisease;
}
}

View File

@@ -71,7 +71,7 @@ public class YbHttpUtils {
Logger logger = LoggerFactory.getLogger(YbHttpUtils.class);
public Info1101Output getPerInfo(Info1101ReadcardParam readcard) {
// 省名参数
// 声明参数
Result result = null;
Info1101Output perinfo = null;
// 发送请求
@@ -1014,4 +1014,38 @@ public class YbHttpUtils {
}
return null;
}
/**
* 【5205】人员慢特病用药记录查询
*
* @param yb5205InputSpecialDisease
* @return
*/
public List<Yb5205OutputSpecialDisease>
yb5205SpecialDiseaseDrugRecordSearch(Yb5205InputSpecialDisease yb5205InputSpecialDisease) {
String resultString =
httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("ybUrl") + "/spe-disease-record-search",
yb5205InputSpecialDisease, null);
if (StringUtils.isEmpty(resultString)) {
throw new ServiceException("未接收到医保返回参数");
}
System.out.println("【5205】返回参数:" + JSON.toJSONString(resultString));
logger.info("【5205】返回参数:" + resultString);
ObjectMapper mapper = new ObjectMapper();
Result result = null;
try {
result = mapper.readValue(resultString, Result.class);
if (result == null) {
throw new ServiceException("未接收到医保返回参数");
} else if (result.getCode() == 200) {
System.out.println(result.getResult().toString());
return JSON.parseArray(result.getResult().toString(), Yb5205OutputSpecialDisease.class);
} else {
throw new ServiceException(result.getMessage());
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return null;
}
}

View File

@@ -510,6 +510,34 @@ public class YbManager {
throw new ServiceException("药品对照失败");
}
/**
* 【3301】目录对照药品
*
* @param categoryCode 药品分类
* @param busNo 药品编号
* @param name 药品编号
* @param ybNo 医保编码
*/
public R<?> directoryCheckMedication(String categoryCode, String busNo, String name, String ybNo) {
MedicalDirectory3302Param medicalDirectory3302Param =
ybBaseService.getMedicalDirectory3302ParamMedication(categoryCode, busNo, ybNo);
Result result3302Info = ybHttpService.directoryUnCheck(medicalDirectory3302Param);
if (!result3302Info.getCode().equals(CommonConstant.SC_OK_200)) {
return R.fail("目录对照前,撤销对照失败");
}
MedicalDirectory3301Param medicalDirectory3301Param =
ybBaseService.getMedicalDirectory3301ParamMedication(categoryCode, busNo, name, ybNo);
ArrayList<MedicalDirectory3301Param> list = new ArrayList<>();
list.add(medicalDirectory3301Param);
MedicalDirectory3301ListParam medicalDirectory3301ListParam = new MedicalDirectory3301ListParam();
medicalDirectory3301ListParam.setData(list);
Result resultInfo = ybHttpService.directoryCheck(medicalDirectory3301ListParam);
if (!resultInfo.getCode().equals(CommonConstant.SC_OK_200)) {
return R.fail("药品对照失败");
}
return R.ok();
}
/**
* 【3302】目录对照撤销
*
@@ -915,9 +943,9 @@ public class YbManager {
.setFeeOcurTime(chargeItemBaseInfoDto.getEnteredDate()).setMedListCodg(chargeItemBaseInfoDto.getYbNo())
.setMedinsListCodg(chargeItemBaseInfoDto.getBaseBusNo())
.setDetItemFeeSumamt(chargeItemBaseInfoDto.getTotalPrice())
.setCnt(new BigDecimal(chargeItemBaseInfoDto.getQuantityValue()))
.setPric(chargeItemBaseInfoDto.getUnitPrice()).setBilgDeptName(chargeItemBaseInfoDto.getDeptName())
.setBilgDrName(chargeItemBaseInfoDto.getDoctName()).setBilgDeptCodg(chargeItemBaseInfoDto.getDeptYbNo())
.setCnt(chargeItemBaseInfoDto.getQuantityValue()).setPric(chargeItemBaseInfoDto.getUnitPrice())
.setBilgDeptName(chargeItemBaseInfoDto.getDeptName()).setBilgDrName(chargeItemBaseInfoDto.getDoctName())
.setBilgDeptCodg(chargeItemBaseInfoDto.getDeptYbNo())
.setBilgDrCodg(chargeItemBaseInfoDto.getDoctYbNo());
yb2301InputFeeDetailList.add(yb2301InputFeeDetail);

View File

@@ -15,12 +15,14 @@ import org.springframework.stereotype.Component;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.core.common.core.domain.model.LoginUser;
import com.core.common.enums.TenantOptionDict;
import com.core.common.exception.ServiceException;
import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.SecurityUtils;
import com.core.common.utils.StringUtils;
import com.core.system.service.impl.SysUserServiceImpl;
import com.core.web.util.TenantOptionUtil;
import com.openhis.administration.domain.*;
import com.openhis.administration.service.*;
import com.openhis.clinical.domain.Condition;
@@ -268,7 +270,8 @@ public class YbParamBuilderUtil {
List<EncounterDiagnosis> encounterDiagnosis =
iEncounterDiagnosisService.list(new LambdaQueryWrapper<EncounterDiagnosis>()
.eq(EncounterDiagnosis::getEncounterId, encounterId).eq(EncounterDiagnosis::getTenantId, tenantId)
.eq(EncounterDiagnosis::getMedTypeCode, ybMedType.getValue()));// 2025/08/05 农大患者结算慢病时会上传普通门诊的疾病,医保回复该参保人未做该病种的门慢门特备案,故此修正根据门诊类型去上传
.eq(EncounterDiagnosis::getMedTypeCode, ybMedType.getValue()));// 2025/08/05
// 农大患者结算慢病时会上传普通门诊的疾病,医保回复该参保人未做该病种的门慢门特备案,故此修正根据门诊类型去上传
for (EncounterDiagnosis diagnosis : encounterDiagnosis) {
if (Objects.equals(Whether.YES.getValue(), diagnosis.getMaindiseFlag())) {
mainEncounterDiagnosis = diagnosis;
@@ -1219,6 +1222,32 @@ public class YbParamBuilderUtil {
return medicalDirectory3301Param;
}
/**
* 【3301】医保目录对照参数作成药品
*
* @param categoryCode 药品分类
* @param busNo 药品编号
* @param name 药品编号
* @param ybNo 医保编码
* @return 医保目录对照参数
*/
public MedicalDirectory3301Param getMedicalDirectory3301ParamMedication(String categoryCode, String busNo,
String name, String ybNo) {
String listType;
if (MedCategoryCode.TRADITIONAL_CHINESE_MEDICINE.getValue().equals(categoryCode)
|| MedCategoryCode.WESTERN_MEDICINE.getValue().equals(categoryCode)) {
listType = YbListType.WESTERN_AND_CHINESE_PATENT_MEDICINE.getValue();
} else if (MedCategoryCode.CHINESE_HERBAL_MEDICINE.getValue().equals(categoryCode)) {
listType = YbListType.IMPORTANT_HERBAL_SLICES.getValue();
} else {
throw new ServiceException("无效的目录类别");
}
return new MedicalDirectory3301Param().setFixmedinsHilistId(busNo).setFixmedinsHilistName(name)
.setListType(listType).setMedListCodg(ybNo)
.setBegndate(DateUtils.dateTimeNow(YbCommonConstants.constants.YYYY_MM_DD))
.setEnddate(YbCommonConstants.constants.END_TIME);
}
/**
* 【3302】医保目录对照撤销
*
@@ -1289,6 +1318,30 @@ public class YbParamBuilderUtil {
return medicalDirectory3302Param;
}
/**
* 【3302】医保目录对照撤销参数作成药品
*
* @param categoryCode 药品分类
* @param busNo 药品编号
* @param ybNo 医保编码
* @return 医保目录对照撤销参数
*/
public MedicalDirectory3302Param getMedicalDirectory3302ParamMedication(String categoryCode, String busNo,
String ybNo) {
String listType;
if (MedCategoryCode.TRADITIONAL_CHINESE_MEDICINE.getValue().equals(categoryCode)
|| MedCategoryCode.WESTERN_MEDICINE.getValue().equals(categoryCode)) {
listType = YbListType.WESTERN_AND_CHINESE_PATENT_MEDICINE.getValue();
} else if (MedCategoryCode.CHINESE_HERBAL_MEDICINE.getValue().equals(categoryCode)) {
listType = YbListType.IMPORTANT_HERBAL_SLICES.getValue();
} else {
throw new ServiceException("无效的目录类别");
}
return new MedicalDirectory3302Param().setFixmedinsHilistId(busNo)
.setFixmedinsCode(TenantOptionUtil.getOptionContent(TenantOptionDict.FIXMEDINS_CODE)).setListType(listType)
.setMedListCodg(ybNo);
}
/**
*
* @param clearing3205AWebParma [3205]前台传参
@@ -1824,9 +1877,9 @@ public class YbParamBuilderUtil {
.setPharPracCertNo(medDoctor.getPharPracCertNo()).setPsnCertType(mdtrtCertType.getValue())
.setManuLotnum(deviceDispense.getLotNumber()).setManuDate(inventoryItem.getProductionDate())
.setTrdnFlag(flag.getCode()).setRtalDocno(invoice.getId().toString())
.setSelRetnCnt(new BigDecimal(deviceDispense.getQuantity()))
.setSelRetnTime(deviceDispense.getDispenseTime()).setSelRetnOpterName(performer.getName())
.setRxFlag(deviceDefinition.getRxFlag().toString()).setExpyEnd(inventoryItem.getExpirationDate());
.setSelRetnCnt(deviceDispense.getQuantity()).setSelRetnTime(deviceDispense.getDispenseTime())
.setSelRetnOpterName(performer.getName()).setRxFlag(deviceDefinition.getRxFlag().toString())
.setExpyEnd(inventoryItem.getExpirationDate());
// 溯源码
SupplyDelivery supplyDelivery = iSupplyDeliveryService.getOne(
@@ -2315,6 +2368,10 @@ public class YbParamBuilderUtil {
if (jsonObj != null && jsonObj.get("insuplc_admdvs") != null) {
baseInfo.setInsuplcAdmdvs(String.valueOf(jsonObj.get("insuplc_admdvs")));
}
// 异地患者问题
// if (contract.getBusNo() != null) {
// baseInfo.setInsuplcAdmdvs(contract.getBusNo());
// }
if (jsonObj != null && jsonObj.get("decrypt_flag") != null) {
baseInfo.setDecryptFlag(String.valueOf(jsonObj.get("decrypt_flag")));
} else {