From 72176f67ccd5bb06d025884011e5c795a2d9428f Mon Sep 17 00:00:00 2001 From: "Zhang.WH" Date: Wed, 3 Sep 2025 11:27:13 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ctorStationElepPrescriptionController.java | 14 +- .../web/ybmanage/config/YbServiceConfig.java | 92 ++ .../web/ybmanage/controller/YbController.java | 785 ++++++++++++++++++ .../web/ybmanage/dto/Catalogue1312Output.java | 118 +++ .../ybmanage/dto/Clearing3205AWebParam.java | 28 + .../ybmanage/dto/Clinic2207OrderOutput.java | 114 +++ .../dto/Clinic2208UnSetlInfoOutput.java | 109 +++ .../web/ybmanage/dto/ClinicReg2201Output.java | 67 ++ .../ybmanage/dto/Financial13203WebParam.java | 49 ++ .../ybmanage/dto/Financial3202WebParam.java | 10 + .../ybmanage/dto/Financial3203AWebParam.java | 36 + .../ybmanage/dto/Financial3203WebParam.java | 42 + .../dto/FinancialHand3203AWebParam.java | 33 + .../web/ybmanage/dto/Info1101Output.java | 70 ++ .../web/ybmanage/dto/PatientInfoDto.java | 85 ++ .../com/openhis/web/ybmanage/dto/Result.java | 48 ++ .../openhis/web/ybmanage/dto/ResultBody.java | 40 + .../ybmanage/dto/Settlement3201WebParam.java | 39 + .../ybmanage/dto/Settlement3202WebParam.java | 47 ++ .../ybmanage/dto/Settlement3209AWebParam.java | 35 + .../dto/VeriPrescriptionDetailInfoDto.java | 98 +++ .../ybmanage/dto/VeriPrescriptionInfoDto.java | 55 ++ .../ybmanage/dto/VeriPrescriptionParam.java | 23 + .../ybmanage/dto/Yb2301FeeDetailParam.java | 196 +++++ .../ybmanage/dto/Yb2301InpatientOutput.java | 124 +++ .../ybmanage/dto/Yb2302InpatientParam.java | 31 + .../ybmanage/dto/Yb2303InpatientOutput.java | 258 ++++++ .../web/ybmanage/dto/Yb2303InpatientPram.java | 119 +++ .../dto/Yb2304InpatientExpContentParam.java | 31 + .../ybmanage/dto/Yb2304InpatientOutput.java | 279 +++++++ .../ybmanage/dto/Yb2304InpatientParam.java | 111 +++ .../ybmanage/dto/Yb2305InpatientOutput.java | 221 +++++ .../ybmanage/dto/Yb2305InpatientParam.java | 31 + .../web/ybmanage/mapper/YbElepMapper.java | 44 + .../openhis/web/ybmanage/mapper/YbMapper.java | 72 ++ .../ybmanage/service/IYbEleBaseService.java | 227 +++++ .../ybmanage/service/IYbEleHttpService.java | 64 ++ .../web/ybmanage/service/IYbService.java | 38 + .../service/impl/YbEleHttpServiceImpl.java | 255 ++++++ .../service/impl/YbElepBaseServiceImpl.java | 701 ++++++++++++++++ .../ybmanage/service/impl/YbServiceImpl.java | 407 +++++++++ .../ybmanage/util/YbEleParamBuilderUtil.java | 657 +++++++++++++++ .../web/ybmanage/vo/Financial3203VO.java | 40 + .../ybmanage/vo/Settlement3201DetailVO.java | 23 + .../web/ybmanage/vo/Settlement3201VO.java | 30 + .../web/ybmanage/vo/Settlement3202VO.java | 47 ++ 46 files changed, 6038 insertions(+), 5 deletions(-) create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/config/YbServiceConfig.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Catalogue1312Output.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clearing3205AWebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2207OrderOutput.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2208UnSetlInfoOutput.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ClinicReg2201Output.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial13203WebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3202WebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203AWebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203WebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/FinancialHand3203AWebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Info1101Output.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/PatientInfoDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Result.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ResultBody.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3201WebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3202WebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3209AWebParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionDetailInfoDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionInfoDto.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2301FeeDetailParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2301InpatientOutput.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2302InpatientParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2303InpatientOutput.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2303InpatientPram.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientExpContentParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientOutput.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2305InpatientOutput.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2305InpatientParam.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbElepMapper.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbMapper.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleBaseService.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleHttpService.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbService.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbEleHttpServiceImpl.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbElepBaseServiceImpl.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbServiceImpl.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/util/YbEleParamBuilderUtil.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Financial3203VO.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201DetailVO.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201VO.java create mode 100644 openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3202VO.java diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationElepPrescriptionController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationElepPrescriptionController.java index 42619971..ead5b4e9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationElepPrescriptionController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationElepPrescriptionController.java @@ -3,19 +3,23 @@ */ package com.openhis.web.doctorstation.controller; -import java.util.List; - +import com.openhis.web.doctorstation.appservice.IDoctorStationElepPrescriptionService; +import com.openhis.web.doctorstation.dto.*; +import com.openhis.web.ybmanage.service.IYbEleHttpService; +import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; -import com.openhis.web.doctorstation.appservice.IDoctorStationElepPrescriptionService; -import com.openhis.web.doctorstation.dto.DeletePrescriptionInfoParam; -import com.openhis.web.doctorstation.dto.ElepPrescriptionInfoParam; +import com.openhis.common.enums.AdviceOpType; +import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import java.util.List; + /** * 医生站-电子处方 controller */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/config/YbServiceConfig.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/config/YbServiceConfig.java new file mode 100644 index 00000000..1a002a06 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/config/YbServiceConfig.java @@ -0,0 +1,92 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.ConstructorBinding; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +/** + * 本地部署方案-医保配置类 + * + * @author SunJQ + * @date 2025-04-11 + */ +@Configuration +@ConstructorBinding +@PropertySource("classpath:properties/yb.properties") +@ConfigurationProperties(prefix = "ybapp.config") +@EnableConfigurationProperties +public class YbServiceConfig { + + private String url; + + private String eleUrl; + + private String key; + + private String timeOut; + + private String clrOptins;// 清算机构;必须是准确的6位编码,可以从3206A交易获取 + + private String fixmedinsCode;// 定点医药机构编号,如H22010200XXX + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getEleUrl() { + return eleUrl; + } + + public void setEleUrl(String eleUrl) { + this.eleUrl = eleUrl; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getTimeOut() { + return timeOut; + } + + public void setTimeOut(String timeOut) { + this.timeOut = timeOut; + } + + public YbServiceConfig(String url, String key, String timeOut) { + this.url = url; + this.key = key; + this.timeOut = timeOut; + } + + public YbServiceConfig() {} + + public String getClrOptins() { + return clrOptins; + } + + public void setClrOptins(String clrOptins) { + this.clrOptins = clrOptins; + } + + public String getFixmedinsCode() { + return fixmedinsCode; + } + + public void setFixmedinsCode(String fixmedinsCode) { + this.fixmedinsCode = fixmedinsCode; + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java new file mode 100644 index 00000000..795456ca --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/controller/YbController.java @@ -0,0 +1,785 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.controller; + +import java.io.*; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; +import com.core.common.utils.SecurityUtils; +import com.core.common.utils.StringUtils; +import com.openhis.administration.domain.Encounter; +import com.openhis.administration.domain.Patient; +import com.openhis.administration.service.IEncounterService; +import com.openhis.administration.service.IPatientService; +import com.openhis.clinical.domain.ConditionDefinition; +import com.openhis.clinical.service.IConditionDefinitionService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.financial.domain.Contract; +import com.openhis.financial.service.IContractService; +import com.openhis.web.ybmanage.dto.Financial3202WebParam; +import com.openhis.web.ybmanage.dto.FinancialHand3203AWebParam; +import com.openhis.web.ybmanage.service.IYbService; +import com.openhis.yb.domain.FinancialApplyRecord; +import com.openhis.yb.domain.InfoPerson; +import com.openhis.yb.dto.*; +import com.openhis.yb.service.IPerinfoService; +import com.openhis.yb.service.YbDao; +import com.openhis.yb.service.YbHttpUtils; +import com.openhis.yb.util.CommonConstant; + +/** + * 医保接口 + * + * @author SunJQ + * @date 2025-04-11 + */ +@RestController +@RequestMapping("/yb-request") +public class YbController { + + @Autowired + YbDao ybDao; + @Autowired + YbHttpUtils ybHttpUtils; + @Autowired + IPatientService patientService; + @Autowired + IPerinfoService iPerinfoService; + @Autowired + IEncounterService iEncounterService; + @Autowired + IContractService iContractService; + @Autowired + IConditionDefinitionService iConditionDefinitionService; + @Autowired + ResourceLoader resourceLoader; + @Autowired + IYbService ybService; + + /** + * 【9001】 + * + * @param practitionerId 参与者Id + * @param mac 加密后的mac地址 + * @return 结果 + */ + @PostMapping("/sign") + public R sign(String practitionerId, String mac, String ip) { + Sign signParam = ybDao.getSignParam(practitionerId, mac, ip); + if (signParam == null) { + throw new ServiceException("未生成签到参数"); + } + List contractList = iContractService.getContractListByYb(); + List signResultList = new ArrayList<>(); + for (Contract contract : contractList) { + Sign9001Result signResult = ybHttpUtils.sign(signParam, contract); + if (signResult != null) { + ybDao.saveSign(signParam, signResult); + signResultList.add(signResult); + } + } + if (contractList.size() == signResultList.size()) { + return R.ok("签到成功"); + } else { + return R.fail("签到失败"); + } + } + + /** + * 【1101】 + * + * @param certType 就诊id + * @param certNo 租户id + * @return 结果 + */ + @PostMapping("/per-info") + public R getPerInfo(String certType, String certNo, String psnCertType) { + Info1101ReadcardParam readcard = ybDao.getReadCard(certType, certNo); + Info1101Output perInfo = ybHttpUtils.getPerInfo(readcard); + if (perInfo != null) { + ybDao.saveReadcardAndPerinfo(readcard, perInfo); + PatientInfoDto patient = ybDao.getPatent(perInfo); + return R.ok(patient); + } else { + return R.fail("未查询到患者信息"); + } + } + + /** + * 【5301】获取人员慢病 + * + * @param encounterId 就诊id + * @return 结果 + */ + @GetMapping("/getConditionDefinition") + public R getSpecialDia(Long encounterId) { + + Encounter encounter = iEncounterService.getById(encounterId); + if (encounter == null) { + throw new ServiceException("未获取到就诊信息"); + } + Patient patient = patientService.getById(encounter.getPatientId()); + if (patient == null) { + throw new ServiceException("未获取到患者信息"); + } + InfoPerson perinfo = + iPerinfoService.getPerInfoByIdCard(patient.getIdCard(), SecurityUtils.getLoginUser().getTenantId()); + if (perinfo == null) { + throw new ServiceException("未连接医保获取患者信息"); + } + Info1101Output info1101Output = JSON.parseObject(perinfo.getResult1101(), Info1101Output.class); + List feedetail = info1101Output.getFeedetail(); + + Date currentDate = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + List currentRangeResults = new ArrayList<>(); + for (Info5301SpecialConditionResult info5301SpecialConditionResult : feedetail) { + try { + Date begndate = dateFormat.parse(info5301SpecialConditionResult.getBegndate()); + Date enddate = dateFormat.parse(info5301SpecialConditionResult.getEnddate()); + + // 检查当前日期是否在 begndate 和 enddate 之间 + if (currentDate.compareTo(begndate) >= 0 && currentDate.compareTo(enddate) <= 0) { + currentRangeResults.add(info5301SpecialConditionResult); + } + } catch (ParseException e) { + e.printStackTrace(); // 处理日期解析异常 + } + } + List conditionDefinitions = null; + if (!currentRangeResults.isEmpty()) { + conditionDefinitions = iConditionDefinitionService.list( + new LambdaUpdateWrapper().in(ConditionDefinition::getYbNo, currentRangeResults + .stream().map(Info5301SpecialConditionResult::getOpspDiseCode).collect(Collectors.toList()))); + } + return R.ok(conditionDefinitions); + } + + /** + * 【3301】目录对照 + * + * @param tableName 就诊id + * @param id 付款id + * @return 结果 + */ + @PostMapping("/directory-cross-check") + public R directoryCheck(String tableName, Long id) { + MedicalDirectory3301Param medicalDirectory3301Param = ybDao.getMedicalDirectory3301Param(tableName, id); + ArrayList list = new ArrayList<>(); + list.add(medicalDirectory3301Param); + MedicalDirectory3301ListParam medicalDirectory3301ListParam = new MedicalDirectory3301ListParam(); + medicalDirectory3301ListParam.setData(list); + Result resultInfo = ybHttpUtils.directoryCheck(medicalDirectory3301ListParam); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveDirectoryHistory(tableName, id, 3301, medicalDirectory3301Param); + } + return R.ok(); + } + + /** + * 【3302】目录对照撤销 + * + * @param tableName 就诊id + * @param id 付款id + * @return 结果 + */ + @PostMapping("/directory-un-check") + public R directoryUnCheck(String tableName, Long id) { + + MedicalDirectory3302Param medicalDirectory3302Param = ybDao.getMedicalDirectory3302Param(tableName, id); + Result resultInfo = ybHttpUtils.directoryUnCheck(medicalDirectory3302Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveDirectoryHistory(tableName, id, 3302, medicalDirectory3302Param); + } + + return R.ok(); + } + + /** + * 【3201】对总账 + * + * @param settlement3201WebParam 3201入参条件 + * @return 结果 + */ + @PostMapping("/reconcile") + public R reconcileGeneralLedger(@RequestBody Settlement3201WebParam settlement3201WebParam) { + Financial3201Param financial3201Param = ybDao.getFinancial3201Param(settlement3201WebParam); + Result result = ybHttpUtils.reconcileGeneralLedger(financial3201Param); + if (result.getCode().equals(CommonConstant.SC_OK_200)) { + // System.out.println(JSON.parseObject(JSON.toJSONString(result.getResult()))); + Financial3201Output financial3201Output = + JSON.parseObject(JSON.toJSONString(result.getResult()), Financial3201Output.class); + ybDao.saveReconcileGeneralLedger(financial3201Output, financial3201Param); + if ("0".equals(financial3201Output.getStmtRslt())) { + return R.ok("OK"); + } + return R.ok(financial3201Output.getStmtRsltDscr()); + } + return R.fail("医保app通讯失败"); + } + + /** + * 【3201】对总账列表 + * + * @param settlement3201WebParam 3201入参条件 + * @return 结果 + */ + @GetMapping("/reconcile-list") + public R reconcileGeneralLedgerList(Settlement3201WebParam settlement3201WebParam) { + return R.ok(ybDao.reconcileGeneralLedgerDetail(settlement3201WebParam)); + + } + + /** + * 【3202】对明细账 + * + * @param settlement3202WebParam 3202查询数据 + * @return 结果 + */ + @PostMapping("/reconcile-detail-list") + public R reconcileGeneralLedgerDetail(@RequestBody Settlement3202WebParam settlement3202WebParam) { + List financial3202FileParams = ybDao.paymentCompareYbSettle(settlement3202WebParam); + + // FinancialSettlement3202Param financial3202Param = + // ybDao.getFinancialSettlement3202Param(settlement3202WebParam); + // FinancialSettlement3202Result resultInfo = ybHttpUtils.reconcileGeneralLedgerDetail(financial3202Param); + + return R.ok(financial3202FileParams); + } + + /** + * 【3202】生成txt文件 + * + * @param financial3202WebParam 3202查询数据 + * @return 结果 + */ + @PostMapping("/reconcile-detail-txt") + public void reconcileGeneralLedgerDetailTxt(@RequestBody Financial3202WebParam financial3202WebParam, + HttpServletResponse response) throws IOException { + List financial3202FileParams = + ybDao.paymentCompareYbSettle(financial3202WebParam.getSettlementIdList()); + // String filePath = SecurityUtils.getLoginUser().getOptionJson().getString("filePath")+new + // Date().getTime()+".txt"; + // String filePath = "C:\\Users\\bjbUser\\Desktop\\"+new Date().getTime()+".txt"; + // try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath))) { + // for (Financial3202FileParam item : financial3202FileParams) { + // // 假设每个实体都有toString()方法返回逗号分隔的属性 + // // 或者你可以自定义获取属性的方式 + // System.out.println(item.toString()); + // String line = item.getTxt(); + // writer.write(line); + // writer.newLine(); + // } + // } + // return R.ok("生成txt文件成功,文件路径:"+filePath); + + // 2. 设置响应头(强制下载,指定文件名) + String fileName = "financial_report_" + System.currentTimeMillis() + ".txt"; + response.setContentType("application/octet-stream"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", + "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8").replace("+", "%20") + "\""); + + // 3. 直接通过输出流写入数据(避免创建临时文件) + try (OutputStream os = response.getOutputStream(); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, StandardCharsets.UTF_8))) { + + for (Financial3202FileParam item : financial3202FileParams) { + writer.write(item.getTxt()); // 写入每行数据 + writer.newLine(); // 换行 + } + writer.flush(); + } + System.out.println(fileName); + // return R.ok("生成txt文件成功,文件名称:"+fileName); + } + + /** + * + * @param file 文件流 + * @param filename 文件名 + * @return + */ + @PostMapping(value = "/file-up") + public R uploadFile(@RequestPart("file") MultipartFile file, @RequestParam("filename") String filename) { + // 1. 基础校验 + if (file.isEmpty()) { + return R.fail("文件不能为空"); + } + if (!file.getOriginalFilename().endsWith(".zip")) { + return R.fail("仅支持ZIP格式文件"); + } + + // 2. 调用Service处理业务逻辑 + try { + ResponseEntity fileResult = ybHttpUtils.upload9101(file, filename); + return R.ok(fileResult); + } catch (Exception e) { + return R.fail("处理失败: " + e.getMessage()); + } + } + + /** + * 触发3202接口 + * + * @param settlementIdList 3202查询数据 + * @return + * @throws IOException + */ + @PostMapping("/reconcile-general") + public R reconcileGeneral(List settlementIdList, String filePath, String fileQuryNo, String setlOptins, + String clrType) { + // todo:这里需要考虑3302接口的参数是后台合计还是由前台传入,因为这个参数还要和txt文件对应(既需要txt中的数据还需要db表中的一些数据), + // String filePath = SecurityUtils.getLoginUser().getOptionJson().getString("filePath")+new + // Date().getTime()+".txt"; + List financial3202FileParamList = new ArrayList<>(); + Resource resource = resourceLoader.getResource(filePath); // 或使用 "file:" 读取绝对路径 + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(resource.getInputStream()))) { + String line; + while ((line = reader.readLine()) != null) { + if (!line.trim().isEmpty()) { + String[] fields = line.split("\t"); // 按 Tab 分割字段 + if (fields.length == 7) { + BigDecimal medfeeSumamt = new BigDecimal(fields[3]); + BigDecimal fundPaySumamt = new BigDecimal(fields[4]); + BigDecimal acctPay = new BigDecimal(fields[5]); + Financial3202FileParam person = new Financial3202FileParam(fields[0], fields[1], fields[2], + medfeeSumamt, fundPaySumamt, acctPay, fields[6]); + financial3202FileParamList.add(person); + } + } + } + } catch (IOException e) { + e.printStackTrace(); + throw new ServiceException("IO异常,异常信息:" + e.getMessage()); + } + + BigDecimal medfeeSumamt = BigDecimal.ZERO;// 医疗费总额 + BigDecimal fundPaySumamt = BigDecimal.ZERO;// 基金支付 + // Integer fixmedinsSetlCnt = 0;//结算笔数 + + if (financial3202FileParamList.isEmpty()) { + throw new ServiceException("未获取txt文件中实体"); + } + for (Financial3202FileParam financial3202FileParam : financial3202FileParamList) { + medfeeSumamt = medfeeSumamt.add(financial3202FileParam.getMedfeeSumamt()); + fundPaySumamt = fundPaySumamt.add(financial3202FileParam.getFundPaySumamt()); + } + + FinancialSettlement3202Param financialSettlement3202Param = + ybDao.getFinancialSettlement3202Param(settlementIdList, medfeeSumamt, fundPaySumamt); + if (financialSettlement3202Param == null) { + throw new ServiceException("未生成3202参数"); + } + financialSettlement3202Param.setClrType(clrType).setFileQuryNo(fileQuryNo) + .setRefdSetlFlag(financial3202FileParamList.get(0).getRefdSetlFlag()).setSetlOptins(setlOptins); + + FinancialSettlement3202Result financialSettlement3202Result = + ybHttpUtils.reconcileGeneralLedgerDetail(financialSettlement3202Param); + if (financialSettlement3202Result == null) { + throw new ServiceException("未收到3202参数"); + } + + return R.ok(financialSettlement3202Result); + } + + /** + * 【3209A】第三方数据查询 + * + * @param settlement3209AWebParam 3209A入参条件 + * @return 结果 + */ + @PostMapping("/three-part-search-err") + public R threePartSearch(Settlement3209AWebParam settlement3209AWebParam) { + + FinancialSettlement3209AParam financialSettlement3209AParam = + ybDao.getFinancialSettlement3209AParam(settlement3209AWebParam); + List list = ybHttpUtils.threePartSearch(financialSettlement3209AParam); + + return R.ok(); + } + + /** + * 【3203A】清算申请(吉林省) + * + * @param financial3203AWebParam 3203A入参条件 + * @return 结果 + */ + @PostMapping("/apply-financial-clearing") + public R applyFinancialClearing(@RequestBody Financial3203AWebParam financial3203AWebParam) { + Financial3203AParam financial3203AParam = ybDao.getFinancial3203AParam(financial3203AWebParam); + String s = ybHttpUtils.applyFinancialClearing(financial3203AParam); + if (!StringUtils.isEmpty(s)) { + Result result = JSON.parseObject(s, Result.class); + if (result != null) { + if (result.getCode() == 200) { + ybDao.save3203AFinancialClearingApplycation(financial3203AParam, + String.valueOf(result.getResult())); + return R.ok(result); + } + } + } + return R.fail(s); + } + + /** + * 【3203A】清算申请(吉林省) + * + * @param financialClearing3203AWebParam 3203A入参条件 + * @return 结果 + */ + @PostMapping("/auto-apply-financial-clearing") + public R autoApplyFinancialClearing(@RequestBody FinancialClearing3203AWebParam financialClearing3203AWebParam) { + + Settlement3202WebParam settlement3202WebParam = new Settlement3202WebParam(); + settlement3202WebParam.setStmtBegnDate(String.valueOf(financialClearing3203AWebParam.getStmtBegnDate())); + settlement3202WebParam.setStmtEndDate(String.valueOf(financialClearing3203AWebParam.getStmtEndDate())); + settlement3202WebParam.setClrType(financialClearing3203AWebParam.getClrType()); + settlement3202WebParam.setSetlOptins(financialClearing3203AWebParam.getSetlOptins()); + List financial3202FileParams = ybDao.paymentCompareYbSettle(settlement3202WebParam); + + Financial3203AParam financial3203AParam = ybDao.getFinancial3203AParam(financial3202FileParams, + String.valueOf(financialClearing3203AWebParam.getStmtBegnDate()), + String.valueOf(financialClearing3203AWebParam.getStmtEndDate()), + financialClearing3203AWebParam.getClrType(), financialClearing3203AWebParam.getSetlOptins()); + String s = ybHttpUtils.applyFinancialClearing(financial3203AParam); + if (!StringUtils.isEmpty(s)) { + Result result = JSON.parseObject(s, Result.class); + if (result != null) { + if (result.getCode() == 200) { + ybDao.save3203AFinancialClearingApplycation(financial3203AParam, + String.valueOf(result.getResult())); + return R.ok(result); + } + } + } + return R.fail(s); + } + + /** + * 【3203A】手动清算申请(吉林省) + * + * @param financialHand3203AWebParam 3203A入参条件 + * @return 结果 + */ + @PostMapping("/hand-operated-apply-financial-clearing") + public R handOperatedApplyFinancialClearing(@RequestBody FinancialHand3203AWebParam financialHand3203AWebParam) { + + Financial3203AParam financial3203AParam = new Financial3203AParam(); + + financial3203AParam.setClrType(financialHand3203AWebParam.getClrType()); + financial3203AParam.setMedfeeSumamt(financialHand3203AWebParam.getMedfeeSumamt()); + financial3203AParam.setMedSumfee(financialHand3203AWebParam.getMedSumfee()); + financial3203AParam.setAcctPay(financialHand3203AWebParam.getAcctPay()); + financial3203AParam.setCashPayamt(financialHand3203AWebParam.getCashPayamt()); + financial3203AParam.setFundAppySum(financialHand3203AWebParam.getFundAppySum()); + financial3203AParam.setClrOptins(financialHand3203AWebParam.getClrOptins()); + + ybDao.getFinancial3203AParamForTime(financial3203AParam, + String.valueOf(financialHand3203AWebParam.getBegndate()), + String.valueOf(financialHand3203AWebParam.getEnddate())); + String s = ybHttpUtils.applyFinancialClearing(financial3203AParam); + if (!StringUtils.isEmpty(s)) { + Result result = JSON.parseObject(s, Result.class); + if (result != null) { + if (result.getCode() == 200) { + ybDao.save3203AFinancialClearingApplycation(financial3203AParam, + String.valueOf(result.getResult())); + return R.ok(result); + } + } + } + return R.fail(s); + } + + /** + * 清算申请记录(吉林省) + * + * @param + * @return 结果 + */ + @GetMapping("/apply-financial-clearing-list") + public R getApplyFinancialClearingList(@RequestParam(value = "searchKey", defaultValue = "") String searchKey, + @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) { + return R.ok(ybDao.getFinancial3203APage(searchKey, pageNo, pageSize, request)); + } + + /** + * 【3204A】清算申请撤销(吉林省) + * + * @param clrAppyEvtId 3203A入参条件 + * @return 结果 + */ + @GetMapping("/apply-un-clearing") + public R cancelFinancialClearing(String clrAppyEvtId, String clrOptins) { + Financial3204Param financial3204Param = new Financial3204Param(); + FinancialApplyRecord financialApplyRecord = ybDao.getFinancial3204ParamByClrAppyEvtId(clrAppyEvtId); + financial3204Param.setClrOptins(clrOptins).setClrAppyEvtId(financialApplyRecord.getOutResult()); + Result resultInfo = ybHttpUtils.cancelFinancialClearing(financial3204Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.save3204AFinancialClearingApplycation(clrAppyEvtId, clrOptins); + return R.ok("撤销成功"); + } + return R.fail("撤销失败"); + } + + /** + * 【3205A】清算申请状态查询 + * + * @param clearing3205AWebParma 3205A入参条件 + * @return 结果 + */ + @PostMapping("/get-clearing-status") + public R getFinancialClearingStatus(Clearing3205AWebParma clearing3205AWebParma) { + + Clearing3205AParma clearing3205AParma = ybDao.getClearing3205AParma(clearing3205AWebParma); + Clearing3205AResult clearing3205AResult = ybHttpUtils.getFinancialClearingStatus(clearing3205AParma); + + return R.ok(clearing3205AResult); + } + + /** + * 【3501】商品盘存上传 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/upload-inventory-count") + public R uploadInventoryCount(Long id) { + + MedicalInventory3501Param medicalInventory3501Param = + ybDao.getMedicalInventory3501Param(id, SecurityUtils.getLoginUser().getTenantId()); + Result resultInfo = ybHttpUtils.uploadInventoryCount(medicalInventory3501Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryCheckRecord(medicalInventory3501Param, resultInfo.getMessage()); + return R.ok(); + } + ybDao.saveInventoryCheckRecord(medicalInventory3501Param, resultInfo.getMessage()); + return R.fail(); + } + + /** + * 【3502】商品信息变更 + * + * @param id 供应申请id + * @param invChgType 变更类型 参考枚举 + * @return 结果 + */ + @PostMapping("/upload-inventory") + public R updateInventoryCount(Long id, String invChgType) { + + MedicalInventory3502Param medicalInventory3502Param = + ybDao.getMedicalInventory3502Param(id, invChgType, SecurityUtils.getLoginUser().getTenantId()); + Result resultInfo = ybHttpUtils.updateInventoryCount(medicalInventory3502Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryChangeRecord(medicalInventory3502Param, resultInfo.getMessage()); + return R.ok(); + } + return R.fail(); + } + + /** + * 【3503】商品采购 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/procurement") + public R procurement(Long id) { + + Medical3503Param medical3503Param = ybDao.getMedical3503Param(id, SecurityUtils.getLoginUser().getTenantId()); + Result resultInfo = ybHttpUtils.procurement(medical3503Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryPurchaseRecord(medical3503Param, resultInfo.getMessage()); + return R.ok(); + } + return R.fail(); + } + + /** + * 【3504】商品采购退货 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/procurement-cancel") + public R cancelProcurement(Long id) { + + MedicalPurchase3504Param medicalPurchase3504Param = + ybDao.getMedicalPurchase3504Param(id, SecurityUtils.getLoginUser().getTenantId()); + Result resultInfo = ybHttpUtils.cancelProcurement(medicalPurchase3504Param); + if (resultInfo.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryPurchaseReturnRecord(medicalPurchase3504Param, resultInfo.getMessage()); + return R.ok(); + } + return R.fail(); + } + + /** + * 【3505】商品销售 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/merchandise") + public R merchandise(Long id, String ListType) { + Medical3505Param medical3505Param = + ybDao.getMedical3505Param(id, ListType, SecurityUtils.getLoginUser().getTenantId()); + Result result = ybHttpUtils.merchandise(medical3505Param); + Medical3505Result medical3505Result = + JSON.parseObject(JSON.toJSONString(result.getMessage()), Medical3505Result.class); + if ("1".equals(medical3505Result.getRetRslt())) { + ybDao.saveInventorySaleRecord(medical3505Param, medical3505Result.getMsgRslt()); + return R.ok(); + } + ybDao.saveInventorySaleRecord(medical3505Param, medical3505Result.getMsgRslt()); + return R.fail(); + } + + /** + * 【3506】商品销售退货 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/cancel-merchandise") + public R cancelMerchandise(Long id, String ListType) { + Medical3506Param medical3506Param = + ybDao.getMedical3506Param(id, ListType, SecurityUtils.getLoginUser().getTenantId()); + Result result = ybHttpUtils.cancelMerchandise(medical3506Param); + Medical3505Result medical3505Result = + JSON.parseObject(JSON.toJSONString(result.getMessage()), Medical3505Result.class); + if ("1".equals(medical3505Result.getRetRslt())) { + ybDao.saveInventorySaleReturnRecord(medical3506Param, medical3505Result.getMsgRslt()); + return R.ok(); + } + ybDao.saveInventorySaleReturnRecord(medical3506Param, medical3505Result.getMsgRslt()); + return R.fail(); + } + + /** + * 【3507】商品信息删除 + * + * @param id 供应申请id + * @return 结果 + */ + @PostMapping("/del-goods") + public R deleteGoodsInfo(Long id, String ListType) { + Medical3507Param medical3507Param = ybDao.getMedical3507Param(id, ListType); + Result resultBody = ybHttpUtils.deleteGoodsInfo(medical3507Param); + if (resultBody.getCode().equals(CommonConstant.SC_OK_200)) { + ybDao.saveInventoryDelRecord(medical3507Param); + return R.ok(); + } + return R.fail(); + } + + /** + * 【3206A】清算机构查询 + * + * @return 结果 + */ + @GetMapping("/select-clroptins") + public R getClrOptins(String pageNum, String pageSize, String fixmedinsCode) { + Clearing3206AParam clearing3206AParam = new Clearing3206AParam(); + clearing3206AParam.setPageNum(Integer.parseInt(pageNum)).setPageSize(Integer.parseInt(pageSize)) + .setFixmedinsCode(fixmedinsCode); + Result resultBody = ybHttpUtils.getClrOptins(clearing3206AParam); + if (resultBody.getCode().equals(CommonConstant.SC_OK_200)) { + // ybDao.saveInventoryDelRecord(medical3507Param); + // resultBody. + return R.ok(); + } + return R.fail(resultBody); + } + + /** + * 【1312】-医保目录信息查询 + * + * @param hilistCode 医保目录编码 + * @param dateStr 更新时间 + * @return 结果 + */ + @PostMapping("/query-yb-catalogue") + public R queryYbCatalogue(@RequestParam String hilistCode, @RequestParam String dateStr) { + Catalogue1312QueryParam catalogue1312QueryParam = new Catalogue1312QueryParam(); + catalogue1312QueryParam.setHilistCode(hilistCode); + catalogue1312QueryParam.setInsuplcAdmdvs( + SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.INSUPLC_ADMDVS)); + // 直接解析(默认 ISO 格式) + LocalDate localDate = LocalDate.parse(dateStr); + // 转换为 Date + Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + catalogue1312QueryParam.setUpdtTime(date); + catalogue1312QueryParam.setPageNum(1); + catalogue1312QueryParam.setPageSize(10); + catalogue1312QueryParam.setDecryptFlag("0"); // 不需要解密 + List outputList = ybHttpUtils.queryYbCatalogue(catalogue1312QueryParam); + return R.ok(outputList); + } + + /** + * 【3101】明细审核事前事中分析服务 + * + * @param encounterId 就诊ID + * @return 结果 + */ + @GetMapping("/pre-mid-analysis") + public R yb3101PreMidAnalysis(@RequestParam("encounterId") Long encounterId, + @RequestParam("trigScen") String trigScen) { + return ybService.yb3101PreMidAnalysis(encounterId, trigScen); + } + + /** + * 【3103】事前事中服务反馈服务 + * + * @param warnRsltId 违规标识 + * @param dspoWay 处理方式 + * @param dspoWayRea 处理原因 + * @return 结果 + */ + @GetMapping("/pre-mid-feedback") + public R yb3103PreMidFeedback(@RequestParam("warnRsltId") String warnRsltId, + @RequestParam("dspoWay") String dspoWay, + @RequestParam(value = "dspoWayRea", required = false) String dspoWayRea) { + return ybService.yb3103PreMidFeedback(warnRsltId, dspoWay, dspoWayRea); + } + + /** + * 【4101A】医疗保障基金结算清单信息上传(新) + * + * @param paymentId 付款ID + * @return 结果 + */ + @GetMapping("/upload-fund-settle") + public R yb4101aUploadFundSettle(@RequestParam("paymentId") Long paymentId) { + return ybService.yb4101aUploadFundSettle(paymentId); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Catalogue1312Output.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Catalogue1312Output.java new file mode 100644 index 00000000..ac25d3d0 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Catalogue1312Output.java @@ -0,0 +1,118 @@ +package com.openhis.web.ybmanage.dto; + +import java.io.Serializable; +import java.util.Date; + +import com.core.common.core.domain.HisBaseEntity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 【1312】医保目录信息查询 + * + * @author SunJQ + * @date 2025-04-16 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class Catalogue1312Output extends HisBaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + // 医保目录编码 + private String hilistCode; + + // 医保目录名称 + private String hilistName; + + // 参保机构医保区划 + private String insuAdmdvs; + + // 开始日期 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date begndate; + + // 结束日期 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date enddate; + + // 医疗收费项目类别 + private String medChrgitmType; + + // 收费项目等级 + private String chrgitmLv; + + // 限制使用标志 + private String lmtUsedFlag; + + // 目录类别 + private String listType; + + // 医疗使用标志 + private String medUseFlag; + + // 生育使用标志 + private String matnUsedFlag; + + // 医保目录使用类别 + private String hilistUseType; + + // 限复方使用类型 + private String lmtCpndType; + + // 五笔助记码 + private String wubi; + + // 拼音助记码 + private String pinyin; + + // 备注 + private String memo; + + // 有效标志 + private String valiFlag; + + // 唯一记录号 + private String rid; + + // 更新时间 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updtTime; + + // 创建人 + private String crterId; + + // 创建人姓名 + private String crterName; + + // 创建时间 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date crteTime; + + // 创建机构 + private String crteOptinsNo; + + // 经办人 + private String opterId; + + // 经办人姓名 + private String opterName; + + // 经办时间 + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date optTime; + + // 经办机构 + private String optinsNo; + + // 统筹区 + private String poolareaNo; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clearing3205AWebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clearing3205AWebParam.java new file mode 100644 index 00000000..115460aa --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clearing3205AWebParam.java @@ -0,0 +1,28 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; + +/** + * 【3205A】前端入参 + * + * @author SunJQ + * @date 2025-04-17 + */ +@Data +public class Clearing3205AWebParam { + // 清算机构 + @NotNull + private String clrOptins; + + // 清算状态 + private String clrStas; + + // 清算月份 例如:202310 + private String clrYm; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2207OrderOutput.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2207OrderOutput.java new file mode 100644 index 00000000..c357494e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2207OrderOutput.java @@ -0,0 +1,114 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +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; + +/** + * 【2207】医保预结算的输出参数 + * + * @author SunJQ + * @date 2025-05-08 + */ +@Data +@Accessors(chain = true) +public class Clinic2207OrderOutput { + // 主键字段 + private String mdtrtId; // 就诊ID + + private String setlId;// 结算id 2207时有值 2206无值 + + 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 setldetail;// 结算详细信息 + + private String chrgBchno; // 收费批次号 +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2208UnSetlInfoOutput.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2208UnSetlInfoOutput.java new file mode 100644 index 00000000..46338c43 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Clinic2208UnSetlInfoOutput.java @@ -0,0 +1,109 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; +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; + +/** + * 【2208】门诊结算撤销 + * + * @author SunJQ + * @date 2025-04-21 + */ +@Data +@Accessors(chain = true) +public class Clinic2208UnSetlInfoOutput { + + // 1. 就诊ID(字符型,30位,必填) + private String mdtrtId; + + // 2. 结算ID(字符型,30位,必填) + private String setlId; + + // 3. 清算经办机构(字符型,6位) + private String clrOptins; + + // 4. 结算时间(日期时间型,格式:yyyy-MM-dd HH:mm:ss,必填) + private Date setlTime; + + // 5. 医疗费总额(数值型,16位含2位小数,必填) + private BigDecimal medfeeSumamt; + + // 6. 全自费金额(数值型,16位含2位小数,必填) + private BigDecimal fulamtOwnpayAmt; + + // 7. 超限价自费费用(数值型,16位含2位小数,必填) + private BigDecimal overlmtSelfpay; + + // 8. 先行自付金额(数值型,16位含2位小数,必填) + private BigDecimal preselfpayAmt; + + // 9. 符合政策范围金额(数值型,16位含2位小数,必填) + private BigDecimal inscpScpAmt; + + // 10. 实际支付起付线(数值型,16位含2位小数) + private BigDecimal actPayDedc; + + // 11. 基本医疗保险统筹基金支出(数值型,16位含2位小数,必填) + private BigDecimal hifpPay; + + // 12. 统筹基金支付比例(数值型,5位含4位小数,必填) + private BigDecimal poolPropSelfpay; + + // 13. 公务员医疗补助支出(数值型,16位含2位小数,必填) + private BigDecimal cvlservPay; + + // 14. 企业补充医保支出(数值型,16位含2位小数,必填) + private BigDecimal hifesPay; + + // 15. 居民大病保险支出(数值型,16位含2位小数,必填) + private BigDecimal hifmiPay; + + // 16. 职工大额医疗补助支出(数值型,16位含2位小数,必填) + private BigDecimal hifobPay; + + // 17. 医疗救助基金支出(数值型,16位含2位小数,必填) + private BigDecimal mafPay; + + // 18. 其他支出(数值型,16位含2位小数,必填) + private BigDecimal othPay; + + // 19. 基金支付总额(数值型,16位含2位小数,必填) + private BigDecimal fundPaySumamt; + + // 20. 个人负担总金额(数值型,16位含2位小数,必填) + private BigDecimal psnPartAmt; + + // 21. 个人账户支出(数值型,16位含2位小数,必填) + private BigDecimal acctPay; + + // 22. 余额(数值型,16位含2位小数,必填) + private BigDecimal balc; + + // 23. 个人账户共济支付(数值型,16位含2位小数,必填) + private BigDecimal acctMulaidPay; + + // 24. 医院负担金额(数值型,16位含2位小数,必填) + private BigDecimal hospPartAmt; + + // 25. 医药机构结算ID(字符型,30位,必填) + private String medinsSetlId; + + // 26. 个人现金支出(数值型,16位含2位小数,必填) + private BigDecimal pdnCashPay; + + // 27. 伤残人员医疗补助支出(数值型,16位含2位小数,必填) + private BigDecimal hifdmPay; + + //结算详细信息 + private List setldetail;//结算详细信息 +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ClinicReg2201Output.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ClinicReg2201Output.java new file mode 100644 index 00000000..19f03e5e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ClinicReg2201Output.java @@ -0,0 +1,67 @@ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +@Data +@Accessors(chain = true) +public class ClinicReg2201Output { + private static final long serialVersionUID = 1L; + //主键 + @TableId(type = IdType.ASSIGN_ID) + @JSONField(serialize=false) + private String id; + //就诊ID + private String mdtrtId; + //参保地医保区划 + @JSONField(serialize=false) + private String insuplcAdmdvs; + //人员编号 + private String psnNo; + //险种类型 + private String insutype; + //医疗类别 + @JSONField(serialize=false) + private String medType; + //挂号时间 + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date begntime; + //就诊凭证类型 + private String mdtrtCertType; + //就诊凭证编号 + private String mdtrtCertNo; + //证件加密串 + @JSONField(serialize=false) + @TableField(exist = false) + private String mdtrtCertNoEncrypt; + //住院/门诊号 + private String iptOtpNo; + //医师编码 + private String atddrNo; + //医师姓名 + private String drName; + //科室编码 + private String deptCode; + //科室名称 + private String deptName; + //科别 + private String caty; + //挂号费 + private Double regFee; + //检查费 + private Double checkFee; + //应收金额 + private Double totalFee; + //状态,0-挂号,1-看诊,2-费用明细,3-预结算,4-结算 + private String status; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial13203WebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial13203WebParam.java new file mode 100644 index 00000000..c693c24f --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial13203WebParam.java @@ -0,0 +1,49 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +/** + * 【13202】前台入参 + * + * @author SunJQ + * @date 2025-04-29 + */ +@Data +public class Financial13203WebParam { + + // 对账日期,格式:YYYY-MM-DD + @JSONField(name = "stmt_date") + private String stmtDate; + + // 明细对账结果,1:不平,0:平 + @JSONField(name = "stmt_rslt") + private String stmtRslt; + + // 查询页面数据量,最大100 + @JSONField(name = "page_size") + private String pageSize; + + // 页数,默认1 + @JSONField(name = "page_num") + private String pageNum; + + // 清算机构编码 + @JSONField(name = "clr_optins") + private String clrOptins; + + // 清算类别 + @JSONField(name = "clr_type") + private String clrType; + + // 险种 + @JSONField(name = "insutype") + private String insutype; + + // 就医类别,2:本地就医,3:省内异地就医,4:跨省就医 + @JSONField(name = "clr_pay_loc") + private String clrPayLoc; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3202WebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3202WebParam.java new file mode 100644 index 00000000..9164fe51 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3202WebParam.java @@ -0,0 +1,10 @@ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class Financial3202WebParam { + List settlementIdList; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203AWebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203AWebParam.java new file mode 100644 index 00000000..1082e395 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203AWebParam.java @@ -0,0 +1,36 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.apache.poi.hssf.record.chart.DatRecord; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 【3203A】前台入参 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Data +@Accessors(chain = true) +public class Financial3203AWebParam { + + /** 清算类别 */ + @NotNull + private String clrType; + /** 开始时间 */ + @NotNull + private Date stmtBegnDate; + /** 结束时间 */ + @NotNull + private Date stmtEndDate; + /** 清算机构 */ + @NotNull + private String clrOptins; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203WebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203WebParam.java new file mode 100644 index 00000000..80cf0dbb --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Financial3203WebParam.java @@ -0,0 +1,42 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.util.Date; + +/** + * 【3203】前台入参 + * + * @author SunJQ + * @date 2025-04-29 + */ +@Data +public class Financial3203WebParam { + + // 清算类别(字符型,30位,必填) + @JSONField(name = "clr_type") + private String clrType; + + // 清算方式(字符型,30位,必填) + @JSONField(name = "clr_way") + private String clrWay; + + // 开始日期(日期型,必填,格式:yyyy-MM-dd) + @JSONField(name = "begndate") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date begndate; + + // 结束日期(日期型,必填,格式:yyyy-MM-dd) + @JSONField(name = "enddate") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date enddate; + + // 清算年月 + @JSONField(name = "setlym") + private String setlym; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/FinancialHand3203AWebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/FinancialHand3203AWebParam.java new file mode 100644 index 00000000..25f9c0c3 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/FinancialHand3203AWebParam.java @@ -0,0 +1,33 @@ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +@Data +public class FinancialHand3203AWebParam { + + @NotEmpty + private String clrType;//险种类型 + @NotNull + private BigDecimal medfeeSumamt;//医疗费总额 + @NotNull + private BigDecimal medSumfee;//医保认可费用总额(0.00) + @NotNull + private BigDecimal fundAppySum;//基金支付金额 + @NotNull + private BigDecimal cashPayamt;//现金金额 + @NotNull + private BigDecimal acctPay;//账户金额 + @NotNull + private String begndate;//开始时间 + @NotNull + private String enddate;//结束时间 + @NotEmpty + private String clrOptins; // 必须是准确的6位编码 +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Info1101Output.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Info1101Output.java new file mode 100644 index 00000000..f28541c6 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Info1101Output.java @@ -0,0 +1,70 @@ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.baomidou.mybatisplus.annotation.TableField; +import com.core.common.core.domain.HisBaseEntity; +import com.openhis.yb.dto.Info5301SpecialConditionResult; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + *【1101】获取身份信息 + * + * @author SunJQ + * @date 2025-04-16 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class Info1101Output extends HisBaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + //人员编号 + private String psnNo; + //人员证件类型 + private String psnCertType; + //证件号码 + private String certno; + //人员姓名 + private String psnName; + //性别 + private String gend; + //民族 + private String naty; + //出生日期 + private Date brdy; + //年龄 + private Double age; + //参保地医保区划 + private String insuplcAdmdvs; + //险种类型 + private String insutype; + //余额 + private String balc; + //人员类别 + @TableField(exist = false) + private String psnType; + + //人员参保状态 + @TableField(exist = false) + private String psnInsuStas; + + //个人参保日期 + @TableField(exist = false) + private String psnInsuDate; + + //公务员标志 + @TableField(exist = false) + private String cvlservFlag; + + //单位名称 + @TableField(exist = false) + private String empName; + //特慢病 + @TableField(exist = false) + private List feedetail; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/PatientInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/PatientInfoDto.java new file mode 100644 index 00000000..e8e550cd --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/PatientInfoDto.java @@ -0,0 +1,85 @@ +package com.openhis.web.ybmanage.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import com.openhis.yb.dto.Info5301SpecialConditionResult; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.Date; +import java.util.List; + +@Data +@Accessors(chain = true) +public class PatientInfoDto { + + //患者信息 + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** 活动标记 */ + private Integer activeFlag; + + /** 临时标识 */ + private Integer tempFlag; + + /** 患者姓名 */ + private String name; + + /** 患者院内编码/病历号 */ + private String busNo; + + /** 性别编码 */ + private Integer genderEnum; + + /** 生日 */ + private Date birthDate; + + /** 民族 */ + private String nationalityCode; + + /** 身份证号 */ + private String idCard; + + /** 拼音码 */ + private String pyStr; + + /** 五笔码 */ + private String wbStr; + + /** 机构Id */ + private Long organizationId; + + /** 特慢病等 */ + private List feedetail; + + //医保信息 2025/05/23 弃用,费用性质固定,如农大只有省医保,费用性质只显示省医保和自费即可,由@GetMapping(value = "/contract-list")接口提供数据 + /** 合同Id */ + private Long contractId;//弃用 2025/05/23 + + /** 合同名称 */ + private String contractName;//弃用 2025/05/23 + + /** 状态 */ + private Integer statusEnum;//弃用 2025/05/23 + + /** 合同的类别 */ + private Integer categoryEnum;//弃用 2025/05/23 + + /** 合同编码 */ + private String contractBusNo;//弃用 2025/05/23 + + /** 机构 */ + private Long contractOrgId;//弃用 2025/05/23 + + /** 是否医保 */ + private Integer ybFlag;//弃用 2025/05/23 + + /** 医保区划 */ + private String admVs;//弃用 2025/05/23 + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Result.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Result.java new file mode 100644 index 00000000..c0e5afe5 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Result.java @@ -0,0 +1,48 @@ +package com.openhis.web.ybmanage.dto; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +@Data +@ApiModel(value="接口返回对象", description="接口返回对象") +@JsonIgnoreProperties(ignoreUnknown = true) +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 成功标志 + */ + @ApiModelProperty(value = "成功标志") + private boolean success = true; + + /** + * 返回处理消息 + */ + @ApiModelProperty(value = "返回处理消息") + private String message = "操作成功!"; + + /** + * 返回代码 + */ + @ApiModelProperty(value = "返回代码") + private Integer code = 0; + + /** + * 返回数据对象 data + */ + @ApiModelProperty(value = "返回数据对象") + private T result; + + /** + * 时间戳 + */ + @ApiModelProperty(value = "时间戳") + private long timestamp ; + +} \ No newline at end of file diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ResultBody.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ResultBody.java new file mode 100644 index 00000000..5a192f00 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/ResultBody.java @@ -0,0 +1,40 @@ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; + +import lombok.Data; + +/** + * 医保结果 + */ +@Data +public class ResultBody { + + /** 交易状态码 */ + @JSONField(name="infcode") + private String infcode; + /** 发送方报文ID */ + @JSONField(name="warnMsg") + private String warn_msg; + /** 数字签名信息 */ + @JSONField(name="cainfo") + private String cainfo; + /** 错误信息 */ + @JSONField(name="err_msg") + private String errMsg; + /** 接收报文时间 */ + @JSONField(name="refmsg_time") + private String refmsgTime; + /** 签名类型 */ + @JSONField(name="signtype") + private String signtype; + /** 响应报文时间 */ + @JSONField(name="respond_time") + private String respondTime; + /** 接收方报文ID */ + @JSONField(name="inf_refmsgid") + private String infRefmsgid; + /** 交易输出 */ + @JSONField(name="output") + private String output; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3201WebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3201WebParam.java new file mode 100644 index 00000000..921bbe4b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3201WebParam.java @@ -0,0 +1,39 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 【3201】前台入参 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Data +public class Settlement3201WebParam { + + /** 险种 */ + @NotNull + private String insuType; + /** 清算类别 */ + @NotNull + private String clrType;//住院或门诊 + /** 合同id */ + @NotNull + private Long contractId; + /** 医院id */ + @NotNull + private Long orgId; + /** 开始时间 */ + @NotNull + private String stmtBegnDate; + /** 结束时间 */ + @NotNull + private String stmtEndDate; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3202WebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3202WebParam.java new file mode 100644 index 00000000..0e3cbe0d --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3202WebParam.java @@ -0,0 +1,47 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + * 【3202】前台入参 + * + * @author SunJQ + * @date 2025-04-17 + */ +@Data +public class Settlement3202WebParam { + /** 结算经办机构 */ + @NotNull + private String setlOptins;//前台传入,注意:先上传文件后核对明细的 + /** 清算类别 */ + private String clrType; + /** 文件查询号 */ + @NotNull + private String fileQuryNo; + /** 开始时间 */ + @NotNull + private String stmtBegnDate; + /** 结束时间 */ + @NotNull + private String stmtEndDate; + /** 医院id */ + private Long orgId; +// /** 医疗费用总额 */ +// @NotNull +// private BigDecimal medFeeSumAmt; +// /** 基金支付总额 */ +// @NotNull +// private BigDecimal fundPaySumAmt; +// /** 现金支付金额 */ +// @NotNull +// private BigDecimal cashPayAmt; +// /** 定点医药机构结算笔数 */ +// @NotNull +// private Integer fixMedInsSetlCnt; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3209AWebParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3209AWebParam.java new file mode 100644 index 00000000..97f675fa --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Settlement3209AWebParam.java @@ -0,0 +1,35 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +import java.util.Date; + +/** + * [3209A]前台传参 + * + * @author SunJQ + * @date 2025-04-29 + */ +@Data +public class Settlement3209AWebParam { + + // 清算类别 + @JSONField(name = "clr_type") + private String clrType; + + // 开始日期 + @JSONField(name = "begndate") + private Date begndate; + + // 结束日期 + @JSONField(name = "enddate") + private Date enddate; + + // 清算机构 + @JSONField(name = "clr_optins") + private String clrOptins; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionDetailInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionDetailInfoDto.java new file mode 100644 index 00000000..dcbb0568 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionDetailInfoDto.java @@ -0,0 +1,98 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.openhis.common.annotation.Dict; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医保电子处方信息 + * + * @author yuxj + * @date 2025-05-06 + */ +@Data +@Accessors(chain = true) +public class VeriPrescriptionDetailInfoDto { + + /** 处方号 */ + private String prescriptionNo; + /** 门诊号 */ + private String iptOtpNo; + /** 请求数量 */ + private Integer quantity; + /** 请求单位 */ + private String unitCode; + /** 审核状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + + /* --处方信息-- */ + /** 药品名 */ + private String medicationName; + /** 药品规格 */ + private String drugSpecification; + /** 药品剂量 */ + private BigDecimal medDosage; + /** 药品剂量单位 */ + private String medDosageUnitCode; + + /** 使用频次 */ + @Dict(dictCode = "elep_rate_code") + private String medFrequency; + private String medFrequency_dictText; + /** 途径 */ + @Dict(dictCode = "method_code") + private String medRoute; + private String medRoute_dictText; + /** 取药状态 */ + private String medStatus; + /** 处方状态 */ + private String prescriptionStatus; + /** 处方类别 */ + private Integer rxTypeCode; + private String rxTypeCode_enumText; + /** 支持用药信息 */ + private String supportInfo; + /** 服药时间(开始) */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date effectiveDoseStart; + /** 服药时间(结束) */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date effectiveDoseEnd; + /** 给药间隔 */ + private String dispenseInterval; + /** 单次发药数 */ + private Integer dispensePerQuantity; + /** 每次发药供应天数 */ + private Integer dispensePerDuration; + + /* --就诊信息-- */ + /** 患者姓名 */ + private String patnName; + /** 身份证号 */ + private String certno; + /** 开方医生名 */ + private String practitionerName; + /** 挂号科室 */ + private String mdtrtDeptName; + /** 开单科室 */ + private String prscDeptName; + /** 挂号日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date mdtrtTime; + /** 处方开立日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date prscTime; + + /* --诊断信息-- */ + /** 诊断名 */ + private String conditionName; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionInfoDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionInfoDto.java new file mode 100644 index 00000000..73ebad83 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionInfoDto.java @@ -0,0 +1,55 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import java.util.Date; + +import javax.validation.constraints.NotNull; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医保电子处方信息 + * + * @author yuxj + * @date 2025-05-06 + */ +@Data +@Accessors(chain = true) +public class VeriPrescriptionInfoDto { + + /** 处方号 */ + private String prescriptionNo; + /** 门诊号 */ + private String iptOtpNo; + /** 姓名 */ + private String patientName; + /** 证件号 */ + private String certno; + /** 取药状态 */ + private String medStatus; + /** 状态 */ + private Integer statusEnum; + private String statusEnum_enumText; + /** 开单科室 */ + private String prscDeptName; + /** 挂号日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date mdtrtTime; + /** 处方开立日期 */ + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") + private Date prscTime; + + /** 租户ID */ + private Integer tenantId; + /** 电子凭证线上身份核验流水号 */ + private String authNo; + /** 电子凭证令牌 */ + private String ecToken; + /** 医保处方编号 */ + private String hiRxno; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionParam.java new file mode 100644 index 00000000..4879512c --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/VeriPrescriptionParam.java @@ -0,0 +1,23 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.dto; + +import java.util.Date; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * 医保电子处方信息查询条件 + * + * @author yuxj + * @date 2025-05-06 + */ +@Data +@Accessors(chain = true) +public class VeriPrescriptionParam { + + /** 门诊号/姓名 */ + private String name; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2301FeeDetailParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2301FeeDetailParam.java new file mode 100644 index 00000000..a65ec867 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2301FeeDetailParam.java @@ -0,0 +1,196 @@ +package com.openhis.web.ybmanage.dto; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +@Data +//@TableName("yb_inpatient_fee_detail") // 替换为实际表名 +public class Yb2301FeeDetailParam { + + + /** + * 费用明细流水号 + * 单次就诊内唯一 + */ + @JsonProperty("feedetl_sn") + private String feedetlSn; + + /** + * 原费用流水号 + * 退单时传入被退单的费用明细流水号 + */ + @JsonProperty("init_feedetl_sn") + private String initFeedetlSn; + + /** + * 就诊ID + */ + @JsonProperty("mdtrt_id") + private String mdtrtId; + + /** + * 医嘱号 + */ + @JsonProperty("drord_no") + private String drordNo; + + /** + * 人员编号 + */ + @JsonProperty("psn_no") + private String psnNo; + + /** + * 医疗类别 + */ + @JsonProperty("med_type") + private String medType; + + /** + * 费用发生时间 + * 格式:yyyy-MM-dd HH:mm:ss + */ + @JsonProperty("fee_ocur_time") + private Date feeOcurTime; + + /** + * 医保目录编码 + */ + @JsonProperty("med_list_codg") + private String medListCodg; + + /** + * 医药机构目录编码 + */ + @JsonProperty("medins_list_codg") + private String medinsListCodg; + + /** + * 明细项目费用总额 + */ + @JsonProperty("det_item_fee_sumamt") + private BigDecimal detItemFeeSumamt; + + /** + * 数量 + * 退单时数量填写负数 + */ + @JsonProperty("cnt") + private BigDecimal cnt; + + /** + * 单价 + */ + @JsonProperty("pric") + private BigDecimal pric; + + /** + * 开单科室编码 + */ + @JsonProperty("bilg_dept_codg") + private String bilgDeptCodg; + + /** + * 开单科室名称 + */ + @JsonProperty("bilg_dept_name") + private String bilgDeptName; + + /** + * 开单医生编码 + */ + @JsonProperty("bilg_dr_codg") + private String bilgDrCodg; + + /** + * 开单医师姓名 + */ + @JsonProperty("bilg_dr_name") + private String bilgDrName; + + /** + * 受单科室编码 + */ + @JsonProperty("acord_dept_codg") + private String acordDeptCodg; + + /** + * 受单科室名称 + */ + @JsonProperty("acord_dept_name") + private String acordDeptName; + + /** + * 受单医生编码 + */ + @JsonProperty("orders_dr_code") + private String ordersDrCode; + + /** + * 受单医生姓名 + */ + @JsonProperty("orders_dr_name") + private String ordersDrName; + + /** + * 医院审批标志 + */ + @JsonProperty("hosp_appr_flag") + private String hospApprFlag; + + /** + * 中药使用方式 + */ + @JsonProperty("tcmdrug_used_way") + private String tcmdrugUsedWay; + + /** + * 外检标志 + */ + @JsonProperty("etip_flag") + private String etipFlag; + + /** + * 外检医院编码 + */ + @JsonProperty("etip_hosp_code") + private String etipHospCode; + + /** + * 出院带药标志 + */ + @JsonProperty("dscg_tkdrug_flag") + private String dscgTkdrugFlag; + + /** + * 生育费用标志 + */ + @JsonProperty("matn_fee_flag") + private String matnFeeFlag; + + /** + * 备注 + */ + @JsonProperty("memo") + private String memo; + + /** + * 组套编号 + */ + @JsonProperty("comb_no") + private String combNo; + + /** + * 字段扩展 + * 格式:JSON + */ + @JsonProperty("exp_content") + private String expContent; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2301InpatientOutput.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2301InpatientOutput.java new file mode 100644 index 00000000..12e3d594 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2301InpatientOutput.java @@ -0,0 +1,124 @@ +package com.openhis.web.ybmanage.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class Yb2301InpatientOutput { + + /** + * 费用明细流水号 + */ + @JsonProperty("feedetl_sn") + private String feedetlSn; + + /** + * 明细项目费用总额 + */ + @JsonProperty("det_item_fee_sumamt") + private BigDecimal detItemFeeSumamt; + + /** + * 数量 + */ + @JsonProperty("cnt") + private BigDecimal cnt; + + /** + * 单价 + */ + @JsonProperty("pric") + private BigDecimal pric; + + /** + * 定价上限金额 + */ + @JsonProperty("pric_uplmt_amt") + private BigDecimal pricUplmtAmt; + + /** + * 自付比例 + */ + @JsonProperty("selfpay_prop") + private BigDecimal selfpayProp; + + /** + * 全自费金额 + */ + @JsonProperty("fulamt_ownpay_amt") + private BigDecimal fulamtOwnpayAmt; + + /** + * 超限价金额 + */ + @JsonProperty("overlmt_amt") + private BigDecimal overlmtAmt; + + /** + * 先行自付金额 + */ + @JsonProperty("preselfpay_amt") + private BigDecimal preselfpayAmt; + + /** + * 符合政策范围金额 + */ + @JsonProperty("inscp_scp_amt") + private BigDecimal inscpScpAmt; + + /** + * 收费项目等级 + */ + @JsonProperty("chrgitm_lv") + private String chrgitmLv; + + /** + * 医疗收费项目类别 + */ + @JsonProperty("med_chrgitm_type") + private String medChrgitmType; + + /** + * 基本药物标志 + */ + @JsonProperty("bas_medn_flag") + private String basMednFlag; + + /** + * 医保谈判药品标志 + */ + @JsonProperty("hi_nego_drug_flag") + private String hiNegoDrugFlag; + + /** + * 儿童用药标志 + */ + @JsonProperty("chld_medc_flag") + private String chldMedcFlag; + + /** + * 目录特项标志 + */ + @JsonProperty("list_sp_item_flag") + private String listSpItemFlag; + + /** + * 限制使用标志 + */ + @JsonProperty("lmt_used_flag") + private String lmtUsedFlag; + + /** + * 直报标志 + */ + @JsonProperty("drt_reim_flag") + private String drtReimFlag; + + /** + * 备注 + */ + @JsonProperty("memo") + private String memo; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2302InpatientParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2302InpatientParam.java new file mode 100644 index 00000000..65db6495 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2302InpatientParam.java @@ -0,0 +1,31 @@ +package com.openhis.web.ybmanage.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class Yb2302InpatientParam { + /** + * 费用明细流水号 + * 单次就诊内唯一 + */ + @JsonProperty("feedetl_sn") + private String feedetlSn; + + /** + * 人员编号 + * 退单时传入被退单的费用明细流水号 + */ + @JsonProperty("psn_no") + private String psnNo; + + /** + * 就诊ID + */ + @JsonProperty("mdtrt_id") + private String mdtrtId; + + /** + * 字段扩展 + */ + @JsonProperty("exp_content") + private String expContent; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2303InpatientOutput.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2303InpatientOutput.java new file mode 100644 index 00000000..5b62a1af --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2303InpatientOutput.java @@ -0,0 +1,258 @@ +package com.openhis.web.ybmanage.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.math.BigDecimal; +import java.util.Date; + +public class Yb2303InpatientOutput { + /** + * 就诊ID + */ + @JsonProperty("mdtrt_id") + private String mdtrtId; + + /** + * 人员编号 + */ + @JsonProperty("psn_no") + private String psnNo; + + /** + * 人员姓名 + */ + @JsonProperty("psn_name") + private String psnName; + + /** + * 人员证件类型 + */ + @JsonProperty("psn_cert_type") + private String psnCertType; + + /** + * 证件号码 + */ + @JsonProperty("certno") + private String certno; + + /** + * 性别 + */ + @JsonProperty("gend") + private String gend; + + /** + * 民族 + */ + @JsonProperty("naty") + private String naty; + + /** + * 出生日期 + * 格式:yyyy-MM-dd + */ + @JsonProperty("brdy") + private Date brdy; + + /** + * 年龄 + */ + @JsonProperty("age") + private BigDecimal age; + + /** + * 险种类型 + */ + @JsonProperty("insutype") + private String insutype; + + /** + * 人员类别 + */ + @JsonProperty("psn_type") + private String psnType; + + /** + * 公务员标志 + */ + @JsonProperty("cvlserv_flag") + private String cvlservFlag; + + /** + * 结算时间 + * 格式:yyyy-MM-dd HH:mm:ss + */ + @JsonProperty("setl_time") + private Date setlTime; + + /** + * 就诊凭证类型 + */ + @JsonProperty("mdtrt_cert_type") + private String mdtrtCertType; + + /** + * 医疗类别 + */ + @JsonProperty("med_type") + private String medType; + + /** + * 医疗费总额 + */ + @JsonProperty("medfee_sumamt") + private BigDecimal medfeeSumamt; + + /** + * 全自费金额 + */ + @JsonProperty("fulamt_ownpay_amt") + private BigDecimal fulamtOwnpayAmt; + + /** + * 超限价自费费用 + */ + @JsonProperty("overlmt_selfpay") + private BigDecimal overlmtSelfpay; + + /** + * 先行自付金额 + */ + @JsonProperty("preselfpay_amt") + private BigDecimal preselfpayAmt; + + /** + * 符合政策范围金额 + */ + @JsonProperty("inscp_scp_amt") + private BigDecimal inscpScpAmt; + + /** + * 实际支付起付线 + */ + @JsonProperty("act_pay_dedc") + private BigDecimal actPayDedc; + + /** + * 基本医疗保险统筹基金支出 + */ + @JsonProperty("hifp_pay") + private BigDecimal hifpPay; + + /** + * 基本医疗保险统筹基金支付比例 + */ + @JsonProperty("pool_prop_selfpay") + private BigDecimal poolPropSelfpay; + + /** + * 公务员医疗补助资金支出 + */ + @JsonProperty("cvlserv_pay") + private BigDecimal cvlservPay; + + /** + * 企业补充医疗保险基金支出 + */ + @JsonProperty("hifes_pay") + private BigDecimal hifesPay; + + /** + * 居民大病保险资金支出 + */ + @JsonProperty("hifmi_pay") + private BigDecimal hifmiPay; + + /** + * 职工大额医疗费用补助基金支出 + */ + @JsonProperty("hifob_pay") + private BigDecimal hifobPay; + + /** + * 医疗救助基金支出 + */ + @JsonProperty("maf_pay") + private BigDecimal mafPay; + + /** + * 其他支出 + */ + @JsonProperty("oth_pay") + private BigDecimal othPay; + + /** + * 基金支付总额 + */ + @JsonProperty("fund_pay_sumamt") + private BigDecimal fundPaySumamt; + + /** + * 个人负担总金额 + */ + @JsonProperty("psn_part_amt") + private BigDecimal psnPartAmt; + + /** + * 个人账户支出 + */ + @JsonProperty("acct_pay") + private BigDecimal acctPay; + + /** + * 个人现金支出 + */ + @JsonProperty("psn_cash_pay") + private BigDecimal psnCashPay; + + /** + * 医院负担金额 + */ + @JsonProperty("hosp_part_amt") + private BigDecimal hospPartAmt; + + /** + * 余额 + */ + @JsonProperty("balc") + private BigDecimal balc; + + /** + * 个人账户共济支付金额 + */ + @JsonProperty("acct_mulaid_pay") + private BigDecimal acctMulaidPay; + + /** + * 医药机构结算ID + * 存放发送方报文ID + */ + @JsonProperty("medins_setl_id") + private String medinsSetlId; + + /** + * 清算经办机构 + */ + @JsonProperty("clr_optins") + private String clrOptins; + + /** + * 清算方式 + */ + @JsonProperty("clr_way") + private String clrWay; + + /** + * 清算类别 + */ + @JsonProperty("clr_type") + private String clrType; + + /** + * 伤残人员医疗保障基金支出 + * 1.5.4新增 + */ + @JsonProperty("hifdm_pay") + private BigDecimal hifdmPay; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2303InpatientPram.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2303InpatientPram.java new file mode 100644 index 00000000..34cc3969 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2303InpatientPram.java @@ -0,0 +1,119 @@ +package com.openhis.web.ybmanage.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.math.BigDecimal; +import java.util.Date; + +public class Yb2303InpatientPram { + + /** + * 人员编号 + */ + @JsonProperty("psn_no") + private String psnNo; + + /** + * 就诊凭证类型 + */ + @JsonProperty("mdtrt_cert_type") + private String mdtrtCertType; + + /** + * 就诊凭证编号 + * 就诊凭证类型为“01”时填写电子凭证令牌,为“02”时填写身份证号,为“03”时填写社会保障卡卡号 + */ + @JsonProperty("mdtrt_cert_no") + private String mdtrtCertNo; + + /** + * 医疗费总额 + */ + @JsonProperty("medfee_sumamt") + private BigDecimal medfeeSumamt; + + /** + * 个人结算方式 + */ + @JsonProperty("psn_setlway") + private String psnSetlway; + + /** + * 就诊ID + */ + @JsonProperty("mdtrt_id") + private String mdtrtId; + + /** + * 个人账户使用标志 + */ + @JsonProperty("acct_used_flag") + private String acctUsedFlag; + + /** + * 险种类型 + */ + @JsonProperty("insutype") + private String insutype; + + /** + * 参保地医保区划 + */ + @JsonProperty("insuplc_admdvs") + private String insuplcAdmdvs; + + /** + * 就医地医保区划 + */ + @JsonProperty("mdtrtarea_admvs") + private String mdtrtareaAdmvs; + + /** + * 发票号 + */ + @JsonProperty("invono") + private String invono; + + /** + * 中途结算标志 + */ + @JsonProperty("mid_setl_flag") + private String midSetlFlag; + + /** + * 全自费金额 + */ + @JsonProperty("fulamt_ownpay_amt") + private BigDecimal fulamtOwnpayAmt; + + /** + * 超限价金额 + */ + @JsonProperty("overlmt_selfpay") + private BigDecimal overlmtSelfpay; + + /** + * 先行自付金额 + */ + @JsonProperty("preselfpay_amt") + private BigDecimal preselfpayAmt; + + /** + * 符合政策范围金额 + */ + @JsonProperty("inscp_scp_amt") + private BigDecimal inscpScpAmt; + + /** + * 出院时间 + * 格式:yyyy-MM-dd + */ + @JsonProperty("dscgTime") + private Date dscgTime; + + /** + * 字段扩展 + */ + @JsonProperty("exp_content") + private String expContent; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientExpContentParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientExpContentParam.java new file mode 100644 index 00000000..e9f25d1b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientExpContentParam.java @@ -0,0 +1,31 @@ +package com.openhis.web.ybmanage.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.math.BigDecimal; + +public class Yb2304InpatientExpContentParam { + /** + * 实际就医区划 + */ + @JsonProperty("med_admdvs") + private BigDecimal medAdmdvs; + + /** + * 外报就医医院编号 + */ + @JsonProperty("med_hosp_no") + private BigDecimal medHospNo; + + /** + * 外报就医医院名称 + */ + @JsonProperty("med_hosp_name") + private BigDecimal medHospName; + + /** + * 外报类型 + */ + @JsonProperty("out_submit_type") + private String outSubmitType; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientOutput.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientOutput.java new file mode 100644 index 00000000..7a3c0706 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientOutput.java @@ -0,0 +1,279 @@ +package com.openhis.web.ybmanage.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.math.BigDecimal; +import java.util.Date; + +public class Yb2304InpatientOutput { + + /** + * 就诊ID + */ + @JsonProperty("mdtrt_id") + private String mdtrtId; + + /** + * 结算ID + */ + @JsonProperty("setl_id") + private String setlId; + + /** + * 人员编号 + */ + @JsonProperty("psn_no") + private String psnNo; + + /** + * 人员姓名 + */ + @JsonProperty("psn_name") + private String psnName; + + /** + * 人员证件类型 + */ + @JsonProperty("psn_cert_type") + private String psnCertType; + + /** + * 证件号码 + */ + @JsonProperty("certno") + private String certno; + + /** + * 性别 + */ + @JsonProperty("gend") + private String gend; + + /** + * 民族 + */ + @JsonProperty("naty") + private String naty; + + /** + * 出生日期 + * 格式:yyyy-MM-dd + */ + @JsonProperty("brdy") + private Date brdy; + + /** + * 年龄 + */ + @JsonProperty("age") + private BigDecimal age; + + /** + * 险种类型 + */ + @JsonProperty("insutype") + private String insutype; + + /** + * 人员类别 + */ + @JsonProperty("psn_type") + private String psnType; + + /** + * 公务员标志 + */ + @JsonProperty("cvlserv_flag") + private String cvlservFlag; + + /** + * 结算时间 + * 格式:yyyy-MM-dd HH:mm:ss + */ + @JsonProperty("setl_time") + private Date setlTime; + + /** + * 就诊凭证类型 + */ + @JsonProperty("mdtrt_cert_type") + private String mdtrtCertType; + + /** + * 医疗类别 + */ + @JsonProperty("med_type") + private String medType; + + /** + * 医疗费总额 + */ + @JsonProperty("medfee_sumamt") + private BigDecimal medfeeSumamt; + + /** + * 全自费金额 + */ + @JsonProperty("fulamt_ownpay_amt") + private BigDecimal fulamtOwnpayAmt; + + /** + * 超限价自费费用 + */ + @JsonProperty("overlmt_selfpay") + private BigDecimal overlmtSelfpay; + + /** + * 先行自付金额 + */ + @JsonProperty("preselfpay_amt") + private BigDecimal preselfpayAmt; + + /** + * 符合政策范围金额 + */ + @JsonProperty("inscp_scp_amt") + private BigDecimal inscpScpAmt; + + /** + * 实际支付起付线 + */ + @JsonProperty("act_pay_dedc") + private BigDecimal actPayDedc; + + /** + * 基本医疗保险统筹基金支出 + */ + @JsonProperty("hifp_pay") + private BigDecimal hifpPay; + + /** + * 基本医疗保险统筹基金支付比例 + */ + @JsonProperty("pool_prop_selfpay") + private BigDecimal poolPropSelfpay; + + /** + * 公务员医疗补助资金支出 + */ + @JsonProperty("cvlserv_pay") + private BigDecimal cvlservPay; + + /** + * 企业补充医疗保险基金支出 + */ + @JsonProperty("hifes_pay") + private BigDecimal hifesPay; + + /** + * 居民大病保险资金支出 + */ + @JsonProperty("hifmi_pay") + private BigDecimal hifmiPay; + + /** + * 职工大额医疗费用补助基金支出 + */ + @JsonProperty("hifob_pay") + private BigDecimal hifobPay; + + /** + * 医疗救助基金支出 + */ + @JsonProperty("maf_pay") + private BigDecimal mafPay; + + /** + * 医院负担金额(原始) + */ + @JsonProperty("hosp_part_amt_old") + private BigDecimal hospPartAmtOld; + + /** + * 其他支出 + */ + @JsonProperty("oth_pay") + private BigDecimal othPay; + + /** + * 基金支付总额 + */ + @JsonProperty("fund_pay_sumamt") + private BigDecimal fundPaySumamt; + + /** + * 个人负担总金额 + */ + @JsonProperty("psn_part_amt") + private BigDecimal psnPartAmt; + + /** + * 个人账户支出 + */ + @JsonProperty("acct_pay") + private BigDecimal acctPay; + + /** + * 个人现金支出 + */ + @JsonProperty("psn_cash_pay") + private BigDecimal psnCashPay; + + /** + * 余额 + */ + @JsonProperty("balc") + private BigDecimal balc; + + /** + * 个人账户共济支付金额 + */ + @JsonProperty("acct_mulaid_pay") + private BigDecimal acctMulaidPay; + + /** + * 医药机构结算ID + * 存放发送方报文ID + */ + @JsonProperty("medins_setl_id") + private String medinsSetlId; + + /** + * 清算经办机构 + */ + @JsonProperty("clr_optins") + private String clrOptins; + + /** + * 清算方式 + */ + @JsonProperty("clr_way") + private String clrWay; + + /** + * 清算类别 + */ + @JsonProperty("clr_type") + private String clrType; + + /** + * 字段扩展 + * 1.5.4新增 + */ + @JsonProperty("exp_content") + private String expContent; + + /** + * 伤残人员医疗保障基金支出 + * 1.5.4新增 + */ + @JsonProperty("hifdm_pay") + private BigDecimal hifdmPay; + + /** + * 医院负担金额 + * 1.5.4新增 + */ + @JsonProperty("hosp_part_amt") + private BigDecimal hospPartAmt; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientParam.java new file mode 100644 index 00000000..2476e190 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2304InpatientParam.java @@ -0,0 +1,111 @@ +package com.openhis.web.ybmanage.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.math.BigDecimal; + +public class Yb2304InpatientParam { + + /** + * 人员编号 + */ + @JsonProperty("psn_no") + private String psnNo; + + /** + * 就诊凭证类型 + */ + @JsonProperty("mdtrt_cert_type") + private String mdtrtCertType; + + /** + * 就诊凭证编号 + * 就诊凭证类型为“01”时填写电子凭证令牌,为“02”时填写身份证号,为“03”时填写社会保障卡卡号 + */ + @JsonProperty("mdtrt_cert_no") + private String mdtrtCertNo; + + /** + * 医疗费总额 + */ + @JsonProperty("medfee_sumamt") + private BigDecimal medfeeSumamt; + + /** + * 个人结算方式 + */ + @JsonProperty("psn_setlway") + private String psnSetlway; + + /** + * 就诊ID + */ + @JsonProperty("mdtrt_id") + private String mdtrtId; + + /** + * 险种类型 + */ + @JsonProperty("insutype") + private String insutype; + + /** + * 个人账户使用标志 + */ + @JsonProperty("acct_used_flag") + private String acctUsedFlag; + + /** + * 参保地医保区划 + */ + @JsonProperty("insuplc_admdvs") + private String insuplcAdmdvs; + + /** + * 就医地医保区划 + */ + @JsonProperty("mdtrtarea_admvs") + private String mdtrtareaAdmvs; + + /** + * 发票号 + */ + @JsonProperty("invono") + private String invono; + + /** + * 中途结算标志 + */ + @JsonProperty("mid_setl_flag") + private String midSetlFlag; + + /** + * 全自费金额 + */ + @JsonProperty("fulamt_ownpay_amt") + private BigDecimal fulamtOwnpayAmt; + + /** + * 超限价金额 + */ + @JsonProperty("overlmt_selfpay") + private BigDecimal overlmtSelfpay; + + /** + * 先行自付金额 + */ + @JsonProperty("preselfpay_amt") + private BigDecimal preselfpayAmt; + + /** + * 符合政策范围金额 + */ + @JsonProperty("inscp_scp_amt") + private BigDecimal inscpScpAmt; + + /** + * 字段扩展 + */ + @JsonProperty("exp_content") + private String expContent; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2305InpatientOutput.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2305InpatientOutput.java new file mode 100644 index 00000000..918888c4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2305InpatientOutput.java @@ -0,0 +1,221 @@ +package com.openhis.web.ybmanage.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.math.BigDecimal; +import java.util.Date; + +public class Yb2305InpatientOutput { + + /** + * 就诊ID + */ + @JsonProperty("mdtrt_id") + private String mdtrtId; + + /** + * 结算ID + */ + @JsonProperty("setl_id") + private String setlId; + + /** + * 清算经办机构 + */ + @JsonProperty("clr_optins") + private String clrOptins; + + /** + * 结算时间 + * 格式:yyyy-MM-dd HH:mm:ss + */ + @JsonProperty("setl_time") + private Date setlTime; + + /** + * 医疗费总额 + */ + @JsonProperty("medfee_sumamt") + private BigDecimal medfeeSumamt; + + /** + * 全自费金额 + */ + @JsonProperty("fulamt_ownpay_amt") + private BigDecimal fulamtOwnpayAmt; + + /** + * 超限价自费费用 + */ + @JsonProperty("overlmt_selfpay") + private BigDecimal overlmtSelfpay; + + /** + * 先行自付金额 + */ + @JsonProperty("preselfpay_amt") + private BigDecimal preselfpayAmt; + + /** + * 符合政策范围金额 + */ + @JsonProperty("inscp_scp_amt") + private BigDecimal inscpScpAmt; + + /** + * 实际支付起付线 + */ + @JsonProperty("act_pay_dedc") + private BigDecimal actPayDedc; + + /** + * 基本医疗保险统筹基金支出 + */ + @JsonProperty("hifp_pay") + private BigDecimal hifpPay; + + /** + * 基本医疗保险统筹基金支付比例 + */ + @JsonProperty("pool_prop_selfpay") + private BigDecimal poolPropSelfpay; + + /** + * 公务员医疗补助资金支出 + */ + @JsonProperty("cvlserv_pay") + private BigDecimal cvlservPay; + + /** + * 企业补充医疗保险基金支出 + */ + @JsonProperty("hifes_pay") + private BigDecimal hifesPay; + + /** + * 居民大病保险资金支出 + */ + @JsonProperty("hifmi_pay") + private BigDecimal hifmiPay; + + /** + * 职工大额医疗费用补助基金支出 + */ + @JsonProperty("hifob_pay") + private BigDecimal hifobPay; + + /** + * 医疗救助基金支出 + */ + @JsonProperty("maf_pay") + private BigDecimal mafPay; + + /** + * 其他支出 + */ + @JsonProperty("oth_pay") + private BigDecimal othPay; + + /** + * 基金支付总额 + */ + @JsonProperty("fund_pay_sumamt") + private BigDecimal fundPaySumamt; + + /** + * 个人负担总金额 + */ + @JsonProperty("psn_part_amt") + private BigDecimal psnPartAmt; + + /** + * 个人账户支出 + */ + @JsonProperty("acct_pay") + private BigDecimal acctPay; + + /** + * 个人现金支出 + */ + @JsonProperty("psn_cash_pay") + private BigDecimal psnCashPay; + + /** + * 医院负担金额 + */ + @JsonProperty("hosp_part_amt") + private BigDecimal hospPartAmt; + + /** + * 余额 + */ + @JsonProperty("balc") + private BigDecimal balc; + + /** + * 个人账户共济支付金额 + */ + @JsonProperty("acct_mulaid_pay") + private BigDecimal acctMulaidPay; + + /** + * 医药机构结算ID + * 存放发送方报文ID + */ + @JsonProperty("medins_setl_id") + private String medinsSetlId; + + /** + * 伤残人员医疗保障基金支出 + */ + @JsonProperty("hifdm_pay") + private BigDecimal hifdmPay; + + /** + * 人员参保关系ID + */ + @JsonProperty("psn_insu_rlts_id") + private String psnInsuRltsId; + + /** + * 参保机构行政区划 + */ + @JsonProperty("insu_admdvs") + private String insuAdmdvs; + + /** + * 开始日期 + */ + @JsonProperty("begndate") + private Date begndate; + + /** + * 结算日期 + */ + @JsonProperty("enddate") + private Date enddate; + + /** + * 就诊凭证编号 + */ + @JsonProperty("mdtrt_cert_no") + private String mdtrtCertNo; + + /** + * 结算类别 + */ + @JsonProperty("setl_type") + private String setlType; + + /** + * 本次起付线 + */ + @JsonProperty("crt_dedc") + private BigDecimal crtDedc; + + /** + * 发票号 + */ + @JsonProperty("invono") + private String invono; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2305InpatientParam.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2305InpatientParam.java new file mode 100644 index 00000000..99bc5924 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/dto/Yb2305InpatientParam.java @@ -0,0 +1,31 @@ +package com.openhis.web.ybmanage.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.math.BigDecimal; + +public class Yb2305InpatientParam { + /** + * 就诊ID + */ + @JsonProperty("mdtrt_id") + private BigDecimal mdtrtId; + + /** + * 结算ID + */ + @JsonProperty("setl_Id") + private BigDecimal setlId; + + /** + * 人员编号 + */ + @JsonProperty("psn_no") + private BigDecimal psnNo; + + /** + * 字段扩展 + */ + @JsonProperty("exp_content") + private String expContent; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbElepMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbElepMapper.java new file mode 100644 index 00000000..b226ad49 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbElepMapper.java @@ -0,0 +1,44 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.openhis.web.ybmanage.dto.VeriPrescriptionDetailInfoDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionInfoDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionParam; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * mapper提供sql服务 + * + * @author yuxj + * @date 2025-05-06 + */ +@Repository +public interface YbElepMapper { + /** + * 医保电子处方查询 + * + * @param page 分页 + * @param queryWrapper 查询条件 + * @return 就诊病人列表 + */ + Page getVeriPrescriptionInfo(@Param("page") Page page, + @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + + /** + * 处方详细信息获取 + * + * @param prescriptionNo 处方号 + * @return 处方详细信息 + */ + List getVeriPrescriptionDetailInfo(@Param("prescriptionNo") String prescriptionNo); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbMapper.java new file mode 100644 index 00000000..e7050d0b --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/mapper/YbMapper.java @@ -0,0 +1,72 @@ +package com.openhis.web.ybmanage.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import com.openhis.yb.dto.*; + +/** + * 医保Mapper + * + * @author GuoRui + */ +@Repository +public interface YbMapper { + + /** + * 【3101】查询就诊患者信息 + * + * @param encounterId 就诊ID + * @param encounterFlag 是否为就诊登记使用 + * @param participantType 参与者类型 + * @param deleteFlag 删除状态 + * @return 就诊患者信息 + */ + Yb3101AdapterEncounterPatientInfo yb3101SelectEncounterPatientInfo(@Param("encounterId") Long encounterId, + @Param("encounterFlag") Integer encounterFlag, @Param("participantType") String participantType, + @Param("deleteFlag") String deleteFlag); + + /** + * 【3101】查询就诊诊断信息 + * + * @param encounterId 就诊ID + * @param deleteFlag 删除状态 + * @return 就诊诊断信息 + */ + List yb3101SelectEncounterDiagnoseInfo(@Param("encounterId") Long encounterId, + @Param("deleteFlag") String deleteFlag); + + /** + * 【3101】查询处方(医嘱)信息 + * + * @param encounterId 就诊ID + * @param deleteFlag 删除状态 + * @param ybMedChrgItmTypeWest 医疗收费项目类别-西药费 + * @param ybMedChrgItmTypeChineseSlices 医疗收费项目类别-中药饮片费 + * @param ybMedChrgItmTypeChinese 医疗收费项目类别-中成药费 + * @return 处方(医嘱)信息 + */ + List yb3101SelectOrderInfo(@Param("encounterId") Long encounterId, + @Param("deleteFlag") String deleteFlag, @Param("ybMedChrgItmTypeWest") String ybMedChrgItmTypeWest, + @Param("ybMedChrgItmTypeChineseSlices") String ybMedChrgItmTypeChineseSlices, + @Param("ybMedChrgItmTypeChinese") String ybMedChrgItmTypeChinese); + + /** + * 【4101A】查询结算清单信息 + * + * @param paymentId 付款ID + * @return 结算清单信息 + */ + List yb4101aSelectSettleInfo(@Param("paymentId") Long paymentId); + + /** + * 【4101A】查询门诊慢特病诊断信息 + * + * @param paymentId 付款ID + * @return 门诊慢特病诊断信息 + */ + List yb4101aSelectOpspdiseinfo(@Param("paymentId") Long paymentId); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleBaseService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleBaseService.java new file mode 100644 index 00000000..b96e2bad --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleBaseService.java @@ -0,0 +1,227 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.service; + +import java.util.Date; +import java.util.Map; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionParam; +import com.openhis.ybelep.domain.*; + +import javax.servlet.http.HttpServletRequest; + +/** + * + * @author yuxj + * @date 2025-04-17 + */ +public interface IYbEleBaseService { + + /** + * 医保电子处方查询 + * + * @param veriPrescriptionParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param request 请求数据 + * @return 处方信息 + */ + R getVeriPrescriptionInfo(VeriPrescriptionParam veriPrescriptionParam, String searchKey, + Integer pageNo, Integer pageSize, HttpServletRequest request); + + /** + * 医保电子处方查看 + * + * @param prescriptionNo 处方号 + * @return 处方详细信息 + */ + R getPrescriptionDetailInfo(String prescriptionNo); + + /** + * 医保电子处方状态更新(上传) + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + R uploadPrescriptionStatus(String prescriptionNo); + + /** + * 医保电子处方拒绝上传 + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + R refusePrescriptionStatus(String prescriptionNo); + + /** + * 医保电子处方状态更新(撤销) + * + * @param prescriptionNo 处方号 + * @param quashReason 撤销原因 + * @return 处方信息 + */ + R quashPrescriptionStatus(String prescriptionNo,String quashReason); + + /** + * 做成电子处方上传预核验入参信息 + * + * @param prescriptionNo 处方号 + * @param tenantId 租户Id + * @return 处方信息 + */ + PreCheckPrescription makePreCheckPrescription(String prescriptionNo, + Integer tenantId); + + /** + * 电子处方上传预核验信息保存 + * + * @param pcpResult 电子处方上传预核验信息 + * @return 电子处方上传预核验信息 + */ + void savePreCheckPrescription(PreCheckPrescription pcpResult); + + /** + * 电子处方上传预核验响应出参信息保存 + * + * @param pcpResult 电子处方上传预核验响应出参信息 + * @return + */ + void saveEleVeriPrescriptionOutput(ElepVeriPrescriptionOutput pcpResult); + + /** + * 做成电子处方医保电子签名入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 电子处方医保电子签名入参 + */ + ElepSignatureInput makeEleSignature(String hiRxno, Long practitionerId, Date checkDate, Integer tenantId); + + /** + * 保存电子处方医保电子签名入参 + * + * @param eSign 电子处方医保电子签名入参信息 + * @return + */ + void saveEleSignature(ElepSignatureInput eSign); + + /** + * 保存电子处方医保电子签名响应出参 + * + * @param esResult 电子处方医保电子签名响应出参信息 + * @return + */ + void saveEleSignatureOutput(ElepSignatureOutput esResult); + + /** + * 做成电子处方上传入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 电子处方上传入参 + */ + ElepUploadInput makeEleUploadInput(String hiRxno, Long practitionerId, Date checkDate, Integer tenantId); + + /** + * 保存电子处方上传入参 + * + * @param eleUploadInput 电子处方上传入参信息 + * @return + */ + void saveEleUploadInput(ElepUploadInput eleUploadInput); + + /** + * 保存电子处方上传响应出参 + * + * @param euResult 电子处方上传响应出参信息 + * @return + */ + void saveEleUploadOutput(ElepUploadOutput euResult); + + /** + * 做成电子处方撤销入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 撤销药师Id + * @param description 撤销原因 + * @param checkDate 撤销时间 + * @param tenantId 租户Id + * @return 电子处方撤销入参 + */ + ElepRevokeInput makeEleRevokeInput(String hiRxno, Long practitionerId,String description, Date checkDate, Integer tenantId); + + /** + * 保存电子处方撤销入参 + * + * @param eleRevokeInput 电子处方撤销入参信息 + * @return + */ + void saveEleRevokeInput(ElepRevokeInput eleRevokeInput); + + /** + * 保存电子处方撤销响应出参 + * + * @param ereResult 电子处方撤销响应出参信息 + * @return + */ + void saveEleRevokeOutput(ElepRevokeOutput ereResult); + + /** + * 做成电子处方信息查询入参 + * + * @param hiRxno 医保处方编号 + * @return 电子处方信息查询入参 + */ + ElepQuerPrescriptionInput makeEleQueryPrescriptionInput(String hiRxno); + + /** + * 保存电子处方信息查询入参 + * + * @param eleQueryPreInput 电子处方信息查询入参信息 + * @return + */ + void saveEleQueryPrescriptionInput(ElepQuerPrescriptionInput eleQueryPreInput); + + /** + * 保存电子处方信息查询响应出参信息 + * + * @param emrResult 电子处方信息查询响应出参信息 + * @return + */ + void saveEleMedResultOut(QueryPrescription emrResult); + + /** + * 做成电子处方取药结果查询入参 + * + * @param hiRxno 医保处方编号 + * @return 电子处方取药结果查询入参 + */ + ElepMedresultInput makeEleMedResultInput(String hiRxno); + + /** + * 保存电子处方取药结果查询入参 + * + * @param eleMedInput 电子处方取药结果查询入参信息 + * @return + */ + void saveEleMedResultInput(ElepMedresultInput eleMedInput); + + /** + * 保存电子处方取药结果查询响应出参 + * + * @param medResInquiry 电子处方取药结果查询响应出参信息 + * @return + */ + void saveMedicationResultInquiry(MedicationResultInquiry medResInquiry); + + Map getMedTypeAndDoctorName(String prescriptionNo, Integer tenantId); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleHttpService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleHttpService.java new file mode 100644 index 00000000..9d81a156 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbEleHttpService.java @@ -0,0 +1,64 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.service; + +import com.core.common.core.domain.R; +import com.openhis.ybelep.domain.*; + +/** + * + * @author yuxj + * @date 2025-04-17 + */ +public interface IYbEleHttpService { + + /** + * 采用HTTP协议中的 POST 方法,发送医保电子处方注册预核验请求,并处理响应结果 + * + * @param pcp 医保电子处方注册预核验入参实体 + * @return 医保电子处方注册预核验响应出参实体 + */ + R preCheck(PreCheckPrescription pcp, String medType , String dutyDoctorName); + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方医保电子签名请求,并处理响应结果 + * + * @param eleSign 电子处方医保电子签名入参实体 + * @return 电子处方医保电子签名响应出参实体 + */ + R eleSign(ElepSignatureInput eleSign); + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方上传请求,并处理响应结果 + * + * @param eleUploadInput 电子处方上传入参实体 + * @return 电子处方上传响应出参实体 + */ + R uploadElePre(ElepUploadInput eleUploadInput); + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方撤销请求,并处理响应结果 + * + * @param eleRevokeInput 电子处方撤销入参实体 + * @return 电子处方撤销响应出参实体 + */ + R revokePre(ElepRevokeInput eleRevokeInput); + + /** + * 采用HTTP协议中的 POST 方法,电子处方信息查询请求,并处理响应结果 + * + * @param eleQueryPreInput 电子处方信息查询入参实体 + * @return 电子处方信息查询出参实体 + */ + R queryPre(ElepQuerPrescriptionInput eleQueryPreInput); + + /** + * 采用HTTP协议中的 POST 方法,电子处方取药结果查询请求,并处理响应结果 + * + * @param eleMedInput 电子处方取药结果查询入参实体 + * @return 电子处方取药结果查询出参实体 + */ + R queryMedPre(ElepMedresultInput eleMedInput); + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbService.java new file mode 100644 index 00000000..f5fc7ab7 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/IYbService.java @@ -0,0 +1,38 @@ +package com.openhis.web.ybmanage.service; + +import com.core.common.core.domain.R; + +/** + * 医保Service + * + * @author GuoRui + */ +public interface IYbService { + + /** + * 【3101】明细审核事前事中分析服务 + * + * @param encounterId 就诊ID + * @param trigScen 触发场景 + * @return 结果 + */ + R yb3101PreMidAnalysis(Long encounterId, String trigScen); + + /** + * 【3103】事前事中服务反馈服务 + * + * @param warnRsltId 违规标识 + * @param dspoWay 处理方式 + * @param dspoWayRea 处理原因 + * @return 结果 + */ + R yb3103PreMidFeedback(String warnRsltId, String dspoWay, String dspoWayRea); + + /** + * 【4101A】医疗保障基金结算清单信息上传(新) + * + * @param paymentId 付款ID + * @return 结果 + */ + R yb4101aUploadFundSettle(Long paymentId); +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbEleHttpServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbEleHttpServiceImpl.java new file mode 100644 index 00000000..5ad26d5e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbEleHttpServiceImpl.java @@ -0,0 +1,255 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.service.impl; + +import com.core.common.core.domain.R; +import com.core.common.exception.ServiceException; +import com.core.common.utils.SecurityUtils; +import com.openhis.yb.dto.BaseInfo; +import com.openhis.yb.dto.BaseParam; +import com.openhis.yb.util.YbParamBuilderUtil; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.alibaba.fastjson2.JSON; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.openhis.web.ybmanage.config.YbServiceConfig; +import com.openhis.web.ybmanage.dto.Result; +import com.openhis.web.ybmanage.service.IYbEleHttpService; +import com.openhis.ybelep.domain.*; + +import java.io.IOException; + +/** + * http请求接口 + * + * @author yuxj + * @date 2025-04-17 + */ +@Service +public class YbEleHttpServiceImpl implements IYbEleHttpService { + + @Autowired + YbServiceConfig ybServiceConfig; + + @Autowired + YbParamBuilderUtil ybParamBuilderUtil; + /** + * 采用HTTP协议中的 POST 方法,发送医保电子处方注册预核验请求,并处理响应结果 + * + * @param pcp 医保电子处方注册预核验入参实体 + * @return 医保电子处方注册预核验响应出参实体 + */ + @Override + public R preCheck(PreCheckPrescription pcp, String medType , String dutyDoctorName) { + ElepVeriPrescriptionOutput pcpResult = new ElepVeriPrescriptionOutput(); + BaseInfo baseInfo = ybParamBuilderUtil.getBaseInfo(medType, dutyDoctorName); + // 发送请求 + String s = httpPost( SecurityUtils.getLoginUser().getOptionJson().getString("eleUrl") + "/preCheckPrescription", pcp,baseInfo); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + pcpResult = JSON.parseObject(JSON.toJSONString(result.getResult()), ElepVeriPrescriptionOutput.class);; + pcpResult.setPrescriptionNo(pcp.getHospRxno()); + return R.ok(pcpResult); + }else{ + return R.fail(result.getMessage()); + } + } + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方医保电子签名请求,并处理响应结果 + * + * @param eleSign 电子处方医保电子签名入参实体 + * @return 电子处方医保电子签名响应出参实体 + */ + public R eleSign(ElepSignatureInput eleSign) { + + ElepSignatureOutput esResult = new ElepSignatureOutput(); + // 发送请求 + String s = httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("eleUrl") + "/signature", eleSign,ybParamBuilderUtil.getBaseInfo("","")); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + esResult = JSON.parseObject(JSON.toJSONString(result.getResult()), ElepSignatureOutput.class); + return R.ok(esResult); + }else{ + return R.fail(result.getMessage()); + } + } + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方上传请求,并处理响应结果 + * + * @param eleUploadInput 电子处方上传入参实体 + * @return 电子处方上传响应出参实体 + */ + @Override + public R uploadElePre(ElepUploadInput eleUploadInput) { + + ElepUploadOutput euResult = new ElepUploadOutput(); + // 发送请求 + String s = httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("eleUrl") + "/upload", eleUploadInput,ybParamBuilderUtil.getBaseInfo("","")); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + euResult = JSON.parseObject(JSON.toJSONString(result.getResult()), ElepUploadOutput.class); + return R.ok(euResult); + }else{ + return R.fail(result.getMessage()); + } + } + + /** + * 采用HTTP协议中的 POST 方法,发送电子处方撤销请求,并处理响应结果 + * + * @param eleRevokeInput 电子处方撤销入参实体 + * @return 电子处方撤销响应出参实体 + */ + @Override + public R revokePre(ElepRevokeInput eleRevokeInput) { + + ElepRevokeOutput ereResult = new ElepRevokeOutput(); + // 发送请求 + String s = httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("eleUrl") + "/revoke", eleRevokeInput,ybParamBuilderUtil.getBaseInfo("","")); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + ereResult = JSON.parseObject(JSON.toJSONString(result.getResult()), ElepRevokeOutput.class); + return R.ok(ereResult); + }else{ + return R.fail(result.getMessage()); + } + } + + /** + * 采用HTTP协议中的 POST 方法,电子处方信息查询请求,并处理响应结果 + * + * @param eleQueryPreInput 电子处方信息查询入参实体 + * @return 电子处方信息查询出参实体 + */ + @Override + public R queryPre(ElepQuerPrescriptionInput eleQueryPreInput) { + //拼参数 +// BaseParam baseParam = new BaseParam(); +// baseParam.setBaseInfo(ybParamBuilderUtil.getBaseInfo()).setData(eleQueryPreInput); +// baseParam.setBaseInfo(ybParamBuilderUtil.getBaseInfo()).setData(o); + QueryPrescription emrResult = new QueryPrescription(); + // 发送请求 + String s = + httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("eleUrl") + "/querPrescription", eleQueryPreInput,ybParamBuilderUtil.getBaseInfo("","")); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + emrResult = JSON.parseObject(JSON.toJSONString(result.getResult()), QueryPrescription.class); + return R.ok(emrResult); + }else{ + return R.fail(result.getMessage()); + } + } + + /** + * 采用HTTP协议中的 POST 方法,电子处方取药结果查询请求,并处理响应结果 + * + * @param eleMedInput 电子处方取药结果查询入参实体 + * @return 电子处方取药结果查询出参实体 + */ + public R queryMedPre(ElepMedresultInput eleMedInput){ + + MedicationResultInquiry medResult = new MedicationResultInquiry(); + // 发送请求 + String s = + httpPost(SecurityUtils.getLoginUser().getOptionJson().getString("eleUrl") + "/medresult", eleMedInput,ybParamBuilderUtil.getBaseInfo("","")); + // 参数处理 + ObjectMapper mapper = new ObjectMapper(); + Result result = null; + try { + result = mapper.readValue(s, Result.class); + } catch (Exception e) { + e.printStackTrace(); + } + if (result != null && result.isSuccess()) { + medResult = JSON.parseObject(JSON.toJSONString(result.getResult()), MedicationResultInquiry.class); + return R.ok(medResult); + }else{ + return R.fail(result.getMessage()); + } + } + /** + * 发送http请求(2025/05/02经测试,若以自带的工具类发送请求失败,故使用原peis系统中成功调用的写法重新封装) + * @param url 路径 + * @param o 参数 + * @return + */ + private String httpPost(String url, Object o, BaseInfo baseInfo){ + String resultString = ""; +// //拼参数 + BaseParam baseParam = new BaseParam(); + baseParam.setBaseInfo(baseInfo).setData(o); + //创建Http请求 + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000).setConnectionRequestTimeout(30000) + .setSocketTimeout(30000).build(); + CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).build(); + CloseableHttpResponse response = null; + //发送请求 + try { + HttpPost httpPost = new HttpPost(url); + StringEntity stringEntity = new StringEntity(JSON.toJSONString(baseParam), ContentType.APPLICATION_JSON); + httpPost.setEntity(stringEntity); + // 执行http请求 + response = httpClient.execute(httpPost); + resultString = EntityUtils.toString(response.getEntity(), "utf-8"); + } + catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("Http请求异常,请稍后再试。"); + } + finally { + try { + response.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return resultString; + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbElepBaseServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbElepBaseServiceImpl.java new file mode 100644 index 00000000..68ea55c4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbElepBaseServiceImpl.java @@ -0,0 +1,701 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.service.impl; + +import java.util.*; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.core.domain.model.LoginUser; +import com.core.common.utils.DateUtils; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.administration.domain.Encounter; +import com.openhis.administration.domain.Patient; +import com.openhis.administration.domain.Practitioner; +import com.openhis.administration.service.IEncounterService; +import com.openhis.administration.service.IPatientService; +import com.openhis.administration.service.IPractitionerService; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.constant.YbCommonConstants; +import com.openhis.common.enums.PrescriptionType; +import com.openhis.common.enums.RequestStatus; +import com.openhis.common.utils.EnumUtils; +import com.openhis.common.utils.HisQueryUtils; +import com.openhis.financial.domain.Contract; +import com.openhis.financial.service.IContractService; +import com.openhis.web.ybmanage.dto.VeriPrescriptionDetailInfoDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionInfoDto; +import com.openhis.web.ybmanage.dto.VeriPrescriptionParam; +import com.openhis.web.ybmanage.mapper.YbElepMapper; +import com.openhis.workflow.domain.ElepMedicationRequest; +import com.openhis.workflow.service.IElepMedicationRequestService; +import com.openhis.yb.service.IPerinfoService; +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.openhis.web.ybmanage.service.IYbEleBaseService; +import com.openhis.web.ybmanage.util.YbEleParamBuilderUtil; +import com.openhis.yb.domain.ClinicReg; +import com.openhis.yb.service.IRegService; +import com.openhis.ybelep.domain.*; +import com.openhis.ybelep.service.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +/** + * 医保表的增删改查接口 + * + * @author yuxj + * @date 2025-04-17 + */ +@Service +public class YbElepBaseServiceImpl implements IYbEleBaseService { + + @Autowired + IRegService iRegService; + @Autowired + IPerinfoService perinfoService; + @Autowired + IContractService contractService; + @Autowired + IPractitionerService iPractitionerService; + @Autowired + YbEleParamBuilderUtil ybEleUtil; + @Autowired + IElepVeriPrescriptionInfoService eleVeriPrescriptionInfoService; + @Autowired + IElepVeriPrescriptionDetailService eleVeriPrescriptionDetailService; + @Autowired + IElepVeriVisitInfoService eleVeriVisitInfoService; + @Autowired + IElepVeriDiagnosisInfoService eleVeriDiagnosisInfoService; + @Autowired + IElepVeriPrescriptionOutputService elePresOutputService; + @Autowired + IElepSignatureInputService eleSignInfoService; + @Autowired + IElepSignatureOutputService eleSignOutService; + @Autowired + IElepUploadInputService eleUploadInputService; + @Autowired + IElepUploadOutputService eleUploadOutputService; + @Autowired + IElepRevokeInputService eleRevokeInputService; + @Autowired + IElepRevokeOutputService eleRevokeOutputService; + @Autowired + IElepMedresultInputService eleMedResultInputService; + @Autowired + IElepQuerPrescriptionInputService eleQueryPreInputService; + @Autowired + IElepMedresultInfoService eleMedResInfoService; + @Autowired + IElepMedresultInputService eleMedResInputService; + @Autowired + IElepMedresultDetailService eleMedDetailService; + @Autowired + YbElepMapper ybElepMapper; + @Autowired + IElepMedicationRequestService elepMedicationRequestService; + @Autowired + IElepQuerPrescriptionInfoService eleQuerPrescriptionInfoService; + @Autowired + IElepQuerPrescriptionDetailService eleQuerPrescriptionDetailService; + @Autowired + IElepQuerVisitInfoService eleQuerVisitInfoService; + @Autowired + IElepQuerDiagnosisInfoService eleQuerDiagnosisInfoService; + @Resource + IPractitionerService practitionerService; + @Resource + IEncounterService encounterService; + @Resource + IPatientService patientService; + + /** + * 医保电子处方查询 + * + * @param veriPrescriptionParam 查询条件 + * @param searchKey 模糊查询关键字 + * @param pageNo 当前页 + * @param pageSize 每页多少条 + * @param request 请求数据 + * @return 处方信息 + */ + @Override + public R getVeriPrescriptionInfo(VeriPrescriptionParam veriPrescriptionParam, String searchKey, Integer pageNo, + Integer pageSize, HttpServletRequest request) { + + // 构建查询条件 + QueryWrapper queryWrapper = + HisQueryUtils.buildQueryWrapper(veriPrescriptionParam, searchKey, + new HashSet<>(Arrays.asList(CommonConstants.FieldName.PatientName, CommonConstants.FieldName.IptOtpNo)), + request); + + // 医保电子处方查询 + IPage veriPrescriptionInfo = + ybElepMapper.getVeriPrescriptionInfo(new Page<>(pageNo, pageSize), queryWrapper); + // 状态转换 + veriPrescriptionInfo.getRecords().forEach(prescriptionInfoDto -> { + prescriptionInfoDto.setStatusEnum_enumText( + EnumUtils.getInfoByValue(RequestStatus.class, prescriptionInfoDto.getStatusEnum())); + }); + + return R.ok(veriPrescriptionInfo); + } + + /** + * 医保电子处方查看 + * + * @param prescriptionNo 处方号 + * @return 处方详细信息 + */ + @Override + public R getPrescriptionDetailInfo(String prescriptionNo) { + // 处方详细查询 + List prescriptionDetailInfo = + ybElepMapper.getVeriPrescriptionDetailInfo(prescriptionNo); + // 状态转换 + for (VeriPrescriptionDetailInfoDto item : prescriptionDetailInfo) { + item.setStatusEnum_enumText(EnumUtils.getInfoByValue(RequestStatus.class, item.getStatusEnum())); + item.setRxTypeCode_enumText(EnumUtils.getInfoByValue(PrescriptionType.class, item.getRxTypeCode())); + } + return R.ok(prescriptionDetailInfo); + } + + /** + * 医保电子处方状态更新(上传) + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + @Override + public R uploadPrescriptionStatus(String prescriptionNo) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 获取医保处方号 + List prescriptionOutput = + elePresOutputService.list(new LambdaQueryWrapper() + .eq(ElepVeriPrescriptionOutput::getPrescriptionNo, prescriptionNo) + .orderByDesc(ElepVeriPrescriptionOutput::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + if (prescriptionOutput == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + // 获取电子处方信息 + List elepMedicationRequest = + elepMedicationRequestService.selectElepMedicationRequestByPrescriptionNo(prescriptionNo); + if (elepMedicationRequest == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + boolean flg; + // 更改处方信息 + for (ElepMedicationRequest item : elepMedicationRequest) { + // 医保处方编号 + item.setHiRxno(prescriptionOutput.get(0).getHiRxno()); + // 电子处方追溯码 + item.setRxTraceCode(prescriptionOutput.get(0).getRxTraceCode()); + // 处方状态 + item.setStatusEnum(RequestStatus.COMPLETED.getValue()); + // 审核药师 + item.setReviewDrId(user.getId()); + // 审核时间 + item.setReviewTime(now); + flg = elepMedicationRequestService.updateById(item); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 医保电子处方拒绝上传 + * + * @param prescriptionNo 处方号 + * @return 处方信息 + */ + @Override + public R refusePrescriptionStatus(String prescriptionNo) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 获取电子处方信息 + List elepMedicationRequest = + elepMedicationRequestService.selectElepMedicationRequestByPrescriptionNo(prescriptionNo); + if (elepMedicationRequest == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + boolean flg; + // 更改处方信息 + for (ElepMedicationRequest item : elepMedicationRequest) { + // 处方状态 + item.setStatusEnum(RequestStatus.ENDED.getValue()); + flg = elepMedicationRequestService.updateById(item); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 医保电子处方状态更新(撤销) + * + * @param prescriptionNo 处方号 + * @param quashReason 撤销原因 + * @return 处方信息 + */ + @Override + public R quashPrescriptionStatus(String prescriptionNo, String quashReason) { + // 获取当前登陆用户信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + Practitioner user = practitionerService.getPractitionerByUserId(loginUser.getUserId()); + // 获取当前时间 + Date now = DateUtils.getNowDate(); + // 获取电子处方信息 + List elepMedicationRequest = + elepMedicationRequestService.selectElepMedicationRequestByPrescriptionNo(prescriptionNo); + if (elepMedicationRequest == null) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00010, null)); + } + boolean flg; + // 更改处方信息 + for (ElepMedicationRequest item : elepMedicationRequest) { + // 处方状态 + item.setStatusEnum(RequestStatus.STOPPED.getValue()); + // 撤销药师 + item.setQuashDrId(user.getId()); + // 撤销时间 + item.setQuashTime(now); + // 撤销原因 + item.setQuashReason(quashReason); + flg = elepMedicationRequestService.updateById(item); + if (!flg) { + return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null)); + } + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, null)); + } + + /** + * 做成电子处方上传预核验入参信息 + * + * @param prescriptionNo 处方号 + * @param tenantId 租户Id + * @return 处方信息 + */ + @Override + public PreCheckPrescription makePreCheckPrescription(String prescriptionNo, + Integer tenantId) { + + // 获取药品请求信息(处方表) + List medicationRequestList = elepMedicationRequestService.list( + new LambdaQueryWrapper().eq(ElepMedicationRequest::getPrescriptionNo, prescriptionNo) + .eq(ElepMedicationRequest::getTenantId, tenantId)); + if (medicationRequestList == null) { + return null; + } + ElepMedicationRequest medicationRequest = medicationRequestList.get(0); + + // 就诊信息 + Encounter encounter = encounterService.getById(medicationRequest.getEncounterId()); + //患者信息 + Patient patient = patientService.getById(encounter.getPatientId()); + // 获取医保挂号信息 todo clinicReg可能改成一对多 + ClinicReg clinicReg = iRegService.getByBusNo(encounter.getBusNo()); + if (clinicReg == null) { + return null; + } + + // 获取处方信息 + PreCheckPrescription prescriptionInfo = + ybEleUtil.getEleVeriPrescriptionInfo(medicationRequest, patient, tenantId); + // 获取处方明细信息 + List rxdrugdetail = + ybEleUtil.getEleVeriPrescriptionDetail(prescriptionNo, tenantId); + + // 获取就诊信息和诊断信息 + PreCheckPrescription eleVisAndDisInfo = + ybEleUtil.getEleVeriVisitAndDiagnosisInfo(medicationRequest, clinicReg, tenantId); + + // 电子处方上传预核验实体赋值 + + prescriptionInfo.setRxdrugdetail(rxdrugdetail) + .setMdtrtinfo(eleVisAndDisInfo.getMdtrtinfo()).setDiseinfo(eleVisAndDisInfo.getDiseinfo()); + + return prescriptionInfo; + } + + /** + * 电子处方上传预核验信息保存 + * + * @param pcpResult 电子处方上传预核验信息 + * @return + */ + @Override + public void savePreCheckPrescription(PreCheckPrescription pcpResult) { + + //todo dto和表的字段类型不一致 + ElepVeriPrescriptionInfo prescriptionInfo = new ElepVeriPrescriptionInfo(); + BeanUtils.copyProperties(pcpResult, prescriptionInfo); + + // 保存处方信息 + eleVeriPrescriptionInfoService.save(prescriptionInfo); + // 保存处方明细信息 + eleVeriPrescriptionDetailService.saveBatch(pcpResult.getRxdrugdetail()); + // 保存就诊信息 + eleVeriVisitInfoService.save(pcpResult.getMdtrtinfo()); + // 保存诊断信息 + eleVeriDiagnosisInfoService.save(pcpResult.getDiseinfo()); + } + + + /** + * 电子处方上传预核验响应出参信息保存 + * + * @param pcpResult 电子处方上传预核验响应出参信息 + * @return + */ + @Override + public void saveEleVeriPrescriptionOutput(ElepVeriPrescriptionOutput pcpResult) { + elePresOutputService.save(pcpResult); + } + + /** + * 做成电子处方医保电子签名入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 处方信息 + */ + @Override + public ElepSignatureInput makeEleSignature(String hiRxno, Long practitionerId, Date checkDate, Integer tenantId) { + + List pcpResult = elePresOutputService.list( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno) + .orderByDesc(ElepVeriPrescriptionOutput::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + if (pcpResult == null) { + return null; + } + return ybEleUtil.getEleSignatureInput(pcpResult.get(0), practitionerId, checkDate, tenantId); + } + + /** + * 保存电子处方医保电子签名入参 + * + * @param eSign 电子处方医保电子签名入参信息 + * @return + */ + @Override + public void saveEleSignature(ElepSignatureInput eSign) { + eleSignInfoService.save(eSign); + } + + /** + * 保存电子处方医保电子签名响应出参 + * + * @param esResult 电子处方医保电子签名响应出参信息 + * @return + */ + @Override + public void saveEleSignatureOutput(ElepSignatureOutput esResult) { + eleSignOutService.save(esResult); + } + + /** + * 做成电子处方上传入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 电子处方上传入参 + */ + @Override + public ElepUploadInput makeEleUploadInput(String hiRxno, Long practitionerId, Date checkDate, Integer tenantId) { + + List pcpResult = elePresOutputService.list( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno) + .orderByDesc(ElepVeriPrescriptionOutput::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + List esResult = eleSignOutService + .list(new LambdaQueryWrapper().eq(ElepSignatureOutput::getHiRxno, hiRxno) + .orderByDesc(ElepSignatureOutput::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (pcpResult == null || esResult == null) { + return null; + } + return ybEleUtil.getEleUploadInput(pcpResult.get(0), esResult.get(0), practitionerId, checkDate, tenantId); + } + + /** + * 保存电子处方上传入参 + * + * @param eleUploadInput 电子处方上传入参信息 + * @return + */ + @Override + public void saveEleUploadInput(ElepUploadInput eleUploadInput) { + eleUploadInputService.save(eleUploadInput); + } + + /** + * 保存电子处方上传响应出参 + * + * @param euResult 电子处方上传响应出参信息 + * @return + */ + @Override + public void saveEleUploadOutput(ElepUploadOutput euResult) { + eleUploadOutputService.save(euResult); + } + + /** + * 做成电子处方撤销入参 + * + * @param hiRxno 医保处方编号 + * @param practitionerId 撤销药师Id + * @param description 撤销原因 + * @param revokeDate 撤销时间 + * @param tenantId 租户Id + * @return 电子处方撤销入参 + */ + @Override + public ElepRevokeInput makeEleRevokeInput(String hiRxno, Long practitionerId, String description, Date revokeDate, + Integer tenantId) { + + List pcpResult = elePresOutputService.list( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno) + .orderByDesc(ElepVeriPrescriptionOutput::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + if (pcpResult == null) { + return null; + } + List euResult = eleUploadOutputService + .list(new LambdaQueryWrapper().eq(ElepUploadOutput::getHiRxno, pcpResult.get(0).getHiRxno()) + .orderByDesc(ElepUploadOutput::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (euResult == null) { + return null; + } + + return ybEleUtil.getElepRevokeInput(pcpResult.get(0), euResult.get(0), practitionerId, description, revokeDate, tenantId); + } + + /** + * 保存电子处方撤销入参 + * + * @param eleRevokeInput 电子处方撤销入参信息 + * @return + */ + @Override + public void saveEleRevokeInput(ElepRevokeInput eleRevokeInput) { + eleRevokeInputService.save(eleRevokeInput); + } + + /** + * 保存电子处方撤销响应出参 + * + * @param ereResult 电子处方撤销响应出参信息 + * @return + */ + @Override + public void saveEleRevokeOutput(ElepRevokeOutput ereResult) { + + eleRevokeOutputService.save(ereResult); + } + + /** + * 做成电子处方信息查询入参 + * + * @param hiRxno 医保处方编号 + * @return 电子处方信息查询入参 + */ + @Override + public ElepQuerPrescriptionInput makeEleQueryPrescriptionInput(String hiRxno) { + + List pcpResult = elePresOutputService.list( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno) + .orderByDesc(ElepVeriPrescriptionOutput::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (pcpResult == null) { + return null; + } + return ybEleUtil.getEleQueryPrescriptionInput(pcpResult.get(0)); + } + + /** + * 保存电子处方信息查询入参 + * + * @param eleQueryPreInput 电子处方信息查询入参信息 + * @return + */ + @Override + public void saveEleQueryPrescriptionInput(ElepQuerPrescriptionInput eleQueryPreInput) { + eleQueryPreInputService.save(eleQueryPreInput); + } + + /** + * 保存电子处方信息查询响应出参信息 + * + * @param emrResult 电子处方信息查询响应出参信息 + * @return + */ + @Override + public void saveEleMedResultOut(QueryPrescription emrResult) { + + ElepQuerPrescriptionInfo prescriptionInfo = new ElepQuerPrescriptionInfo(); + BeanUtils.copyProperties(emrResult, prescriptionInfo); + + // 保存处方信息 + eleQuerPrescriptionInfoService.save(prescriptionInfo); + // 保存处方明细信息 + eleQuerPrescriptionDetailService.saveBatch(emrResult.getRxDetlList()); + // 保存就诊信息 + eleQuerVisitInfoService.save(emrResult.getRxOtpinfo()); + // 保存诊断信息 + eleQuerDiagnosisInfoService.saveBatch(emrResult.getRxDiseList()); + + } + + /** + * 做成电子处方取药结果查询入参 + * + * @param hiRxno 医保处方编号 + * @return 电子处方取药结果查询入参 + */ + @Override + public ElepMedresultInput makeEleMedResultInput(String hiRxno) { + + List pcpResult = elePresOutputService.list( + new LambdaQueryWrapper().eq(ElepVeriPrescriptionOutput::getHiRxno, hiRxno) + .orderByDesc(ElepVeriPrescriptionOutput::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (pcpResult == null) { + return null; + } + + return ybEleUtil.getEleMedResultInput(pcpResult.get(0)); + } + + /** + * 保存电子处方取药结果查询入参 + * + * @param eleMedInput 电子处方取药结果查询入参信息 + * @return + */ + @Override + public void saveEleMedResultInput(ElepMedresultInput eleMedInput) { + eleMedResInputService.save(eleMedInput); + } + + /** + * 保存电子处方取药结果查询响应出参 + * + * @param medResInquiry 电子处方取药结果查询响应出参信息 + * @return + */ + @Override + public void saveMedicationResultInquiry(MedicationResultInquiry medResInquiry) { + ElepMedresultInfo medresultInfo = new ElepMedresultInfo(); + BeanUtils.copyProperties(medResInquiry, medresultInfo); + + // 保存处方信息 + eleMedResInfoService.save(medresultInfo); + eleMedDetailService.saveBatch(medResInquiry.getSeltdelts()); + } + + @Override + public Map getMedTypeAndDoctorName(String prescriptionNo, Integer tenantId) { + + HashMap map = new HashMap<>(); + // 获取药品请求信息(处方表) + List medicationRequestList = elepMedicationRequestService.list( + new LambdaQueryWrapper().eq(ElepMedicationRequest::getPrescriptionNo, prescriptionNo) + .eq(ElepMedicationRequest::getTenantId, tenantId)); + if (medicationRequestList == null) { + return null; + } + ElepMedicationRequest medicationRequest = medicationRequestList.get(0); + + // 就诊信息 + Encounter encounter = encounterService.getById(medicationRequest.getEncounterId()); + //患者信息 + Patient patient = patientService.getById(encounter.getPatientId()); + // 获取医保挂号信息 todo clinicReg可能改成一对多 + ClinicReg clinicReg = iRegService.getByBusNo(encounter.getBusNo()); + if (clinicReg == null) { + return null; + } + + String medicalContractName = ""; + String insuplcAdmdvs = clinicReg.getInsuplcAdmdvs(); + if (insuplcAdmdvs.equals("229900") ) { + medicalContractName = "省"; + } else if (insuplcAdmdvs.startsWith("2201")) { + medicalContractName = "市"; + } else { + medicalContractName = "省异地"; + } +// List contractListByYb = contractService.getContractListByYb(); +// for (Contract contract : contractListByYb) { +// if(insuplcAdmdvs.equals(contract.getAdmVs())){ +// medicalContractName = contract.getContractName(); +// } +// } + + String insutype = clinicReg.getInsutype(); + + String medicalCareType = ""; + switch (insutype) { + case "310": + case "320": + case "330": + case "370": + medicalCareType = "职工医保"; + break; + case "340": + case "360": + medicalCareType = "全公费"; + break; + case "390": + case "392": + case "391": + case "380": + medicalCareType = "居民医保"; + break; + case "350": + case "410": + case "399": + medicalCareType = "其他"; + break; + default: + medicalCareType = "全自费"; + break; + } + + Practitioner practitioner = iPractitionerService.getById(SecurityUtils.getLoginUser().getPractitionerId()); + + map.put("doctorName", practitioner.getName()); + map.put("medType", medicalContractName + medicalCareType); + + return map; + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbServiceImpl.java new file mode 100644 index 00000000..20e20120 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/service/impl/YbServiceImpl.java @@ -0,0 +1,407 @@ +package com.openhis.web.ybmanage.service.impl; + +import java.math.BigDecimal; +import java.time.*; +import java.util.Date; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.core.common.core.domain.R; +import com.core.common.enums.DeleteFlag; +import com.core.common.enums.TenantOptionDict; +import com.core.common.exception.ServiceException; +import com.core.common.utils.StringUtils; +import com.core.web.util.TenantOptionUtil; +import com.openhis.common.enums.ParticipantType; +import com.openhis.common.enums.TherapyTimeType; +import com.openhis.common.enums.Whether; +import com.openhis.common.enums.ybenums.*; +import com.openhis.web.ybmanage.mapper.YbMapper; +import com.openhis.web.ybmanage.service.IYbService; +import com.openhis.yb.dto.*; +import com.openhis.yb.service.YbHttpUtils; + +/** + * 医保ServiceImpl + * + * @author GuoRui + */ +@Service +public class YbServiceImpl implements IYbService { + + @Autowired + private YbMapper ybMapper; + @Autowired + private YbHttpUtils ybHttpUtils; + + /** + * 【3101】明细审核事前事中分析服务 + * + * @param encounterId 就诊ID + * @param trigScen 触发场景 + * @return 结果 + */ + @Override + public R yb3101PreMidAnalysis(Long encounterId, String trigScen) { + // 验证触发场景 + if (YbTrigScen.getByValue(trigScen) == null) { + throw new ServiceException("请指定触发场景"); + } + + // 查询就诊患者信息 + Yb3101AdapterEncounterPatientInfo encounterPatientInfo = ybMapper.yb3101SelectEncounterPatientInfo(encounterId, + Whether.YES.getValue(), ParticipantType.REGISTRATION_DOCTOR.getCode(), DeleteFlag.NOT_DELETED.getCode()); + if (encounterPatientInfo == null) { + throw new ServiceException("患者信息不存在"); + } + + // 查询就诊诊断信息 + List encounterDiagnoseInfoList = + ybMapper.yb3101SelectEncounterDiagnoseInfo(encounterId, DeleteFlag.NOT_DELETED.getCode()); + if (encounterDiagnoseInfoList.isEmpty()) { + throw new ServiceException("诊断信息不存在"); + } + + // 查询处方(医嘱)信息 + List orderInfoList = ybMapper.yb3101SelectOrderInfo(encounterId, + DeleteFlag.NOT_DELETED.getCode(), YbMedChrgItmType.WEST_MEDICINE.getValue(), + YbMedChrgItmType.CHINESE_MEDICINE_SLICES_FEE.getValue(), YbMedChrgItmType.CHINESE_MEDICINE_FEE.getValue()); + if (encounterDiagnoseInfoList.isEmpty()) { + throw new ServiceException("处方信息不存在"); + } + + // 作成诊断信息集合 + List fsiDiagnoseDtos = + encounterDiagnoseInfoList.stream().map(this::createYb3101FsiDiagnoseDto).collect(Collectors.toList()); + + // 作成处方(医嘱)信息集合 + List fsiOrderDtos = + orderInfoList.stream().map(this::createYb3101InputFsiOrderDto).collect(Collectors.toList()); + + // 作成就诊信息 + Yb3101InputFsiEncounterDto fsiEncounterDto = + createYb3101InputFsiEncounterDto(encounterPatientInfo, fsiDiagnoseDtos, fsiOrderDtos); + + // 作成参保人信息 + Yb3101InputPatientDto patientDto = createYb3101InputPatientDto(encounterPatientInfo, fsiEncounterDto); + + // 作成规则分析信息 + Yb3101InputData data = createYb3101InputData(patientDto, trigScen); + + // 向医保服务发起HTTP请求,获取返回结果 + Yb3101OutputResult result = ybHttpUtils.yb3101PreMidAnalysis(data); + + // TODO:后续处理需等待门诊住院开发完全后 + + return R.ok(); + } + + /** + * 【3103】事前事中服务反馈服务 + * + * @param warnRsltId 违规标识 + * @param dspoWay 处理方式 + * @param dspoWayRea 处理原因 + * @return 结果 + */ + @Override + public R yb3103PreMidFeedback(String warnRsltId, String dspoWay, String dspoWayRea) { + // 验证处理方式 + if (YbDspoWay.getByValue(dspoWay) == null) { + throw new ServiceException("请指定处理方式"); + } + + // 继续执行医嘱时,处理原因必填 + if (YbDspoWay.CONTINUE.getValue().equals(dspoWay) && StringUtils.isEmpty(dspoWayRea)) { + throw new ServiceException("请填写处理原因"); + } + + // 作成处理数据 + Yb3103InputWarn warn = + new Yb3103InputWarn().setWarnRsltId(warnRsltId).setDspoWay(dspoWay).setDspoWayRea(dspoWayRea); + + // 作成输入 + Yb3103InputData data = new Yb3103InputData().setWarnType(YbWarnType.PRE.getValue()).setWarns(List.of(warn)); + + // 向医保服务发起HTTP请求 + ybHttpUtils.yb3103PreMidFeedback(data); + + return R.ok(); + } + + /** + * 【4101A】医疗保障基金结算清单信息上传(新) + * + * @param paymentId 付款ID + * @return 结果 + */ + @Override + public R yb4101aUploadFundSettle(Long paymentId) { + // 查询结算清单信息 + List settleInfoList = ybMapper.yb4101aSelectSettleInfo(paymentId); + + return R.ok(); + } + + /** + * 【3101】创建诊断信息 + * + * @param encounterDiagnoseInfo 就诊诊断信息 + * @return 诊断信息 + */ + private Yb3101InputFsiDiagnoseDto + createYb3101FsiDiagnoseDto(Yb3101AdapterEncounterDiagnoseInfo encounterDiagnoseInfo) { + // 根据住院患者疾病诊断类型代码,判断出入诊断类别,非入院诊断,视为出院诊断 + String inoutDiseType; + if (YbIptDiseTypeCode.ADMISSION_DIAGNOSIS.getCode().equals(encounterDiagnoseInfo.getIptDiseTypeCode())) { + inoutDiseType = YbInOutDiagType.YB_IN_DIAG_TYPE.getValue(); + } else { + inoutDiseType = YbInOutDiagType.YB_OUT_DIAG_TYPE.getValue(); + } + // 返回诊断信息 + return new Yb3101InputFsiDiagnoseDto() + // 诊断标识:诊断记录唯一标识 + .setDiseId(encounterDiagnoseInfo.getDiseId()) + // 出入诊断类别:参考字典表 + .setInoutDiseType(inoutDiseType) + // 主诊断标志:参考字典表 + .setMaindiseFlag(encounterDiagnoseInfo.getMaindiseFlag()) + // 诊断排序号:例如:1,2,3… + .setDiasSrtNo(encounterDiagnoseInfo.getDiasSrtNo()) + // 诊断(疾病)编码 + .setDiseCodg(encounterDiagnoseInfo.getDiseCodg()) + // 诊断(疾病)名称 + .setDiseName(encounterDiagnoseInfo.getDiseName()) + // 诊断日期:格式:yyyy-MM-dd HH:mm:ss + .setDiseDate(encounterDiagnoseInfo.getDiseDate()); + } + + /** + * 【3101】创建处方(医嘱)信息 + * + * @param orderInfo 处方(医嘱)信息 + * @return 处方(医嘱)信息 + */ + private Yb3101InputFsiOrderDto createYb3101InputFsiOrderDto(Yb3101AdapterOrderInfo orderInfo) { + // 根据治疗类型,判断是否为长期医嘱 + String longDrordFlag; + if (TherapyTimeType.LONG_TERM.getValue().equals(orderInfo.getTherapyEnum())) { + longDrordFlag = Whether.YES.getCode(); + } else { + longDrordFlag = Whether.NO.getCode(); + } + // 根据医保类别,判断目录类别 + String hilistType = null; + if (YbMedChrgItmType.WEST_MEDICINE.getValue().equals(orderInfo.getYbType()) + || YbMedChrgItmType.CHINESE_MEDICINE_FEE.getValue().equals(orderInfo.getYbType())) { + hilistType = YbListType.WESTERN_AND_CHINESE_PATENT_MEDICINE.getValue(); + } else if (YbMedChrgItmType.CHINESE_MEDICINE_SLICES_FEE.getValue().equals(orderInfo.getYbType())) { + hilistType = YbListType.IMPORTANT_HERBAL_SLICES.getValue(); + } + return new Yb3101InputFsiOrderDto() + // 处方(医嘱)标识:处方(医嘱)记录唯一ID + .setRxId(orderInfo.getRxId()) + // 处方号 + .setRxno(orderInfo.getRxno()) + // 组编号 + .setGrpno(orderInfo.getGrpno()) + // 是否为长期医嘱:[1=是,0=否] + .setLongDrordFlag(longDrordFlag) + // 目录类别:参考字典表 + .setHilistType(hilistType) + // 收费类别:参考字典表 + .setChrgType(orderInfo.getYbType()) + // 医嘱行为:参考字典表 + .setDrordBhvr(YbDrordBhvr.OTHER.getValue()) + // 医保目录代码:国家统一标准编码 + .setHilistCode(orderInfo.getHilistCode()) + // 医保目录名称:国家统一标准名称 + .setHilistName(orderInfo.getHilistName()) + // 医保目录(药品)剂型:国家统一标准药品剂型 + .setHilistDosform(orderInfo.getHilistDosform()) + // 医保目录等级 + .setHilistLv(orderInfo.getHilistLv()) + // 医保目录价格,暂时取本系统单价 + .setHilistPric(orderInfo.getPric()) + // 医院目录代码 + .setHosplistCode(orderInfo.getHilistCode()) + // 医院目录名称 + .setHosplistName(orderInfo.getHilistName()) + // 医院目录(药品)剂型 + .setHosplistDosform(orderInfo.getHilistDosform()) + // 数量 + .setCnt(BigDecimal.valueOf(orderInfo.getCnt())) + // 单价 + .setPric(orderInfo.getPric()) + // 总费用 + .setSumamt(orderInfo.getSumamt()) + // 自费金额 + .setOwnpayAmt(BigDecimal.ZERO) // TODO:从哪取啊,住院有(但表还没建),门诊没有 + // 自付金额 + .setSelfpayAmt(BigDecimal.ZERO) // TODO:从哪取啊,住院有(但表还没建),门诊没有 + // 规格:例如:0.25g×12片/盒 + .setSpec(orderInfo.getSpec()) + // 数量单位:例如:盒 + .setSpecUnt(orderInfo.getSpecUnt()) + // 医嘱开始日期:格式:yyyy-MM-dd HH:mm:ss + .setDrordBegnDate(orderInfo.getDrordBegnDate()) + // 下达医嘱的科室标识 + .setDrordDeptCodg(orderInfo.getDrordDeptCodg()) + // 下达医嘱科室名称 + .setDrordDeptName(orderInfo.getDrordDeptName()) + // 开处方(医嘱)医生标识 + .setDrordDrCodg(orderInfo.getDrordDrCodg()) + // 开处方(医嘱)医生姓名 + .setDrordDrName(orderInfo.getDrordDrName()) + // 开处方(医嘱)医职称:参考字典表 + .setDrordDrProfttl(orderInfo.getDrordDrProfttl()) + // 是否当前处方(医嘱):本次处方(医嘱)标记[1=是,0=否] + .setCurrDrordFlag(Whether.YES.getCode()); + } + + /** + * 【3101】创建就诊信息 + * + * @param encounterPatientInfo 就诊患者信息 + * @param fsiDiagnoseDtos 诊断信息集合 + * @param fsiOrderDtos 处方(医嘱)信息集合 + * @return 就诊信息 + */ + private Yb3101InputFsiEncounterDto createYb3101InputFsiEncounterDto( + Yb3101AdapterEncounterPatientInfo encounterPatientInfo, List fsiDiagnoseDtos, + List fsiOrderDtos) { + // 判断出院时间,如果为空,默认当天下午四点 + if (encounterPatientInfo.getDscgDate() == null) { + encounterPatientInfo.setDscgDate(getFourPmDate(encounterPatientInfo.getAdmDate())); + } + // 提取主诊断 + Yb3101InputFsiDiagnoseDto mainDiagnose = + fsiDiagnoseDtos.stream().filter(e -> Whether.YES.getCode().equals(e.getMaindiseFlag())).findFirst() + .orElse(new Yb3101InputFsiDiagnoseDto()); + // 计算总费用 + BigDecimal medfeeSumamt = + fsiOrderDtos.stream().map(Yb3101InputFsiOrderDto::getSumamt).reduce(BigDecimal.ZERO, BigDecimal::add); + // 作成就诊信息 + return new Yb3101InputFsiEncounterDto() + // 就诊标识:就诊记录唯一ID + .setMdtrtId(encounterPatientInfo.getMdtrtId()) + // 医疗服务机构标识:定点医疗机构ID + .setMedinsId(encounterPatientInfo.getMedinsId()) + // 医疗机构名称 + .setMedinsName(encounterPatientInfo.getMedinsName()) + // 医疗机构行政区划编码 + .setMedinsAdmdvs(encounterPatientInfo.getMedinsAdmdvs()) + // 医疗服务机构类型:参考字典表 + .setMedinsType(YbMedinsType.FIXMEDINS_TYPE1.getValue()) + // 医疗机构等级:参考字典表 + .setMedinsLv(TenantOptionUtil.getOptionContent(TenantOptionDict.MEDINS_LV)) + // 入院日期 + .setAdmDate(encounterPatientInfo.getAdmDate()) + // 出院日期 + .setDscgDate(encounterPatientInfo.getDscgDate()) + // 主诊断编码:例如:I63.9 + .setDscgMainDiseCodg(mainDiagnose.getDiseCodg()) + // 主诊断名称:例如:脑梗塞 + .setDscgMainDiseName(mainDiagnose.getDiseName()) + // 诊断信息集合 + .setFsiDiagnoseDtos(fsiDiagnoseDtos) + // 医师标识:医生唯一ID + .setDrCodg(encounterPatientInfo.getDrCodg()) + // 入院科室标识:科室唯一ID + .setAdmDeptCodg(encounterPatientInfo.getAdmDeptCodg()) + // 入院科室名称 + .setAdmDeptName(encounterPatientInfo.getAdmDeptName()) + // 出院科室标识:科室唯一ID + .setDscgDeptCodg(encounterPatientInfo.getDscgDeptCodg()) + // 出院科室名称 + .setDscgDeptName(encounterPatientInfo.getDscgDeptName()) + // 就诊类型:参考字典表 + .setMedMdtrtType(Optional.ofNullable(YbMedType.getByValue(encounterPatientInfo.getMedType())) + .orElse(YbMedType.GENERAL_OUTPATIENT).getYbMedMdtrtType().getValue()) + // 医疗类别:参考字典表 + .setMedType(encounterPatientInfo.getMedType()) + // 处方(医嘱)信息集合 + .setFsiOrderDtos(fsiOrderDtos) + // 生育状态:参考字典表 + .setMatnStas(YbMatnStas.UNKNOWN.getValue()) + // 总费用 + .setMedfeeSumamt(medfeeSumamt) + // 自费金额 + .setOwnpayAmt(encounterPatientInfo.getOwnpayAmt()) + // 自付金额 + .setSelfpayAmt(encounterPatientInfo.getSelfpayAmt()) + // 结算总次数 + .setSetlTotlnum(encounterPatientInfo.getSetlTotlnum()) + // 险种:参考字典表 + .setInsutype(encounterPatientInfo.getInsutype()) + // 报销标志:参考字典表 + .setReimFlag(YbPayLoc.PAY_LOC1.getValue()) + // 异地结算标志:参考字典表 + .setOutSetlFlag(Whether.NO.getCode()); + } + + /** + * 【3101】创建参保人信息 + * + * @param encounterPatientInfo 就诊患者信息 + * @param fsiEncounterDto 就诊信息 + * @return 参保人信息 + */ + private Yb3101InputPatientDto createYb3101InputPatientDto(Yb3101AdapterEncounterPatientInfo encounterPatientInfo, + Yb3101InputFsiEncounterDto fsiEncounterDto) { + // 作成参保人信息 + return new Yb3101InputPatientDto() + // 参保人标识:参保人唯一ID + .setPatnId(encounterPatientInfo.getPatnId()) + // 姓名 + .setPatnName(encounterPatientInfo.getPatnName()) + // 性别:参考字典表 + .setGend(encounterPatientInfo.getGend()) + // 出生日期:格式:yyyy-MM-dd + .setBrdy(encounterPatientInfo.getBrdy()) + // 统筹区编码:参保人所属统筹区 + .setPoolarea(encounterPatientInfo.getPoolarea()) + // 当前就诊标识:本次就诊记录唯一ID + .setCurrMdtrtId(encounterPatientInfo.getMdtrtId()) + // 就诊信息集合 + .setFsiEncounterDtos(List.of(fsiEncounterDto)); + } + + /** + * 创建规则分析信息 + * + * @param patientDto 参保人信息 + * @param trigScen 触发场景 + * @return 规则分析信息 + */ + private Yb3101InputData createYb3101InputData(Yb3101InputPatientDto patientDto, String trigScen) { + // 作成规则分析信息 + return new Yb3101InputData() + // 系统编码:调用方系统简码标识 + .setSyscode("sys01") + // 参保人信息 + .setPatientDtos(List.of(patientDto)) + // 触发场景:此值与ruleIds指定其一即可,请优先指定此值 + .setTrigScen(trigScen); + + } + + /** + * 获取指定日期当天的下午四点(16:00)的日期 + * + * @param inputDate 指定日期 + * @return 当天的下午四点(16:00)的日期 + */ + private Date getFourPmDate(Date inputDate) { + ZonedDateTime inputZdt = inputDate.toInstant().atZone(ZoneId.systemDefault()); + LocalDate datePart = inputZdt.toLocalDate(); + LocalTime fourPm = LocalTime.of(16, 0); + LocalDateTime fourPmLocalDateTime = LocalDateTime.of(datePart, fourPm); + ZonedDateTime fourPmZdt = fourPmLocalDateTime.atZone(ZoneId.systemDefault()); + return Date.from(fourPmZdt.toInstant()); + } +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/util/YbEleParamBuilderUtil.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/util/YbEleParamBuilderUtil.java new file mode 100644 index 00000000..0cf769e4 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/util/YbEleParamBuilderUtil.java @@ -0,0 +1,657 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.Period; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; + +import com.core.common.enums.DeleteFlag; +import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.CommonConstants; +import com.openhis.common.constant.YbCommonConstants; +import com.openhis.workflow.domain.ElepMedicationRequest; +import com.openhis.workflow.service.IElepMedicationRequestService; +import com.openhis.ybcatalog.domain.CatalogDrugInfo; +import com.openhis.ybcatalog.service.ICatalogDrugInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.utils.DateUtils; +import com.openhis.administration.domain.*; +import com.openhis.administration.service.*; +import com.openhis.clinical.domain.Condition; +import com.openhis.clinical.domain.ConditionDefinition; +import com.openhis.clinical.service.IConditionDefinitionService; +import com.openhis.clinical.service.IConditionService; +import com.openhis.common.enums.*; +import com.openhis.common.enums.ybenums.*; +import com.openhis.medication.domain.Medication; +import com.openhis.medication.domain.MedicationDefinition; +import com.openhis.medication.service.IMedicationDefinitionService; +import com.openhis.medication.service.IMedicationService; +import com.openhis.yb.domain.ClinicReg; +import com.openhis.yb.service.IRegService; +import com.openhis.ybelep.domain.*; +import com.openhis.ybelep.service.IElepVeriPrescriptionInfoService; +import com.openhis.ybelep.service.IElepVeriVisitInfoService; + +/** + * 医保接口调用工具 + * + * @author yuxj + * @date 2025-04-17 + */ +@Component +public class YbEleParamBuilderUtil { + + /********************* 业务实体服务 *******************/ + + // 就诊管理服务 + @Autowired + IEncounterService iEncounterService; + @Autowired + IElepMedicationRequestService elepMedicationRequestService; + // 就诊管理 + @Autowired + IAccountService accountService; + @Autowired + IMedicationDefinitionService medicationDefinitionService; + @Autowired + ICatalogDrugInfoService catalogDrugInfoService; + @Autowired + IEncounterDiagnosisService encounterDiagnosisService; + @Autowired + IEncounterService encounterService; + @Autowired + IPatientService patientService; + @Autowired + IOrganizationService organizationService; + @Autowired + IPractitionerService practitionerService; + @Autowired + IPractitionerRoleService practitionerRoleService; + @Autowired + IConditionService conditionService; + @Autowired + IConditionDefinitionService conditionDefinitionService; + + /********************* 医保实体服务 *******************/ + @Autowired + IRegService iRegService; + @Autowired + IElepVeriPrescriptionInfoService eleVerPreInfoService; + @Autowired + IElepVeriVisitInfoService eleVerVisInfoService; + + /** + * 获取处方信息 + * + * @param medicationRequest 处方信息 + * @param patient 患者信息 + * @param tenantId 租户Id + * @return 处方信息 + */ + public PreCheckPrescription getEleVeriPrescriptionInfo(ElepMedicationRequest medicationRequest, Patient patient, + Integer tenantId) { + + // 声明处方信息对象 + PreCheckPrescription elepVeriPrescriptionInfo = new PreCheckPrescription(); + elepVeriPrescriptionInfo.setMdtrtCertType("02") + .setMdtrtCertNo(patient.getIdCard()) + // 01-定点医疗机构就诊 + .setBizTypeCode("01").setHospRxno(medicationRequest.getPrescriptionNo()) + .setRxTypeCode(medicationRequest.getRxTypeCode().toString()).setPrscTime(medicationRequest.getIssueTime()) + // 处方有效天数 + .setValiDays(medicationRequest.getValidityDays().toString()) + // 计算截止时间 + .setValiEndTime(DateUtils.addDays(medicationRequest.getIssueTime(), medicationRequest.getValidityDays())); + + // 就诊凭证类型为03”时,填写社会保障卡卡号 + if (elepVeriPrescriptionInfo.getMdtrtCertType() == YbMdtrtCertType.MDTRT_CERT_TYPE03.getValue()) { + + Account account = accountService.getOne( + new LambdaQueryWrapper().eq(Account::getEncounterId, medicationRequest.getEncounterId()) + .eq(Account::getTypeCode, AccountType.SOCIAL_SECURITY_CARD.getValue()) + .eq(Account::getTenantId, tenantId)); + if (account == null) { + return null; + } + // 设置社会保障卡号 + elepVeriPrescriptionInfo.setCardSn(account.getNo()); + } + + // todo 药品类目数(剂数):西药、中成药时为药品的类目数量 + // 西药、中成药对应的处方类别list + List westernOrChineseList = new ArrayList<>(); + westernOrChineseList.add(Integer.parseInt(YbRxItemTypeCode.WESTERN_MEDICINE.getValue())); + westernOrChineseList.add(Integer.parseInt(YbRxItemTypeCode.CHINESE_PATENT_MEDICINE.getValue())); + + // 调用 count 方法 + Long countWesternOrChinese = elepMedicationRequestService + .selectWesternOrChineseCount(medicationRequest.getPrescriptionNo(), westernOrChineseList, tenantId); + // 西药、中成药时为药品的类目数量 + elepVeriPrescriptionInfo.setRxDrugCnt(countWesternOrChinese.toString()) + .setRxUsedWayCodg(medicationRequest.getMedRoute()) + .setRxUsedWayName(YbDrugMedWay.getByValue(medicationRequest.getMedRoute()).getDescription()); + + return elepVeriPrescriptionInfo; + } + + /** + * 获取处方明细信息 + * + * @param prescriptionNo 处方号 + * @param tenantId 租户Id + * @return 处方明细信息 + */ + public List getEleVeriPrescriptionDetail(String prescriptionNo, Integer tenantId) { + + // 查询该处方所有中药饮片 + List materialObjs = elepMedicationRequestService.list(new LambdaQueryWrapper() + .eq(ElepMedicationRequest::getPrescriptionNo, prescriptionNo).eq(ElepMedicationRequest::getTenantId, tenantId)); + // 未查到返回空 + if (materialObjs == null) { + return null; + } + + List eleDetList = new ArrayList<>(); + + // 遍历 materialObjs 列表 + for (ElepMedicationRequest materialObj : materialObjs) { + CatalogDrugInfo mObj = catalogDrugInfoService.getOne(new LambdaQueryWrapper() + .eq(CatalogDrugInfo::getMedicalCatalogCode, materialObj.getMedicationId()).orderByDesc(CatalogDrugInfo::getCreatedAt).last("LIMIT 1")); + // 未查到返回空 + if (mObj == null) { + return null; + } + + ElepVeriPrescriptionDetail eleObj = new ElepVeriPrescriptionDetail(); + eleObj.setMedListCodg(mObj.getMedicalCatalogCode()) + .setDrugGenname(mObj.getRegisteredName()).setDrugDosform(mObj.getDrugForm()) + .setDrugSpec(mObj.getDrugSpecification()).setMedcBegntime(materialObj.getEffectiveDoseStart()) + .setMedcEndtime(materialObj.getEffectiveDoseEnd()) + .setMedcDays(materialObj.getDispensePerDuration().toString()) + .setDrugDosunt(materialObj.getUnitCode()).setDrugCnt(materialObj.getQuantity().toString()) + // todo 医院审批标志,配合目录的限制使用标志使用(目前吉林省不启用),暂时先写死 + .setHospApprFlag("0") + // 院内内部处方号 + .setPrescriptionNo(prescriptionNo) + .setRxItemTypeCode(materialObj.getRxItemTypeCode().toString()) + .setRxItemTypeName(YbRxItemTypeCode.getByValue(materialObj.getRxItemTypeCode().toString()).getDescription()) + .setMedcWayCodg(materialObj.getMedRoute()) + .setMedcWayDscr(YbDrugMedWay.getByValue(materialObj.getMedRoute()).getDescription()) + .setSinDoscnt(materialObj.getMedDosage().stripTrailingZeros().toPlainString()).setSinDosunt(materialObj.getMedDosageUnitCode()) + .setUsedFrquCodg(materialObj.getMedFrequency()) + .setUsedFrquName(YbUsedFrqu.getByValue(materialObj.getMedFrequency()).getDescription()); + + eleDetList.add(eleObj); + } + + return eleDetList; + } + + /** + * 获取就诊信息和诊断信息 + * + * @param medicationRequest 处方信息 + * @param clinicReg 医保挂号保存的信息 + * @param tenantId 租户Id + * @return 处方明细信息 + */ + public PreCheckPrescription getEleVeriVisitAndDiagnosisInfo(ElepMedicationRequest medicationRequest, + ClinicReg clinicReg, Integer tenantId) { + // 电子处方上传预核验信息 + PreCheckPrescription preCheckPrescription = new PreCheckPrescription(); + + // 获取就诊诊断信息 + EncounterDiagnosis encDiagObjs = + encounterDiagnosisService.getOne(new LambdaQueryWrapper() + .eq(EncounterDiagnosis::getEncounterId, medicationRequest.getEncounterId()) + .eq(EncounterDiagnosis::getTenantId, tenantId).eq(EncounterDiagnosis::getConditionId,medicationRequest.getConditionId()) + .eq(EncounterDiagnosis::getDeleteFlag, DeleteFlag.NOT_DELETED.getCode())); + // 就诊管理 + Encounter encounter = encounterService.getOne(new LambdaQueryWrapper() + .eq(Encounter::getId, medicationRequest.getEncounterId())); + // 患者信息 + Patient patient = patientService.getOne(new LambdaQueryWrapper() + .eq(Patient::getId, encounter.getPatientId()).eq(Patient::getTenantId, tenantId)); + // 医生所属科室 + Organization organization = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, medicationRequest.getOrgId()).eq(Organization::getTenantId, tenantId)); + // 就诊诊断所属科室 + Organization orgDis = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, encounter.getOrganizationId()).eq(Organization::getTenantId, tenantId)); + // 医生信息 + Practitioner practitioner = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getId, medicationRequest.getPrescribingDrId()).eq(Practitioner::getTenantId, tenantId)); + // 医生详细信息 + Practitioner praRole = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getId, medicationRequest.getPrescribingDrId()) + .eq(Practitioner::getTenantId, tenantId)); + // 医生所属科室信息 + Organization orgDor = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, praRole.getOrgId()).eq(Organization::getTenantId, tenantId)); + if (encDiagObjs == null || encounter == null || patient == null || organization == null || orgDis == null + || practitioner == null || praRole == null || orgDor == null) { + return null; + } + // 门诊/住院判断 + String otpIptFlag = ""; + if (encounter.getClassEnum() == EncounterClass.AMB.getValue()) { + otpIptFlag = YbEncounterClass.AMB.getValue(); + } else if (encounter.getClassEnum() == EncounterClass.IMP.getValue()) { + otpIptFlag = YbEncounterClass.IMP.getValue(); + } + + String fixmedinsCode = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_CODE); + String fixmedinsName = SecurityUtils.getLoginUser().getOptionJson().getString(CommonConstants.Option.FIXMEDINS_NAME); + + // 1-输入-就诊信息 + ElepVeriVisitInfo eleInfo = new ElepVeriVisitInfo(); + // 诊断信息 + Condition condition = conditionService.getOne(new LambdaQueryWrapper() + .eq(Condition::getId, encDiagObjs.getConditionId()).eq(Condition::getTenantId, tenantId)); + // 诊断定义 + ConditionDefinition cdObj = conditionDefinitionService.getOne(new LambdaQueryWrapper() + .eq(ConditionDefinition::getId, condition.getDefinitionId()) + .eq(ConditionDefinition::getTenantId, tenantId)); + if (condition == null || cdObj == null) { + return null; + } + // 以挂号时间为截至时间,计算年龄 + BigDecimal age = calculateAge(patient.getBirthDate(), clinicReg.getBegntime()); + eleInfo.setFixmedinsCode(fixmedinsCode).setFixmedinsName(fixmedinsName).setMdtrtId(clinicReg.getMdtrtId()) + .setIptOtpNo(clinicReg.getIptOtpNo()).setOtpIptFlag(otpIptFlag) + .setPsnNo(clinicReg.getPsnNo()).setPatnName(patient.getName()).setCertno(patient.getIdCard()) + // todo 目前默认都是身份证:01 + .setPsnCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setPatnAge(age.toString()) + .setPrscDeptName(organization.getName()).setPrscDeptCode(organization.getYbNo()) + .setDrCode(practitioner.getYbNo()).setPrscDrName(praRole.getName()) + .setDrProfttlCodg(practitioner.getDrProfttlCode()) + .setDrProfttlName(YbDoctorTitle.getByValue(practitioner.getDrProfttlCode()).getDescription()) + .setDrDeptCode(orgDor.getYbNo()).setDrDeptName(orgDor.getName()).setMdtrtTime(encounter.getReceptionTime()) + // 院内内部处方号 + .setPrescriptionNo(medicationRequest.getPrescriptionNo()); + if (clinicReg.getMedType() == null) { + eleInfo.setMedType("11"); + } else { + + eleInfo.setMedType(clinicReg.getMedType()); + } + + // 性别 + if (patient.getGenderEnum() == AdministrativeGender.FEMALE.getValue()) { + eleInfo.setGend(YbGender.FEMALE.getValue()); + } else if (patient.getGenderEnum() == AdministrativeGender.MALE.getValue()) { + eleInfo.setGend(YbGender.MALE.getValue()); + } else { + eleInfo.setGend(YbGender.UNKNOWN.getValue()); + } + // 特殊病种标志 2025/05/24 该字段不为空是,特殊病种给yes + if (encDiagObjs.getMedTypeCode() != null) { + eleInfo.setSpDiseFlag(Whether.YES.getCode()); + } else { + eleInfo.setSpDiseFlag(Whether.NO.getCode()); + } + // 主诊断标记 +// if (encDiagObjs.getMaindiseFlag() == Whether.YES.getValue()) { + eleInfo.setMaindiagCode(cdObj.getYbNo()).setMaindiagName(cdObj.getName()); +// } + + // 2-输入-诊断信息 + ElepVeriDiagnosisInfo eleVerDisInfo = new ElepVeriDiagnosisInfo(); + + eleVerDisInfo.setDiagType(cdObj.getTypeCode()).setDiagSrtNo(encDiagObjs.getDiagSrtNo().toString()) + .setDiagCode(cdObj.getYbNo()).setDiagName(cdObj.getName()).setDiagDept(orgDis.getName()) + .setDiagDrNo(practitioner.getYbNo()).setDiagDrName(praRole.getName()) + .setDiagTime(encounter.getReceptionTime()) + // 院内内部处方号 + .setPrescriptionNo(medicationRequest.getPrescriptionNo()); + // 主诊断标记 +// if (encDiagObjs.getMaindiseFlag() == Whether.YES.getValue()) { + eleVerDisInfo.setMaindiagFlag(Whether.YES.getValue().toString()); +// } else { +// eleVerDisInfo.setMaindiagFlag(Whether.NO.getValue().toString()); +// } + + preCheckPrescription.setMdtrtinfo(eleInfo).setDiseinfo(eleVerDisInfo); + + return preCheckPrescription; + + } + + /** + * 做成电子处方医保电子签名入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 处方信息 + */ + public ElepSignatureInput getEleSignatureInput(ElepVeriPrescriptionOutput pcpResult, Long practitionerId, + Date checkDate, Integer tenantId) { + + SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String targetDateStr = targetFormat.format(checkDate); + + JSONObject optionJson = SecurityUtils.getLoginUser().getOptionJson(); + String outputPath = optionJson.getString(CommonConstants.Option.OUTPUT_PATH); + String fixmedinsCode = optionJson.getString(CommonConstants.Option.FIXMEDINS_CODE); + String fixmedinsName = optionJson.getString(CommonConstants.Option.FIXMEDINS_NAME); + + // 审方药师信息 + Practitioner practitioner = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getUserId, practitionerId).eq(Practitioner::getTenantId, tenantId)); + // 审方药师所属科室信息 + Organization orgDor = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, practitioner.getOrgId()).eq(Organization::getTenantId, tenantId)); + + // 电子处方上传预核验-输入-输入-就诊信息 + List eleVerVisInfo = eleVerVisInfoService.list(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo()) + .orderByDesc(ElepVeriVisitInfo::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (practitioner == null || orgDor == null || eleVerVisInfo == null) { + return null; + } + // 原始待签名处方信息 + JSONObject cpdata = new JSONObject(); + // 1 rxTraceCode 处方追溯码 字符型 20 Y + cpdata.put("rxTraceCode", pcpResult.getRxTraceCode()); + // 2 hiRxno 医保处方编号 字符型 30 Y + cpdata.put("hiRxno", pcpResult.getHiRxno()); + // 3 mdtrtId 医保就诊 ID 字符型 30 Y + cpdata.put("mdtrtId", eleVerVisInfo.get(0).getMdtrtId()); + // 4 patnName 患者姓名 字符型 40 Y + cpdata.put("patnName", eleVerVisInfo.get(0).getPatnName()); + // 5 psnCertType 人员证件类型 字符型 6 Y Y //todo 默认身份证:01 + cpdata.put("psnCertType", YbIdDocumentType.RESIDENT_ID_CARD.getValue()); + // 6 certno 证件号码 字符型 50 Y + cpdata.put("certno", eleVerVisInfo.get(0).getCertno()); + // 7 fixmedinsName 定点医疗机构名称 字符型 200 Y + cpdata.put("fixmedinsName", fixmedinsName); + // 8 fixmedinsCode 定点医疗机构编号 字符型 20 Y + cpdata.put("fixmedinsCode", fixmedinsCode); + // 9 drCode 开方医保医师代码 字符型 20 Y + cpdata.put("drCode", eleVerVisInfo.get(0).getDrCode()); + // 10 prscDrName 开方医师姓名 字符型 50 Y + cpdata.put("prscDrName", eleVerVisInfo.get(0).getPrscDrName()); + // 11 pharDeptName 审方药师科室名称 字符型 50 Y + cpdata.put("pharDeptName", orgDor.getName()); + // 12 pharDeptCode 审方药师科室编号 字符型 30 Y + cpdata.put("pharDeptCode", orgDor.getYbNo()); + // 13 pharProfttlCodg 审方药师职称编码 字符型 20 Y N + cpdata.put("pharProfttlCodg", practitioner.getDrProfttlCode() == null ? "" : practitioner.getDrProfttlCode()); + // 14 pharProfttlName 审方药师职称名称 字符型 20 + cpdata.put("pharProfttlName", practitioner.getDrProfttlCode() == null ? "" + : YbPharmacistTitle.getByValue(practitioner.getDrProfttlCode()).getDescription()); + // 15 pharCode 审方医保药师代码 字符型 20 Y + cpdata.put("pharCode", practitioner.getYbNo()); + // 16 pharCertType 审方药师证件类型 字符型 6 Y N + cpdata.put("pharCertType", ""); + // 17 pharCertno 审方药师证件号码 字符型 50 N + cpdata.put("pharCertno", ""); + // 18 pharName 审方药师姓名 字符型 50 Y + cpdata.put("pharName", practitioner.getName()); + // 19 pharPracCertNo 审方药师执业资格证号 字符型 50 + cpdata.put("pharPracCertNo", ""); + // 20 pharChkTime 医疗机构药师审方时间 日期时间型 Y yyyy-MM-dd HH:mm:ss + cpdata.put("pharChkTime", targetDateStr); + // 使用 TreeMap 对键进行排序 + TreeMap sortedMap = new TreeMap<>(); + for (String key : cpdata.keySet()) { + sortedMap.put(key, cpdata.get(key)); + } + // 重新构建排序后的 JSONObject + JSONObject sortedCpdata = new JSONObject(sortedMap); + + // 将 cpdata 转换为 JSON 字符串 + String jsonString = sortedCpdata.toString(); + + // 将 JSON 字符串编码为 Base64 字符串 + String base64EncodedString = Base64.getEncoder().encodeToString(jsonString.getBytes()); + + // 获取当前日期 + LocalDate currentDate = LocalDate.now(); + // 定义格式(yyyyMMdd) + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + // 格式化日期 + String formattedDate = currentDate.format(formatter); + + + String folderPath = outputPath + formattedDate + "\\"; // Windows 绝对路径,注意末尾的反斜杠 + String fileName = pcpResult.getPrescriptionNo() + ".pdf"; // 文件名由处方号拼接而成 + // 拼接完整的文件路径 + String filePath = folderPath + fileName; + // 调用方法读取文件内容并获取 Base64 字符值 + String base64Content = fileToBase64(filePath); + + ElepSignatureInput eleSinIn = new ElepSignatureInput(); + eleSinIn.setFixmedinsCode(fixmedinsCode).setOriginalValue(base64EncodedString).setOriginalRxFile(base64Content) + // 医保处方编号 + .setHiRxno(pcpResult.getHiRxno()).setPrescriptionNo(pcpResult.getPrescriptionNo()); + + return eleSinIn; + + } + + /** + * 做成电子处方上传入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @param esResult 电子处方医保电子签名响应出参 + * @param practitionerId 审方药师Id + * @param checkDate 审方时间 + * @param tenantId 租户Id + * @return 电子处方上传入参 + */ + public ElepUploadInput getEleUploadInput(ElepVeriPrescriptionOutput pcpResult, ElepSignatureOutput esResult, + Long practitionerId, Date checkDate, Integer tenantId) { + SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String targetDateStr = targetFormat.format(checkDate); + + // 审方药师信息 + Practitioner practitioner = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getUserId, practitionerId).eq(Practitioner::getTenantId, tenantId)); + // 审方药师所属科室信息 + Organization orgDor = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, practitioner.getOrgId()).eq(Organization::getTenantId, tenantId)); + + // 电子处方上传预核验-输入-输入-就诊信息 + List eleVerVisInfo = eleVerVisInfoService.list(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo()) + .orderByDesc(ElepVeriVisitInfo::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (practitioner == null || orgDor == null || eleVerVisInfo == null) { + return null; + } + + ElepUploadInput eleUploadInput = new ElepUploadInput(); + eleUploadInput.setRxTraceCode(pcpResult.getRxTraceCode()).setHiRxno(pcpResult.getHiRxno()) + .setMdtrtId(eleVerVisInfo.get(0).getMdtrtId()).setPatnName(eleVerVisInfo.get(0).getPatnName()) + // todo 默认身份类型是身份证:01 + .setPsnCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setCertno(eleVerVisInfo.get(0).getCertno()).setPatnName(eleVerVisInfo.get(0).getPatnName()) + .setFixmedinsCode(eleVerVisInfo.get(0).getFixmedinsCode()).setFixmedinsName(eleVerVisInfo.get(0).getFixmedinsName()) + .setDrCode(eleVerVisInfo.get(0).getDrCode()).setPrscDrName(eleVerVisInfo.get(0).getPrscDrName()) + .setPharDeptCode(orgDor.getYbNo()).setPharDeptName(orgDor.getName()).setPharCode(practitioner.getYbNo()) + .setPharName(practitioner.getName()).setPharChkTime(targetDateStr).setRxFile(esResult.getRxFile()) + .setSignDigest(esResult.getSignDigest()).setPharProfttlCodg(practitioner.getDrProfttlCode()).setPharProfttlName(YbPharmacistTitle.getByValue(practitioner.getDrProfttlCode()).getDescription()); + + return eleUploadInput; + + } + + /** + * 做成电子处方撤销入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @param euResult 电子处方上传响应出参 + * @param practitionerId 撤销药师Id + * @param description 撤销原因 + * @param revokeDate 撤销时间 + * @param tenantId 租户Id + * @return 电子处方撤销入参 + */ + public ElepRevokeInput getElepRevokeInput(ElepVeriPrescriptionOutput pcpResult, ElepUploadOutput euResult, + Long practitionerId, String description, Date revokeDate, Integer tenantId) { + + // 撤销时药师信息 + Practitioner practitioner = practitionerService.getOne(new LambdaQueryWrapper() + .eq(Practitioner::getUserId, practitionerId).eq(Practitioner::getTenantId, tenantId)); + // 撤销时药师所属科室信息 + Organization orgDor = organizationService.getOne(new LambdaQueryWrapper() + .eq(Organization::getId, practitioner.getOrgId()).eq(Organization::getTenantId, tenantId)); + + // 电子处方上传预核验-输入-输入-就诊信息 + List eleVerVisInfo = eleVerVisInfoService.list(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo()) + .orderByDesc(ElepVeriVisitInfo::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (practitioner == null || orgDor == null || eleVerVisInfo == null) { + return null; + } + + ElepRevokeInput eleRevokeInput = new ElepRevokeInput(); + eleRevokeInput.setHiRxno(pcpResult.getHiRxno()).setFixmedinsCode(eleVerVisInfo.get(0).getFixmedinsCode()) + .setDrCode(practitioner.getYbNo()).setUndoDrName(practitioner.getName()) + // todo 默认身份类型是身份证:01 + .setUndoDrCertno(practitioner.getPharPracCertNo()) + .setUndoDrCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setUndoRea(description).setUndoTime(revokeDate); + + return eleRevokeInput; + } + + /** + * 做成电子处方信息查询入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @return 电子处方信息查询入参 + */ + public ElepQuerPrescriptionInput getEleQueryPrescriptionInput(ElepVeriPrescriptionOutput pcpResult) { + + // 电子处方上传预核验-输入-输入-就诊信息 + List eleVerVisInfo = eleVerVisInfoService.list(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo()) + .orderByDesc(ElepVeriVisitInfo::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (eleVerVisInfo == null) { + return null; + } + + ElepQuerPrescriptionInput eleQueryPreObj = new ElepQuerPrescriptionInput(); + eleQueryPreObj.setFixmedinsCode(eleVerVisInfo.get(0).getFixmedinsCode()).setHiRxno(pcpResult.getHiRxno()) + .setMdtrtId(eleVerVisInfo.get(0).getMdtrtId()).setPsnName(eleVerVisInfo.get(0).getPatnName()) + // todo 默认身份类型是身份证:01 + .setPsnCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setCertno(eleVerVisInfo.get(0).getCertno()); + + return eleQueryPreObj; + } + + /** + * 做成电子处方信息查询入参 + * + * @param pcpResult 电子处方上传预核验的相响应参数 + * @return 电子处方信息查询入参 + */ + public ElepMedresultInput getEleMedResultInput(ElepVeriPrescriptionOutput pcpResult) { + + // 电子处方上传预核验-输入-输入-就诊信息 + List eleVerVisInfo = eleVerVisInfoService.list(new LambdaQueryWrapper() + .eq(ElepVeriVisitInfo::getPrescriptionNo, pcpResult.getPrescriptionNo()) + .orderByDesc(ElepVeriVisitInfo::getCreateTime).last(YbCommonConstants.sqlConst.LIMIT1)); + + if (eleVerVisInfo == null) { + return null; + } + + ElepMedresultInput eleQueryPreObj = new ElepMedresultInput(); + eleQueryPreObj.setHiRxno(pcpResult.getHiRxno()).setFixmedinsCode(eleVerVisInfo.get(0).getFixmedinsCode()) + .setMdtrtId(eleVerVisInfo.get(0).getMdtrtId()).setPsnName(eleVerVisInfo.get(0).getPatnName()) + // todo 默认身份类型是身份证:01 + .setPsnCertType(YbIdDocumentType.RESIDENT_ID_CARD.getValue()).setCertno(eleVerVisInfo.get(0).getCertno()); + + return eleQueryPreObj; + } + + /** + * 获取BigDecimal类型的年龄 + * + * @param birthDate 出生日期 + * @param beginTime 计算起始日期 + * @return 年龄 + */ + public static BigDecimal calculateAge(Date birthDate, Date beginTime) { + // 验证输入参数是否为空 + if (Objects.isNull(birthDate)) { + System.out.println("出生年月日不能为空!"); + return null; + } + // 验证输入参数是否为空 + if (Objects.isNull(beginTime)) { + beginTime = DateUtils.getNowDate(); + } + + // 将 Date 转换为 LocalDate + LocalDate localBirthDate = birthDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate localBeginTime = beginTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + // 计算出生日期到起始日期之间的年份差异 + Period period = Period.between(localBirthDate, localBeginTime); + + int years = period.getYears(); + + // 检查是否已经过了生日,如果没有过,则年份减一 + boolean hasBirthdayPassed = !localBirthDate.plusYears(years).isAfter(localBeginTime); + if (!hasBirthdayPassed) { + years--; + } + + return BigDecimal.valueOf(years); + } + + /** + * 读取文件内容并获取其 Base64 字符值 + * + * @param filePath 文件路径 + * @return 文件内容的 Base64 字符值 + */ + public static String fileToBase64(String filePath) { + File file = new File(filePath); + if (!file.exists()) { + System.out.println("文件不存在!"); + return null; + } + + FileInputStream fileInputStream = null; + try { + fileInputStream = new FileInputStream(file); + byte[] fileContent = new byte[(int) file.length()]; + fileInputStream.read(fileContent); + return Base64.getEncoder().encodeToString(fileContent); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (fileInputStream != null) { + try { + fileInputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return null; + } + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Financial3203VO.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Financial3203VO.java new file mode 100644 index 00000000..e4fa81d3 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Financial3203VO.java @@ -0,0 +1,40 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.vo; +import com.alibaba.fastjson2.annotation.JSONField; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 【3203】后台计算结果 DB映射实体 + * + * @author SunJQ + * @date 2025-04-29 + */ +@Data +public class Financial3203VO { + // 清算人次 + private Long psntime; + // 医保认可费用总额(数值型,16位含2位小数,必填) + private BigDecimal medSumfee; + // 现金支付金额(数值型,16位含2位小数,必填) + private BigDecimal cashPayamt; + // 个人账户支出(数值型,16位含2位小数,必填) + private BigDecimal acctPay; + /** 医疗费用总额 */ + private BigDecimal medFeeSumAmt; + /** 基金支付总额 */ + private BigDecimal fundPaySumAmt; + /** 个人账户支付总额 */ + private BigDecimal acctGjPay; + /** 现金支付总额 */ + private BigDecimal selfPayCash; + /** 微信支付总额 */ + private BigDecimal selfPayVx; + /** 阿里支付总额 */ + private BigDecimal selfPayAli; + /** 银行卡支付总额 */ + private BigDecimal selfPayUnion; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201DetailVO.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201DetailVO.java new file mode 100644 index 00000000..9eacbafa --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201DetailVO.java @@ -0,0 +1,23 @@ +package com.openhis.web.ybmanage.vo; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +public class Settlement3201DetailVO { + + /** 医疗费用总额 */ + private BigDecimal medFeeSumAmt; + /** 基金支付总额 */ + private BigDecimal fundPaySumAmt; + /** 个人账户支付总额 */ + private BigDecimal acctPay; + /** 个人账户支付总额 */ + private BigDecimal acctGjPay; + /** 定点医药机构结算笔数 */ + private Integer fixMedInsSetlCnt; + + private String contractNo; + + private Integer insutype; + +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201VO.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201VO.java new file mode 100644 index 00000000..7f867de1 --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3201VO.java @@ -0,0 +1,30 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.vo; + +import java.math.BigDecimal; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +/** + * 【3201】后台计算结果 DB映射实体 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Data +public class Settlement3201VO { + /** 医疗费用总额 */ + private BigDecimal medFeeSumAmt; + /** 基金支付总额 */ + private BigDecimal fundPaySumAmt; + /** 个人账户支付总额 */ + private BigDecimal acctPay; + /** 个人账户支付总额 */ + private BigDecimal acctGjPay; + /** 定点医药机构结算笔数 */ + private Integer fixMedInsSetlCnt; +} diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3202VO.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3202VO.java new file mode 100644 index 00000000..a075dcfc --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/ybmanage/vo/Settlement3202VO.java @@ -0,0 +1,47 @@ +/* + * Copyright ©2023 CJB-CNIT Team. All rights reserved + */ +package com.openhis.web.ybmanage.vo; + +import java.math.BigDecimal; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +/** + * 【3201】后台计算结果 DB映射实体 + * + * @author SunJQ + * @date 2025-04-15 + */ +@Data +public class Settlement3202VO { + /** 医疗费用总额 */ + + private BigDecimal medFeeSumAmt; + /** 基金支付总额 */ + + private BigDecimal fundPaySumAmt; + /** 个人账户支付总额 */ + + private BigDecimal acctPay; + /** 个人账户支付总额 */ + + private BigDecimal acctGjPay; + /** 现金支付总额 */ + + private BigDecimal selfPayCash; + /** 微信支付总额 */ + + private BigDecimal selfPayVx; + /** 阿里支付总额 */ + + private BigDecimal selfPayAli; + /** 银行卡支付总额 */ + + private BigDecimal selfPayUnion; + /** 定点医药机构结算笔数 */ + + private Integer fixMedInsSetlCnt; +}