From e3165b196db76a927a2f85c69accbf4b0a07b259 Mon Sep 17 00:00:00 2001 From: wangsq Date: Tue, 11 Aug 2026 09:44:49 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=94=B5=E5=AD=90=E5=81=A5=E5=BA=B7?= =?UTF-8?q?=E5=8D=A1=E9=85=8D=E7=BD=AE=E5=90=88=E5=B9=B6=E4=B8=BAxml?= =?UTF-8?q?=EF=BC=8C=E6=96=B0=E5=A2=9Exml=E8=AF=BB=E5=8F=96=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=92=8Cwebservice?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E8=B0=83=E6=95=B4=E4=B8=BAxml=202=E3=80=81HI?= =?UTF-8?q?S=E7=9A=84SOAP=E6=8A=BD=E7=A6=BB=E4=B8=BA=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E8=B0=83=E7=94=A8=EF=BC=8C=E5=9B=A0=E4=BD=8F?= =?UTF-8?q?=E9=99=A2=E7=BB=93=E7=AE=97=E5=8C=BB=E4=BF=9D=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E4=B8=BA=E6=B5=8B=E8=AF=95=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E7=BB=B4=E6=8A=A4=E9=9A=BE=E5=BA=A6?= =?UTF-8?q?=EF=BC=8C=E8=B0=83=E6=95=B4=E4=B8=BA=E7=94=A8=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E8=B0=83=E7=94=A8=E7=8E=AF=E5=A2=83=E3=80=82?= =?UTF-8?q?=203=E3=80=81SOAP=E8=B0=83=E7=94=A8=E5=BC=82=E5=B8=B8=E5=90=8E?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E6=B5=81=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E8=AF=BB=E5=8F=96=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E3=80=82=204=E3=80=81=E8=AF=B7=E6=B1=82HIS?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=97=B6=EF=BC=8C=E4=BD=BF=E7=94=A8=E4=BA=86?= =?UTF-8?q?=E9=9B=AA=E8=8A=B1id=E4=BD=9C=E4=B8=BA=E8=AF=B7=E6=B1=82id?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E8=83=BD=E4=BC=9A=E5=87=BA=E7=8E=B0=E6=97=B6?= =?UTF-8?q?=E9=92=9F=E5=9B=9E=E6=8B=A8=EF=BC=8C=E5=AF=BC=E8=87=B4=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E8=B0=83=E7=94=A8=E5=BC=82=E5=B8=B8=EF=BC=8C=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=B8=BAuuid=E3=80=82=205=E3=80=81=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E4=BA=AC=E9=A2=90=E6=94=AF=E4=BB=98=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E3=80=82=206=E3=80=81=E4=BD=8F=E9=99=A2=E7=BB=93?= =?UTF-8?q?=E7=AE=97=E5=8C=BB=E4=BF=9D=E6=94=AF=E4=BB=98=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=8C=E5=A4=84=E7=90=86=E5=8C=BB=E4=BF=9D?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E4=BC=A0=E9=80=92=E7=9A=84=E5=85=AC=E5=85=B1?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=BF=9B=E8=A1=8C=E5=90=88=E5=B9=B6=E3=80=82?= =?UTF-8?q?=207=E3=80=81=E6=96=B0=E5=A2=9E=E5=A4=84=E6=96=B9=E5=BC=80?= =?UTF-8?q?=E5=8D=95=E5=AD=97=E5=85=B8=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=208=E3=80=81=E6=9F=A5=E8=AF=A2=E4=BD=8F=E9=99=A2=E8=B4=B9?= =?UTF-8?q?=E7=94=A8=E6=B8=85=E5=8D=95=EF=BC=88=E4=BD=8F=E9=99=A2=E4=B8=AD?= =?UTF-8?q?=EF=BC=89=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E7=9A=84=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E4=B8=BA=E5=B0=8F=E6=95=B0=E5=AF=BC=E8=87=B4=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=A7=A3=E6=9E=90=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=BF=AE=E5=A4=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ynxbd/common/TestA.java | 11 + .../com/ynxbd/common/action/InHospAction.java | 46 +- .../com/ynxbd/common/action/RecipeAction.java | 6 +- .../common/action/pay/MedicalAction.java | 88 +- .../com/ynxbd/common/action/pay/PEnum.java | 3 +- .../ynxbd/common/action/pay/PayAction.java | 48 +- .../ynxbd/common/action/test/TestAction.java | 7 +- .../com/ynxbd/common/action/xk/XKAction.java | 33 + src/main/java/com/ynxbd/common/bean/Dept.java | 1 + .../common/bean/in_hosp/InHospFeeItem.java | 2 +- .../common/bean/in_hosp/InHospitalList.java | 1 + .../java/com/ynxbd/common/bean/pay/Order.java | 16 + .../com/ynxbd/common/bean/pay/Register.java | 2 + .../ynxbd/common/config/HealthCardConfig.java | 49 +- .../com/ynxbd/common/dao/InHospPayDao.java | 13 + .../java/com/ynxbd/common/dao/RecipeDao.java | 4 +- .../ynxbd/common/dao/his/HisAccountDao.java | 12 +- .../ynxbd/common/dao/his/HisAuthAgentDao.java | 13 +- .../ynxbd/common/dao/his/HisInHospDao.java | 29 +- .../com/ynxbd/common/dao/his/HisMedDao.java | 40 +- .../ynxbd/common/dao/his/HisMedTestDao.java | 12 +- .../common/dao/his/HisMedicalRecordDao.java | 6 +- .../ynxbd/common/dao/his/HisPatientDao.java | 16 +- .../ynxbd/common/dao/his/HisRecipeDao.java | 32 +- .../ynxbd/common/dao/his/HisRegisterDao.java | 102 +- .../ynxbd/common/dao/his/HisReportDao.java | 14 +- .../ynxbd/common/dao/his/HisSelfHelpDao.java | 12 +- .../com/ynxbd/common/dao/his/HisTreatDao.java | 20 +- .../com/ynxbd/common/dao/his/HisXKDao.java | 7 +- .../common/dao/his/dev/DevHisRecipeDao.java | 10 +- .../ynxbd/common/helper/HealthCardHelper.java | 16 +- .../com/ynxbd/common/helper/TestHelper.java | 12 +- .../common/helper/common/JsonHelper.java | 7 + .../common/QuickDrugDispenseHelper.java | 4 +- .../common/helper/common/SnowHelper.java | 4 + .../common/helper/common/SoapHelper.java | 57 +- .../common/helper/common/XmlConfigHelper.java | 15 +- .../ynxbd/common/helper/his/HisDevHelper.java | 50 - .../ynxbd/common/helper/his/HisHelper.java | 414 -------- .../ynxbd/common/helper/his/HisMedHelper.java | 84 -- .../ynxbd/common/helper/lis/RMLisHelper.java | 3 +- .../common/{helper => }/his/AliOldHelper.java | 62 +- .../java/com/ynxbd/common/his/HisClient.java | 252 +++++ .../java/com/ynxbd/common/his/HisConfig.java | 74 ++ .../common/{helper => }/his/HisEnum.java | 284 +++--- .../java/com/ynxbd/common/his/HisFactory.java | 92 ++ .../ynxbd/common/his/old/HisDevHelper.java | 50 + .../com/ynxbd/common/his/old/HisHelper.java | 341 +++++++ .../ynxbd/common/his/old/HisMedHelper.java | 84 ++ .../{helper/his => his/old}/HisResult.java | 918 +++++++++--------- .../ynxbd/common/service/InHospService.java | 22 +- .../ynxbd/common/service/MedicalService.java | 319 +++--- .../common/service/MiddleOfficeService.java | 3 +- .../ynxbd/common/service/RecipeService.java | 11 +- .../com/ynxbd/common/service/RegService.java | 10 +- .../common/service/ThirdPartyPayService.java | 4 +- .../java/com/ynxbd/jy/helper/JYPayConfig.java | 2 +- .../java/com/ynxbd/jy/helper/JYPayHelper.java | 15 +- .../ynxbd/wx/wxfactory/base/auth/Client.java | 2 - src/main/resources/hc-config.xml | 22 + src/main/resources/hcode.properties | 1 + src/main/resources/jy-config.xml | 9 +- src/main/resources/webservice.properties | 2 +- src/main/resources/webservice.xml | 1 + 64 files changed, 2311 insertions(+), 1590 deletions(-) create mode 100644 src/main/java/com/ynxbd/common/action/xk/XKAction.java delete mode 100644 src/main/java/com/ynxbd/common/helper/his/HisDevHelper.java delete mode 100644 src/main/java/com/ynxbd/common/helper/his/HisHelper.java delete mode 100644 src/main/java/com/ynxbd/common/helper/his/HisMedHelper.java rename src/main/java/com/ynxbd/common/{helper => }/his/AliOldHelper.java (95%) create mode 100644 src/main/java/com/ynxbd/common/his/HisClient.java create mode 100644 src/main/java/com/ynxbd/common/his/HisConfig.java rename src/main/java/com/ynxbd/common/{helper => }/his/HisEnum.java (97%) create mode 100644 src/main/java/com/ynxbd/common/his/HisFactory.java create mode 100644 src/main/java/com/ynxbd/common/his/old/HisDevHelper.java create mode 100644 src/main/java/com/ynxbd/common/his/old/HisHelper.java create mode 100644 src/main/java/com/ynxbd/common/his/old/HisMedHelper.java rename src/main/java/com/ynxbd/common/{helper/his => his/old}/HisResult.java (97%) create mode 100644 src/main/resources/webservice.xml diff --git a/src/main/java/com/ynxbd/common/TestA.java b/src/main/java/com/ynxbd/common/TestA.java index 03990c7..0d0ea01 100644 --- a/src/main/java/com/ynxbd/common/TestA.java +++ b/src/main/java/com/ynxbd/common/TestA.java @@ -2,6 +2,12 @@ package com.ynxbd.common; import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm; import cn.hutool.crypto.asymmetric.RSA; +import com.ynxbd.common.bean.pay.Order; +import com.ynxbd.common.bean.pay.Recipe; +import com.ynxbd.common.helper.common.JsonHelper; +import com.ynxbd.wx.wxfactory.AesWxHelper; + +import java.math.BigDecimal; public class TestA { private static final String PUB_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5klqI5STWTcbfjR093j+hvCEjNlZMQscIJg8jxZGqKW84AdFmSqPWEPu9ilqP+QUASiVSZ1QevGr2DWODFZ8Zw35aDA2bqCEprUx81gDdVPO7H7Bij+r8zAg8fT2c0Bi5rFq0xWMEQiTI+CyWwc5prOpquJU/P5yauEAdkRzlDwIDAQAB"; @@ -14,6 +20,11 @@ public class TestA { // "你的私钥base64", // "你的公钥base64"); +// System.out.println(AesWxHelper.encode("192970")); + + String totalFee = "0.01"; + String cents = new BigDecimal(totalFee).movePointRight(2).toString(); + System.out.println(cents); } // diff --git a/src/main/java/com/ynxbd/common/action/InHospAction.java b/src/main/java/com/ynxbd/common/action/InHospAction.java index 50a9826..27c121b 100644 --- a/src/main/java/com/ynxbd/common/action/InHospAction.java +++ b/src/main/java/com/ynxbd/common/action/InHospAction.java @@ -1,6 +1,9 @@ package com.ynxbd.common.action; +import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.action.base.BaseAction; +import com.ynxbd.common.action.pay.PEnum; +import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.in_hosp.*; import com.ynxbd.common.config.interceptor.AesDecode; import com.ynxbd.common.dao.his.HisInHospDao; @@ -9,6 +12,7 @@ import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.service.InHospService; +import com.ynxbd.common.service.PayService; import com.ynxbd.wx.wxfactory.AesWxHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -185,7 +189,7 @@ public class InHospAction extends BaseAction { */ @Action("getOutHospRecords") public Result getOutHospRecords(@AesDecode String patientId, String begDate, String endDate) { - try{ + try { log.info("[住院]通过患者ID查询住院记录(出院后) patientId={}, begDate={}, endDate={}", patientId, begDate, endDate); if (patientId == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); @@ -212,8 +216,17 @@ public class InHospAction extends BaseAction { } records = records.stream().sorted(Comparator.comparing(InHospitalList::getInHospitalDate, Comparator.reverseOrder())).collect(Collectors.toList()); + + for (InHospitalList item : records) { + String treatNum = item.getZyNum(); + if (ObjectUtils.isEmpty(treatNum)) { + continue; + } + item.setTreatNum(treatNum); + item.setEnTreatNum(AesWxHelper.encode(treatNum)); + } return Result.success(records); - }catch (Exception e){ + } catch (Exception e) { return Result.error(e); } @@ -237,16 +250,16 @@ public class InHospAction extends BaseAction { return Result.error(resp.getMessage()); } - InHospFee inHospFee = new InHospFee(); List items = resp.getDataMapList(InHospFeeItem.class, "Item"); items.forEach(item -> { BigDecimal price = item.getPrice(); - Integer count = item.getCount(); + Double count = item.getCount(); if (price != null && count != null) { item.setMoney(price.multiply(new BigDecimal(count))); } }); + InHospFee inHospFee = new InHospFee(); inHospFee.setItems(items); inHospFee.setPatientName(resp.getDataMapString("PatientName")); inHospFee.setAdmissionDate(resp.getDataMapString("AdmissionDate")); @@ -278,4 +291,29 @@ public class InHospAction extends BaseAction { List dataList = resp.getDataMapList(InHospAllFee.class, "Items", "Item"); return Result.success(dataList); } + + /** + * [住院结算] + * + * @param treatNum 住院号 + * @return 费用明细 + */ + @Action("outHospPay") + public Result outHospPay(String payCode, @AesDecode String treatNum) { + log.info("[住院结算]treatNum={}", treatNum); + if (treatNum == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + + MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode); + if (merchantEnum == null) { // 支付方式异常 + return Result.error(ResultEnum.PAY_TYPE_ERROR); + } + + JSONObject respMedJson = PayService.getMedAuthUrl(merchantEnum, PEnum.OUT_HOSP, isHttpsWithProxy()); + if (respMedJson != null) { + return Result.success(respMedJson); + } + return Result.error(); + } } diff --git a/src/main/java/com/ynxbd/common/action/RecipeAction.java b/src/main/java/com/ynxbd/common/action/RecipeAction.java index ca7ae93..52d42a4 100644 --- a/src/main/java/com/ynxbd/common/action/RecipeAction.java +++ b/src/main/java/com/ynxbd/common/action/RecipeAction.java @@ -12,8 +12,8 @@ import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.dao.his.HisRecipeDao; import com.ynxbd.common.dao.peis.PEISDao; import com.ynxbd.common.helper.common.DateHelper; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; @@ -224,7 +224,7 @@ public class RecipeAction extends BaseAction { params.put("BankTransNo", bankTransNo); // 商户订单号 params.put("OpenId", peisReserve.getOpenid()); params.put("Token", WeChatConfig.TOKEN); - JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice, params); + JsonResult result = HisFactory.His().getJsonResult(HisEnum.AP_Pay_Invoice, params); return result.success() ? Result.success(result) : Result.error(result.getMessage()); } diff --git a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java index 0a7fa13..1df222c 100644 --- a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java @@ -1,29 +1,28 @@ package com.ynxbd.common.action.pay; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.ynxbd.ali.helper.AliMedHelper; import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Order; +import com.ynxbd.common.bean.pay.PayInHosp; import com.ynxbd.common.bean.pay.Recipe; import com.ynxbd.common.bean.pay.Register; import com.ynxbd.common.config.interceptor.AesDecode; import com.ynxbd.common.dao.RecipeDao; import com.ynxbd.common.dao.his.HisMedDao; -import com.ynxbd.common.helper.common.AesMicroHelper; -import com.ynxbd.common.helper.common.DateHelper; -import com.ynxbd.common.helper.common.HttpHelper; -import com.ynxbd.common.helper.common.ParamHelper; +import com.ynxbd.common.helper.common.*; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; import com.ynxbd.common.service.MedicalService; +import com.ynxbd.common.service.PayService; import com.ynxbd.common.service.params.RequestParams; import com.ynxbd.wx.wxfactory.*; import com.ynxbd.wx.wxfactory.medical.WxMedConfig; import com.ynxbd.wx.wxfactory.medical.models.*; -import com.ynxbd.wx.wxfactory.medical.models.MedRespHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.struts2.convention.annotation.Action; @@ -88,12 +87,12 @@ public class MedicalAction extends BaseAction { medicalInfo = new MedicalService().hisRxUploadDetails(merchantEnum, qrCode, openid, treatNum, patientId, hisPatientId, cardNo, realName, totalFee, ybAttrib, ybBZCode, ybBZName, recipeJson); break; - case IN_HOSP: + case OUT_HOSP: log.info("[医保-住院结算]上传明细下单 treatNum={}", treatNum); if (treatNum == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - medicalInfo = new MedicalService().hisInHospUploadDetails(merchantEnum, qrCode, openid, treatNum, patientId, hisPatientId, cardNo, realName); + medicalInfo = new MedicalService().hisOutHospUploadDetails(merchantEnum, qrCode, openid, treatNum, patientId, hisPatientId, cardNo, realName); break; default: @@ -192,19 +191,61 @@ public class MedicalAction extends BaseAction { public Result order(String callNo, String payCode, String payOpenId, @AesDecode String openid, @AesDecode String patientId, @AesDecode String cardNo, @AesDecode String hisPatientId, String realName, String treatNum, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) { try { - log.info("[医保]下单入参 callNo={}, payCode={}, openid={}, patientId={}, totalFee={}, hisPatientId={}, cardNo={}", callNo, payCode, openid, patientId, totalFee, hisPatientId, ParamHelper.hideIdCardNo(cardNo)); - if (callNo == null || payCode == null || openid == null || patientId == null || cardNo == null || totalFee == null) { + log.info("[医保]下单入参 callNo={}, payCode={}, openid={}, patientId={}, totalFee={}, hisPatientId={}, cardNo={}, treatNum={}, payOrdId={}", + callNo, payCode, openid, patientId, totalFee, hisPatientId, ParamHelper.hideIdCardNo(cardNo), treatNum, payOrdId); + if (StrUtil.hasBlank(callNo, payCode, openid, patientId, cardNo) || totalFee == null) { + System.out.println("[医保]下单参数缺失"); return Result.error(ResultEnum.PARAM_IS_DEFECT); } - String ip = HttpHelper.getIpAddress(request); - switch (PEnum.toEnum(callNo)) { - case REG: - Register reg = new Register().getRegParams(new RequestParams(request), true); - return new MedicalService().createRegOrder(payCode, payOpenId, openid, patientId, cardNo, realName, hisPatientId, ip, - payOrdId, payAuthNo, mdTrtId, chrgBchno, mdUserId, - totalFee, acctFee, hifpFee, insuranceFee, cashFee, callNo, reg, - familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId); + Result result = PayService.isPaymentPermittedByTime(); + if (result != null) { + System.out.println("[医保]凌晨禁止支付"); + return result; + } + MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode); + if (merchantEnum == null) { // 支付方式异常 + log.error("[医保]支付方式异常 payCode={}", payCode); + return Result.error(ResultEnum.PAY_TYPE_ERROR); + } + Order order = new Order(); + order.setOutTradeNo(merchantEnum.createOutTradeNo()); + order.setIp(HttpHelper.getIpAddress(request)); + + order.setTradeNo(payOrdId); + order.setPayOrdId(payOrdId); + order.setPayAuthNo(payAuthNo); + order.setPayMoney(cashFee); + order.setAcctFee(acctFee); + order.setHifpFee(hifpFee); + order.setTotalFee(totalFee); + order.setInsuranceFee(insuranceFee); + + order.setChrgBchno(chrgBchno); + order.setMdTrtId(mdTrtId); + order.setMdUserId(mdUserId); + order.setPayDeviceId("mobile"); + order.setPayMchCode(merchantEnum.CODE); + order.setTreatNum(treatNum); + order.setOpenid(openid); + order.setPayOpenId(payOpenId); + order.setPatientId(patientId); + order.setHisPatientId(hisPatientId); + order.setIdCardNo(cardNo); + order.setPatientName(realName); + + order.setFamilyType(familyType); + order.setFamilyName(familyName); + order.setFamilyCardNo(familyCardNo); + order.setMedicalCardInstId(medicalCardInstId); + order.setMedicalCardId(medicalCardId); + + PEnum serverEnum = PEnum.toEnum(callNo); + switch (serverEnum) { + case REG: + Register regOrder = JsonHelper.copy(order, Register.class); + regOrder = regOrder.getRegParams(new RequestParams(request), true); + return new MedicalService().createRegOrder(merchantEnum, regOrder, serverEnum); case RECIPE: String recipeJson = getReqParamByKey("recipeJson"); @@ -212,15 +253,18 @@ public class MedicalAction extends BaseAction { return Result.error(ResultEnum.PARAM_IS_BLANK); } String payWay = getReqParamByKey("payWay"); - return new MedicalService().createRxOrder(payCode, payOpenId, openid, patientId, cardNo, realName, ip, - payOrdId, payAuthNo, mdTrtId, chrgBchno, mdUserId, - totalFee, acctFee, hifpFee, insuranceFee, cashFee, - callNo, recipeJson, treatNum, payWay, familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId); + + Recipe rxOrder = JsonHelper.copy(order, Recipe.class); + return new MedicalService().createRxOrder(merchantEnum, rxOrder, serverEnum, recipeJson, payWay); + + case OUT_HOSP: + PayInHosp outHospOrder = JsonHelper.copy(order, PayInHosp.class); + return new MedicalService().createOutHospOrder(merchantEnum, outHospOrder, serverEnum); default: return Result.error("调用方式不存在"); } - } catch (ServiceException e) { + } catch (Exception e) { return Result.error(e); } } diff --git a/src/main/java/com/ynxbd/common/action/pay/PEnum.java b/src/main/java/com/ynxbd/common/action/pay/PEnum.java index af76b86..8f0e7f1 100644 --- a/src/main/java/com/ynxbd/common/action/pay/PEnum.java +++ b/src/main/java/com/ynxbd/common/action/pay/PEnum.java @@ -12,7 +12,8 @@ public enum PEnum { // ------------------------------------ REG("挂号", "register", "G"), RECIPE("处方", "recipe", "C"), - IN_HOSP("住院缴费", "in_hosp", "Z"), + IN_HOSP("住院预交金", "in_hosp", "Z"), + OUT_HOSP("住院结算", "out_hosp", "Z"), OL_REG("问诊挂号", "ol_register", "OG"), diff --git a/src/main/java/com/ynxbd/common/action/pay/PayAction.java b/src/main/java/com/ynxbd/common/action/pay/PayAction.java index dca362e..da05000 100644 --- a/src/main/java/com/ynxbd/common/action/pay/PayAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/PayAction.java @@ -12,15 +12,20 @@ import com.ynxbd.common.dao.SelfHelpDao; import com.ynxbd.common.dao.his.HisRecipeDao; import com.ynxbd.common.dao.sys.SysUserDao; import com.ynxbd.common.helper.common.*; -import com.ynxbd.common.helper.his.HisHelper; import com.ynxbd.common.helper.rsa.RSAHelper; import com.ynxbd.common.helper.xbd.XbdConfigHelper; +import com.ynxbd.common.his.HisConfig; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; import com.ynxbd.common.service.*; import com.ynxbd.common.service.params.RequestParams; +import com.ynxbd.jy.bean.JYOrder; +import com.ynxbd.jy.bean.enums.JYBusinessTypeEnum; +import com.ynxbd.jy.bean.enums.JYOrderTypeEnum; +import com.ynxbd.jy.helper.JYPayHelper; import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.wx.wxfactory.AesWxHelper; import com.ynxbd.wx.wxfactory.WxPayHelper; @@ -112,7 +117,7 @@ public class PayAction extends BaseAction { } if (isPrepay) { // 目前仅蒙自和红河州医院使用(开通需联系HIS开发者,否则会产生风险) - if (!HisHelper.IS_RECIPE_PREPAY || !WeChatConfig.IS_RECIPE_PREPAY) { // 配置(两个开关) + if (!HisConfig.IS_RX_PREPAY || !WeChatConfig.IS_RECIPE_PREPAY) { // 配置(两个开关) return Result.error(ResultEnum.PAY_RECIPE_PREPAY_IS_NOT); } @@ -819,7 +824,7 @@ public class PayAction extends BaseAction { } BigDecimal totalFeeDecimal = new BigDecimal(totalFee); - String outRefundNo = HisHelper.getHisTradeNo(bankTransNo, PEnum.OL_REG); + String outRefundNo = HisFactory.getHisTradeNo(bankTransNo, PEnum.OL_REG); Order orderRefund = PayService.refund(merchantEnum, outTradeNo, outRefundNo, totalFeeDecimal, totalFeeDecimal, refundDesc, new Date(), openid, patientId, null); if (orderRefund.isSuccess()) { return Result.success(AesMicroHelper.encode(outRefundNo)); @@ -1030,4 +1035,41 @@ public class PayAction extends BaseAction { // } // return isResult ? Result.success() : Result.error(); // } + + + /** + * [京颐支付]测试 + */ + @Action("jyPay") + public Result jyPay(String payOpenId, String openid, String patientId, BigDecimal totalFee) { + String outTradeNo = MerchantEnum.JY.createOutTradeNo(); + log.info("[京颐支付]测试 outTradeNo={}, totalFee={}", outTradeNo, totalFee); + if (totalFee == null || ObjectUtils.isEmpty(openid) || ObjectUtils.isEmpty(patientId)) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + + String ip = HttpHelper.getIpAddress(request); + String title = "支付测试"; + + ReqOrder req = new ReqOrder(); + req.setPatientName("小王"); + req.setPatientGender("男"); + req.setPatientAge("18"); + req.setPatientTel("15559603353"); + req.setTreatNum("T001"); + req.setPatientIdCardNo("532331199910053810"); + req.setPatientId("1000001"); + + JYOrder jyOrder = new JYOrder(); + jyOrder.orderTypeEnum = JYOrderTypeEnum._001; // 挂号费 + jyOrder.businessTypeEnum = JYBusinessTypeEnum.B102; + + req.setJyOrder(jyOrder); + JSONObject order = JYPayHelper.createOrder(MerchantEnum.JY, title, outTradeNo, totalFee.toString(), PEnum.REG.CODE, ip, payOpenId, openid, req); +// if (respJson == null) { +// return Result.error(ResultEnum.PAY_ERROR); // 支付异常 +// } +// respJson.put("outTradeNo", outTradeNo); + return Result.success(order); + } } diff --git a/src/main/java/com/ynxbd/common/action/test/TestAction.java b/src/main/java/com/ynxbd/common/action/test/TestAction.java index 00f380a..f968b34 100644 --- a/src/main/java/com/ynxbd/common/action/test/TestAction.java +++ b/src/main/java/com/ynxbd/common/action/test/TestAction.java @@ -1,12 +1,11 @@ package com.ynxbd.common.action.test; import com.ynxbd.common.action.base.BaseAction; -import com.ynxbd.common.bean.form.FormBlob; -import com.ynxbd.common.bean.form.FormData; import com.ynxbd.common.bean.sms.SmsTempEnum; -import com.ynxbd.common.helper.common.Base64Helper; +import com.ynxbd.common.config.HealthCardConfig; import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.SmsHelper; +import com.ynxbd.common.his.HisConfig; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; @@ -20,7 +19,6 @@ import org.apache.struts2.convention.annotation.Namespace; import java.math.BigDecimal; import java.util.Date; -import java.util.Map; /** * @Author wsq @@ -125,6 +123,7 @@ public class TestAction extends BaseAction { @Action("r_test") public Result r_test() throws ServiceException { + System.out.println(HealthCardConfig.isEnable()); return Result.success(); } diff --git a/src/main/java/com/ynxbd/common/action/xk/XKAction.java b/src/main/java/com/ynxbd/common/action/xk/XKAction.java new file mode 100644 index 0000000..25ef2dc --- /dev/null +++ b/src/main/java/com/ynxbd/common/action/xk/XKAction.java @@ -0,0 +1,33 @@ +package com.ynxbd.common.action.xk; + +import com.ynxbd.common.action.base.BaseAction; +import com.ynxbd.common.dao.his.HisXKDao; +import com.ynxbd.common.result.Result; +import com.ynxbd.common.result.ResultEnum; +import lombok.extern.slf4j.Slf4j; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; + +import java.util.List; + + +@Slf4j +@Namespace("/xk") +public class XKAction extends BaseAction { + + + @Action("queryDict") + public Result queryDict(String callNo, String type) { + if (!"xbd2026".equals(callNo)) { + return Result.error(ResultEnum.PARAM_IS_INVALID); + } + log.info("[开方]字典查询 type={}", type); + if (type == null) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + + List dataList = new HisXKDao().queryHisRxDict(type); + return Result.success(dataList); + } + +} diff --git a/src/main/java/com/ynxbd/common/bean/Dept.java b/src/main/java/com/ynxbd/common/bean/Dept.java index 99dae5e..bba9040 100644 --- a/src/main/java/com/ynxbd/common/bean/Dept.java +++ b/src/main/java/com/ynxbd/common/bean/Dept.java @@ -69,6 +69,7 @@ public class Dept implements Serializable { private String hospitalAreaName; // 亚专科列表 private String code_yzkStr; + // private String note; // 亚专科 private List children; diff --git a/src/main/java/com/ynxbd/common/bean/in_hosp/InHospFeeItem.java b/src/main/java/com/ynxbd/common/bean/in_hosp/InHospFeeItem.java index 4a1b1be..9e510f0 100644 --- a/src/main/java/com/ynxbd/common/bean/in_hosp/InHospFeeItem.java +++ b/src/main/java/com/ynxbd/common/bean/in_hosp/InHospFeeItem.java @@ -27,7 +27,7 @@ public class InHospFeeItem { private String itemType; private String unit; // 数量 - private Integer count; + private Double count; // 单价 private BigDecimal price; // 计算结果 diff --git a/src/main/java/com/ynxbd/common/bean/in_hosp/InHospitalList.java b/src/main/java/com/ynxbd/common/bean/in_hosp/InHospitalList.java index 279b248..8ba096f 100644 --- a/src/main/java/com/ynxbd/common/bean/in_hosp/InHospitalList.java +++ b/src/main/java/com/ynxbd/common/bean/in_hosp/InHospitalList.java @@ -18,6 +18,7 @@ import lombok.ToString; @NoArgsConstructor public class InHospitalList { private String zyNum; + private String treatNum; private String enTreatNum; private String patientName; diff --git a/src/main/java/com/ynxbd/common/bean/pay/Order.java b/src/main/java/com/ynxbd/common/bean/pay/Order.java index 6d0a341..2221683 100644 --- a/src/main/java/com/ynxbd/common/bean/pay/Order.java +++ b/src/main/java/com/ynxbd/common/bean/pay/Order.java @@ -6,6 +6,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import java.io.Serializable; @@ -19,6 +20,8 @@ import java.util.Date; * @Date 2020/11/12 10:24 * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. */ + +@Slf4j @Setter @Getter @ToString @@ -129,8 +132,12 @@ public class Order implements Serializable { // 医保---------------------------------- // 医保订单号 private String payOrdId; + // 医保授权码 + private String payAuthNo; // 医保-个人账户支付金额 private BigDecimal acctFee; + // 医保-医保金额【个账+统筹】 + private BigDecimal insuranceFee; // 医保-统筹支付金额 private BigDecimal hifpFee; // 医保-收费单据号(去掉M作为退费的单号) @@ -144,9 +151,16 @@ public class Order implements Serializable { // 查询报告的日期范围 private String queryBegDate; private String queryEndDate; + // 亲情医保=================== + private String familyType; + private String familyName; + private String familyCardNo; + private String medicalCardInstId; + private String medicalCardId; // 缴费订单类型 private String orderType; + private String payDeviceId; // 第三方回调状态(-1:未调用,0:调用成功,500:调用超时,其他:调用失败) private Integer noticeStatus; @@ -157,6 +171,8 @@ public class Order implements Serializable { // 第三方交易流水号 private String noticeTransNo; + private String ip; + // 订单额外信息 private Object orderObj; diff --git a/src/main/java/com/ynxbd/common/bean/pay/Register.java b/src/main/java/com/ynxbd/common/bean/pay/Register.java index 947f00e..613ae91 100644 --- a/src/main/java/com/ynxbd/common/bean/pay/Register.java +++ b/src/main/java/com/ynxbd/common/bean/pay/Register.java @@ -266,4 +266,6 @@ public class Register extends Order { } + + } diff --git a/src/main/java/com/ynxbd/common/config/HealthCardConfig.java b/src/main/java/com/ynxbd/common/config/HealthCardConfig.java index e20cb32..e81ac70 100644 --- a/src/main/java/com/ynxbd/common/config/HealthCardConfig.java +++ b/src/main/java/com/ynxbd/common/config/HealthCardConfig.java @@ -3,10 +3,10 @@ package com.ynxbd.common.config; import com.alibaba.fastjson.JSONObject; import com.tencent.healthcard.impl.HealthCardServerImpl; import com.tencent.healthcard.model.CommonIn; -import com.ynxbd.common.helper.ProperHelper; import com.ynxbd.common.helper.common.CodeHelper; import com.ynxbd.common.helper.common.ErrorHelper; import com.ynxbd.common.helper.common.JsonHelper; +import com.ynxbd.common.helper.common.XmlConfigHelper; import com.ynxbd.wx.config.WeChatConfig; import lombok.Getter; import lombok.NoArgsConstructor; @@ -31,15 +31,16 @@ public class HealthCardConfig { } } - private static final boolean IS_ENABLE; // 是否启用电子健康卡(true:启用, false:禁用) + public static final boolean IS_ENABLE; // 是否启用电子健康卡(true:启用, false:禁用) public static final boolean IS_UPLOAD_DATA; // 是否允许上传数据(true:启用, false:禁用) public static final boolean IS_LOG_REPORT; // 是否打印上报日志(true:启用, false:禁用) + public static final boolean IS_FACE_URL; // 是否传递人脸识别链接(true:传递, false:不传递) // 健康码 public static final String H_APP_ID; public static final String H_APP_SECRET; - public static final String H_HOSPITAL_ID; // 医院ID(每家医院不一样) - public static final String H_MINI_HOSPITAL_ID; // 小程序-医院ID(每家医院不一样) + public static final String H_HOSP_ID; // 医院ID(每家医院不一样) + public static final String H_MINI_HOSP_ID; // 小程序-医院ID(每家医院不一样) public static final String H_MINI_APP_ID; // 小程序-appid public static final String H_AUTH_APP_ID; // 仅用于授权的公众号appid(医共体为主体公众号的appid) // 万达 @@ -58,25 +59,29 @@ public class HealthCardConfig { public static final int DOMAIN_CHANNEL = 0; static { - ProperHelper config = new ProperHelper().read("hcode.properties"); + XmlConfigHelper config = new XmlConfigHelper().read("hc-config.xml", "health_card"); IS_ENABLE = config.getBoolean("is_enable", false); - IS_UPLOAD_DATA = config.getBoolean("h.is_upload_data", true); - IS_LOG_REPORT = config.getBoolean("h.is_log_report", false); + config.setIsEnable(IS_ENABLE); + + IS_UPLOAD_DATA = config.getBoolean("is_upload_data", true); + IS_LOG_REPORT = config.getBoolean("is_log_report", false); + IS_FACE_URL = config.getBoolean("is_face_url", true); // 不用对config设置开关,不开启时也需要用到参数 - H_APP_ID = config.getString("h.app_id"); - H_APP_SECRET = config.getString("h.app_secret"); - CARD_APP_ID = config.getString("h.card_app_id"); - CARD_PUBLIC_KEY = config.getString("h.card_public_key"); - CARD_PRIVATE_KEY = config.getString("h.card_private_key"); - CARD_URL = config.getString("h.card_url"); - - H_HOSPITAL_ID = config.getString("h.hospital_id"); - if (ObjectUtils.isEmpty(H_HOSPITAL_ID)) { + H_APP_ID = config.getString("h_app_id"); + H_APP_SECRET = config.getString("h_app_secret"); + // 万达卡管平台调用参数 + CARD_APP_ID = config.getString("card_app_id"); + CARD_PUBLIC_KEY = config.getString("card_public_key"); + CARD_PRIVATE_KEY = config.getString("card_private_key"); + CARD_URL = config.getString("card_url"); + + H_HOSP_ID = config.getString("h_hosp_id"); + if (ObjectUtils.isEmpty(H_HOSP_ID)) { log.info("[电子健康卡]医院id缺失"); } - H_MINI_APP_ID = config.getString("h.mini_app_id"); - H_AUTH_APP_ID = config.getString("h.auth_app_id"); - H_MINI_HOSPITAL_ID = config.getString("h.mini_hospital_id"); + H_MINI_HOSP_ID = config.getString("h_mini_hosp_id"); + H_MINI_APP_ID = config.getString("h_mini_app_id"); + H_AUTH_APP_ID = config.getString("h_auth_app_id"); initCache(); } @@ -85,7 +90,7 @@ public class HealthCardConfig { // 判断是否开启电子健康卡 public static boolean isEnable() { if (!IS_ENABLE) { - log.info("[配置][hcode.properties]未开启电子健康卡IS_ENABLE"); + log.info("[配置][hc-config.xml]未开启电子健康卡IS_ENABLE"); } return IS_ENABLE; } @@ -109,14 +114,14 @@ public class HealthCardConfig { public static CommonIn createCommonIn(Boolean isMiniApp, String appToken, String openid) { if (appToken == null) { // 此处不判断空字符串 - log.info("[电子健康卡]appToken为空"); + log.error("[电子健康卡]appToken为空"); return null; } if (isMiniApp == null) { isMiniApp = false; } int channelNum = (isMiniApp ? 1 : 0); // 填入代码,0为微信服务号渠道,1为微信小程序渠道,3为刷脸终端,4为扫码终端 - String hospId = (isMiniApp ? H_MINI_HOSPITAL_ID : H_HOSPITAL_ID); + String hospId = (isMiniApp ? H_MINI_HOSP_ID : H_HOSP_ID); String requestId = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase(); String appId; if (isMiniApp) { diff --git a/src/main/java/com/ynxbd/common/dao/InHospPayDao.java b/src/main/java/com/ynxbd/common/dao/InHospPayDao.java index a612f36..23558c3 100644 --- a/src/main/java/com/ynxbd/common/dao/InHospPayDao.java +++ b/src/main/java/com/ynxbd/common/dao/InHospPayDao.java @@ -1,5 +1,6 @@ package com.ynxbd.common.dao; +import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.bean.pay.PayInHosp; import com.ynxbd.common.config.db.DataBase; import lombok.extern.slf4j.Slf4j; @@ -240,4 +241,16 @@ public class InHospPayDao { ps.setString(2, outTradeNo); }) > 0; } + + // 查询30天是否有发起过医保支付的订单 + public Order selectMIOrderByPayOrdId(String payOrdId) { + String sql = "select * from pay_in_hosp where updateTime >= DATE_SUB(CurDate(), INTERVAL 30 DAY) and tradeNo= ?"; + List dataList = DataBase.select(sql, Order.class, ps -> { + ps.setString(1, payOrdId); + }); + if (dataList.isEmpty()) { + return null; + } + return dataList.get(0); + } } diff --git a/src/main/java/com/ynxbd/common/dao/RecipeDao.java b/src/main/java/com/ynxbd/common/dao/RecipeDao.java index 29a23a8..b5d9d9e 100644 --- a/src/main/java/com/ynxbd/common/dao/RecipeDao.java +++ b/src/main/java/com/ynxbd/common/dao/RecipeDao.java @@ -5,7 +5,7 @@ import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.bean.pay.PayResult; import com.ynxbd.common.bean.pay.Recipe; import com.ynxbd.common.config.db.DataBase; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisFactory; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -263,7 +263,7 @@ public class RecipeDao { * @param bankTransNo bankTransNo */ public boolean updateNotifyPaid(String outTradeNo, String bankTransNo, String bankMerchantNo, List recipeList) { - List hisTradeNoList = HisHelper.getHisTradeNo(bankTransNo, + List hisTradeNoList = HisFactory.getHisTradeNo(bankTransNo, recipeList.stream().map(Order::getId).collect(Collectors.toList()), PEnum.RECIPE); diff --git a/src/main/java/com/ynxbd/common/dao/his/HisAccountDao.java b/src/main/java/com/ynxbd/common/dao/his/HisAccountDao.java index 27326c7..8a1f1dc 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisAccountDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisAccountDao.java @@ -1,7 +1,7 @@ package com.ynxbd.common.dao.his; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import java.util.HashMap; @@ -22,14 +22,14 @@ public class HisAccountDao { */ public JsonResult getStatement(String begTime, String endTime) { if (begTime == null || endTime == null) { - return HisHelper.createErrorResult("时间范围为空"); + return HisFactory.His().createErrorResult("时间范围为空"); } Map params = new HashMap<>(); params.put("StartTime", begTime); params.put("EndTime", endTime); - return HisHelper.getJsonResult(HisEnum.AP_Query_Statement, params); + return HisFactory.His().getJsonResult(HisEnum.AP_Query_Statement, params); } @@ -43,7 +43,7 @@ public class HisAccountDao { * @param isContainsRefund 是否包含负交易:{0:不包含负交易,当使用此参数时,负交易对应的正交易也将不会出现; 1包含负交易 } */ public JsonResult getTransaction(String begDate, String endDate, String tradeNo, Integer dateType, Integer isContainsRefund) { - return HisHelper.getJsonResult(HisEnum.AP_Query_Transaction, params -> { + return HisFactory.His().getJsonResult(HisEnum.AP_Query_Transaction, params -> { params.put("StartDate", begDate); params.put("EndDate", endDate); params.put("TransNo", tradeNo); @@ -59,7 +59,7 @@ public class HisAccountDao { * @param fpNum 发票号 */ public JsonResult getTransactionByFPNum(String fpNum, String begDate, String endDate, Integer dateType, Integer isContainsRefund) { - return HisHelper.getJsonResult(HisEnum.AP_Query_StatementByFPNum, params -> { + return HisFactory.His().getJsonResult(HisEnum.AP_Query_StatementByFPNum, params -> { params.put("FPNum", fpNum); // 以下为未使用参数 params.put("StartDate", begDate); diff --git a/src/main/java/com/ynxbd/common/dao/his/HisAuthAgentDao.java b/src/main/java/com/ynxbd/common/dao/his/HisAuthAgentDao.java index a1a6181..bc4bb56 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisAuthAgentDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisAuthAgentDao.java @@ -4,10 +4,9 @@ import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.PhoneUtil; import com.ynxbd.common.bean.enums.HisAuthAgentRelationEnum; import com.ynxbd.common.bean.his.HisAuthAgent; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; -import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; import org.apache.commons.lang3.ObjectUtils; @@ -41,7 +40,7 @@ public class HisAuthAgentDao { } else { throw new ServiceException("就诊类型异常"); } - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.QUERY_AUTH_AGENT, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.QUERY_AUTH_AGENT, params); if (!jsonResult.success()) { throw new ServiceException(jsonResult.getMessage()); } @@ -95,7 +94,7 @@ public class HisAuthAgentDao { params.put("PersonAddress", personAddress); params.put("Relationship", relationEnum.NAME); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.ADD_AUTH_AGENT, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.ADD_AUTH_AGENT, params); if (!jsonResult.success()) { throw new ServiceException(jsonResult.getMessage()); } @@ -137,7 +136,7 @@ public class HisAuthAgentDao { params.put("PersonAddress", personAddress); params.put("Relationship", relationEnum.NAME); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.UPDATE_AUTH_AGENT, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.UPDATE_AUTH_AGENT, params); if (!jsonResult.success()) { throw new ServiceException(jsonResult.getMessage()); } @@ -156,7 +155,7 @@ public class HisAuthAgentDao { Map params = new HashMap<>(); params.put("ItemNo", itemNo); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.DELETE_AUTH_AGENT, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.DELETE_AUTH_AGENT, params); if (!jsonResult.success()) { throw new ServiceException(jsonResult.getMessage()); } diff --git a/src/main/java/com/ynxbd/common/dao/his/HisInHospDao.java b/src/main/java/com/ynxbd/common/dao/his/HisInHospDao.java index 1c47891..57f5468 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisInHospDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisInHospDao.java @@ -2,8 +2,9 @@ package com.ynxbd.common.dao.his; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.helper.common.DateHelper; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisConfig; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import org.apache.commons.lang3.ObjectUtils; @@ -26,7 +27,7 @@ public class HisInHospDao { */ public JsonResult getHosList() { Map params = new HashMap<>(); - return HisHelper.getJsonResult(HisEnum.AP_Query_Hospital, params); + return HisFactory.His().getJsonResult(HisEnum.AP_Query_Hospital, params); } /** @@ -36,7 +37,7 @@ public class HisInHospDao { * @return 预交金缴费记录 */ public JsonResult getPreMoneyList(String patientId) { - return HisHelper.getJsonResult(HisEnum.AP_Query_Prepay, params -> { + return HisFactory.His().getJsonResult(HisEnum.AP_Query_Prepay, params -> { params.put("PatientID", patientId); }); } @@ -59,7 +60,7 @@ public class HisInHospDao { * @return 住院日费用汇总 */ public JsonResult getInHospSumFee(String patientId, String date) { - return HisHelper.getJsonResult(HisEnum.AP_Query_InpatientSummaryFee, params -> { + return HisFactory.His().getJsonResult(HisEnum.AP_Query_InpatientSummaryFee, params -> { params.put("PatientID", patientId); params.put("FeeDate", date == null ? "" : date); }); @@ -72,7 +73,7 @@ public class HisInHospDao { * @return 住院费用清单 */ public JsonResult queryInPatientFee(String patientId, String date) { - return HisHelper.getJsonResult(HisEnum.AP_Query_InpatientFee, params -> { + return HisFactory.His().getJsonResult(HisEnum.AP_Query_InpatientFee, params -> { params.put("PatientID", patientId); params.put("FeeDate", date == null ? "" : date); }); @@ -84,10 +85,10 @@ public class HisInHospDao { * @param patientId 患者id * @return 住院记录 */ - public JsonResult queryOutPatientRecords(String patientId, String hisYBZF) { - return HisHelper.getJsonResult(HisEnum.Query_OutPatientRecords, params -> { + public JsonResult queryOutPatientRecords(String patientId, String hisYBZF, boolean isDev) { + return HisFactory.His(isDev).getJsonResult(HisEnum.Query_OutPatientRecords, params -> { params.put("PatientID", patientId); - params.put("CallNo", HisHelper.WECHAT_CALL_NO); + params.put("CallNo", HisConfig.WECHAT_CALL_NO); params.put("YDZF", ObjectUtils.isEmpty(hisYBZF) ? "" : hisYBZF); // [住院]医保 }); } @@ -99,9 +100,9 @@ public class HisInHospDao { * @return 费用 */ public JsonResult queryOutHospTreatFee(String treatNum) { - return HisHelper.getJsonResult(HisEnum.Query_OutHospTreatFee, params -> { + return HisFactory.His().getJsonResult(HisEnum.Query_OutHospTreatFee, params -> { params.put("ZYNum", treatNum); - params.put("CallNo", HisHelper.WECHAT_CALL_NO); + params.put("CallNo", HisConfig.WECHAT_CALL_NO); }); } @@ -113,7 +114,7 @@ public class HisInHospDao { * @return 预交金缴费记录 */ public JsonResult inHospPrepay(MerchantEnum merchantEnum, String patientId, String patientName, BigDecimal payMoney, String payDate, String payTime, String backTransNo, String tradeNo, String treatNum) { - return HisHelper.getJsonResultByMer(HisEnum.Query_InHospPrepay, merchantEnum, params -> { + return HisFactory.His().getJsonResultByMer(HisEnum.Query_InHospPrepay, merchantEnum, params -> { params.put("PatientId", patientId); params.put("PatientName", patientName); params.put("ZYNum", treatNum); @@ -135,7 +136,7 @@ public class HisInHospDao { * @return 住院费用清单 */ public JsonResult getInHospByTreatNum(String treatNum) { - return HisHelper.getJsonResult(HisEnum.Query_InHospByTreatNum, params -> { + return HisFactory.His().getJsonResult(HisEnum.Query_InHospByTreatNum, params -> { params.put("InpatientNum", treatNum); }); } @@ -147,7 +148,7 @@ public class HisInHospDao { * @return 住院费用清单 */ public JsonResult getInHospByPatientId(String patientId) { - return HisHelper.getJsonResult(HisEnum.Query_InHospByPatientId, params -> { + return HisFactory.His().getJsonResult(HisEnum.Query_InHospByPatientId, params -> { params.put("PatientId", patientId); }); } diff --git a/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java b/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java index 69d9168..0fd99b9 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisMedDao.java @@ -7,9 +7,9 @@ import com.ynxbd.common.bean.pay.Register; import com.ynxbd.common.helper.common.CodeHelper; import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.common.JsonHelper; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; -import com.ynxbd.common.helper.his.HisMedHelper; +import com.ynxbd.common.his.HisConfig; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; @@ -39,7 +39,7 @@ public class HisMedDao { public static JsonResult rxMedUploadDetails(MerchantEnum merchantEnum, String payAuthNo, String cardNo, String openid, String patientId, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) { List recipeList = JsonHelper.parseArray(recipeJson, Recipe.class); if (recipeList == null || recipeList.isEmpty()) { - return HisHelper.createErrorResult("处方数量为 0 或 数据转换失败"); + return HisFactory.His().createErrorResult("处方数量为 0 或 数据转换失败"); } StringBuilder recipeIdsXml = new StringBuilder(); @@ -69,7 +69,7 @@ public class HisMedDao { if (ObjectUtils.isNotEmpty(ybBZName)) { params.put("YBBZName", ybBZName); } - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.AP_Pay_Invoice, params); + return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.AP_Pay_Invoice, params); } @@ -78,7 +78,7 @@ public class HisMedDao { */ public static JsonResult regMedUploadDetails(MerchantEnum merchantEnum, Register reg, String payAuthNo, String cardNo, Boolean isSplitTime) { if (isSplitTime) { - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.AP_Regist_New, params -> { + return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.AP_Regist_New, params -> { params.put("PatientID", reg.getPatientId()); params.put("PayMoney", reg.getPayMoney()); @@ -107,7 +107,7 @@ public class HisMedDao { }); } // 非分时段挂号 医保支付 - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.AP_Regist, params -> { + return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.AP_Regist, params -> { params.put("PatientID", reg.getPatientId()); params.put("PayMoney", reg.getPayMoney()); params.put("DeptCode", reg.getDeptCode()); @@ -134,10 +134,12 @@ public class HisMedDao { /** - * 住院结算 + * + * [测试需调整] + * 6201 上传费用明细(住院) + 6202 支付下单 */ - public static JsonResult inHospMedUploadDetails(MerchantEnum merchantEnum, String payAuthNo, String cardNo, String treatNum) { - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.YDZF_UploadFeesInfo_ZY, params -> { + public static JsonResult outHospMedUploadDetails(MerchantEnum merchantEnum, String payAuthNo, String cardNo, String treatNum) { + return HisFactory.His(true).getJsonResult(HisEnum.YDZF_UploadFeesInfo_ZY, params -> { params.put("ZYNum", treatNum); params.put("PayAuthNo", payAuthNo); }); @@ -154,7 +156,7 @@ public class HisMedDao { * @param bankTransNo HIS流水号 */ public static JsonResult inHospMedPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee, String openId) { - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.YDZF_SaveToHIS_ZY, params -> { + return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.YDZF_SaveToHIS_ZY, params -> { params.put("PayDeviceID", "mobile"); params.put("UserID_YBZF", mdUserId); params.put("PayMoney", cashFee); @@ -182,7 +184,7 @@ public class HisMedDao { * @param bankTransNo HIS流水号 */ public static JsonResult regMedPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) { - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.Medical_PAY, params -> { + return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.Medical_PAY, params -> { params.put("UserID_YBZF", mdUserId); params.put("PayMoney", cashFee); params.put("PayDate", payDate); @@ -201,7 +203,7 @@ public class HisMedDao { * @param mdInfo 医保下单对象 */ public static JsonResult placeMedOrder(MerchantEnum merchantEnum, MedicalInfo mdInfo) { - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.Medical_PayOrders, params -> { + return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.Medical_PayOrders, params -> { // 授权码 params.put("PayAuthNo", mdInfo.getPayAuthNo()); // 授权token @@ -225,7 +227,7 @@ public class HisMedDao { * @param bankTransNo HIS流水号 */ public static JsonResult rxMedPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) { - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.Medical_PAY, params -> { + return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.Medical_PAY, params -> { params.put("UserID_YBZF", mdUserId); params.put("PayMoney", cashFee); params.put("PayDate", payDate); @@ -246,7 +248,7 @@ public class HisMedDao { */ // * @param refundType 退款类型(ALL:全部,CASH:只退现金 HI:只退医保) public static JsonResult medRefund(MerchantEnum merchantEnum, String payAuthNo, String fpNum, String bankTransNo, String refundTradeNo, BigDecimal cashFee) { - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.Medical_Refund, params -> { + return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.Medical_Refund, params -> { params.put("PayAuthNo", payAuthNo); // AUTH530100202206291132200000008 params.put("FPNum", fpNum); params.put("PayWay", "4"); @@ -283,7 +285,7 @@ public class HisMedDao { * -1 : 状态未知 */ public static JsonResult getMedAccounts(MerchantEnum merchantEnum, String mdUserId) { - return HisMedHelper.getJsonResult(merchantEnum, HisEnum.Medical_QueryOrderStatus, params -> { + return HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.Medical_QueryOrderStatus, params -> { params.put("UserID_YBZF", mdUserId); }); } @@ -303,7 +305,7 @@ public class HisMedDao { return Result.error(ResultEnum.PARAM_IS_DEFECT); } - JsonResult result = HisMedHelper.getJsonResult(MerchantEnum.WX_MEDICAL, HisEnum.Medical_Insurance_Bill, params -> { + JsonResult result = HisFactory.HisMed(MerchantEnum.WX_MEDICAL).getJsonResult(HisEnum.Medical_Insurance_Bill, params -> { params.put("QueryNumType", queryNumType); params.put("QueryNumber", queryNumber); params.put("BegDate", begDate); @@ -322,8 +324,8 @@ public class HisMedDao { * @param idCardNo 身份证号 */ public static JsonResult getChronicList(String idCardNo) { - return HisMedHelper.getJsonResult(MerchantEnum.WX_MEDICAL, HisEnum.YDZF_QueryDiseaseInfo, params -> { - params.put("CallNo", HisHelper.WECHAT_CALL_NO); + return HisFactory.HisMed(MerchantEnum.WX_MEDICAL).getJsonResult(HisEnum.YDZF_QueryDiseaseInfo, params -> { + params.put("CallNo", HisConfig.WECHAT_CALL_NO); params.put("IDCardNo", idCardNo); }); } diff --git a/src/main/java/com/ynxbd/common/dao/his/HisMedTestDao.java b/src/main/java/com/ynxbd/common/dao/his/HisMedTestDao.java index 119a830..701ffaa 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisMedTestDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisMedTestDao.java @@ -2,9 +2,9 @@ package com.ynxbd.common.dao.his; import com.ynxbd.common.bean.HisRecipe; import com.ynxbd.common.bean.enums.MerchantEnum; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; -import com.ynxbd.common.helper.his.HisMedHelper; +import com.ynxbd.common.his.HisConfig; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import java.util.ArrayList; @@ -23,10 +23,10 @@ public class HisMedTestDao { public static List devUnPayList(MerchantEnum merchantEnum, String patientId, int days) { List resultList = new ArrayList<>(); - JsonResult jsonResult = HisMedHelper.getJsonResult(merchantEnum, HisEnum.AP_Query_UnPay_Invoice, params -> { + JsonResult jsonResult = HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.AP_Query_UnPay_Invoice, params -> { params.put("PatientID", patientId); params.put("IsLastWeekFlag", days <= 7 ? "1" : ""); - params.put("CallNo", HisHelper.WECHAT_CALL_NO); + params.put("CallNo", HisConfig.WECHAT_CALL_NO); }); if (!jsonResult.success()) { // 失败 @@ -57,7 +57,7 @@ public class HisMedTestDao { params.put("RecipeID", ""); params.put("StartTime", begDate); params.put("EndTime", endDate); - JsonResult jsonResult = HisMedHelper.getJsonResult(merchantEnum, HisEnum.AP_Query_OutpatientFee, params); + JsonResult jsonResult = HisFactory.HisMed(merchantEnum).getJsonResult(HisEnum.AP_Query_OutpatientFee, params); if (!jsonResult.success()) { // 请求失败 return resultList; diff --git a/src/main/java/com/ynxbd/common/dao/his/HisMedicalRecordDao.java b/src/main/java/com/ynxbd/common/dao/his/HisMedicalRecordDao.java index 49b2e9a..64849af 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisMedicalRecordDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisMedicalRecordDao.java @@ -1,8 +1,8 @@ package com.ynxbd.common.dao.his; import com.ynxbd.common.bean.HisMedicalRecord; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; @@ -28,7 +28,7 @@ public class HisMedicalRecordDao { Map params = new HashMap<>(); params.put("MZNum", treatNum); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.Query_TreatMedicalRecord, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.Query_TreatMedicalRecord, params); if (!jsonResult.success()) { throw new ServiceException(jsonResult.getMessage()); } diff --git a/src/main/java/com/ynxbd/common/dao/his/HisPatientDao.java b/src/main/java/com/ynxbd/common/dao/his/HisPatientDao.java index 74ef317..a301a00 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisPatientDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisPatientDao.java @@ -3,8 +3,8 @@ package com.ynxbd.common.dao.his; import com.alibaba.fastjson.JSONArray; import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.enums.HCardTypeEnum; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; @@ -78,7 +78,7 @@ public class HisPatientDao { params.put("GuardianMotherTel", motherTel); params.put("GuardianMotherIdCard", motherIdCardNo); } - JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Binding_Card, params); + JsonResult result = HisFactory.His().getJsonResult(HisEnum.AP_Binding_Card, params); Patient patient = result.dataMapToBean(Patient.class); if (patient == null) { throw new ServiceException(result.getMessage()); @@ -114,7 +114,7 @@ public class HisPatientDao { params.put("CardNo", idCardNo); params.put("CardType", cardType); params.put("TransNo", UUID.randomUUID().toString().replace("-", "")); - return HisHelper.getJsonResult(HisEnum.AP_UnBinding_Card, params); + return HisFactory.His().getJsonResult(HisEnum.AP_UnBinding_Card, params); } /** @@ -159,7 +159,7 @@ public class HisPatientDao { Map params = new HashMap<>(); params.put("CardNo", cardNo); params.put("CardType", cardType); - return HisHelper.getJsonResult(HisEnum.AP_Query_Patient, params); + return HisFactory.His().getJsonResult(HisEnum.AP_Query_Patient, params); } @@ -175,7 +175,7 @@ public class HisPatientDao { Map params = new HashMap<>(); params.put("PatientID", patientId); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_GMC_Patient, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_GMC_Patient, params); if (!jsonResult.success()) { return null; } @@ -215,7 +215,7 @@ public class HisPatientDao { params.put("Tel", tel); params.put("Nation", nation); - return HisHelper.getJsonResult(HisEnum.AP_Query_Patient, params); + return HisFactory.His().getJsonResult(HisEnum.AP_Query_Patient, params); } private String substringAreaCode(String areaCode, Integer length) { @@ -270,7 +270,7 @@ public class HisPatientDao { Map params = new HashMap<>(); params.put("Level", level); params.put("AreaCode", areaCode); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.Query_Area, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.Query_Area, params); if (!jsonResult.success()) { throw new ServiceException(jsonResult.getMessage()); } diff --git a/src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java b/src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java index 9c94345..a32770f 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java @@ -3,9 +3,9 @@ package com.ynxbd.common.dao.his; import com.ynxbd.common.bean.HisRecipe; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.xk.medicalRecipe; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; -import com.ynxbd.common.helper.his.HisMedHelper; +import com.ynxbd.common.his.HisConfig; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.wx.config.WeChatConfig; @@ -36,7 +36,7 @@ public class HisRecipeDao { params.put("HISTransNo", invoiceTransNo); params.put("WindowNo", windowNo); params.put("GroupNo", groupNo); - return HisHelper.getResponseXml(HisEnum.QuickDrugDispense, params); + return HisFactory.His().call(HisEnum.QuickDrugDispense, params); } @@ -57,7 +57,7 @@ public class HisRecipeDao { params.put("StartTime", begDate); params.put("EndTime", endDate); params.put("PersonNo", personNo); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_OutpatientFee, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_OutpatientFee, params); if (!jsonResult.success()) { // 请求失败 return resultList; @@ -79,11 +79,11 @@ public class HisRecipeDao { public List getRxUnPay(String patientId, String personNo, int days) { List resultList = new ArrayList<>(); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_UnPay_Invoice, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_UnPay_Invoice, params -> { params.put("PatientID", patientId); params.put("PersonNo", personNo); params.put("IsLastWeekFlag", days <= 7 ? "1" : ""); - params.put("CallNo", HisHelper.WECHAT_CALL_NO); + params.put("CallNo", HisConfig.WECHAT_CALL_NO); }); if (!jsonResult.success()) { // 失败 @@ -100,10 +100,10 @@ public class HisRecipeDao { public Result uploadRxMI(String treatNum, String personID, String recipes) { List resultList = new ArrayList<>(); - JsonResult jsonResult = HisMedHelper.getJsonResult(MerchantEnum.WX_MEDICAL, HisEnum.XK_MEDICAL_RECIPE, params -> { + JsonResult jsonResult = HisFactory.HisMed(MerchantEnum.WX_MEDICAL).getJsonResult(HisEnum.XK_MEDICAL_RECIPE, params -> { params.put("PersonID", personID); params.put("MZNum", treatNum); - params.put("CallNo", HisHelper.WECHAT_CALL_NO); + params.put("CallNo", HisConfig.WECHAT_CALL_NO); params.put("CFNums", recipes); }); @@ -138,7 +138,7 @@ public class HisRecipeDao { recipeIdsXml.append("").append(id).append(""); } - return HisHelper.getJsonResultByMer(HisEnum.AP_PrePay_Invoice_New, merchantEnum, params -> { + return HisFactory.His().getJsonResultByMer(HisEnum.AP_PrePay_Invoice_New, merchantEnum, params -> { params.put("Recipe", recipeIdsXml.toString()); params.put("PatientID", patientId); params.put("MZNum", treatNum); @@ -178,7 +178,7 @@ public class HisRecipeDao { if (ObjectUtils.isNotEmpty(feeId) && ObjectUtils.isNotEmpty(feeInfo)) { // 新版本预缴费 log.info("[HIS预结算]回调 feeId={}", feeId); - return HisHelper.getJsonResultByMer(HisEnum.AP_Pay_Invoice_New, merchantEnum, params -> { + return HisFactory.His().getJsonResultByMer(HisEnum.AP_Pay_Invoice_New, merchantEnum, params -> { params.put("PatientID", patientId); params.put("PayDate", payDate); params.put("PayTime", payTime); @@ -221,7 +221,7 @@ public class HisRecipeDao { params.remove("Recipe"); params.put("PayMoney", totalFee); //如果是体检支付就传入总金额 } - return HisHelper.getJsonResultByMer(HisEnum.AP_Pay_Invoice, merchantEnum, params); + return HisFactory.His().getJsonResultByMer(HisEnum.AP_Pay_Invoice, merchantEnum, params); } @@ -241,7 +241,7 @@ public class HisRecipeDao { if (!"0".equals(seq)) { params.put("DoubleCollectFlag", seq); // 1 } - return HisHelper.getJsonResult(HisEnum.Create_Self_Help, params); + return HisFactory.His().getJsonResult(HisEnum.Create_Self_Help, params); } @@ -259,7 +259,7 @@ public class HisRecipeDao { if (!"0".equals(seq)) { params.put("DoubleCollectFlag", seq); } - return HisHelper.getJsonResult(HisEnum.Query_Self_Help, params); + return HisFactory.His().getJsonResult(HisEnum.Query_Self_Help, params); } @@ -273,7 +273,7 @@ public class HisRecipeDao { * @param groupFlag 检查治疗是否包含组套项目 [0:否;1:是(不传时默认值)] */ public static JsonResult getStandardPrice(Integer pageNum, Integer pageSize, String pyCode, String type, String groupFlag) { - return HisHelper.getJsonResult(HisEnum.Recipe_Query_StandardPrice, params -> { + return HisFactory.His().getJsonResult(HisEnum.Recipe_Query_StandardPrice, params -> { params.put("PageNo", pageNum); params.put("RowsCount", pageSize); params.put("PinyinCode", pyCode); @@ -289,7 +289,7 @@ public class HisRecipeDao { * @param invoiceNo 发票号 */ public Result queryElectronInvoice(String invoiceNo) { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.QUERY_ELECTRON_INVOICE, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.QUERY_ELECTRON_INVOICE, params -> { params.put("FPNum", invoiceNo); }); if (!jsonResult.success()) { diff --git a/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java b/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java index fb2d9ba..c2e1980 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java @@ -9,8 +9,8 @@ import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Register; import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.helper.common.*; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.wx.wxfactory.AesWxHelper; @@ -46,7 +46,7 @@ public class HisRegisterDao { params.put("ReservationDate", ObjectUtils.isEmpty(regDate) ? "" : regDate); // 空为近7天 params.put("AllowResevationFlag", "1"); // [0:默认值可不传——所有;1:只返回有剩余号源的医师] - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Reservation_Doct, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_Reservation_Doct, params); if (!jsonResult.success()) { return new ArrayList<>(); } @@ -227,7 +227,7 @@ public class HisRegisterDao { params.put("DoctCode", ""); params.put("AllowRegistFlag", "1"); // 只返回有号源的医生 - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Doct, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_Doct, params); if (!jsonResult.success()) { return new ArrayList<>(); } @@ -413,7 +413,7 @@ public class HisRegisterDao { Map params = new HashMap<>(); params.put("DeptCode", ""); // 空为所有 params.put("ReservationDate", ""); // 空为近7天 - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Reservation_Dept, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_Reservation_Dept, params); if (!jsonResult.success()) { return resultList; @@ -425,15 +425,12 @@ public class HisRegisterDao { RegisterDao registerDao = new RegisterDao(); List wxDeptList = registerDao.selectDeptList(); - String subDeptJson; List subDeptList; - String subDeptName, subDeptCode; - JSONObject subDeptItem; - Dept subDept; - Dept dept; - JSONObject nodeItem; + String subDeptJson, subDeptName, subDeptCode, subDeptNote; String address, deptCode, deptName, hospitalAreaName; - JSONObject subDeptData; + + Dept dept, subDept; + JSONObject nodeItem, subDeptItem, subDeptItemData; JSONArray dataItems; for (int i = 0; i < jsonArray.size(); i++) { nodeItem = jsonArray.getJSONObject(i); @@ -447,17 +444,22 @@ public class HisRegisterDao { subDeptJson = nodeItem.getString("Code_YZKStr"); if (!ObjectUtils.isEmpty(subDeptJson)) { - subDeptData = JsonHelper.parseObject(subDeptJson); - dataItems = subDeptData.getJSONArray("Data"); + subDeptItemData = JsonHelper.parseObject(subDeptJson); + dataItems = subDeptItemData.getJSONArray("Data"); subDeptList = new ArrayList<>(); for (int j = 0; j < dataItems.size(); j++) { subDeptItem = dataItems.getJSONObject(j); subDeptName = subDeptItem.getString("Name"); subDeptCode = subDeptItem.getString("Code"); + subDeptNote = subDeptItem.getString("Note"); subDept = new Dept(); subDept.setDeptName(subDeptName); subDept.setDeptCode(subDeptCode); + if (!ObjectUtils.isEmpty(subDeptNote)) { + subDept.setNote(subDeptNote); + } + // 预约挂号 subDeptList.add(subDept); } dept.setChildren(subDeptList); @@ -490,7 +492,7 @@ public class HisRegisterDao { params.put("HasSourcesFlag", hasSourcesFlag); // 1:仅返回有号源科室; 0:有无号源科室都返回 List deptList = new ArrayList<>(); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Dept, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_Dept, params); if (!jsonResult.success()) { return deptList; } @@ -499,15 +501,13 @@ public class HisRegisterDao { RegisterDao registerDao = new RegisterDao(); List wxDeptList = registerDao.selectDeptList(); - String subDeptJson; List subDeptList; - String subDeptName, subDeptCode; - JSONObject subDeptItem; - - Dept subDept; - Dept dept; - JSONObject nodeItem; + String subDeptJson, subDeptName, subDeptCode, subDeptNote; String address, deptCode, deptName, hospitalAreaName; + + Dept dept, subDept; + JSONObject nodeItem, subDeptItem, subDeptItemData; + JSONArray dataItems; for (int i = 0; i < jsonArray.size(); i++) { nodeItem = jsonArray.getJSONObject(i); deptCode = nodeItem.getString("Code"); @@ -520,17 +520,23 @@ public class HisRegisterDao { subDeptJson = nodeItem.getString("Code_YZKStr"); if (!ObjectUtils.isEmpty(subDeptJson)) { - JSONObject subDeptData = JsonHelper.parseObject(subDeptJson); - JSONArray dataItems = subDeptData.getJSONArray("Data"); + subDeptItemData = JsonHelper.parseObject(subDeptJson); + dataItems = subDeptItemData.getJSONArray("Data"); subDeptList = new ArrayList<>(); for (int j = 0; j < dataItems.size(); j++) { subDeptItem = dataItems.getJSONObject(j); subDeptName = subDeptItem.getString("Name"); subDeptCode = subDeptItem.getString("Code"); + subDeptNote = subDeptItem.getString("Note"); + subDept = new Dept(); subDept.setDeptName(subDeptName); subDept.setDeptCode(subDeptCode); + if (!ObjectUtils.isEmpty(subDeptNote)) { + subDept.setNote(subDeptNote); + } + // 今日挂号 subDeptList.add(subDept); } dept.setChildren(subDeptList); @@ -556,7 +562,7 @@ public class HisRegisterDao { params.put("MZNum", null); params.put("RegistDate", regDate); - JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Query_Regist, params); + JsonResult result = HisFactory.His().getJsonResult(HisEnum.AP_Query_Regist, params); if (!result.success()) { return resultList; } @@ -613,7 +619,7 @@ public class HisRegisterDao { params.put("ReservationTransNo", ""); params.put("AfterTodayFlag", "0"); - JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Query_Reservation, params); + JsonResult result = HisFactory.His().getJsonResult(HisEnum.AP_Query_Reservation, params); if (!result.success()) { return resultList; } @@ -691,7 +697,7 @@ public class HisRegisterDao { params.put("ReservationTransNo", tradeNo); params.put("RecallTransNo", "R" + tradeNo); - return HisHelper.getJsonResultByMer(HisEnum.AP_Recall_Reservation, merchantEnum, params); + return HisFactory.His().getJsonResultByMer(HisEnum.AP_Recall_Reservation, merchantEnum, params); } /** @@ -704,7 +710,7 @@ public class HisRegisterDao { params.put("TransNo", tradeNo); params.put("DelTransNo", "R" + tradeNo); - return HisHelper.getJsonResultByMer(HisEnum.AP_Refund_Register, merchantEnum, params); + return HisFactory.His().getJsonResultByMer(HisEnum.AP_Refund_Register, merchantEnum, params); } /** @@ -735,9 +741,9 @@ public class HisRegisterDao { /** * [分时段挂号]查询科室 * - * @param begDate 开始时间 - * @param endDate 结束时间 - * @param deptCode 科室编码-空为所有 + * @param begDate 开始时间 + * @param endDate 结束时间 + * @param deptCode 科室编码-空为所有 */ public List getTimeDeptList(String begDate, String endDate, String deptCode) { List deptList = new ArrayList<>(); @@ -748,7 +754,7 @@ public class HisRegisterDao { params.put("RegistEndDate", endDate); params.put("CanRegistFlag", "1"); // [空或0为所有科室; 1:返回有号源的科室] - JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Query_Dept_New, params); + JsonResult result = HisFactory.His().getJsonResult(HisEnum.AP_Query_Dept_New, params); if (!result.success()) { log.info("[分时段挂号]查询科室列表 {}", result.getMessage()); return deptList; @@ -794,7 +800,9 @@ public class HisRegisterDao { subDept = new Dept(); subDept.setDeptName(subDeptName); subDept.setDeptCode(subDeptCode); - subDept.setNote(subDeptNote); + if (!ObjectUtils.isEmpty(subDeptNote)) { + subDept.setNote(subDeptNote); + } subDept.setSourceInfo(subDeptSourceInfo); subDeptList.add(subDept); } @@ -826,7 +834,7 @@ public class HisRegisterDao { params.put("DeptCode_YZKCode", subDeptCode); // 亚专科code } - JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Query_Doct_New, params); + JsonResult result = HisFactory.His().getJsonResult(HisEnum.AP_Query_Doct_New, params); List resultList = new ArrayList<>(); if (!result.success()) { @@ -895,7 +903,7 @@ public class HisRegisterDao { params.put("DeptCode_YZKCode", subDeptCode); // 亚专科code } - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Register_Source_New, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_Register_Source_New, params); List> dataList = new ArrayList<>(); if (!jsonResult.success()) { log.info("[号源-分时段查询]{}", jsonResult.getMessage()); @@ -987,7 +995,7 @@ public class HisRegisterDao { params.put("DeptCode_YZKCode", subDeptCode); // 亚专科code } - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Register_Source_New, params); + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_Register_Source_New, params); List dataList = new ArrayList<>(); if (!jsonResult.success()) { log.info("[分时段挂号-号源查询]{}", jsonResult.getMessage()); @@ -1121,7 +1129,7 @@ public class HisRegisterDao { params.put("OpenId", reg.getOpenid()); params.put("Token", WeChatConfig.TOKEN); - return HisHelper.getJsonResultByMer(HisEnum.AP_Regist_New, merchantEnum, params); + return HisFactory.His().getJsonResultByMer(HisEnum.AP_Regist_New, merchantEnum, params); } /** @@ -1152,12 +1160,12 @@ public class HisRegisterDao { params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code } if (DateHelper.isToday(regDate)) { // 今日挂号 - return HisHelper.getJsonResultByMer(HisEnum.AP_Regist, merchantEnum, params); + return HisFactory.His().getJsonResultByMer(HisEnum.AP_Regist, merchantEnum, params); } // 预约挂号 params.put("ReservationDate", regDate); - return HisHelper.getJsonResultByMer(HisEnum.AP_Reservation, merchantEnum, params); + return HisFactory.His().getJsonResultByMer(HisEnum.AP_Reservation, merchantEnum, params); } /** @@ -1172,7 +1180,7 @@ public class HisRegisterDao { params.put("PatientID", patientId); params.put("SourceId", sourceId); params.put("TransNo", CodeHelper.get32UUID()); - return HisHelper.getJsonResultByMer(HisEnum.AP_Occupy_Source_New, merchantEnum, params); + return HisFactory.His().getJsonResultByMer(HisEnum.AP_Occupy_Source_New, merchantEnum, params); } /** @@ -1185,7 +1193,7 @@ public class HisRegisterDao { */ public JSONArray getDoctorSchedule(String begDate, String endDate, String doctCode) { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Doctor_Schedule, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Doctor_Schedule, params -> { params.put("BegDate", begDate); params.put("EndDate", endDate); params.put("DoctCode", doctCode); @@ -1205,7 +1213,7 @@ public class HisRegisterDao { * @return 待签到记录 */ public JSONArray getReSignInRecord(String begDate, String endDate) { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_SignIn, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_SignIn, params -> { params.put("BegDate", begDate); params.put("EndDate", endDate); }); @@ -1224,7 +1232,7 @@ public class HisRegisterDao { public JsonResult handleSignIn(String transNo) { Map params = new HashMap<>(); params.put("TransNo", transNo); - return HisHelper.getJsonResult(HisEnum.AP_SignIN, params); + return HisFactory.His().getJsonResult(HisEnum.AP_SignIN, params); } /** @@ -1235,7 +1243,7 @@ public class HisRegisterDao { * @return 待签到记录 */ public JSONArray getRegLineSignInRecordsOld(String begDate, String endDate, String patientId) { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Line_SignIn, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_Line_SignIn, params -> { params.put("BegDate", begDate); params.put("EndDate", endDate); params.put("PatientID", patientId); @@ -1254,7 +1262,7 @@ public class HisRegisterDao { * @return list */ public List getRegLineSignInRecords(String begDate, String endDate) { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_Line_SignIn, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_Line_SignIn, params -> { params.put("BegDate", begDate); params.put("EndDate", endDate); }); @@ -1297,7 +1305,7 @@ public class HisRegisterDao { public JsonResult handleLineSignIn(String treatNum) { Map params = new HashMap<>(); params.put("MZNum", treatNum); - return HisHelper.getJsonResult(HisEnum.AP_Line_SignIN, params); + return HisFactory.His().getJsonResult(HisEnum.AP_Line_SignIN, params); } /** @@ -1315,7 +1323,7 @@ public class HisRegisterDao { params.put("OpenId", openId); params.put("TransNo", tradeNo); params.put("BankTransNo", bankTransNo); - return HisHelper.getJsonResult(HisEnum.TPP_QR_Reg, params); + return HisFactory.His().getJsonResult(HisEnum.TPP_QR_Reg, params); } } diff --git a/src/main/java/com/ynxbd/common/dao/his/HisReportDao.java b/src/main/java/com/ynxbd/common/dao/his/HisReportDao.java index 96b5e66..97cbccf 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisReportDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisReportDao.java @@ -6,8 +6,8 @@ import com.ynxbd.common.bean.TreatRecord; import com.ynxbd.common.bean.report.CheckReport; import com.ynxbd.common.bean.report.InspectionReport; import com.ynxbd.common.bean.report.PEIS; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.ServiceException; import lombok.extern.slf4j.Slf4j; @@ -61,7 +61,7 @@ public class HisReportDao { * @param endDate 结束时间 */ public List getCheckByPatient(String patientId, String bedDate, String endDate) throws ServiceException { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_CheckApplication, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_CheckApplication, params -> { params.put("PatientID", patientId); }); @@ -84,7 +84,7 @@ public class HisReportDao { * @return list */ public List getPEISReportByPatient(String name, String idCardNo, String bedDate, String endDate) throws ServiceException { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_PEISReport, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_PEISReport, params -> { params.put("Name", name); params.put("IdCardNo", idCardNo); }); @@ -102,7 +102,7 @@ public class HisReportDao { * @return 报告集合 */ public List getInspectByPatient(String patientId) throws ServiceException { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_InspectionApplication, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_InspectionApplication, params -> { params.put("PatientID", patientId); }); @@ -120,7 +120,7 @@ public class HisReportDao { * @return 报告集合 */ public List getInspectByTreatNum(String patientId, String zyNum, String mzNum) throws ServiceException { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.AP_Query_InspectionApplication, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.AP_Query_InspectionApplication, params -> { params.put("PatientID", patientId); params.put("ZYNum", zyNum == null ? "" : zyNum); params.put("MZNum", mzNum == null ? "" : mzNum); @@ -138,7 +138,7 @@ public class HisReportDao { * @return 就诊记录 */ public List getReportTreatRecords(String patientId, String begDate, String endDate, String treatType, String reportType, String deptCode) throws ServiceException { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.Query_TreatRecords, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.Query_TreatRecords, params -> { params.put("PatientId", patientId); params.put("BegDate", begDate); params.put("EndDate", endDate); diff --git a/src/main/java/com/ynxbd/common/dao/his/HisSelfHelpDao.java b/src/main/java/com/ynxbd/common/dao/his/HisSelfHelpDao.java index 65240c2..a2665f6 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisSelfHelpDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisSelfHelpDao.java @@ -4,11 +4,9 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.bean.his.HisSelfHelpInfo; import com.ynxbd.common.bean.his.HisSelfHelpItem; -import com.ynxbd.common.bean.in_hosp.InHosp; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; -import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; import lombok.extern.slf4j.Slf4j; @@ -23,7 +21,7 @@ public class HisSelfHelpDao { public List getHisSelfHelpList() throws ServiceException { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.SH_SELF_HELP_QUERY, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.SH_SELF_HELP_QUERY, params -> { }); if (!jsonResult.success()) { @@ -68,9 +66,9 @@ public class HisSelfHelpDao { throw new ServiceException("传递的申请单为空,禁止开单"); } - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.SH_SELF_HELP_CREATE, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.SH_SELF_HELP_CREATE, params -> { params.put("PatientId", patientId); - params.put("ApplicationInfos", HisHelper.strListToXml("ItemNo", items)); + params.put("ApplicationInfos", HisFactory.strListToXml("ItemNo", items)); }); if (!jsonResult.success()) { diff --git a/src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java b/src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java index 1be2d46..44fb82a 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisTreatDao.java @@ -2,18 +2,16 @@ package com.ynxbd.common.dao.his; import com.ynxbd.common.bean.his.HisReRegister; import com.ynxbd.common.bean.his.HisTreat; -import com.ynxbd.common.bean.report.CheckReport; import com.ynxbd.common.bean.xk.InquiryFee; import com.ynxbd.common.helper.common.Base64Helper; import com.ynxbd.common.helper.common.JsonHelper; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.ServiceException; import java.util.ArrayList; import java.util.List; -import java.util.Map; public class HisTreatDao { @@ -25,7 +23,7 @@ public class HisTreatDao { public List getTreatList(String patientId, String deptCode) { List dataList = new ArrayList<>(); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.XK_GET_TREAT_LIST, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.XK_GET_TREAT_LIST, params -> { params.put("PatientID", patientId); params.put("DeptCode", deptCode); }); @@ -43,7 +41,7 @@ public class HisTreatDao { * @param treatNum 门诊号 */ public HisTreat createTreat(String treatNum, String deptCode, String doctCode, String registCode, String regFee, String clinicFee, String transNo, String payMoney, String payDate, String payTime, String payWay, String payDeviceID, String bankTransNo, String openId) throws ServiceException { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.XK_CREATE_TREAT, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.XK_CREATE_TREAT, params -> { params.put("MZNum", treatNum); params.put("DeptCode", deptCode); params.put("DoctCode", doctCode); @@ -73,7 +71,7 @@ public class HisTreatDao { * @param inquiryCode 收费项目代码 */ public List getInquiryFee(String inquiryCode) throws ServiceException { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.XK_INQUIRY_FEE, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.XK_INQUIRY_FEE, params -> { params.put("Code", inquiryCode); }); @@ -89,7 +87,7 @@ public class HisTreatDao { * @param clinicCode 号别 */ public List getReRegister(String clinicCode) throws ServiceException { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.XK_QUERY_RE_REGISTER, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.XK_QUERY_RE_REGISTER, params -> { params.put("ClinicCode", clinicCode); }); @@ -103,7 +101,7 @@ public class HisTreatDao { public List getInfoByTreatNum(String treatNum) throws ServiceException { List dataList = new ArrayList<>(); - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.XK_QUERY_TREAT, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.XK_QUERY_TREAT, params -> { params.put("MZNum", treatNum); }); @@ -115,7 +113,7 @@ public class HisTreatDao { public String getDoctCaSign(String doctCode) throws ServiceException { String data = null; - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.XK_DOC_CA, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.XK_DOC_CA, params -> { params.put("DoctCode", doctCode); }); @@ -158,7 +156,7 @@ public class HisTreatDao { * @return 是否成功 */ public JsonResult createInquiry(String patientId, String patientName, String payMoney, String payDate, String payTime, String transNo, String payDeviceId, String bankTransNo, String deptCode, String doctCode, String feeCode, String payWay, String ID, String begTime, String endTime, String IDCardNo, String remark, String doctTitleCode, String hospitalArea, String treatNum, String firstTreatNum, String openId) { - return HisHelper.getJsonResult(HisEnum.XK_CREATE_INQUIRY, params -> { + return HisFactory.His().getJsonResult(HisEnum.XK_CREATE_INQUIRY, params -> { params.put("PatientId", patientId); params.put("PatientName", patientName); params.put("PayMoney", payMoney); diff --git a/src/main/java/com/ynxbd/common/dao/his/HisXKDao.java b/src/main/java/com/ynxbd/common/dao/his/HisXKDao.java index dfe4486..7f39d1f 100644 --- a/src/main/java/com/ynxbd/common/dao/his/HisXKDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/HisXKDao.java @@ -4,10 +4,9 @@ import com.ynxbd.common.bean.xk.HisRxAdmRoute; import com.ynxbd.common.bean.xk.HisRxDrug; import com.ynxbd.common.bean.xk.HisRxPharmDict; import com.ynxbd.common.bean.xk.HisRxUseCount; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; -import com.ynxbd.common.result.ServiceException; import lombok.extern.slf4j.Slf4j; import java.util.ArrayList; @@ -17,7 +16,7 @@ import java.util.List; public class HisXKDao { public List queryHisRxDict(String type) { - JsonResult jsonResult = HisHelper.getJsonResult(HisEnum.HIS_XK_RX_DICT, params -> { + JsonResult jsonResult = HisFactory.His().getJsonResult(HisEnum.HIS_XK_RX_DICT, params -> { params.put("Flag", type); // 1:用药频次字典; 2:给要途径字典; 3:药房字典; 4:药品 }); if ("1".equals(type)) { // 用药频次字典 diff --git a/src/main/java/com/ynxbd/common/dao/his/dev/DevHisRecipeDao.java b/src/main/java/com/ynxbd/common/dao/his/dev/DevHisRecipeDao.java index 39e5ab9..14df389 100644 --- a/src/main/java/com/ynxbd/common/dao/his/dev/DevHisRecipeDao.java +++ b/src/main/java/com/ynxbd/common/dao/his/dev/DevHisRecipeDao.java @@ -1,9 +1,9 @@ package com.ynxbd.common.dao.his.dev; import com.ynxbd.common.bean.HisRecipe; -import com.ynxbd.common.helper.his.HisDevHelper; -import com.ynxbd.common.helper.his.HisEnum; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisConfig; +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import java.util.ArrayList; @@ -19,10 +19,10 @@ public class DevHisRecipeDao { public List getDevUnPayRecipe(String patientId, int days) { List resultList = new ArrayList<>(); - JsonResult jsonResult = HisDevHelper.getDevJsonResult(HisEnum.AP_Query_UnPay_Invoice, params -> { + JsonResult jsonResult = HisFactory.His(true).getJsonResult(HisEnum.AP_Query_UnPay_Invoice, params -> { params.put("PatientID", patientId); params.put("IsLastWeekFlag", days <= 7 ? "1" : ""); - params.put("CallNo",HisHelper.WECHAT_CALL_NO); + params.put("CallNo", HisConfig.WECHAT_CALL_NO); }); if (!jsonResult.success()) { // 失败 diff --git a/src/main/java/com/ynxbd/common/helper/HealthCardHelper.java b/src/main/java/com/ynxbd/common/helper/HealthCardHelper.java index 2e90e7f..497d6f5 100644 --- a/src/main/java/com/ynxbd/common/helper/HealthCardHelper.java +++ b/src/main/java/com/ynxbd/common/helper/HealthCardHelper.java @@ -25,6 +25,8 @@ import java.util.Date; @Slf4j public class HealthCardHelper { + private static final String FACE_URL = "h-face-verify.html"; + /** * [电子健康卡]绑卡验证授权 */ @@ -60,7 +62,7 @@ public class HealthCardHelper { if (isHCBindUI) { // 服务商页面 userFormPageUrl = String.format("%s/h5/tencent/open/card/regist?hospitalId=%s&redirect_uri=%s&fail_redirect_uri=%s&authCode=%s", (isMiniApp ? ("mini:" + domain) : "https://h5-health.tengmed.com"), - HealthCardConfig.H_HOSPITAL_ID, + HealthCardConfig.H_HOSP_ID, URLHelper.encodeURL(successRedirectUrl), URLHelper.encodeURL(failRedirectUrl), wechatCode); @@ -71,7 +73,7 @@ public class HealthCardHelper { } // 小程序内嵌必传(固定为小程序路径,不需要加“mini:”前缀)示例: /path/to/facePage - String faceUrl = isMiniApp ? "/path/to/facePage" : (webURL + "h-face-verify.html"); + String faceUrl = isMiniApp ? "/path/to/facePage" :(HealthCardConfig.IS_FACE_URL ? (webURL + FACE_URL) : null); // 放弃验证回调页 String verifyFailRedirectUrl = isMiniApp ? "mini:/path/to/isvpage" : (webURL + "health-card-fail.html?code=-1"); @@ -119,7 +121,7 @@ public class HealthCardHelper { String failRedirectUrl = isMiniApp ? "/path/to/isvpage??regInfoCode=${regInfoCode}" : (webURL + "health-card-form.html?regInfoCode=${regInfoCode}"); // 小程序内嵌必传(固定为小程序路径,不需要加“mini:”前缀)示例: /path/to/facePage - String faceUrl = isMiniApp ? "/path/to/facePage" : (webURL + "h-face-verify.html"); + String faceUrl = isMiniApp ? "/path/to/facePage" : (HealthCardConfig.IS_FACE_URL ? (webURL + FACE_URL) : null); // 放弃验证回调页 String verifyFailRedirectUrl = isMiniApp ? "mini:/path/to/isvpage" : (webURL + "health-card-fail.html?code=-2"); @@ -447,7 +449,7 @@ public class HealthCardHelper { String webURL = WeChatConfig.reqProtocolToWebURL(isHttps); String verifySuccessRedirectUrl = webURL + redirectPage + "?registerOrderId=${registerOrderId}" + redirectHash; String verifyFailRedirectUrl = webURL + "health-card-fail.html?code=-3"; - String faceUrl = isMiniApp ? "/path/to/facePage" : (webURL + "h-face-verify.html"); + String faceUrl = isMiniApp ? "/path/to/facePage" : (HealthCardConfig.IS_FACE_URL ? (webURL + FACE_URL) : null); JSONObject resultJson = HealthCardConfig.createHealthCardService().registerUniformVerifyOrder(commonIn, idCardNo, @@ -587,13 +589,13 @@ public class HealthCardHelper { */ public static JSONObject reportHISData(String openid, String healthCardId, String idCardNo, String scene, String deptName, HealthCardEnum cardCostType) { try { - log.info("[电子健康卡]用卡数据监测接口 scene={}", scene); if (!HealthCardConfig.IS_UPLOAD_DATA) { // 禁止数据上传 return null; } + log.info("[电子健康卡]用卡数据监测接口-[scene:{}]", scene); if (ObjectUtils.isEmpty(openid) || ObjectUtils.isEmpty(healthCardId) || ObjectUtils.isEmpty(idCardNo) || ObjectUtils.isEmpty(scene)) { - log.error("[电子健康卡]用卡数据监测,参数为空"); + log.warn("[电子健康卡]用卡数据监测,参数为空"); return null; } @@ -617,7 +619,7 @@ public class HealthCardHelper { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); req.setTime(format.format(new Date())); - req.setHospitalCode(HealthCardConfig.H_HOSPITAL_ID); + req.setHospitalCode(HealthCardConfig.H_HOSP_ID); // 010101 挂号 req.setScene(scene); req.setDepartment(ObjectUtils.isEmpty(deptName) ? null : deptName); // 科室代码 diff --git a/src/main/java/com/ynxbd/common/helper/TestHelper.java b/src/main/java/com/ynxbd/common/helper/TestHelper.java index a2b8dd6..9888536 100644 --- a/src/main/java/com/ynxbd/common/helper/TestHelper.java +++ b/src/main/java/com/ynxbd/common/helper/TestHelper.java @@ -3,11 +3,17 @@ package com.ynxbd.common.helper; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; import com.auth0.jwt.algorithms.Algorithm; +import com.ynxbd.common.bean.in_hosp.InHospFeeItem; import com.ynxbd.common.helper.common.JwtHelper; +import com.ynxbd.common.result.JsonResult; +import com.ynxbd.common.result.JsonResultEnum; +import com.ynxbd.common.result.Result; import com.ynxbd.wx.utils.DesEncryptHelper; import lombok.extern.slf4j.Slf4j; +import java.math.BigDecimal; import java.util.Calendar; +import java.util.List; @Slf4j public class TestHelper { @@ -50,9 +56,9 @@ public class TestHelper { // } public static void main(String[] args) { - String token = "99CB4E005E234DDA73B67CB9F369425933951D90DA1778B1DDA55F3E0E6E24DCD40BBA9E60FDBB1D607848053494BFBCF9E39900626C6B3208CA72FF386E13401F65C2F874614CA7C085D6DC51C258F4800EA613E482FB3F87006ABD62C2730FFC16B1AE0E44762D76775510A3EEB8785B871B9759F1A7D22E860BE284C18F095F5F6D38C31D9965B4C0434D3BBBBE39"; - String deToken = DesEncryptHelper.deCode(token); - System.out.println(deToken); +// String token = "99CB4E005E234DDA73B67CB9F369425933951D90DA1778B1DDA55F3E0E6E24DCD40BBA9E60FDBB1D607848053494BFBCF9E39900626C6B3208CA72FF386E13401F65C2F874614CA7C085D6DC51C258F4800EA613E482FB3F87006ABD62C2730FFC16B1AE0E44762D76775510A3EEB8785B871B9759F1A7D22E860BE284C18F095F5F6D38C31D9965B4C0434D3BBBBE39"; +// String deToken = DesEncryptHelper.deCode(token); +// System.out.println(deToken); } /** diff --git a/src/main/java/com/ynxbd/common/helper/common/JsonHelper.java b/src/main/java/com/ynxbd/common/helper/common/JsonHelper.java index 18aeb65..4cdc305 100644 --- a/src/main/java/com/ynxbd/common/helper/common/JsonHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/JsonHelper.java @@ -19,6 +19,12 @@ import java.util.List; @Slf4j public class JsonHelper { + public static T copy(Object obj, Class clazz) { + String dataJson = JSON.toJSONString(obj); + return JSON.parseObject(dataJson, clazz); + } + + public static String toJsonString(Object data) { return JSON.toJSONString(data); } @@ -60,6 +66,7 @@ public class JsonHelper { return parseArray(json, clazz); } + /** * fastJson反序列化Bean * diff --git a/src/main/java/com/ynxbd/common/helper/common/QuickDrugDispenseHelper.java b/src/main/java/com/ynxbd/common/helper/common/QuickDrugDispenseHelper.java index db83106..bf25272 100644 --- a/src/main/java/com/ynxbd/common/helper/common/QuickDrugDispenseHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/QuickDrugDispenseHelper.java @@ -1,11 +1,9 @@ package com.ynxbd.common.helper.common; -import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.common.dao.his.HisRecipeDao; +import com.ynxbd.wx.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** diff --git a/src/main/java/com/ynxbd/common/helper/common/SnowHelper.java b/src/main/java/com/ynxbd/common/helper/common/SnowHelper.java index 1bb9ae6..be9ea44 100644 --- a/src/main/java/com/ynxbd/common/helper/common/SnowHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/SnowHelper.java @@ -2,12 +2,16 @@ package com.ynxbd.common.helper.common; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; +import lombok.extern.slf4j.Slf4j; + +import java.util.UUID; /** * @author wsq * @description 雪花算法 * @date 2019/8/14 下午8:22 */ +@Slf4j public class SnowHelper { private SnowHelper() { } diff --git a/src/main/java/com/ynxbd/common/helper/common/SoapHelper.java b/src/main/java/com/ynxbd/common/helper/common/SoapHelper.java index 976a943..300617a 100644 --- a/src/main/java/com/ynxbd/common/helper/common/SoapHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/SoapHelper.java @@ -5,10 +5,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; +import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; @@ -105,7 +102,7 @@ public class SoapHelper { connection.setRequestMethod(httpType); // 3.2设置数据格式:content-msgInterface connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8"); - if (soapAction != null && !"".equals(soapAction)) { + if (!ObjectUtils.isEmpty(soapAction)) { connection.setRequestProperty("SOAPAction", soapAction); } // 3.3设置输入输出,因为默认新创建的connection没有读写权限, @@ -120,33 +117,49 @@ public class SoapHelper { // 第五步:接收服务端响应 int responseCode = connection.getResponseCode(); + InputStream inputStream; + // 重点:非200要读取错误流 getErrorStream() + if (HttpURLConnection.HTTP_OK == responseCode) { + inputStream = connection.getInputStream(); + } else { + inputStream = connection.getErrorStream(); + } - StringBuilder sb = new StringBuilder(); - String temp; - reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); - while ((temp = reader.readLine()) != null) { - sb.append(temp); + StringBuilder sb = new StringBuilder(1024 * 4); + if (inputStream != null) { + char[] buf = new char[1024]; + int len; + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + while ((len = reader.read(buf)) != -1) { + sb.append(buf, 0, len); + } } - if (responseCode == 200) { // 请求成功 + if (HttpURLConnection.HTTP_OK == responseCode) { respData = sb.toString(); - } else { - log.error("{} 请求失败: {}", projectName, sb); + log.error("{} 请求失败[code:{}][soapUrl:{}]-resp:{}", projectName, responseCode, soapUrl, sb); } } catch (IOException e) { - log.error("{} 请求异常: {}", projectName, e.getMessage()); - ErrorHelper.println(e); + log.error("{} 请求异常:", projectName, e); } finally { try { - if (out != null) out.close(); - - if (reader != null) reader.close(); - - if (connection != null) connection.disconnect(); - + if (out != null) { + out.close(); + } } catch (IOException e) { - e.printStackTrace(); + log.error("soap关闭输出流异常", e); + } + try { + if (reader != null) { + reader.close(); + } + } catch (IOException e) { + log.error("soap关闭读取流异常", e); + } + + if (connection != null) { + connection.disconnect(); } } return respData; diff --git a/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java b/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java index 6275ed8..2a7ef03 100644 --- a/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/XmlConfigHelper.java @@ -24,6 +24,11 @@ public class XmlConfigHelper { public XmlConfigHelper read(String filePath, String rootName) { try (InputStream is = XmlConfigHelper.class.getClassLoader().getResourceAsStream(filePath)) { // 从classpath读取resources文件 SAXReader reader = new SAXReader(); + //关闭外部实体 XXE防护 + reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + reader.setFeature("http://xml.org/sax/features/external-general-entities", false); + reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); + Document document = reader.read(is); Element rootElement = document.getRootElement(); if (rootName == null) { @@ -59,10 +64,14 @@ public class XmlConfigHelper { */ public XmlConfigHelper getConfigNode(String nodeName) { try { + if (root == null) { + return null; + } XmlConfigHelper config = new XmlConfigHelper(); config.root = root.element(nodeName); return config; } catch (Exception e) { + log.error("", e); return null; } } @@ -82,7 +91,7 @@ public class XmlConfigHelper { String val = root.elementTextTrim(rootNode); return ObjectUtils.isEmpty(val) ? defaultVal : Boolean.parseBoolean(val); } catch (Exception e) { - e.printStackTrace(); + log.error("", e); return defaultVal; } } @@ -117,7 +126,7 @@ public class XmlConfigHelper { String val = root.elementTextTrim(rootNode); return ObjectUtils.isEmpty(val) ? defaultVal : val; } catch (Exception e) { - e.printStackTrace(); + log.error("", e); return null; } } @@ -134,7 +143,7 @@ public class XmlConfigHelper { String val = getString(rootNode, null); return ObjectUtils.isEmpty(val) ? null : Integer.parseInt(val.trim()); } catch (Exception e) { - e.printStackTrace(); + log.error("", e); return null; } } diff --git a/src/main/java/com/ynxbd/common/helper/his/HisDevHelper.java b/src/main/java/com/ynxbd/common/helper/his/HisDevHelper.java deleted file mode 100644 index b48d31c..0000000 --- a/src/main/java/com/ynxbd/common/helper/his/HisDevHelper.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.ynxbd.common.helper.his; - -import com.ynxbd.common.result.JsonResult; -import com.ynxbd.common.result.JsonResultEnum; - -import java.util.HashMap; -import java.util.Map; - -public class HisDevHelper { - - // 测试环境--------------------------------------------------------------------------- - /** - * 测试环境 - * - * @param hisEnum 枚举 - * @param params 发送的参数 - * @return 响应的xml数据 - */ - public static String getDevResponseXml(HisEnum hisEnum, Map params) { - return HisHelper.getResponseXml(hisEnum, HisHelper.HIS_SOAP_DEV_URL, params); - } - - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - public static JsonResult getDevJsonResult(HisEnum hisEnum, Map params) { - JsonResult result = JsonResult.xmlToBean(getDevResponseXml(hisEnum, params), JsonResultEnum.SYS_HIS); - if (result == null) { // 如果返回为空可能为超时 - return HisHelper.createTimeoutResult(); - } - return result; - } - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - public static JsonResult getDevJsonResult(HisEnum hisEnum, JsonResult.MapParams params) { - Map requestParams = new HashMap<>(); - if (params != null) { - params.setParams(requestParams); - } - return getDevJsonResult(hisEnum, requestParams); - } - -} diff --git a/src/main/java/com/ynxbd/common/helper/his/HisHelper.java b/src/main/java/com/ynxbd/common/helper/his/HisHelper.java deleted file mode 100644 index 4f0eb80..0000000 --- a/src/main/java/com/ynxbd/common/helper/his/HisHelper.java +++ /dev/null @@ -1,414 +0,0 @@ -package com.ynxbd.common.helper.his; - -import com.ynxbd.common.action.pay.PEnum; -import com.ynxbd.common.bean.enums.MerchantEnum; -import com.ynxbd.common.bean.pay.Order; -import com.ynxbd.common.helper.ProperHelper; -import com.ynxbd.common.helper.common.CodeHelper; -import com.ynxbd.common.helper.common.ErrorHelper; -import com.ynxbd.common.helper.common.SnowHelper; -import com.ynxbd.common.helper.common.SoapHelper; -import com.ynxbd.common.result.JsonResult; -import com.ynxbd.common.result.JsonResultEnum; -import com.ynxbd.common.service.MiddleOfficeService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; -import org.dom4j.DocumentException; -import org.dom4j.DocumentHelper; -import org.dom4j.Element; -import org.dom4j.Node; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Slf4j -public class HisHelper { - public static final String SOAP_ENV = ""阻止解析 - private static final Boolean IS_REQ_CDATA; - - // 是否传递openid给HIS推送消息 - public static final Boolean IS_PUSH_MSG; - // 是否开启支付宝蓝旗调用call_no - public static final Boolean IS_ALI_MER; - - // 开启预结算(第1开关)(如果HIS未限制-则存在直接入库风险!!!!!!!!!!!!!!!!!!) - public static final boolean IS_RECIPE_PREPAY; - - static { - ProperHelper config = new ProperHelper().read("webservice.properties"); - - String url = config.getString("his.url"); - String devUrl = config.getString("his.dev_url"); - - // 医保--------------------------------------------------------- - String mdUrl = config.getString("his.md_url"); // 微信医保旧版地址 - String wxMedUrl = config.getString("his.wx_med_url"); - String aliMedUrl = config.getString("his.ali_med_url"); - - IS_LOG_RESP = config.getBoolean("his.is_log_resp", false); - IS_PUSH_MSG = config.getBoolean("his.is_push_msg", false); - IS_ALI_MER = config.getBoolean("his.is_ali_mer", false); - IS_REQ_CDATA = config.getBoolean("his.is_req_cdata", false); - IS_RECIPE_PREPAY = config.getBoolean("his.is_recipe_prepay", false); - - if (url == null) { - log.error("WebService配置文件读取失败"); - } - HIS_SOAP_URL = initSoapURL(url); - HIS_SOAP_DEV_URL = initSoapURL(devUrl); - - // 医保--------------------------------- - HIS_WX_MED_URL = initSoapURL(wxMedUrl == null ? mdUrl : wxMedUrl); - HIS_ALI_MED_URL = initSoapURL(aliMedUrl); - } - - private static String initSoapURL(String ip) { - if (ObjectUtils.isEmpty(ip)) { - return null; - } - if (ip.contains("http")) { - return ip; - } - return "http://" + ip + "/WebService_AB.dll/soap/IInterface_AB"; - } - - /** - * 生成HIS订单号 - */ - public static List getHisTradeNo(String prefix, List ids, PEnum pEnum) { - if (pEnum == null) { - return null; - } - return CodeHelper.createTradeNo(prefix, pEnum.ORDER_CODE.toUpperCase(), ids); - } - - /** - * 生成HIS订单号 - */ - public static String getHisTradeNo(String prefix, PEnum pEnum) { - if (pEnum == null) { - return null; - } - return prefix + pEnum.ORDER_CODE.toUpperCase() + "001"; - } - - -// // 修改callNo为阿里code -// public static void putCallNoByMer(MerchantEnum merchantEnum, Map params) { -// if (merchantEnum == null) return; -// -// if (merchantEnum.equals(MerchantEnum.ALI) || merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) { -// params.put("CallNo", ALI_CALL_NO); -// } -// } - - - /** - * webService请求工具类(枚举版) - * - * @param hisEnum 枚举 - * @param params 发送的参数 - * @return 响应的xml数据 - */ - public static String getResponseXml(HisEnum hisEnum, Map params) { - return getResponseXml(hisEnum, HIS_SOAP_URL, params); - } - - /** - * webService请求工具类(枚举版) - * - * @param hisEnum 枚举 - * @param params 发送的参数 - * @return 响应的xml数据 - */ - public static String getResponseXml(HisEnum hisEnum, String soapUrl, Map params) { - return getResponseXmlForCallNo(hisEnum, soapUrl, params); - } - - - /** - * webService请求工具类(枚举版) - * - * @param hisEnum 枚举 - * @param soapUrl 路径 - * @param params 参数 - * @return 响应xml - */ - public static String getResponseXmlForCallNo(HisEnum hisEnum, String soapUrl, Map params) { - String method = hisEnum.METHOD; - String transactionCode = hisEnum.CODE; - - if (params == null || transactionCode == null || method == null) { - log.info("[WebService]-{ map | transactionCode | method 为空 }"); - return null; - } - Object callNo = params.get("CallNo"); - if (ObjectUtils.isEmpty(callNo)) { - params.put("CallNo", WECHAT_CALL_NO); - } - params.put("TransactionCode", transactionCode); - - String result = null; - try { - String reqId = SnowHelper.nextStrId(); - long begTime = System.currentTimeMillis(); // 开始时间 - String hisResponse = SoapHelper.post("HIS", soapUrl, null, SOAP_ENV + - "xmlns:urn=\"urn:Interface_ABIntf-IInterface_AB\">" + - "" + - "" + - "" + - (IS_REQ_CDATA ? "" + SoapHelper.requestParams("HIS", transactionCode, reqId, params) + "" + - (IS_REQ_CDATA ? "]]>" : "") + - "" - ); - long endTime = System.currentTimeMillis(); // 结束时间 - String takeTime = (endTime - begTime) + "ms"; // 耗时 - if (hisResponse == null) { - log.info("[{}]HIS请求无响应[rid:{}]-耗时:[{}]", transactionCode, reqId, takeTime); - return null; - } - - //解析响应消息,使用SAXReader对象 - org.dom4j.Document document = DocumentHelper.parseText(hisResponse); - if (document == null) { - log.info("[{}]HIS响应内容解析失败[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, hisResponse); - return null; - } - - List nodes = document.selectNodes("//return"); - if (nodes.isEmpty()) { - log.info("[{}]HIS请求失败[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, hisResponse); - return null; - } - - Element element = (Element) nodes.get(0); - result = element.getText(); - if (hisEnum.IS_LOG_RESP) { // 是否打印返回的xml - log.info("[{}]HIS请求成功[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, result); - - } else { - if (IS_LOG_RESP) { // 配置文件强制要求打印xml - if (!HisEnum.AP_Query_Statement.equals(hisEnum) && !HisEnum.Query_Area.equals(hisEnum)) { - log.info("[强制打印][{}]HIS请求成功[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, result); - } - } - } - } catch (DocumentException e) { - ErrorHelper.println(e); - } - return result; - } - - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - public static JsonResult getJsonResult(HisEnum hisEnum, Map params) { - JsonResult result = JsonResult.xmlToBean(getResponseXml(hisEnum, params), JsonResultEnum.SYS_HIS); - if (result == null) { // 如果返回为空可能为超时 - return createTimeoutResult(); - } - return result; - } - - public static void putAliCallNo(MerchantEnum merchantEnum, Map params) { - if (IS_ALI_MER && params != null && merchantEnum != null) { - if (merchantEnum.equals(MerchantEnum.ALI) || merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) { - params.put("CallNo", ALI_CALL_NO); - } - } - } - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - public static JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, Map params) { - putAliCallNo(merchantEnum, params); - return getJsonResult(hisEnum, params); - } - - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - public static JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params) { - Map requestParams = new HashMap<>(); - if (params != null) { - params.setParams(requestParams); - } - return getJsonResult(hisEnum, requestParams); - } - - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - public static JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, JsonResult.MapParams params) { - Map requestParams = new HashMap<>(); - if (params != null) { - params.setParams(requestParams); - } - return getJsonResultByMer(hisEnum, merchantEnum, requestParams); - } - - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - public static JsonResult createErrorResult(String message) { - if (ObjectUtils.isEmpty(message)) { - message = "【HIS】请求参数缺失"; - } - return JsonResult.createErrorResult(message, JsonResultEnum.SYS_HIS); - } - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - protected static JsonResult createTimeoutResult() { - return JsonResult.createTimeoutResult("【HIS】请求超时", JsonResultEnum.SYS_HIS); - } - - /** - * 字符串集转xml - * - * @param xmlTag xml标签 - * @param strList 字符串集 - * @return xml - */ - public static String strListToXml(String xmlTag, List strList) { - StringBuilder sb = new StringBuilder(); - for (String val : strList) { - sb.append("<").append(xmlTag).append(">").append(val).append(""); - } - return sb.toString(); - } - - - // /** -// * [支付宝] xml响应数据组装成为JSON数据 -// * -// * @param hisEnum 接口枚举 -// * @param params 参数 -// * @param merchantEnum 支付类型 -// * @return JsonResult -// */ -// public static JsonResult getJsonResult(HisEnum hisEnum, Map params, MerchantEnum merchantEnum) { -// JsonResult result = JsonResult.xmlToBean(getResponseXml(hisEnum, params, merchantEnum), JsonResultEnum.SYS_HIS); -// if (result == null) { // 如果返回为空可能为超时 -// return createTimeoutResult(); -// } -// return result; -// } - -// /** -// * xml响应数据组装成为JSON数据 -// * -// * @return 封装好的对象 -// */ -// public static JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params, MerchantEnum merchantEnum) { -// Map requestParams = new HashMap<>(); -// if (params != null) { -// params.setParams(requestParams); -// } -// return getJsonResult(hisEnum, requestParams, merchantEnum); -// } - - - // /** -// * 根据订单号获取类型 -// * -// * @param bankTransNo 交易流水号 -// * @param tradeNo HIS订单号 -// * @return 类型 -// */ -// public static String getTypeByPEnum(String bankTransNo, String tradeNo) throws ServiceException { -// if (!PayService.isNewOrder(bankTransNo, tradeNo)) { -// throw new ServiceException(ResultEnum.REFUND_IS_OLD_ORDER_NUM); -// } -// int len = tradeNo.length(); -// String middleCode1 = tradeNo.substring(len - 4, len - 3); -// String middleCode2 = tradeNo.substring(len - 4, len - 2); -// for (PEnum item : PEnum.values()) { -// if (item.ORDER_CODE.equals(middleCode1) || item.ORDER_CODE.equals(middleCode2)) { -// return item.CODE; -// } -// } -// return null; -// } - - -// /** -// * xml响应数据组装成为JSON数据 -// * -// * @param xml xml -// * @return 封装好的对象 -// */ -// public static HisResult xmlToBean(String xml) { -// if (xml == null || "".equals(xml)) { -// log.info("HIS response xml is null"); -// return HisResult.createErrorHisResult("[HIS]获取xml数据失败"); -// } -// -// JSONObject respObj; -// try { -// Document document = DocumentHelper.parseText(xml); -// Element root = document.getRootElement(); // 获取根节点元素对象 -// respObj = HisResult.nodeToJsonObject(root); -// Map map = new HashMap<>(); -// Set keys = respObj.keySet(); -// for (String key : keys) { -// if (!key.equals("TransactionCode") && !key.equals("ResponseCode") && !key.equals("ResponseMessage") && !key.equals("PatientName")) { -// map.put(key, respObj.getString(key)); -// } -// } -// respObj.put("DataMap", map); -// } catch (DocumentException e) { -// ErrorHelper.println(e); -// return HisResult.createErrorHisResult(e.getMessage()); -// } -// HisResult hisResult = JSON.toJavaObject(respObj, HisResult.class); -// if (hisResult.getResponseCode() != 0) { -// log.info("HIS Error Message:[{}]", hisResult.getResponseMessage()); -// } -// return hisResult; -// } -} diff --git a/src/main/java/com/ynxbd/common/helper/his/HisMedHelper.java b/src/main/java/com/ynxbd/common/helper/his/HisMedHelper.java deleted file mode 100644 index d2879cf..0000000 --- a/src/main/java/com/ynxbd/common/helper/his/HisMedHelper.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.ynxbd.common.helper.his; - -import com.ynxbd.common.bean.enums.MerchantEnum; -import com.ynxbd.common.result.JsonResult; -import com.ynxbd.common.result.JsonResultEnum; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; - -import java.util.HashMap; -import java.util.Map; - -@Slf4j -public class HisMedHelper { - - /** - * 医保环境 - * - * @param hisEnum 枚举 - * @param params 发送的参数 - * @return 响应的xml数据 - */ - private static String getResponseXml(MerchantEnum merchantEnum, HisEnum hisEnum, Map params) { - if (merchantEnum == null) { - log.error("[HIS医保接口]merchantEnum is null"); - return null; - } - String soapUrl = merchantEnum.isWx() ? HisHelper.HIS_WX_MED_URL : HisHelper.HIS_ALI_MED_URL; - if (ObjectUtils.isEmpty(soapUrl)) { - log.error("[HIS医保接口]soapUrl is null"); - return null; - } - return HisHelper.getResponseXml(hisEnum, merchantEnum.isWx() ? HisHelper.HIS_WX_MED_URL : HisHelper.HIS_ALI_MED_URL, params); - } - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - public static JsonResult getJsonResult(MerchantEnum merchantEnum, HisEnum hisEnum, Map params) { - HisHelper.putAliCallNo(merchantEnum, params); - - JsonResult result = JsonResult.xmlToBean(getResponseXml(merchantEnum, hisEnum, params), JsonResultEnum.SYS_HIS); - if (result == null) { // 如果返回为空可能为超时 - return HisHelper.createTimeoutResult(); - } - return result; - } - - - /** - * xml响应数据组装成为JSON数据 - * - * @return 封装好的对象 - */ - public static JsonResult getJsonResult(MerchantEnum merchantEnum, HisEnum hisEnum, JsonResult.MapParams params) { - Map requestParams = new HashMap<>(); - if (params != null) { - params.setParams(requestParams); - } - return getJsonResult(merchantEnum, hisEnum, requestParams); - } - - - // /** -// * xml响应数据组装成为JSON数据 -// * -// * @return 封装好的对象 -// */ -// public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, Map params) { -// return getJsonResultByMer(isDev, hisEnum, null, params); -// } - -// /** -// * xml响应数据组装成为JSON数据 -// * -// * @return 封装好的对象 -// */ -// public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, JsonResult.MapParams params) { -// return getJsonResultByMer(isDev, hisEnum, null, params); -// } - - -} diff --git a/src/main/java/com/ynxbd/common/helper/lis/RMLisHelper.java b/src/main/java/com/ynxbd/common/helper/lis/RMLisHelper.java index 642d8da..4c8502f 100644 --- a/src/main/java/com/ynxbd/common/helper/lis/RMLisHelper.java +++ b/src/main/java/com/ynxbd/common/helper/lis/RMLisHelper.java @@ -15,6 +15,7 @@ import org.dom4j.Node; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; // 瑞美LIS @@ -62,7 +63,7 @@ public class RMLisHelper { String result; try { - String reqId = SnowHelper.nextStrId(); + String reqId = UUID.randomUUID().toString(); long begTime = System.currentTimeMillis(); // 开始时间 String responseXml = SoapHelper.post("RMLis", LIS_SOAP_URL, null, "" + diff --git a/src/main/java/com/ynxbd/common/helper/his/AliOldHelper.java b/src/main/java/com/ynxbd/common/his/AliOldHelper.java similarity index 95% rename from src/main/java/com/ynxbd/common/helper/his/AliOldHelper.java rename to src/main/java/com/ynxbd/common/his/AliOldHelper.java index 0f80f7d..2244a3b 100644 --- a/src/main/java/com/ynxbd/common/helper/his/AliOldHelper.java +++ b/src/main/java/com/ynxbd/common/his/AliOldHelper.java @@ -1,31 +1,31 @@ -package com.ynxbd.common.helper.his; - -import com.alipay.api.AlipayApiException; -import com.alipay.api.AlipayClient; -import com.alipay.api.DefaultAlipayClient; -import com.alipay.api.request.AlipayDataBillAccountlogQueryRequest; -import com.alipay.api.response.AlipayDataBillAccountlogQueryResponse; -import com.ynxbd.ali.config.AliConfig; -import com.ynxbd.common.helper.common.JsonHelper; - -public class AliOldHelper { - - public static void test(String begDate, String endDate, String outTradeNo) throws AlipayApiException { - AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AliConfig.APP_ID, AliConfig.APP_PRIVATE_KEY, "json", "GBK", AliConfig.ALI_PUBLIC_KEY, "RSA2"); - AlipayDataBillAccountlogQueryRequest request = new AlipayDataBillAccountlogQueryRequest(); - request.setBizContent("{" + - " \"start_time\":\"" + begDate + " 00:00:00\"," + - " \"end_time\":\"" + endDate + " 00:00:00\"," + - " \"merchant_order_no\":\"" + outTradeNo + "\"," + - "}"); - AlipayDataBillAccountlogQueryResponse response = alipayClient.execute(request); - System.out.println(JsonHelper.toJsonString(response)); - if (response.isSuccess()) { - System.out.println("调用成功"); - } else { - System.out.println("调用失败"); - } - } - - -} +package com.ynxbd.common.his; + +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.request.AlipayDataBillAccountlogQueryRequest; +import com.alipay.api.response.AlipayDataBillAccountlogQueryResponse; +import com.ynxbd.ali.config.AliConfig; +import com.ynxbd.common.helper.common.JsonHelper; + +public class AliOldHelper { + + public static void test(String begDate, String endDate, String outTradeNo) throws AlipayApiException { + AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AliConfig.APP_ID, AliConfig.APP_PRIVATE_KEY, "json", "GBK", AliConfig.ALI_PUBLIC_KEY, "RSA2"); + AlipayDataBillAccountlogQueryRequest request = new AlipayDataBillAccountlogQueryRequest(); + request.setBizContent("{" + + " \"start_time\":\"" + begDate + " 00:00:00\"," + + " \"end_time\":\"" + endDate + " 00:00:00\"," + + " \"merchant_order_no\":\"" + outTradeNo + "\"," + + "}"); + AlipayDataBillAccountlogQueryResponse response = alipayClient.execute(request); + System.out.println(JsonHelper.toJsonString(response)); + if (response.isSuccess()) { + System.out.println("调用成功"); + } else { + System.out.println("调用失败"); + } + } + + +} diff --git a/src/main/java/com/ynxbd/common/his/HisClient.java b/src/main/java/com/ynxbd/common/his/HisClient.java new file mode 100644 index 0000000..acf98c8 --- /dev/null +++ b/src/main/java/com/ynxbd/common/his/HisClient.java @@ -0,0 +1,252 @@ +package com.ynxbd.common.his; + +import com.ynxbd.common.bean.enums.MerchantEnum; +import com.ynxbd.common.helper.common.ErrorHelper; +import com.ynxbd.common.helper.common.SoapHelper; +import com.ynxbd.common.result.JsonResult; +import com.ynxbd.common.result.JsonResultEnum; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.Node; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +@Slf4j +public class HisClient { + private final String soapUrl; + + private HisClient() { + this.soapUrl = null; + } + + public HisClient(String soapUrl) { + this.soapUrl = soapUrl; + } + + + /** + * webService请求工具类(枚举版) + * + * @param hisEnum 枚举 + * @param params 参数 + * @return 响应xml + */ + public String call(HisEnum hisEnum, Map params) { + String reqSoapUrl = this.soapUrl; + if (ObjectUtils.isEmpty(reqSoapUrl)) { + log.error("[WebService]-soapUrl为空"); + return null; + } + String method = hisEnum.METHOD; + String transactionCode = hisEnum.CODE; + + if (params == null || transactionCode == null || method == null) { + log.error("[WebService]-{ map | transactionCode | method 为空 }"); + return null; + } + Object callNo = params.get("CallNo"); + if (ObjectUtils.isEmpty(callNo)) { + params.put("CallNo", HisConfig.WECHAT_CALL_NO); + } + params.put("TransactionCode", transactionCode); + + String result = null; + try { + String reqId = UUID.randomUUID().toString(); + long begTime = System.currentTimeMillis(); // 开始时间 + String hisResponse = SoapHelper.post("HIS", reqSoapUrl, null, HisConfig.SOAP_ENV + + "xmlns:urn=\"urn:Interface_ABIntf-IInterface_AB\">" + + "" + + "" + + "" + + (HisConfig.IS_REQ_CDATA ? "" + SoapHelper.requestParams("HIS", transactionCode, reqId, params) + "" + + (HisConfig.IS_REQ_CDATA ? "]]>" : "") + + "" + ); + long endTime = System.currentTimeMillis(); // 结束时间 + String takeTime = (endTime - begTime) + "ms"; // 耗时 + if (hisResponse == null) { + log.info("[{}]HIS请求无响应[rid:{}]-耗时:[{}]", transactionCode, reqId, takeTime); + return null; + } + + //解析响应消息,使用SAXReader对象 + org.dom4j.Document document = DocumentHelper.parseText(hisResponse); + if (document == null) { + log.info("[{}]HIS响应内容解析失败[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, hisResponse); + return null; + } + + List nodes = document.selectNodes("//return"); + if (nodes.isEmpty()) { + log.info("[{}]HIS请求失败[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, hisResponse); + return null; + } + + Element element = (Element) nodes.get(0); + result = element.getText(); + if (hisEnum.IS_LOG_RESP) { // 是否打印返回的xml + log.info("[{}]HIS请求成功[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, result); + + } else { + if (HisConfig.IS_LOG_RESP) { // 配置文件强制要求打印xml + if (!HisEnum.AP_Query_Statement.equals(hisEnum) && !HisEnum.Query_Area.equals(hisEnum)) { + log.info("[强制打印][{}]HIS请求成功[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, result); + } + } + } + } catch (DocumentException e) { + ErrorHelper.println(e); + } + return result; + } + + + /** + * xml响应数据组装成为JSON数据 + * + * @return 封装好的对象 + */ + public JsonResult getJsonResult(HisEnum hisEnum, Map params) { + JsonResult result = JsonResult.xmlToBean(call(hisEnum, params), JsonResultEnum.SYS_HIS); + if (result == null) { // 如果返回为空可能为超时 + return createTimeoutResult(); + } + return result; + } + + public void putAliCallNo(MerchantEnum merchantEnum, Map params) { + if (HisConfig.IS_ALI_MER && params != null && merchantEnum != null) { + if (merchantEnum.equals(MerchantEnum.ALI) || merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) { + params.put("CallNo", HisConfig.ALI_CALL_NO); + } + } + } + + /** + * xml响应数据组装成为JSON数据 + * + * @return 封装好的对象 + */ + public JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, Map params) { + putAliCallNo(merchantEnum, params); + return getJsonResult(hisEnum, params); + } + + + /** + * xml响应数据组装成为JSON数据 + * + * @return 封装好的对象 + */ + public JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params) { + Map requestParams = new HashMap<>(); + if (params != null) { + params.setParams(requestParams); + } + return getJsonResult(hisEnum, requestParams); + } + + + /** + * xml响应数据组装成为JSON数据 + * + * @return 封装好的对象 + */ + public JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, JsonResult.MapParams params) { + Map requestParams = new HashMap<>(); + if (params != null) { + params.setParams(requestParams); + } + return getJsonResultByMer(hisEnum, merchantEnum, requestParams); + } + + + /** + * xml响应数据组装成为JSON数据 + * + * @return 封装好的对象 + */ + public JsonResult createErrorResult(String message) { + if (ObjectUtils.isEmpty(message)) { + message = "【HIS】请求参数缺失"; + } + return JsonResult.createErrorResult(message, JsonResultEnum.SYS_HIS); + } + + /** + * xml响应数据组装成为JSON数据 + * + * @return 封装好的对象 + */ + public JsonResult createTimeoutResult() { + return JsonResult.createTimeoutResult("【HIS】请求超时", JsonResultEnum.SYS_HIS); + } + + +// /** +// * 根据订单号获取类型 +// * +// * @param bankTransNo 交易流水号 +// * @param tradeNo HIS订单号 +// * @return 类型 +// */ +// public static String getTypeByPEnum(String bankTransNo, String tradeNo) throws ServiceException { +// if (!PayService.isNewOrder(bankTransNo, tradeNo)) { +// throw new ServiceException(ResultEnum.REFUND_IS_OLD_ORDER_NUM); +// } +// int len = tradeNo.length(); +// String middleCode1 = tradeNo.substring(len - 4, len - 3); +// String middleCode2 = tradeNo.substring(len - 4, len - 2); +// for (PEnum item : PEnum.values()) { +// if (item.ORDER_CODE.equals(middleCode1) || item.ORDER_CODE.equals(middleCode2)) { +// return item.CODE; +// } +// } +// return null; +// } + + +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @param xml xml +// * @return 封装好的对象 +// */ +// public static HisResult xmlToBean(String xml) { +// if (xml == null || "".equals(xml)) { +// log.info("HIS response xml is null"); +// return HisResult.createErrorHisResult("[HIS]获取xml数据失败"); +// } +// +// JSONObject respObj; +// try { +// Document document = DocumentHelper.parseText(xml); +// Element root = document.getRootElement(); // 获取根节点元素对象 +// respObj = HisResult.nodeToJsonObject(root); +// Map map = new HashMap<>(); +// Set keys = respObj.keySet(); +// for (String key : keys) { +// if (!key.equals("TransactionCode") && !key.equals("ResponseCode") && !key.equals("ResponseMessage") && !key.equals("PatientName")) { +// map.put(key, respObj.getString(key)); +// } +// } +// respObj.put("DataMap", map); +// } catch (DocumentException e) { +// ErrorHelper.println(e); +// return HisResult.createErrorHisResult(e.getMessage()); +// } +// HisResult hisResult = JSON.toJavaObject(respObj, HisResult.class); +// if (hisResult.getResponseCode() != 0) { +// log.info("HIS Error Message:[{}]", hisResult.getResponseMessage()); +// } +// return hisResult; +// } +} diff --git a/src/main/java/com/ynxbd/common/his/HisConfig.java b/src/main/java/com/ynxbd/common/his/HisConfig.java new file mode 100644 index 0000000..53578d1 --- /dev/null +++ b/src/main/java/com/ynxbd/common/his/HisConfig.java @@ -0,0 +1,74 @@ +package com.ynxbd.common.his; + +import com.ynxbd.common.helper.common.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; + +@Slf4j +public class HisConfig { + public static final String SOAP_ENV = ""阻止解析 + public static final Boolean IS_REQ_CDATA; + + // 是否传递openid给HIS推送消息 + public static final Boolean IS_PUSH_MSG; + // 是否开启支付宝蓝旗调用call_no + public static final Boolean IS_ALI_MER; + + // 开启预结算(第1开关)(如果HIS未限制-则存在直接入库风险!!!!!!!!!!!!!!!!!!) + public static final boolean IS_RX_PREPAY; + + static { + XmlConfigHelper config = new XmlConfigHelper().read("webservice.xml", "his"); + + IS_LOG_RESP = config.getBoolean("is_log_resp", false); + IS_PUSH_MSG = config.getBoolean("is_push_msg", false); + IS_ALI_MER = config.getBoolean("is_ali_mer", false); + IS_REQ_CDATA = config.getBoolean("is_req_cdata", false); + IS_RX_PREPAY = config.getBoolean("is_rx_prepay", false); + + String url = config.getString("url"); + if (url == null) { + log.error("WebService配置文件读取失败"); + } + HIS_SOAP_URL = initSoapURL(url); + HIS_SOAP_DEV_URL = initSoapURL(config.getString("dev_url")); + + // 医保--------------------------------- + HIS_WX_MED_URL = initSoapURL(config.getString("wx_med_url")); + HIS_ALI_MED_URL = initSoapURL(config.getString("ali_med_url")); + } + + private static String initSoapURL(String ip) { + if (ObjectUtils.isEmpty(ip)) { + return null; + } + if (ip.contains("http")) { + return ip; + } + return "http://" + ip + "/WebService_AB.dll/soap/IInterface_AB"; + } +} diff --git a/src/main/java/com/ynxbd/common/helper/his/HisEnum.java b/src/main/java/com/ynxbd/common/his/HisEnum.java similarity index 97% rename from src/main/java/com/ynxbd/common/helper/his/HisEnum.java rename to src/main/java/com/ynxbd/common/his/HisEnum.java index 60e8339..5f038f3 100644 --- a/src/main/java/com/ynxbd/common/helper/his/HisEnum.java +++ b/src/main/java/com/ynxbd/common/his/HisEnum.java @@ -1,142 +1,142 @@ -package com.ynxbd.common.helper.his; - -public enum HisEnum { - AP_Query_Hospital("查询医院列表", "1", "AP_Query_Hospital", true), - - AP_Query_Patient("[患者]获取用户绑定信息", "1001", "AP_Query_Patient", true), - AP_Binding_Card("[患者]身份证绑定", "1002", "AP_Binding_Card", true), - AP_UnBinding_Card("[患者]身份证解绑", "1003", "AP_UnBinding_Card", true), - AP_Query_GMC_Patient("[患者]医共体ID查询", "1015", "UniversalInterface", true), - - Medical_Insurance_Bill("[医保]查询患者医保结算清单", "1008", "UniversalInterface", true), - - // 快速发药[自定义] - QuickDrugDispense("[处方]快速发药", "11001", "UniversalInterface", true), - - TPP_QR_Reg("[第三方]扫码挂号", "11002", "UniversalInterface", true), - - // 标准物价查询[自定义] - Recipe_Query_StandardPrice("[价格]标准物价查询", "8002", "UniversalInterface", false), - - // 就诊记录[自定义] - Query_TreatRecords("查询就诊记录", "1004", "UniversalInterface", true), - - // 报告------------------ - AP_Query_PEISReport("[报告]体检报告", "9001", "AP_Query_PEISReport", true), - AP_Query_CheckApplication("[报告]检查申请单", "5001", "AP_Query_CheckApplication", false), - AP_Query_InspectionApplication("[报告]检验(化验)申请单", "5002", "AP_Query_InspectionApplication", false), - - // 挂号记录--------------- - AP_Query_Regist("[挂号记录]查询历史挂号记录", "2004", "AP_Query_Regist", true), - AP_Query_Reservation("[预约挂号]查询预约记录", "3004", "AP_Query_Reservation", true), - - // 分时段挂号--------- - AP_Query_Dept_New("[分时段挂号]查询科室列表", "7001", "AP_Query_Dept_New", false), - AP_Query_Doct_New("[分时段挂号]根据科室查询医生列表", "7002", "AP_Query_Doct_New", true), - AP_Query_Register_Source_New("[分时段挂号]根据医生查询号源 ", "7003", "AP_Query_Register_Source_New", false), - AP_Regist_New("[分时段挂号]执行挂号", "7004", "AP_Regist_New", true), - AP_Occupy_Source_New("[分时段挂号]占号", "7005", "AP_Occupy_Source_New", true), - - // 普通挂号--------------- - AP_Regist("[今日挂号]执行挂号", "2003", "AP_Regist", true), - AP_Query_Dept("[今日挂号]查询科室列表", "2001", "AP_Query_Dept", true), - AP_Query_Doct("[今日挂号]根据科室查询医生列表", "2002", "AP_Query_Doct", true), - // ---------------------- - AP_Query_Reservation_Dept("[预约挂号]查询科室列表", "3001", "AP_Query_Reservation_Dept", true), - AP_Query_Reservation_Doct("[预约挂号]根据科室查询医生列表", "3002", "AP_Query_Reservation_Doct", true), - AP_Reservation("[预约挂号]执行预约", "3003", "AP_Reservation", true), - AP_Recall_Reservation("[预约挂号]取消预约", "3006", "AP_Recall_Reservation", true), - - AP_Refund_Register("[今日挂号]取消预约", "4007", "AP_Refund_Register", true), - - //排班记录 - AP_Doctor_Schedule("[排班]医生排班表","8003","UniversalInterface",true), - Query_Area("[地区]查询行政区划","8005","UniversalInterface",false), - - // 支付[自定义]------------------ - Create_Self_Help("[处方]生成自助申请单", "10001", "UniversalInterface", true), - Query_Self_Help("[处方]查询自助申请单信息", "10002", "UniversalInterface", true), - - AP_Query_UnPay_Invoice("[处方]查询待缴费项目", "4001", "AP_Query_UnPay_Invoice", true), - AP_Query_OutpatientFee("[处方]查询已缴费项目", "5005", "AP_Query_OutpatientFee", true), - AP_Pay_Invoice("[处方]更新recipeId参数为List,支持多个处方单同时缴费", "4002", "AP_Pay_Invoice", true), - - AP_PrePay_Invoice_New("[处方]预结算", "4004", "AP_PrePay_Invoice_New", true), - AP_Pay_Invoice_New("[处方]预结算缴费", "4005", "AP_Pay_Invoice_New", true), - - YDZF_QueryDiseaseInfo("[医保]获取慢性病列表","4006","YDZF_QueryDiseaseInfo",true), - - AP_Query_Statement("查询对账报表", "5007", "AP_Query_Statement", false), - AP_Query_Transaction("查询交易流水", "5008", "AP_Query_Transaction", true), - AP_Query_StatementByFPNum("根据发票号查询交易流水", "5011", "AP_Query_StatementByFPNum", true), - - // - Medical_PayOrders("[医保]处方下单接口", "40022", "YDZF_PayOrders", true), - Medical_Refund("[医保]退费", "40024", "YDZF_RefundOrder", true), - Medical_PAY("[医保]HIS医保结算", "40023", "YDZF_SaveToHIS", true), - Medical_QueryOrderStatus("[医保]查询医保结算信息", "40025", "YDZF_QueryOrderStatus", true), - - // 住院------------------------- - YDZF_UploadFeesInfo_ZY("[住院][医保]6201上传费用明细 + 6202 支付下单", "4009", "YDZF_UploadFeesInfo_ZY", true), - YDZF_SaveToHIS_ZY("[住院][医保]HIS结算(住院) 6301", "4010", "YDZF_SaveToHIS_ZY", true), - - AP_Query_Prepay("[住院]查询预交金缴费记录(出院后)", "5003", "AP_Query_Prepay", true), - AP_Query_InpatientFee("[住院]查询住院费用清单(住院中)", "5004", "AP_Query_InpatientFee", true), - AP_Query_InpatientSummaryFee("[住院]查询住院日费用汇总(住院中)", "5006", "AP_Query_InpatientSummaryFee", true), - - Query_OutPatientRecords("[住院]通过患者ID查询住院记录(出院后)", "1011", "UniversalInterface", true), - Query_OutHospTreatFee("[住院]通过住院号查询费用明细(出院后)", "1012", "UniversalInterface", true), - - - Query_InHospPrepay("[住院]预交金缴费", "4003", "UniversalInterface", true), - Query_InHospByTreatNum("[住院]通过住院号查询患者信息(含预交金)", "1005", "UniversalInterface", true), - Query_InHospByPatientId("[住院]通过患者ID查询在院患者信息(目前只能查询住院中)", "1006", "UniversalInterface", true), - - XK_GET_TREAT_LIST("[互联网医院]查询就诊记录列表", "13001", "UniversalInterface", true), - XK_CREATE_TREAT("[互联网医院]创建就诊记录", "13002", "UniversalInterface", true), - XK_QUERY_TREAT("[互联网医院]查询就诊记录诊断信息", "13003", "UniversalInterface", true), - XK_DOC_CA("[互联网医院]查询医生电子签名", "13004", "UniversalInterface", true), - XK_INQUIRY_FEE("[互联网医院]查询问诊费用信息","13005","UniversalInterface", true), - - XK_CREATE_INQUIRY("[互联网医院]创建问诊记录","13006","UniversalInterface",true), - - XK_MEDICAL_RECIPE("[互联网医院]处方医保双通道流转","13007","UniversalInterface",true), - - XK_QUERY_RE_REGISTER("[互联网医院]查询复诊挂号费","13008","UniversalInterface",true), - - Query_TreatMedicalRecord("[病历]查询门诊病历", "1014", "UniversalInterface", false), - - // 在线签到 - AP_Query_SignIn("[在线签到]查询预约待签到记录","7007","AP_Query_SignIn",true), - AP_SignIN("[在线签到]执行预约签到","7008","AP_SignIn",true), - AP_Query_Line_SignIn("[在线签到]查询已挂号未签到记录","7009","AP_Query_LineSignIn",false), - AP_Line_SignIN("[在线签到]执行挂号患者签到","7010","AP_LineSignIn",true), - - // 自助开单 - SH_SELF_HELP_QUERY("[查询自助开单信息]","10003","UniversalInterface",true), - SH_SELF_HELP_CREATE("[创建自助开单申请单]","10004","UniversalInterface",true), - - QUERY_ELECTRON_INVOICE("[查询电子发票信息]","8004","UniversalInterface",false), - - QUERY_AUTH_AGENT("委托人信息[查询]","11003","UniversalInterface", true), - ADD_AUTH_AGENT("委托人信息[新增]","11004","UniversalInterface",true), - UPDATE_AUTH_AGENT("委托人信息[修改]","11005","UniversalInterface",true), - DELETE_AUTH_AGENT("委托人信息[删除]","11006","UniversalInterface",true), - - HIS_XK_RX_DICT("开方字典查询","13010","UniversalInterface",false), - HIS_XK_RX_CREATE("线上开方","13011","UniversalInterface",true), - ; - - public final String NAME; - public final String CODE; - public final String METHOD; - public final boolean IS_LOG_RESP; // 是否打印xml - - - HisEnum(String NAME, String CODE, String METHOD, boolean IS_LOG_RESP) { - this.NAME = NAME; - this.CODE = CODE; - this.METHOD = METHOD; - this.IS_LOG_RESP = IS_LOG_RESP; - } -} +package com.ynxbd.common.his; + +public enum HisEnum { + AP_Query_Hospital("查询医院列表", "1", "AP_Query_Hospital", true), + + AP_Query_Patient("[患者]获取用户绑定信息", "1001", "AP_Query_Patient", true), + AP_Binding_Card("[患者]身份证绑定", "1002", "AP_Binding_Card", true), + AP_UnBinding_Card("[患者]身份证解绑", "1003", "AP_UnBinding_Card", true), + AP_Query_GMC_Patient("[患者]医共体ID查询", "1015", "UniversalInterface", true), + + Medical_Insurance_Bill("[医保]查询患者医保结算清单", "1008", "UniversalInterface", true), + + // 快速发药[自定义] + QuickDrugDispense("[处方]快速发药", "11001", "UniversalInterface", true), + + TPP_QR_Reg("[第三方]扫码挂号", "11002", "UniversalInterface", true), + + // 标准物价查询[自定义] + Recipe_Query_StandardPrice("[价格]标准物价查询", "8002", "UniversalInterface", false), + + // 就诊记录[自定义] + Query_TreatRecords("查询就诊记录", "1004", "UniversalInterface", true), + + // 报告------------------ + AP_Query_PEISReport("[报告]体检报告", "9001", "AP_Query_PEISReport", true), + AP_Query_CheckApplication("[报告]检查申请单", "5001", "AP_Query_CheckApplication", false), + AP_Query_InspectionApplication("[报告]检验(化验)申请单", "5002", "AP_Query_InspectionApplication", false), + + // 挂号记录--------------- + AP_Query_Regist("[挂号记录]查询历史挂号记录", "2004", "AP_Query_Regist", true), + AP_Query_Reservation("[预约挂号]查询预约记录", "3004", "AP_Query_Reservation", true), + + // 分时段挂号--------- + AP_Query_Dept_New("[分时段挂号]查询科室列表", "7001", "AP_Query_Dept_New", false), + AP_Query_Doct_New("[分时段挂号]根据科室查询医生列表", "7002", "AP_Query_Doct_New", true), + AP_Query_Register_Source_New("[分时段挂号]根据医生查询号源 ", "7003", "AP_Query_Register_Source_New", false), + AP_Regist_New("[分时段挂号]执行挂号", "7004", "AP_Regist_New", true), + AP_Occupy_Source_New("[分时段挂号]占号", "7005", "AP_Occupy_Source_New", true), + + // 普通挂号--------------- + AP_Regist("[今日挂号]执行挂号", "2003", "AP_Regist", true), + AP_Query_Dept("[今日挂号]查询科室列表", "2001", "AP_Query_Dept", true), + AP_Query_Doct("[今日挂号]根据科室查询医生列表", "2002", "AP_Query_Doct", true), + // ---------------------- + AP_Query_Reservation_Dept("[预约挂号]查询科室列表", "3001", "AP_Query_Reservation_Dept", true), + AP_Query_Reservation_Doct("[预约挂号]根据科室查询医生列表", "3002", "AP_Query_Reservation_Doct", true), + AP_Reservation("[预约挂号]执行预约", "3003", "AP_Reservation", true), + AP_Recall_Reservation("[预约挂号]取消预约", "3006", "AP_Recall_Reservation", true), + + AP_Refund_Register("[今日挂号]取消预约", "4007", "AP_Refund_Register", true), + + //排班记录 + AP_Doctor_Schedule("[排班]医生排班表","8003","UniversalInterface",true), + Query_Area("[地区]查询行政区划","8005","UniversalInterface",false), + + // 支付[自定义]------------------ + Create_Self_Help("[处方]生成自助申请单", "10001", "UniversalInterface", true), + Query_Self_Help("[处方]查询自助申请单信息", "10002", "UniversalInterface", true), + + AP_Query_UnPay_Invoice("[处方]查询待缴费项目", "4001", "AP_Query_UnPay_Invoice", true), + AP_Query_OutpatientFee("[处方]查询已缴费项目", "5005", "AP_Query_OutpatientFee", true), + AP_Pay_Invoice("[处方]更新recipeId参数为List,支持多个处方单同时缴费", "4002", "AP_Pay_Invoice", true), + + AP_PrePay_Invoice_New("[处方]预结算", "4004", "AP_PrePay_Invoice_New", true), + AP_Pay_Invoice_New("[处方]预结算缴费", "4005", "AP_Pay_Invoice_New", true), + + YDZF_QueryDiseaseInfo("[医保]获取慢性病列表","4006","YDZF_QueryDiseaseInfo",true), + + AP_Query_Statement("查询对账报表", "5007", "AP_Query_Statement", false), + AP_Query_Transaction("查询交易流水", "5008", "AP_Query_Transaction", true), + AP_Query_StatementByFPNum("根据发票号查询交易流水", "5011", "AP_Query_StatementByFPNum", true), + + // + Medical_PayOrders("[医保]处方下单接口", "40022", "YDZF_PayOrders", true), + Medical_Refund("[医保]退费", "40024", "YDZF_RefundOrder", true), + Medical_PAY("[医保]HIS医保结算", "40023", "YDZF_SaveToHIS", true), + Medical_QueryOrderStatus("[医保]查询医保结算信息", "40025", "YDZF_QueryOrderStatus", true), + + // 住院------------------------- + YDZF_UploadFeesInfo_ZY("[住院][医保]6201上传费用明细 + 6202 支付下单", "4009", "YDZF_UploadFeesInfo_ZY", true), + YDZF_SaveToHIS_ZY("[住院][医保]HIS结算(住院) 6301", "4010", "YDZF_SaveToHIS_ZY", true), + + AP_Query_Prepay("[住院]查询预交金缴费记录(出院后)", "5003", "AP_Query_Prepay", true), + AP_Query_InpatientFee("[住院]查询住院费用清单(住院中)", "5004", "AP_Query_InpatientFee", true), + AP_Query_InpatientSummaryFee("[住院]查询住院日费用汇总(住院中)", "5006", "AP_Query_InpatientSummaryFee", true), + + Query_OutPatientRecords("[住院]通过患者ID查询住院记录(出院后)", "1011", "UniversalInterface", true), + Query_OutHospTreatFee("[住院]通过住院号查询费用明细(出院后)", "1012", "UniversalInterface", true), + + + Query_InHospPrepay("[住院]预交金缴费", "4003", "UniversalInterface", true), + Query_InHospByTreatNum("[住院]通过住院号查询患者信息(含预交金)", "1005", "UniversalInterface", true), + Query_InHospByPatientId("[住院]通过患者ID查询在院患者信息(目前只能查询住院中)", "1006", "UniversalInterface", true), + + XK_GET_TREAT_LIST("[互联网医院]查询就诊记录列表", "13001", "UniversalInterface", true), + XK_CREATE_TREAT("[互联网医院]创建就诊记录", "13002", "UniversalInterface", true), + XK_QUERY_TREAT("[互联网医院]查询就诊记录诊断信息", "13003", "UniversalInterface", true), + XK_DOC_CA("[互联网医院]查询医生电子签名", "13004", "UniversalInterface", true), + XK_INQUIRY_FEE("[互联网医院]查询问诊费用信息","13005","UniversalInterface", true), + + XK_CREATE_INQUIRY("[互联网医院]创建问诊记录","13006","UniversalInterface",true), + + XK_MEDICAL_RECIPE("[互联网医院]处方医保双通道流转","13007","UniversalInterface",true), + + XK_QUERY_RE_REGISTER("[互联网医院]查询复诊挂号费","13008","UniversalInterface",true), + + Query_TreatMedicalRecord("[病历]查询门诊病历", "1014", "UniversalInterface", false), + + // 在线签到 + AP_Query_SignIn("[在线签到]查询预约待签到记录","7007","AP_Query_SignIn",true), + AP_SignIN("[在线签到]执行预约签到","7008","AP_SignIn",true), + AP_Query_Line_SignIn("[在线签到]查询已挂号未签到记录","7009","AP_Query_LineSignIn",false), + AP_Line_SignIN("[在线签到]执行挂号患者签到","7010","AP_LineSignIn",true), + + // 自助开单 + SH_SELF_HELP_QUERY("[查询自助开单信息]","10003","UniversalInterface",true), + SH_SELF_HELP_CREATE("[创建自助开单申请单]","10004","UniversalInterface",true), + + QUERY_ELECTRON_INVOICE("[查询电子发票信息]","8004","UniversalInterface",false), + + QUERY_AUTH_AGENT("委托人信息[查询]","11003","UniversalInterface", true), + ADD_AUTH_AGENT("委托人信息[新增]","11004","UniversalInterface",true), + UPDATE_AUTH_AGENT("委托人信息[修改]","11005","UniversalInterface",true), + DELETE_AUTH_AGENT("委托人信息[删除]","11006","UniversalInterface",true), + + HIS_XK_RX_DICT("开方字典查询","13010","UniversalInterface",false), + HIS_XK_RX_CREATE("线上开方","13011","UniversalInterface",true), + ; + + public final String NAME; + public final String CODE; + public final String METHOD; + public final boolean IS_LOG_RESP; // 是否打印xml + + + HisEnum(String NAME, String CODE, String METHOD, boolean IS_LOG_RESP) { + this.NAME = NAME; + this.CODE = CODE; + this.METHOD = METHOD; + this.IS_LOG_RESP = IS_LOG_RESP; + } +} diff --git a/src/main/java/com/ynxbd/common/his/HisFactory.java b/src/main/java/com/ynxbd/common/his/HisFactory.java new file mode 100644 index 0000000..e8eecab --- /dev/null +++ b/src/main/java/com/ynxbd/common/his/HisFactory.java @@ -0,0 +1,92 @@ +package com.ynxbd.common.his; + +import com.ynxbd.common.action.pay.PEnum; +import com.ynxbd.common.bean.enums.MerchantEnum; +import com.ynxbd.common.bean.pay.Order; +import com.ynxbd.common.helper.common.CodeHelper; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +@Slf4j +public class HisFactory { + private static class NULL_CLIENT { + private static final HisClient INSTANCE = new HisClient(null); + } + + private static class PROD_CLIENT { + private static final HisClient INSTANCE = new HisClient(HisConfig.HIS_SOAP_URL); + } + + private static class DEV_CLIENT { + private static final HisClient INSTANCE = new HisClient(HisConfig.HIS_SOAP_DEV_URL); + } + + private static class WX_MED_CLIENT { + private static final HisClient INSTANCE = new HisClient(HisConfig.HIS_WX_MED_URL); + } + + private static class ALI_MED_CLIENT { + private static final HisClient INSTANCE = new HisClient(HisConfig.HIS_ALI_MED_URL); + } + + public static HisClient His() { + return PROD_CLIENT.INSTANCE; + } + + // HIS环境切换 + public static HisClient His(boolean isDev) { + return isDev ? DEV_CLIENT.INSTANCE : PROD_CLIENT.INSTANCE; + } + + // HIS医保 + public static HisClient HisMed(MerchantEnum merchantEnum) { + return HisMed(merchantEnum, false); + } + + public static HisClient HisMed(MerchantEnum merchantEnum, boolean isDev) { + if (merchantEnum == null) { + return NULL_CLIENT.INSTANCE; + } + if (isDev) { + return DEV_CLIENT.INSTANCE; + } + return merchantEnum.isWx() ? WX_MED_CLIENT.INSTANCE : ALI_MED_CLIENT.INSTANCE; + } + + /** + * 生成HIS订单号 + */ + public static List getHisTradeNo(String prefix, List ids, PEnum pEnum) { + if (pEnum == null) { + return null; + } + return CodeHelper.createTradeNo(prefix, pEnum.ORDER_CODE.toUpperCase(), ids); + } + + /** + * 生成HIS订单号 + */ + public static String getHisTradeNo(String prefix, PEnum pEnum) { + if (pEnum == null) { + return null; + } + return prefix + pEnum.ORDER_CODE.toUpperCase() + "001"; + } + + + /** + * 字符串集转xml + * + * @param xmlTag xml标签 + * @param strList 字符串集 + * @return xml + */ + public static String strListToXml(String xmlTag, List strList) { + StringBuilder sb = new StringBuilder(); + for (String val : strList) { + sb.append("<").append(xmlTag).append(">").append(val).append(""); + } + return sb.toString(); + } +} diff --git a/src/main/java/com/ynxbd/common/his/old/HisDevHelper.java b/src/main/java/com/ynxbd/common/his/old/HisDevHelper.java new file mode 100644 index 0000000..bb62395 --- /dev/null +++ b/src/main/java/com/ynxbd/common/his/old/HisDevHelper.java @@ -0,0 +1,50 @@ +//package com.ynxbd.common.his; +// +//import com.ynxbd.common.result.JsonResult; +//import com.ynxbd.common.result.JsonResultEnum; +// +//import java.util.HashMap; +//import java.util.Map; +// +//public class HisDevHelper { +// +// // 测试环境--------------------------------------------------------------------------- +// /** +// * 测试环境 +// * +// * @param hisEnum 枚举 +// * @param params 发送的参数 +// * @return 响应的xml数据 +// */ +// public static String getDevResponseXml(HisEnum hisEnum, Map params) { +// return HisHelper.getResponseXml(hisEnum, HisHelper.HIS_SOAP_DEV_URL, params); +// } +// +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// public static JsonResult getDevJsonResult(HisEnum hisEnum, Map params) { +// JsonResult result = JsonResult.xmlToBean(getDevResponseXml(hisEnum, params), JsonResultEnum.SYS_HIS); +// if (result == null) { // 如果返回为空可能为超时 +// return HisHelper.createTimeoutResult(); +// } +// return result; +// } +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// public static JsonResult getDevJsonResult(HisEnum hisEnum, JsonResult.MapParams params) { +// Map requestParams = new HashMap<>(); +// if (params != null) { +// params.setParams(requestParams); +// } +// return getDevJsonResult(hisEnum, requestParams); +// } +// +//} diff --git a/src/main/java/com/ynxbd/common/his/old/HisHelper.java b/src/main/java/com/ynxbd/common/his/old/HisHelper.java new file mode 100644 index 0000000..2c1936c --- /dev/null +++ b/src/main/java/com/ynxbd/common/his/old/HisHelper.java @@ -0,0 +1,341 @@ +//package com.ynxbd.common.his; +// +//import com.ynxbd.common.action.pay.PEnum; +//import com.ynxbd.common.bean.enums.MerchantEnum; +//import com.ynxbd.common.bean.pay.Order; +//import com.ynxbd.common.helper.ProperHelper; +//import com.ynxbd.common.helper.common.CodeHelper; +//import com.ynxbd.common.helper.common.ErrorHelper; +//import com.ynxbd.common.helper.common.SnowHelper; +//import com.ynxbd.common.helper.common.SoapHelper; +//import com.ynxbd.common.result.JsonResult; +//import com.ynxbd.common.result.JsonResultEnum; +//import lombok.extern.slf4j.Slf4j; +//import org.apache.commons.lang3.ObjectUtils; +//import org.dom4j.DocumentException; +//import org.dom4j.DocumentHelper; +//import org.dom4j.Element; +//import org.dom4j.Node; +// +//import java.util.HashMap; +//import java.util.List; +//import java.util.Map; +//import java.util.UUID; +// +//@Slf4j +//public class HisHelper { +// /** +// * 生成HIS订单号 +// */ +// public static List getHisTradeNo(String prefix, List ids, PEnum pEnum) { +// if (pEnum == null) { +// return null; +// } +// return CodeHelper.createTradeNo(prefix, pEnum.ORDER_CODE.toUpperCase(), ids); +// } +// +// /** +// * 生成HIS订单号 +// */ +// public static String getHisTradeNo(String prefix, PEnum pEnum) { +// if (pEnum == null) { +// return null; +// } +// return prefix + pEnum.ORDER_CODE.toUpperCase() + "001"; +// } +// +// +//// // 修改callNo为阿里code +//// public static void putCallNoByMer(MerchantEnum merchantEnum, Map params) { +//// if (merchantEnum == null) return; +//// +//// if (merchantEnum.equals(MerchantEnum.ALI) || merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) { +//// params.put("CallNo", ALI_CALL_NO); +//// } +//// } +// +// +// /** +// * webService请求工具类(枚举版) +// * +// * @param hisEnum 枚举 +// * @param params 发送的参数 +// * @return 响应的xml数据 +// */ +// public static String getResponseXml(HisEnum hisEnum, Map params) { +// return getResponseXml(hisEnum, HisConfig.HIS_SOAP_URL, params); +// } +// +// /** +// * webService请求工具类(枚举版) +// * +// * @param hisEnum 枚举 +// * @param params 发送的参数 +// * @return 响应的xml数据 +// */ +// public static String getResponseXml(HisEnum hisEnum, String soapUrl, Map params) { +// return getResponseXmlForCallNo(hisEnum, soapUrl, params); +// } +// +// +// /** +// * webService请求工具类(枚举版) +// * +// * @param hisEnum 枚举 +// * @param soapUrl 路径 +// * @param params 参数 +// * @return 响应xml +// */ +// public static String getResponseXmlForCallNo(HisEnum hisEnum, String soapUrl, Map params) { +// String method = hisEnum.METHOD; +// String transactionCode = hisEnum.CODE; +// +// if (params == null || transactionCode == null || method == null) { +// log.info("[WebService]-{ map | transactionCode | method 为空 }"); +// return null; +// } +// Object callNo = params.get("CallNo"); +// if (ObjectUtils.isEmpty(callNo)) { +// params.put("CallNo", HisConfig.WECHAT_CALL_NO); +// } +// params.put("TransactionCode", transactionCode); +// +// String result = null; +// try { +// String reqId = UUID.randomUUID().toString(); +// long begTime = System.currentTimeMillis(); // 开始时间 +// String hisResponse = SoapHelper.post("HIS", soapUrl, null, HisConfig.SOAP_ENV + +// "xmlns:urn=\"urn:Interface_ABIntf-IInterface_AB\">" + +// "" + +// "" + +// "" + +// (HisConfig.IS_REQ_CDATA ? "" + SoapHelper.requestParams("HIS", transactionCode, reqId, params) + "" + +// (HisConfig.IS_REQ_CDATA ? "]]>" : "") + +// "" +// ); +// long endTime = System.currentTimeMillis(); // 结束时间 +// String takeTime = (endTime - begTime) + "ms"; // 耗时 +// if (hisResponse == null) { +// log.info("[{}]HIS请求无响应[rid:{}]-耗时:[{}]", transactionCode, reqId, takeTime); +// return null; +// } +// +// //解析响应消息,使用SAXReader对象 +// org.dom4j.Document document = DocumentHelper.parseText(hisResponse); +// if (document == null) { +// log.info("[{}]HIS响应内容解析失败[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, hisResponse); +// return null; +// } +// +// List nodes = document.selectNodes("//return"); +// if (nodes.isEmpty()) { +// log.info("[{}]HIS请求失败[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, hisResponse); +// return null; +// } +// +// Element element = (Element) nodes.get(0); +// result = element.getText(); +// if (hisEnum.IS_LOG_RESP) { // 是否打印返回的xml +// log.info("[{}]HIS请求成功[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, result); +// +// } else { +// if (HisConfig.IS_LOG_RESP) { // 配置文件强制要求打印xml +// if (!HisEnum.AP_Query_Statement.equals(hisEnum) && !HisEnum.Query_Area.equals(hisEnum)) { +// log.info("[强制打印][{}]HIS请求成功[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, result); +// } +// } +// } +// } catch (DocumentException e) { +// ErrorHelper.println(e); +// } +// return result; +// } +// +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// public static JsonResult getJsonResult(HisEnum hisEnum, Map params) { +// JsonResult result = JsonResult.xmlToBean(getResponseXml(hisEnum, params), JsonResultEnum.SYS_HIS); +// if (result == null) { // 如果返回为空可能为超时 +// return createTimeoutResult(); +// } +// return result; +// } +// +// public static void putAliCallNo(MerchantEnum merchantEnum, Map params) { +// if (HisConfig.IS_ALI_MER && params != null && merchantEnum != null) { +// if (merchantEnum.equals(MerchantEnum.ALI) || merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) { +// params.put("CallNo", HisConfig.ALI_CALL_NO); +// } +// } +// } +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// public static JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, Map params) { +// putAliCallNo(merchantEnum, params); +// return getJsonResult(hisEnum, params); +// } +// +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// public static JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params) { +// Map requestParams = new HashMap<>(); +// if (params != null) { +// params.setParams(requestParams); +// } +// return getJsonResult(hisEnum, requestParams); +// } +// +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// public static JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, JsonResult.MapParams params) { +// Map requestParams = new HashMap<>(); +// if (params != null) { +// params.setParams(requestParams); +// } +// return getJsonResultByMer(hisEnum, merchantEnum, requestParams); +// } +// +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// public static JsonResult createErrorResult(String message) { +// if (ObjectUtils.isEmpty(message)) { +// message = "【HIS】请求参数缺失"; +// } +// return JsonResult.createErrorResult(message, JsonResultEnum.SYS_HIS); +// } +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// protected static JsonResult createTimeoutResult() { +// return JsonResult.createTimeoutResult("【HIS】请求超时", JsonResultEnum.SYS_HIS); +// } +// +// /** +// * 字符串集转xml +// * +// * @param xmlTag xml标签 +// * @param strList 字符串集 +// * @return xml +// */ +// public static String strListToXml(String xmlTag, List strList) { +// StringBuilder sb = new StringBuilder(); +// for (String val : strList) { +// sb.append("<").append(xmlTag).append(">").append(val).append(""); +// } +// return sb.toString(); +// } +// +// +// // /** +//// * [支付宝] xml响应数据组装成为JSON数据 +//// * +//// * @param hisEnum 接口枚举 +//// * @param params 参数 +//// * @param merchantEnum 支付类型 +//// * @return JsonResult +//// */ +//// public static JsonResult getJsonResult(HisEnum hisEnum, Map params, MerchantEnum merchantEnum) { +//// JsonResult result = JsonResult.xmlToBean(getResponseXml(hisEnum, params, merchantEnum), JsonResultEnum.SYS_HIS); +//// if (result == null) { // 如果返回为空可能为超时 +//// return createTimeoutResult(); +//// } +//// return result; +//// } +// +//// /** +//// * xml响应数据组装成为JSON数据 +//// * +//// * @return 封装好的对象 +//// */ +//// public static JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params, MerchantEnum merchantEnum) { +//// Map requestParams = new HashMap<>(); +//// if (params != null) { +//// params.setParams(requestParams); +//// } +//// return getJsonResult(hisEnum, requestParams, merchantEnum); +//// } +// +// +// // /** +//// * 根据订单号获取类型 +//// * +//// * @param bankTransNo 交易流水号 +//// * @param tradeNo HIS订单号 +//// * @return 类型 +//// */ +//// public static String getTypeByPEnum(String bankTransNo, String tradeNo) throws ServiceException { +//// if (!PayService.isNewOrder(bankTransNo, tradeNo)) { +//// throw new ServiceException(ResultEnum.REFUND_IS_OLD_ORDER_NUM); +//// } +//// int len = tradeNo.length(); +//// String middleCode1 = tradeNo.substring(len - 4, len - 3); +//// String middleCode2 = tradeNo.substring(len - 4, len - 2); +//// for (PEnum item : PEnum.values()) { +//// if (item.ORDER_CODE.equals(middleCode1) || item.ORDER_CODE.equals(middleCode2)) { +//// return item.CODE; +//// } +//// } +//// return null; +//// } +// +// +//// /** +//// * xml响应数据组装成为JSON数据 +//// * +//// * @param xml xml +//// * @return 封装好的对象 +//// */ +//// public static HisResult xmlToBean(String xml) { +//// if (xml == null || "".equals(xml)) { +//// log.info("HIS response xml is null"); +//// return HisResult.createErrorHisResult("[HIS]获取xml数据失败"); +//// } +//// +//// JSONObject respObj; +//// try { +//// Document document = DocumentHelper.parseText(xml); +//// Element root = document.getRootElement(); // 获取根节点元素对象 +//// respObj = HisResult.nodeToJsonObject(root); +//// Map map = new HashMap<>(); +//// Set keys = respObj.keySet(); +//// for (String key : keys) { +//// if (!key.equals("TransactionCode") && !key.equals("ResponseCode") && !key.equals("ResponseMessage") && !key.equals("PatientName")) { +//// map.put(key, respObj.getString(key)); +//// } +//// } +//// respObj.put("DataMap", map); +//// } catch (DocumentException e) { +//// ErrorHelper.println(e); +//// return HisResult.createErrorHisResult(e.getMessage()); +//// } +//// HisResult hisResult = JSON.toJavaObject(respObj, HisResult.class); +//// if (hisResult.getResponseCode() != 0) { +//// log.info("HIS Error Message:[{}]", hisResult.getResponseMessage()); +//// } +//// return hisResult; +//// } +//} diff --git a/src/main/java/com/ynxbd/common/his/old/HisMedHelper.java b/src/main/java/com/ynxbd/common/his/old/HisMedHelper.java new file mode 100644 index 0000000..4367313 --- /dev/null +++ b/src/main/java/com/ynxbd/common/his/old/HisMedHelper.java @@ -0,0 +1,84 @@ +//package com.ynxbd.common.his; +// +//import com.ynxbd.common.bean.enums.MerchantEnum; +//import com.ynxbd.common.result.JsonResult; +//import com.ynxbd.common.result.JsonResultEnum; +//import lombok.extern.slf4j.Slf4j; +//import org.apache.commons.lang3.ObjectUtils; +// +//import java.util.HashMap; +//import java.util.Map; +// +//@Slf4j +//public class HisMedHelper { +// +// /** +// * 医保环境 +// * +// * @param hisEnum 枚举 +// * @param params 发送的参数 +// * @return 响应的xml数据 +// */ +// private static String getResponseXml(MerchantEnum merchantEnum, HisEnum hisEnum, Map params) { +// if (merchantEnum == null) { +// log.error("[HIS医保接口]merchantEnum is null"); +// return null; +// } +// String soapUrl = merchantEnum.isWx() ? HisConfig.HIS_WX_MED_URL : HisConfig.HIS_ALI_MED_URL; +// if (ObjectUtils.isEmpty(soapUrl)) { +// log.error("[HIS医保接口]soapUrl is null"); +// return null; +// } +// return HisHelper.getResponseXml(hisEnum, merchantEnum.isWx() ? HisConfig.HIS_WX_MED_URL : HisConfig.HIS_ALI_MED_URL, params); +// } +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// public static JsonResult getJsonResult(MerchantEnum merchantEnum, HisEnum hisEnum, Map params) { +// HisHelper.putAliCallNo(merchantEnum, params); +// +// JsonResult result = JsonResult.xmlToBean(getResponseXml(merchantEnum, hisEnum, params), JsonResultEnum.SYS_HIS); +// if (result == null) { // 如果返回为空可能为超时 +// return HisHelper.createTimeoutResult(); +// } +// return result; +// } +// +// +// /** +// * xml响应数据组装成为JSON数据 +// * +// * @return 封装好的对象 +// */ +// public static JsonResult getJsonResult(MerchantEnum merchantEnum, HisEnum hisEnum, JsonResult.MapParams params) { +// Map requestParams = new HashMap<>(); +// if (params != null) { +// params.setParams(requestParams); +// } +// return getJsonResult(merchantEnum, hisEnum, requestParams); +// } +// +// +// // /** +//// * xml响应数据组装成为JSON数据 +//// * +//// * @return 封装好的对象 +//// */ +//// public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, Map params) { +//// return getJsonResultByMer(isDev, hisEnum, null, params); +//// } +// +//// /** +//// * xml响应数据组装成为JSON数据 +//// * +//// * @return 封装好的对象 +//// */ +//// public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, JsonResult.MapParams params) { +//// return getJsonResultByMer(isDev, hisEnum, null, params); +//// } +// +// +//} diff --git a/src/main/java/com/ynxbd/common/helper/his/HisResult.java b/src/main/java/com/ynxbd/common/his/old/HisResult.java similarity index 97% rename from src/main/java/com/ynxbd/common/helper/his/HisResult.java rename to src/main/java/com/ynxbd/common/his/old/HisResult.java index 235f1ef..79774a8 100644 --- a/src/main/java/com/ynxbd/common/helper/his/HisResult.java +++ b/src/main/java/com/ynxbd/common/his/old/HisResult.java @@ -1,459 +1,459 @@ -//package com.ynxbd.common.helper.his; -// -//import com.alibaba.fastjson.JSON; -//import com.alibaba.fastjson.JSONArray; -//import com.alibaba.fastjson.JSONObject; -//import com.alibaba.fastjson.TypeReference; -//import com.ynxbd.common.helper.common.ErrorHelper; -//import org.dom4j.Attribute; -//import org.dom4j.Element; -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -// -//import java.math.BigDecimal; -//import java.util.List; -//import java.util.Map; -// -///** -// * HIS响应数据 -// * -// * @Author wsq -// * @Date 2020/7/29 13:26 -// * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. -// */ -// -//public class HisResult { -// private final static Logger log = LoggerFactory.getLogger(HisResult.class); -// -// // 响应状态码 -// private Integer responseCode; -// // 响应信息 -// private String responseMessage; -// // HIS响应码 -// private String transactionCode; -// // 数据 -// private Map dataMap; -// -// -// /** -// * 创建一个异常信息 -// * -// * @param message 异常信息 -// * @return 模拟his异常信息 -// */ -// public static HisResult createErrorHisResult(String message) { -// HisResult hisResult = new HisResult(); -// hisResult.setResponseCode(500); // -// hisResult.setResponseMessage(message); -// return hisResult; -// } -// -// -// /** -// * 获取DataMap的值 String -// * -// * @param nodeName 节点名称 -// * @return nodeVal 节点值 -// */ -// public String getDataMapString(String nodeName) { -// try { -// Object val = this.dataMap.get(nodeName); -// if (val == null) { -// return null; -// } -// String v = val.toString().trim(); -// return "".equals(v) ? null : v; -// } catch (Exception e) { -// ErrorHelper.println(e); -// return null; -// } -// } -// -// /** -// * 获取DataMap的值 BigDecimal -// * -// * @param nodeName 节点名称 -// * @return nodeVal 节点值 -// */ -// public BigDecimal getDataMapBigDecimal(String nodeName) { -// try { -// Object val = this.dataMap.get(nodeName); -// return val == null ? null : new BigDecimal(val.toString()); -// } catch (Exception e) { -// ErrorHelper.println(e); -// return null; -// } -// } -// -// /** -// * 获取DataMap的值 Integer -// * -// * @param nodeName 节点名称 -// * @return nodeVal 节点值 -// */ -// public Integer getDataMapInteger(String nodeName) { -// try { -// Object val = this.dataMap.get(nodeName); -// return val == null ? null : Integer.parseInt(val.toString()); -// } catch (Exception e) { -// ErrorHelper.println(e); -// return null; -// } -// } -// -// /** -// * 获取DataMap的值 Boolean -// * -// * @param nodeName 节点名称 -// * @return nodeVal 节点值 -// */ -// public Boolean getDataMapBoolean(String nodeName) { -// try { -// Object val = this.dataMap.get(nodeName); -// return val == null ? null : Boolean.parseBoolean(val.toString()); -// } catch (Exception e) { -// ErrorHelper.println(e); -// return null; -// } -// } -// -// -// /** -// * 获取DataMap的值 Long -// * -// * @param nodeName 节点名称 -// * @return nodeVal 节点值 -// */ -// public Long getDataMapLong(String nodeName) { -// try { -// Object val = this.dataMap.get(nodeName); -// return val == null ? null : Long.parseLong(val.toString()); -// } catch (Exception e) { -// ErrorHelper.println(e); -// return null; -// } -// } -// -// -// /** -// * 获取DataMap的值 Double -// * -// * @param nodeName 节点名称 -// * @return nodeVal 节点值 -// */ -// public Double getDataMapDouble(String nodeName) { -// try { -// Object val = this.dataMap.get(nodeName); -// return val == null ? null : Double.parseDouble(val.toString()); -// } catch (Exception e) { -// ErrorHelper.println(e); -// return null; -// } -// } -// -// -// /** -// * 获取根节点包含相同节点数据 -// * 如: -// * -// * # 1 -// * # 2 -// * -// * -// * @param clazz 类型 -// * @param rootNode 根节点名 -// * @param nodes 子节点名,可变长参数 -// * @return 集合 -// */ -// public List getDataMapList(Class clazz, String rootNode, String... nodes) { -// JSONArray jsonArray = getJsonArray(rootNode, nodes); -// return decodeList(jsonArray.toString(), clazz); -// } -// -// -// /** -// * 获取嵌套多层的JSONArray -// * -// * @param rooNode 根节点 -// * @param nodes 子节点,可变长参数 -// * @return json数组 -// */ -// public JSONArray getJsonArray(String rooNode, String... nodes) { -// Object rootObj = this.dataMap.get(rooNode); -// String result = rootObj == null ? JSON.toJSONString(new JSONArray()) : rootObj.toString(); -// try { -// JSONArray jsonArray; -// JSONObject jsonObject; -// for (String node : nodes) { -// jsonArray = JSONArray.parseArray(result); -// if (jsonArray == null || jsonArray.size() == 0) { -// return new JSONArray(); -// } -// if (jsonArray.size() == 1) { // 如果只有一个值继续处理 -// jsonObject = jsonArray.getJSONObject(0); -// result = JSON.toJSONString(jsonObject.getJSONArray(node)); -// } else { // 如果有多个值返回当前数组 -// result = JSON.toJSONString(jsonArray); -// } -// } -// } catch (Exception e) { -// log.error("JSON数据转换失败"); -// ErrorHelper.println(e); -// } -// return JSONArray.parseArray(result); -// } -// -// -// /** -// * JSON树形结构数据向下JSONArray中传递 -// * -// * @param jsonArray 根节点 -// * @param properties 节点属性,可变长参数 -// * @return JSONArray -// */ -// public List jsonParentToChild(Class clazz, JSONArray jsonArray, String rootNode, String... properties) { -// JSONArray result = new JSONArray(); -// JSONObject jsonObject, childNode; -// JSONArray nodeJsonArr; -// for (int i = 0; i < jsonArray.size(); i++) { -// jsonObject = jsonArray.getJSONObject(i); -// nodeJsonArr = jsonObject.getJSONArray(rootNode); -// for (int j = 0; j < nodeJsonArr.size(); j++) { -// childNode = nodeJsonArr.getJSONObject(j); -// for (String property : properties) { -// for (String key : jsonObject.keySet()) { // 忽略大小写 -// if (key.toLowerCase().equals(property.toLowerCase())) { -// property = key; -// break; -// } -// } -// String propertyVal = jsonObject.getString(property); -// childNode.put(property, propertyVal); -// } -// result.add(childNode); -// } -// } -// return decodeList(JSON.toJSONString(result), clazz); -// } -// -// -// /** -// * 获取DataMap为bean -// * -// * @param clazz 类型 -// * @return bean -// */ -// public T getDataMapBean(Class clazz) { -// return decodeBean(JSONObject.toJSONString(this.dataMap), clazz); -// } -// -// /** -// * 获取DataMap为bean -// * -// * @param clazz 类型 -// * @return bean -// */ -// public T getDataMapBean(Class clazz, String rooNode, String... nodes) { -// JSONObject jsonObject = getJsonObject(rooNode, nodes); -// if (jsonObject == null) { -// jsonObject = new JSONObject(); -// } -// return decodeBean(jsonObject.toJSONString(), clazz); -// } -// -//// /** -//// * 获取DataMap为bean -//// * -//// * @param rooNode 根节点 -//// * @param nodes 子节点 -//// * @return bean -//// */ -//// public JSONObject getDataMapObject(String rooNode, String... nodes) { -//// JSONObject jsonObject = getJsonObject(rooNode, nodes); -//// if (jsonObject == null) { -//// jsonObject = new JSONObject(); -//// } -//// return decodeBean(jsonObject.toJSONString()); -//// } -// -// -// /** -// * 获取嵌套多层的JSONArray -// * -// * @param rooNode 根节点 -// * @param nodes 子节点,可变长参数 -// * @return json对象 -// */ -// public JSONObject getJsonObject(String rooNode, String... nodes) { -// Object rootObj = this.dataMap.get(rooNode); -// String result = rootObj == null ? new JSONObject().toJSONString() : rootObj.toString(); -// try { -// JSONArray jsonArray = JSONArray.parseArray(result); -// if (jsonArray == null || jsonArray.size() == 0) { -// return new JSONObject(); -// } -// -// JSONObject jsonObject = jsonArray.getJSONObject(0); -// if (jsonObject == null) { -// return new JSONObject(); -// } -// -// if (nodes.length == 0) { -// result = jsonObject.toJSONString(); -// } -// -// for (String node : nodes) { -// result = jsonObject.getJSONObject(node).toJSONString(); -// } -// } catch (Exception e) { -// log.error("JSON数据转换失败"); -// ErrorHelper.println(e); -// } -// return JSONObject.parseObject(result); -// } -// -// -// // --------------------------------------------------------------- -// -// /** -// * fastJson反序列化Bean -// * -// * @param json json -// * @param clazz 类型 -// * @return bean -// */ -// public static T decodeBean(String json, Class clazz) { -// return JSON.parseObject(json, clazz); -// } -// -// /** -// * fastJson反序列化List -// * -// * @param json json -// * @param clazz 类型 -// * @return List -// */ -// public static List decodeList(String json, Class clazz) { -// return decode(json, new TypeReference>(clazz) { -// }); -// } -// -// -// /** -// * fastJson反序列化 -// * -// * @param json json -// * @param typeReference 类型 -// * @return 反序列化后的值 -// */ -// public static T decode(String json, TypeReference typeReference) { -// try { -// return JSON.parseObject(json, typeReference); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// return null; -// } -// -// -// /** -// * 递归-Element转JSONObject -// * -// * @param rootNode 根节点 -// * @return JSONObject -// */ -// public static JSONObject nodeToJsonObject(Element rootNode) { -// JSONObject result = new JSONObject(); -// // 当前节点的名称、文本内容和属性 -// for (Attribute attr : rootNode.attributes()) {// 遍历当前节点的所有属性 -// result.put(attr.getName(), attr.getValue()); -// } -// -// // 递归遍历当前节点所有的子节点 -// List listElement = rootNode.elements();// 所有一级子节点的list -// if (!listElement.isEmpty()) { -// String name, val; -// -// for (Element e : listElement) {// 遍历所有一级子节点 -// name = e.getName(); -// val = e.getTextTrim(); -// if (e.attributes().isEmpty() && e.elements().isEmpty()) // 判断一级节点是否有属性和子节点 -// result.put(name, val.equals("") ? null : val); // 沒有则将当前节点作为上级节点的属性对待 -// else { -// if (!result.containsKey(e.getName())) { // 判断父节点是否存在该一级节点名称的属性 -// result.put(name, new JSONArray());// 没有则创建 -// } -// JSONArray jsonArray = (JSONArray) result.get(name); -// jsonArray.add(nodeToJsonObject(e)); // 将该一级节点放入该节点名称的属性对应的值中 -// } -// } -// } -// return result; -// } -// -// -//// public static void main(String[] args) { -//// String testXml = "20010成功0201急诊科全科医疗
门诊楼
0202院办全科医疗
0203重症医学科全科医疗
0205急诊科(二楼)全科医疗
门诊二楼
0206血液透析室全科医疗
住院部一楼
0207120急救中心全科医疗
0301内二科内科
门诊三楼内科专家(五
0304门诊部(二楼)内科
门诊二楼
0305门诊部(三楼)内科
门诊三楼
0306消化内科内科
门诊三楼内科专家(六
0307心内科内科
住院部五楼医生办公室
0308呼吸科内科
门诊三楼内科专家(六
0309精神心理科内科
门诊三楼内科专家(七
0310内分泌科内科
门诊三楼内科专家(七
0311内一科内科
门诊三楼内科专家(一
0312肾内科内科
门诊三楼内科专家(六
0313神经内科内科
住院部四楼医生办公室
0401外科外科
0402外一科外科
住院部二楼
0403外二科外科
医技综合楼七楼
0404外三科外科
住院部三楼
0406外(皮肤)科门诊外科
门诊二楼
0501妇产科妇产科
门诊二楼
0712儿科儿科
门诊三楼
1100耳鼻咽喉科耳鼻咽喉科
医技综合楼五楼
1101五官科耳鼻咽喉科
医技综合楼五楼
1201口腔科口腔科
门诊三楼
1300皮肤科皮肤科
外科专家诊室
1601抗病毒治疗室传染科
1607感染性疾病科传染科
2100中医康复科康复医学科
2101疼痛科门诊康复医学科
门诊三楼
3205功能科医学影象科
5001中医科中医科
5002中医肛肠科门诊中医科
门诊三楼
5201针灸科中西医结合
"; -//// // 对象封装 -//// WsResult wsResult = WsResult.xmlToBean(testXml); -//// System.out.println(wsResult); -//// List dept = wsResult.getDataMapList("Dept", DeptBean.class); -//// -//// for (DeptBean d : dept) { -//// System.out.println(d); -//// } -//// } -// -// public HisResult() { -// } -// -// public HisResult(Integer responseCode, String responseMessage, String transactionCode, Map dataMap) { -// this.responseCode = responseCode; -// this.responseMessage = responseMessage; -// this.transactionCode = transactionCode; -// this.dataMap = dataMap; -// } -// -// public Integer getResponseCode() { -// return responseCode; -// } -// -// public void setResponseCode(Integer responseCode) { -// this.responseCode = responseCode; -// } -// -// public String getResponseMessage() { -// return responseMessage; -// } -// -// public void setResponseMessage(String responseMessage) { -// this.responseMessage = responseMessage; -// } -// -// public String getTransactionCode() { -// return transactionCode; -// } -// -// public void setTransactionCode(String transactionCode) { -// this.transactionCode = transactionCode; -// } -// -// public Map getDataMap() { -// return dataMap; -// } -// -// public void setDataMap(Map dataMap) { -// this.dataMap = dataMap; -// } -// -// @Override -// public String toString() { -// return "WsResult{" + -// "responseCode=" + responseCode + -// ", responseMessage='" + responseMessage + '\'' + -// ", transactionCode='" + transactionCode + '\'' + -// ", dataMap=" + dataMap + -// '}'; -// } -//} -// +//package com.ynxbd.common.his; +// +//import com.alibaba.fastjson.JSON; +//import com.alibaba.fastjson.JSONArray; +//import com.alibaba.fastjson.JSONObject; +//import com.alibaba.fastjson.TypeReference; +//import com.ynxbd.common.helper.common.ErrorHelper; +//import org.dom4j.Attribute; +//import org.dom4j.Element; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +// +//import java.math.BigDecimal; +//import java.util.List; +//import java.util.Map; +// +///** +// * HIS响应数据 +// * +// * @Author wsq +// * @Date 2020/7/29 13:26 +// * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. +// */ +// +//public class HisResult { +// private final static Logger log = LoggerFactory.getLogger(HisResult.class); +// +// // 响应状态码 +// private Integer responseCode; +// // 响应信息 +// private String responseMessage; +// // HIS响应码 +// private String transactionCode; +// // 数据 +// private Map dataMap; +// +// +// /** +// * 创建一个异常信息 +// * +// * @param message 异常信息 +// * @return 模拟his异常信息 +// */ +// public static HisResult createErrorHisResult(String message) { +// HisResult hisResult = new HisResult(); +// hisResult.setResponseCode(500); // +// hisResult.setResponseMessage(message); +// return hisResult; +// } +// +// +// /** +// * 获取DataMap的值 String +// * +// * @param nodeName 节点名称 +// * @return nodeVal 节点值 +// */ +// public String getDataMapString(String nodeName) { +// try { +// Object val = this.dataMap.get(nodeName); +// if (val == null) { +// return null; +// } +// String v = val.toString().trim(); +// return "".equals(v) ? null : v; +// } catch (Exception e) { +// ErrorHelper.println(e); +// return null; +// } +// } +// +// /** +// * 获取DataMap的值 BigDecimal +// * +// * @param nodeName 节点名称 +// * @return nodeVal 节点值 +// */ +// public BigDecimal getDataMapBigDecimal(String nodeName) { +// try { +// Object val = this.dataMap.get(nodeName); +// return val == null ? null : new BigDecimal(val.toString()); +// } catch (Exception e) { +// ErrorHelper.println(e); +// return null; +// } +// } +// +// /** +// * 获取DataMap的值 Integer +// * +// * @param nodeName 节点名称 +// * @return nodeVal 节点值 +// */ +// public Integer getDataMapInteger(String nodeName) { +// try { +// Object val = this.dataMap.get(nodeName); +// return val == null ? null : Integer.parseInt(val.toString()); +// } catch (Exception e) { +// ErrorHelper.println(e); +// return null; +// } +// } +// +// /** +// * 获取DataMap的值 Boolean +// * +// * @param nodeName 节点名称 +// * @return nodeVal 节点值 +// */ +// public Boolean getDataMapBoolean(String nodeName) { +// try { +// Object val = this.dataMap.get(nodeName); +// return val == null ? null : Boolean.parseBoolean(val.toString()); +// } catch (Exception e) { +// ErrorHelper.println(e); +// return null; +// } +// } +// +// +// /** +// * 获取DataMap的值 Long +// * +// * @param nodeName 节点名称 +// * @return nodeVal 节点值 +// */ +// public Long getDataMapLong(String nodeName) { +// try { +// Object val = this.dataMap.get(nodeName); +// return val == null ? null : Long.parseLong(val.toString()); +// } catch (Exception e) { +// ErrorHelper.println(e); +// return null; +// } +// } +// +// +// /** +// * 获取DataMap的值 Double +// * +// * @param nodeName 节点名称 +// * @return nodeVal 节点值 +// */ +// public Double getDataMapDouble(String nodeName) { +// try { +// Object val = this.dataMap.get(nodeName); +// return val == null ? null : Double.parseDouble(val.toString()); +// } catch (Exception e) { +// ErrorHelper.println(e); +// return null; +// } +// } +// +// +// /** +// * 获取根节点包含相同节点数据 +// * 如: +// * +// * # 1 +// * # 2 +// * +// * +// * @param clazz 类型 +// * @param rootNode 根节点名 +// * @param nodes 子节点名,可变长参数 +// * @return 集合 +// */ +// public List getDataMapList(Class clazz, String rootNode, String... nodes) { +// JSONArray jsonArray = getJsonArray(rootNode, nodes); +// return decodeList(jsonArray.toString(), clazz); +// } +// +// +// /** +// * 获取嵌套多层的JSONArray +// * +// * @param rooNode 根节点 +// * @param nodes 子节点,可变长参数 +// * @return json数组 +// */ +// public JSONArray getJsonArray(String rooNode, String... nodes) { +// Object rootObj = this.dataMap.get(rooNode); +// String result = rootObj == null ? JSON.toJSONString(new JSONArray()) : rootObj.toString(); +// try { +// JSONArray jsonArray; +// JSONObject jsonObject; +// for (String node : nodes) { +// jsonArray = JSONArray.parseArray(result); +// if (jsonArray == null || jsonArray.size() == 0) { +// return new JSONArray(); +// } +// if (jsonArray.size() == 1) { // 如果只有一个值继续处理 +// jsonObject = jsonArray.getJSONObject(0); +// result = JSON.toJSONString(jsonObject.getJSONArray(node)); +// } else { // 如果有多个值返回当前数组 +// result = JSON.toJSONString(jsonArray); +// } +// } +// } catch (Exception e) { +// log.error("JSON数据转换失败"); +// ErrorHelper.println(e); +// } +// return JSONArray.parseArray(result); +// } +// +// +// /** +// * JSON树形结构数据向下JSONArray中传递 +// * +// * @param jsonArray 根节点 +// * @param properties 节点属性,可变长参数 +// * @return JSONArray +// */ +// public List jsonParentToChild(Class clazz, JSONArray jsonArray, String rootNode, String... properties) { +// JSONArray result = new JSONArray(); +// JSONObject jsonObject, childNode; +// JSONArray nodeJsonArr; +// for (int i = 0; i < jsonArray.size(); i++) { +// jsonObject = jsonArray.getJSONObject(i); +// nodeJsonArr = jsonObject.getJSONArray(rootNode); +// for (int j = 0; j < nodeJsonArr.size(); j++) { +// childNode = nodeJsonArr.getJSONObject(j); +// for (String property : properties) { +// for (String key : jsonObject.keySet()) { // 忽略大小写 +// if (key.toLowerCase().equals(property.toLowerCase())) { +// property = key; +// break; +// } +// } +// String propertyVal = jsonObject.getString(property); +// childNode.put(property, propertyVal); +// } +// result.add(childNode); +// } +// } +// return decodeList(JSON.toJSONString(result), clazz); +// } +// +// +// /** +// * 获取DataMap为bean +// * +// * @param clazz 类型 +// * @return bean +// */ +// public T getDataMapBean(Class clazz) { +// return decodeBean(JSONObject.toJSONString(this.dataMap), clazz); +// } +// +// /** +// * 获取DataMap为bean +// * +// * @param clazz 类型 +// * @return bean +// */ +// public T getDataMapBean(Class clazz, String rooNode, String... nodes) { +// JSONObject jsonObject = getJsonObject(rooNode, nodes); +// if (jsonObject == null) { +// jsonObject = new JSONObject(); +// } +// return decodeBean(jsonObject.toJSONString(), clazz); +// } +// +//// /** +//// * 获取DataMap为bean +//// * +//// * @param rooNode 根节点 +//// * @param nodes 子节点 +//// * @return bean +//// */ +//// public JSONObject getDataMapObject(String rooNode, String... nodes) { +//// JSONObject jsonObject = getJsonObject(rooNode, nodes); +//// if (jsonObject == null) { +//// jsonObject = new JSONObject(); +//// } +//// return decodeBean(jsonObject.toJSONString()); +//// } +// +// +// /** +// * 获取嵌套多层的JSONArray +// * +// * @param rooNode 根节点 +// * @param nodes 子节点,可变长参数 +// * @return json对象 +// */ +// public JSONObject getJsonObject(String rooNode, String... nodes) { +// Object rootObj = this.dataMap.get(rooNode); +// String result = rootObj == null ? new JSONObject().toJSONString() : rootObj.toString(); +// try { +// JSONArray jsonArray = JSONArray.parseArray(result); +// if (jsonArray == null || jsonArray.size() == 0) { +// return new JSONObject(); +// } +// +// JSONObject jsonObject = jsonArray.getJSONObject(0); +// if (jsonObject == null) { +// return new JSONObject(); +// } +// +// if (nodes.length == 0) { +// result = jsonObject.toJSONString(); +// } +// +// for (String node : nodes) { +// result = jsonObject.getJSONObject(node).toJSONString(); +// } +// } catch (Exception e) { +// log.error("JSON数据转换失败"); +// ErrorHelper.println(e); +// } +// return JSONObject.parseObject(result); +// } +// +// +// // --------------------------------------------------------------- +// +// /** +// * fastJson反序列化Bean +// * +// * @param json json +// * @param clazz 类型 +// * @return bean +// */ +// public static T decodeBean(String json, Class clazz) { +// return JSON.parseObject(json, clazz); +// } +// +// /** +// * fastJson反序列化List +// * +// * @param json json +// * @param clazz 类型 +// * @return List +// */ +// public static List decodeList(String json, Class clazz) { +// return decode(json, new TypeReference>(clazz) { +// }); +// } +// +// +// /** +// * fastJson反序列化 +// * +// * @param json json +// * @param typeReference 类型 +// * @return 反序列化后的值 +// */ +// public static T decode(String json, TypeReference typeReference) { +// try { +// return JSON.parseObject(json, typeReference); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return null; +// } +// +// +// /** +// * 递归-Element转JSONObject +// * +// * @param rootNode 根节点 +// * @return JSONObject +// */ +// public static JSONObject nodeToJsonObject(Element rootNode) { +// JSONObject result = new JSONObject(); +// // 当前节点的名称、文本内容和属性 +// for (Attribute attr : rootNode.attributes()) {// 遍历当前节点的所有属性 +// result.put(attr.getName(), attr.getValue()); +// } +// +// // 递归遍历当前节点所有的子节点 +// List listElement = rootNode.elements();// 所有一级子节点的list +// if (!listElement.isEmpty()) { +// String name, val; +// +// for (Element e : listElement) {// 遍历所有一级子节点 +// name = e.getName(); +// val = e.getTextTrim(); +// if (e.attributes().isEmpty() && e.elements().isEmpty()) // 判断一级节点是否有属性和子节点 +// result.put(name, val.equals("") ? null : val); // 沒有则将当前节点作为上级节点的属性对待 +// else { +// if (!result.containsKey(e.getName())) { // 判断父节点是否存在该一级节点名称的属性 +// result.put(name, new JSONArray());// 没有则创建 +// } +// JSONArray jsonArray = (JSONArray) result.get(name); +// jsonArray.add(nodeToJsonObject(e)); // 将该一级节点放入该节点名称的属性对应的值中 +// } +// } +// } +// return result; +// } +// +// +//// public static void main(String[] args) { +//// String testXml = "20010成功0201急诊科全科医疗
门诊楼
0202院办全科医疗
0203重症医学科全科医疗
0205急诊科(二楼)全科医疗
门诊二楼
0206血液透析室全科医疗
住院部一楼
0207120急救中心全科医疗
0301内二科内科
门诊三楼内科专家(五
0304门诊部(二楼)内科
门诊二楼
0305门诊部(三楼)内科
门诊三楼
0306消化内科内科
门诊三楼内科专家(六
0307心内科内科
住院部五楼医生办公室
0308呼吸科内科
门诊三楼内科专家(六
0309精神心理科内科
门诊三楼内科专家(七
0310内分泌科内科
门诊三楼内科专家(七
0311内一科内科
门诊三楼内科专家(一
0312肾内科内科
门诊三楼内科专家(六
0313神经内科内科
住院部四楼医生办公室
0401外科外科
0402外一科外科
住院部二楼
0403外二科外科
医技综合楼七楼
0404外三科外科
住院部三楼
0406外(皮肤)科门诊外科
门诊二楼
0501妇产科妇产科
门诊二楼
0712儿科儿科
门诊三楼
1100耳鼻咽喉科耳鼻咽喉科
医技综合楼五楼
1101五官科耳鼻咽喉科
医技综合楼五楼
1201口腔科口腔科
门诊三楼
1300皮肤科皮肤科
外科专家诊室
1601抗病毒治疗室传染科
1607感染性疾病科传染科
2100中医康复科康复医学科
2101疼痛科门诊康复医学科
门诊三楼
3205功能科医学影象科
5001中医科中医科
5002中医肛肠科门诊中医科
门诊三楼
5201针灸科中西医结合
"; +//// // 对象封装 +//// WsResult wsResult = WsResult.xmlToBean(testXml); +//// System.out.println(wsResult); +//// List dept = wsResult.getDataMapList("Dept", DeptBean.class); +//// +//// for (DeptBean d : dept) { +//// System.out.println(d); +//// } +//// } +// +// public HisResult() { +// } +// +// public HisResult(Integer responseCode, String responseMessage, String transactionCode, Map dataMap) { +// this.responseCode = responseCode; +// this.responseMessage = responseMessage; +// this.transactionCode = transactionCode; +// this.dataMap = dataMap; +// } +// +// public Integer getResponseCode() { +// return responseCode; +// } +// +// public void setResponseCode(Integer responseCode) { +// this.responseCode = responseCode; +// } +// +// public String getResponseMessage() { +// return responseMessage; +// } +// +// public void setResponseMessage(String responseMessage) { +// this.responseMessage = responseMessage; +// } +// +// public String getTransactionCode() { +// return transactionCode; +// } +// +// public void setTransactionCode(String transactionCode) { +// this.transactionCode = transactionCode; +// } +// +// public Map getDataMap() { +// return dataMap; +// } +// +// public void setDataMap(Map dataMap) { +// this.dataMap = dataMap; +// } +// +// @Override +// public String toString() { +// return "WsResult{" + +// "responseCode=" + responseCode + +// ", responseMessage='" + responseMessage + '\'' + +// ", transactionCode='" + transactionCode + '\'' + +// ", dataMap=" + dataMap + +// '}'; +// } +//} +// diff --git a/src/main/java/com/ynxbd/common/service/InHospService.java b/src/main/java/com/ynxbd/common/service/InHospService.java index f695d99..71b5c7f 100644 --- a/src/main/java/com/ynxbd/common/service/InHospService.java +++ b/src/main/java/com/ynxbd/common/service/InHospService.java @@ -8,7 +8,7 @@ import com.ynxbd.common.bean.pay.PayInHosp; import com.ynxbd.common.dao.InHospPayDao; import com.ynxbd.common.dao.RefundDao; import com.ynxbd.common.dao.his.HisInHospDao; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; @@ -58,7 +58,7 @@ public class InHospService { PayService.saveOrderNo(PEnum.IN_HOSP, outTradeNo, openid, payInfo, null); - String tradeNo = HisHelper.getHisTradeNo(bankTransNo, PEnum.IN_HOSP); + String tradeNo = HisFactory.getHisTradeNo(bankTransNo, PEnum.IN_HOSP); log.info("{} [住院预交金]收到微信通知,支付成功:outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); if (!inHospPayDao.updateWxPaid(outTradeNo, bankTransNo, tradeNo)) { log.error("{} [住院预交金]更改订单状态失败 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo); @@ -133,7 +133,7 @@ public class InHospService { throw new ServiceException(ResultEnum.REFUND_MONEY_ERROR); } - String outRefundNo = HisHelper.getHisTradeNo(bankTransNo, pEnum); + String outRefundNo = HisFactory.getHisTradeNo(bankTransNo, pEnum); Order orderRefund = PayService.refund(merchantEnum, outTradeNo, outRefundNo, refundMoney, payInHosp.getTotalFee(), refundDesc, payInHosp.getUpdateTime(), payInHosp.getOpenid(), payInHosp.getPatientId(), null); boolean isResult = orderRefund.isSuccess(); @@ -168,22 +168,26 @@ public class InHospService { /** - * [住院记录]通过患者ID查询(出院后) + * [住院]通过患者ID查询住院记录(出院后) * * @param patientId 患者id */ public List queryHisOutPatientRecords(String patientId) throws ServiceException { - JsonResult resp = new HisInHospDao().queryOutPatientRecords(patientId, null); // 非医保 + JsonResult resp = new HisInHospDao().queryOutPatientRecords(patientId, null, false); // 非医保 if (!resp.success()) { throw new ServiceException(resp.getMessage()); } List inHospList = resp.getDataMapList(InHospitalList.class, "Items", "Item"); - JsonResult medResp = new HisInHospDao().queryOutPatientRecords(patientId, "1"); // 医保 - if (!medResp.success()) { - throw new ServiceException(medResp.getMessage()); + List medInHospList = new ArrayList<>(); + if ("192970".equals(patientId)) { + JsonResult medResp = new HisInHospDao().queryOutPatientRecords(patientId, "1", true); // 医保 + if (!medResp.success()) { + throw new ServiceException(medResp.getMessage()); + } + medInHospList = medResp.getDataMapList(InHospitalList.class, "Items", "Item"); } - List medInHospList = medResp.getDataMapList(InHospitalList.class, "Items", "Item"); + List dataList = new ArrayList<>(); for (InHospitalList item : medInHospList) { diff --git a/src/main/java/com/ynxbd/common/service/MedicalService.java b/src/main/java/com/ynxbd/common/service/MedicalService.java index 38f7ac0..0f226cf 100644 --- a/src/main/java/com/ynxbd/common/service/MedicalService.java +++ b/src/main/java/com/ynxbd/common/service/MedicalService.java @@ -52,8 +52,8 @@ public class MedicalService { regPaidNotify(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); break; - case IN_HOSP: - inHospPaidNotify(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); + case OUT_HOSP: // 住院结算 + outHospPaidNotify(merchantEnum, outTradeNo, bankTransNo, payDate, payTime, openid, payInfo); break; default: @@ -101,11 +101,10 @@ public class MedicalService { String payAuthNo = getPayAuthNo(merchantEnum, openid, qrCode, cardNo, realName); log.info("{}[HIS医保上传明细][挂号]patientId={}, cardNo={}, realName={}, reg={}", merchantEnum.NAME, patientId, ParamHelper.hideIdCardNo(cardNo), realName, reg); JsonResult result = HisMedDao.regMedUploadDetails(merchantEnum, reg, payAuthNo, cardNo, isSplitTime); - return hisMedPlaceOrder(merchantEnum, payAuthNo, result); + return noticeHiCreateMedOrder(merchantEnum, payAuthNo, result); } - /** * [HIS医保上传明细]处方上报 * @@ -135,11 +134,11 @@ public class MedicalService { // [验收]测试报告内容[2] log.info("{}[HIS医保上传明细][处方] req={patientId:\"{}\", treatNum:\"{}\", totalFee:\"{}\", cardNo:\"{}\", recipeJson:\"{}\"}", merchantEnum.NAME, patientId, treatNum, totalFee, cardNo, recipeJson); JsonResult result = HisMedDao.rxMedUploadDetails(merchantEnum, payAuthNo, cardNo, openid, patientId, treatNum, recipeJson, totalFee, ybAttrib, ybBZCode, ybBZName); - return hisMedPlaceOrder(merchantEnum, payAuthNo, result); + return noticeHiCreateMedOrder(merchantEnum, payAuthNo, result); } - public MedicalInfo hisInHospUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String treatNum, String patientId, String hisPatientId, String cardNo, String realName) throws ServiceException { + public MedicalInfo hisOutHospUploadDetails(MerchantEnum merchantEnum, String qrCode, String openid, String treatNum, String patientId, String hisPatientId, String cardNo, String realName) throws ServiceException { String payAuthNo; if (merchantEnum == MerchantEnum.ALI_MEDICAL) { // 支付宝 payAuthNo = qrCode; @@ -149,8 +148,66 @@ public class MedicalService { } log.info("{}[HIS医保上传明细][住院结算] treatNum={}, patientId={}, cardNo={}, realName={}", merchantEnum.NAME, treatNum, patientId, ParamHelper.hideIdCardNo(cardNo), realName); - JsonResult result = HisMedDao.inHospMedUploadDetails(merchantEnum, payAuthNo, cardNo, treatNum); - return hisMedPlaceOrder(merchantEnum, payAuthNo, result); + JsonResult result = HisMedDao.outHospMedUploadDetails(merchantEnum, payAuthNo, cardNo, treatNum); + if (result == null) { + throw new ServiceException("[医保]返回数据为空"); + } + if (!result.success()) { + log.info("[医保-住院结算]费用明细上传失败 message={}", result.getMessage()); + throw new ServiceException(result.getMessage()); + } + String payOrdId = result.getDataMapString("PayOrdId"); + String payToken = result.getDataMapString("PayToken"); + String mdTrtId = result.getDataMapString("MdtrtId"); // 医保就诊ID + String chrgBchno = result.getDataMapString("ChrgBchno"); // 医疗机构订单号、收费批次号 + String mdUserId = result.getDataMapString("UserID_YBZF"); // 医保用户ID + // 住院========= + String payOrRefundMoney = result.getDataMapString("PayOrRefundMoney"); // 缴退金额[大于0时需要微信收取费用,小于0时需要微信退费] + String prePayOrderId = result.getDataMapString("PrePayOrderId"); // 预交金缴费单号[需要退费时,his返回预交金时候的单号给微信退费。可能存在退多比微信预交金费用,字段具体内容后续协商后敲定] + String ordStas = result.getDataMapString("OrdStas"); // + BigDecimal deposit = result.getDataMapBigDecimal("Deposit"); // 住院押金(医保6202返回) + + log.info("[医保-住院结算]HIS费用上传明细接口返回 payAuthNo={}, payOrdId={}, payToken={}, mdtrtId={}, chrgBchno={}, userIdYBZF={}", payAuthNo, payOrdId, payToken, mdTrtId, chrgBchno, mdUserId); + if (payOrdId == null || payToken == null || mdTrtId == null || chrgBchno == null) { + throw new ServiceException("[医保]费用明细上传参数缺失"); + } + + MedicalInfo medicalInfo = new MedicalInfo(); + medicalInfo.setPayAuthNo(payAuthNo); + medicalInfo.setPayToken(payToken); + medicalInfo.setPayOrdId(payOrdId); + medicalInfo.setMdTrtId(mdTrtId); + medicalInfo.setChrgBchno(chrgBchno); + medicalInfo.setMdUserId(mdUserId); + + BigDecimal totalFee = result.getDataMapBigDecimal("FeeSumamt"); // 订单总金额医保返回 + BigDecimal hifpFee = result.getDataMapBigDecimal("FundPay"); // 统筹金额[基金金额] + BigDecimal hisOwnPayAmt = result.getDataMapBigDecimal("OwnPayAmt"); // 现金支付(医保6202返回) + BigDecimal hisPsnAcctPay = result.getDataMapBigDecimal("PsnAcctPay"); // 个人账户支出(医保6202返回) + log.info("[医保-住院结算]HIS费用上传明细接口返回2 payOrdId={}, hifpFee={}, hisOwnPayAmt={}, hisPsnAcctPay={}", + payOrdId, hifpFee, hisOwnPayAmt, hisPsnAcctPay); + + String extData = result.getDataMapString("ExtData"); + log.info("[医保-住院结算]扩展数据 extData={}", extData); + if (extData == null || totalFee == null) { + throw new ServiceException("[上传明细失败]响应参数缺失 extData is null"); + } + JSONObject extDataJson = JsonHelper.parseObject(extData); + JSONObject preSetl = extDataJson.getJSONObject("preSetl"); + + medicalInfo.setMedFeeSumAmt(new BigDecimal(preSetl.getString("medfee_sumamt"))); // 医保金额 + + medicalInfo.setCashFee(new BigDecimal(preSetl.getString("psn_cash_pay"))); // 现金支付 + BigDecimal acctPay = new BigDecimal(preSetl.getString("acct_pay")); // 个人账户支付 +// BigDecimal hifpPay = new BigDecimal(preSetl.getString("hifp_pay")); + medicalInfo.setAcctFee(acctPay); // 个人账户支付 + medicalInfo.setHifpFee(hifpFee); // 统筹支付金额 + medicalInfo.setTotalFee(totalFee); // 医保订单总金额 + + medicalInfo.setInsuranceFee(acctPay.add(hifpFee)); // (个账 + 统筹) + + log.info("[医保-住院结算]结算完成返回数据 medicalFee={}", medicalInfo); + return medicalInfo; } @@ -159,7 +216,7 @@ public class MedicalService { * * @param payAuthNo 授权码 */ - private MedicalInfo hisMedPlaceOrder(MerchantEnum merchantEnum, String payAuthNo, JsonResult result) throws ServiceException { + private MedicalInfo noticeHiCreateMedOrder(MerchantEnum merchantEnum, String payAuthNo, JsonResult result) throws ServiceException { if (result == null) { throw new ServiceException("[医保]返回数据为空"); } @@ -194,7 +251,7 @@ public class MedicalService { BigDecimal totalFee = resp.getDataMapBigDecimal("FeeSumamt"); // 订单总金额医保返回 String extData = resp.getDataMapString("ExtData"); - log.info("extData={}", extData); + log.info("[医保]扩展数据 extData={}", extData); if (extData == null || totalFee == null) { throw new ServiceException("[上传明细失败]响应参数缺失 extData is null"); } @@ -218,11 +275,32 @@ public class MedicalService { } // 创建医保订单 - private MedCreateOrder createMIOrder(MerchantEnum merchantEnum, OrderMIEnum orderMIEnum, boolean hasDBOrder, String orderTitle, String payOpenId, String msgOpenId, String outTradeNo, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String chrgBchno, - BigDecimal totalFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, - String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) throws ServiceException { + private MedCreateOrder createMedOrder(MerchantEnum merchantEnum, OrderMIEnum orderMIEnum, boolean hasDBOrder, String orderTitle, Order order, PEnum serverEnum) throws ServiceException { + + String notifyType = serverEnum.CODE; MedCreateOrder medCreateOrder = new MedCreateOrder(); + String ip = order.getIp(); + String payOpenId = order.getPayOpenId(); + String msgOpenId = order.getOpenid(); + String outTradeNo = order.getOutTradeNo(); + String chrgBchno = order.getChrgBchno(); + String cardNo = order.getIdCardNo(); + String realName = order.getPatientName(); + String payOrdId = order.getPayOrdId(); + String payAuthNo = order.getPayAuthNo(); + BigDecimal totalFee = order.getTotalFee(); + BigDecimal insuranceFee = order.getInsuranceFee(); + BigDecimal cashFee = order.getPayMoney(); + String familyType = order.getFamilyType(); + String familyName = order.getFamilyName(); + String familyCardNo = order.getFamilyCardNo(); + String medicalCardInstId = order.getMedicalCardInstId(); + String medicalCardId = order.getMedicalCardId(); + + log.info("[医保][{}]下单 hasDBOrder={}, payOpenId={}, msgOpenId={}, patientId={}, treatNum={}, outTradeNo={}, payOrdId={}, payAuthNo={}, totalFee={}, acctFee={}, hifpFee={}, cashFee={}, idCardNo={}, realName={}, familyType={}, familyName={}, medicalCardId={}, medicalCardInstId={}", + serverEnum.NAME, hasDBOrder, payOpenId, msgOpenId, order.getPatientId(), order.getTreatNum(), outTradeNo, payOrdId, payAuthNo, totalFee, order.getAcctFee(), order.getHifpFee(), order.getPayMoney(), ParamHelper.hideIdCardNo(order.getIdCardNo()), order.getPatientName(), familyType, familyName, medicalCardId,medicalCardInstId); + if (ObjectUtils.isEmpty(payOpenId)) { payOpenId = msgOpenId; } @@ -254,7 +332,7 @@ public class MedicalService { throw new ServiceException("【支付宝】医保授权码medicalCardId为空"); } - Order order = hasDBOrder ? AliMedHelper.queryTrade(outTradeNo, null) : new Order(); + order = hasDBOrder ? AliMedHelper.queryTrade(outTradeNo, null) : new Order(); String notifyUrl = WeChatConfig.getHttpsBaseURL() + merchantEnum.getNotifyUrl(outTradeNo, notifyType); Map map = AliMedHelper.createOrder(orderMIEnum, msgOpenId, @@ -284,21 +362,19 @@ public class MedicalService { /** * [医保]处方下单 */ - public Result createRxOrder(String payCode, String payOpenId, String openid, String patientId, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, - String recipeJson, String treatNum, String payWay, String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) { - Result result = PayService.isPaymentPermittedByTime(); - if (result != null) { - return result; - } - MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode); - if (merchantEnum == null) { // 支付方式异常 - return Result.error(ResultEnum.PAY_TYPE_ERROR); + public Result createRxOrder(MerchantEnum merchantEnum, Recipe order, PEnum serverEnum, String recipeJson, String payWay) { + String treatNum = order.getTreatNum(); + String payOrdId = order.getPayOrdId(); + String outTradeNo = order.getOutTradeNo(); + + if (ObjectUtils.isEmpty(outTradeNo) || ObjectUtils.isEmpty(payOrdId) || ObjectUtils.isEmpty(treatNum)) { + log.info("[医保][处方]参数缺失 outTradeNo={}, payOrdId={}, treatNum={}", outTradeNo, payOrdId, treatNum); + return Result.error(ResultEnum.PARAM_IS_DEFECT); } // 0:公众号内支付,1:扫码支付 payWay = payWay == null ? "0" : payWay; - String outTradeNo = merchantEnum.createOutTradeNo(); Recipe rxInfo = new RecipeService().recipeJsonToInfo(treatNum, recipeJson); log.info("[医保][处方]JSON解析 RxInfo={}", rxInfo); if (rxInfo == null) { @@ -320,62 +396,42 @@ public class MedicalService { } hasDBOrder = true; outTradeNo = findOrder.getOutTradeNo(); + order.setOutTradeNo(outTradeNo); } } - log.info("[医保][处方]下单 hasDBOrder={}, openid={}, patientId={}, treatNum={}, outTradeNo={}, payOrdId={}, payAuthNo={}, totalFee={}, acctFee={}, hifpFee={}, cashFee={}, idCardNo={}, realName={}, familyType={}, familyName={}, medicalCardId={}, medicalCardInstId={}", hasDBOrder, openid, patientId, treatNum, outTradeNo, payOrdId, payAuthNo, totalFee, acctFee, hifpFee, cashFee, cardNo, realName, familyType, familyName, medicalCardId, medicalCardInstId); - String orderTitle = "门诊号:" + treatNum; - MedCreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.DIAG_PAY, hasDBOrder, orderTitle, payOpenId, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno, - totalFee, insuranceFee, cashFee, notifyType, - familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId); + MedCreateOrder medOrder = createMedOrder(merchantEnum, OrderMIEnum.DIAG_PAY, hasDBOrder, orderTitle, order, serverEnum); - if (!miOrder.hasMapData()) { + if (!medOrder.hasMapData()) { return Result.error(ResultEnum.PAY_ERROR_ORDER); } - String bankTransNo = miOrder.mapGetBankTansNo(); - Recipe addRecipe = new Recipe(); - addRecipe.setOutTradeNo(outTradeNo); - addRecipe.setTradeNo(payOrdId); - addRecipe.setPayOrdId(payOrdId); + String bankTransNo = medOrder.mapGetBankTansNo(); + order.setBankTransNo(bankTransNo); + order.setPayWay(payWay); // ------------------------------------------- - addRecipe.setChrgBchno(chrgBchno); - addRecipe.setMdUserId(mdUserId); - addRecipe.setMdTrtId(mdTrtId); - addRecipe.setRecipeJson(recipeJsonStr); - addRecipe.setDeptCode(rxInfo.getDeptCode()); - addRecipe.setDeptName(rxInfo.getDeptName()); - addRecipe.setReqDeptCode(rxInfo.getReqDeptCode()); - addRecipe.setReqDeptName(rxInfo.getReqDeptName()); + order.setRecipeJson(recipeJsonStr); + order.setDeptCode(rxInfo.getDeptCode()); + order.setDeptName(rxInfo.getDeptName()); + order.setReqDeptCode(rxInfo.getReqDeptCode()); + order.setReqDeptName(rxInfo.getReqDeptName()); // - addRecipe.setPayMoney(cashFee); // 现金 - addRecipe.setAcctFee(acctFee); - addRecipe.setHifpFee(hifpFee); - addRecipe.setTotalFee(totalFee); - // - addRecipe.setPayWay(payWay); - addRecipe.setOpenid(openid); - addRecipe.setPatientId(patientId); - addRecipe.setTreatNum(treatNum); - addRecipe.setBankTransNo(bankTransNo); - addRecipe.setPayStatus(-1); - addRecipe.setHisStatus(-1); - addRecipe.setPayMchCode(merchantEnum.CODE); - addRecipe.setPayOpenId(payOpenId); - - Map map = miOrder.getMap(); - if (miOrder.hasCreateMerOrder()) { // 订单已发起支付 + order.setPayStatus(-1); + order.setHisStatus(-1); + + Map map = medOrder.getMap(); + if (medOrder.hasCreateMerOrder()) { // 订单已发起支付 log.info("[医保][处方]订单已发起支付 hasDBOrder={}, outTradeNo={}, payOrdId={}", hasDBOrder, outTradeNo, payOrdId); return Result.error(ResultEnum.PAY_REPEAT); } else { if (hasDBOrder) { - log.info("[医保][处方]已有订单 hasDBOrder={}, outTradeNo={}, rxInfo={}", hasDBOrder, outTradeNo, JsonHelper.toJsonString(addRecipe)); + log.info("[医保][处方]已有订单 hasDBOrder={}, outTradeNo={}, order={}", hasDBOrder, outTradeNo, JsonHelper.toJsonString(order)); return Result.success(map); } } - if (!recipeDao.insertMedical(addRecipe)) { + if (!recipeDao.insertMedical(order)) { return Result.error(ResultEnum.DATA_INSERT_ERROR); } return Result.success(map); @@ -389,28 +445,17 @@ public class MedicalService { /** * [医保]挂号下单 */ - public Result createRegOrder(String payCode, String payOpenId, String openid, String patientId, String cardNo, String realName, String hisPatientId, String ip, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, Register reg, - String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) { - reg.setOpenid(openid); - reg.setPatientId(patientId); - reg.setHisPatientId(hisPatientId); - reg.setIdCardNo(cardNo); - - Result result = PayService.isPaymentPermittedByTime(); - if (result != null) { - return result; + public Result createRegOrder(MerchantEnum merchantEnum, Register order, PEnum serverEnum) { + String payOrdId = order.getPayOrdId(); + String outTradeNo = order.getOutTradeNo(); + if (ObjectUtils.isEmpty(outTradeNo) || ObjectUtils.isEmpty(payOrdId)) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); } - MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode); - if (merchantEnum == null) { // 支付方式异常 - return Result.error(ResultEnum.PAY_TYPE_ERROR); - } - - String outTradeNo = merchantEnum.createOutTradeNo(); try { boolean hasDBOrder = false; RegisterDao regDao = new RegisterDao(); - if (MerchantEnum.ALI_MEDICAL.equals(merchantEnum)) { // 支付取消支付可重新支付 + if (MerchantEnum.ALI_MEDICAL.equals(merchantEnum)) { // 支付宝取消支付可重新支付 Order findOrder = regDao.selectMIOrderByPayOrdId(payOrdId); if (findOrder != null) { if (findOrder.hasPayStatusPaid()) { @@ -418,51 +463,99 @@ public class MedicalService { } hasDBOrder = true; outTradeNo = findOrder.getOutTradeNo(); + order.setOutTradeNo(outTradeNo); } } - String treatNum = reg.getTreatNum(); - log.info("[医保][挂号]下单 hasDBOrder={}, openid={}, patientId={}, treatNum={}, outTradeNo={}, payOrdId={}, payAuthNo={}, totalFee={}, acctFee={}, hifpFee={}, cashFee={}, idCardNo={}, realName={}, familyType={}, familyName={}, medicalCardId={}, medicalCardInstId={}", hasDBOrder, openid, patientId, treatNum, outTradeNo, payOrdId, payAuthNo, totalFee, acctFee, hifpFee, cashFee, cardNo, realName, familyType, familyName, medicalCardId, medicalCardInstId); - String orderTitle = "挂号"; - MedCreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.REG_PAY, hasDBOrder, orderTitle, payOpenId, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno, - totalFee, insuranceFee, cashFee, notifyType, - familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId); + MedCreateOrder medOrder = createMedOrder(merchantEnum, OrderMIEnum.REG_PAY, hasDBOrder, orderTitle, order, serverEnum); - if (!miOrder.hasMapData()) { + if (!medOrder.hasMapData()) { return Result.error(ResultEnum.PAY_ERROR_ORDER); } - String bankTransNo = miOrder.mapGetBankTansNo(); - reg.setOutTradeNo(outTradeNo); - reg.setTradeNo(payOrdId); - reg.setPayOrdId(payOrdId); - reg.setPayMoney(cashFee); - reg.setAcctFee(acctFee); - reg.setHifpFee(hifpFee); - reg.setChrgBchno(chrgBchno); - reg.setMdTrtId(mdTrtId); - reg.setMdUserId(mdUserId); - reg.setPayDeviceId("mobile"); - reg.setPayStatus(-1); - reg.setHisStatus(-1); - reg.setBankTransNo(bankTransNo); - reg.setPayWay(merchantEnum.PAY_WAY_IN); - reg.setPayMchCode(merchantEnum.CODE); - reg.setPayOpenId(payOpenId); - - Map map = miOrder.getMap(); - if (miOrder.hasCreateMerOrder()) { // 订单已发起支付 + String bankTransNo = medOrder.mapGetBankTansNo(); + order.setBankTransNo(bankTransNo); + order.setPayWay(merchantEnum.PAY_WAY_IN); + order.setPayStatus(-1); + order.setHisStatus(-1); + + Map map = medOrder.getMap(); + if (medOrder.hasCreateMerOrder()) { // 订单已发起支付 log.info("[医保][挂号]订单已发起支付 hasDBOrder={}, outTradeNo={}, payOrdId={}", hasDBOrder, outTradeNo, payOrdId); return Result.error(ResultEnum.PAY_REPEAT); } else { if (hasDBOrder) { - log.info("[医保][挂号]已有订单 hasDBOrder={}, outTradeNo={}, rxInfo={}", hasDBOrder, outTradeNo, JsonHelper.toJsonString(reg)); + log.info("[医保][挂号]已有订单 hasDBOrder={}, outTradeNo={}, order={}", hasDBOrder, outTradeNo, JsonHelper.toJsonString(order)); return Result.success(map); } } - if (!regDao.insertMedical(reg)) { + if (!regDao.insertMedical(order)) { + return Result.error(ResultEnum.DATA_INSERT_ERROR); + } + return Result.success(map); + + } catch (ServiceException e) { + log.error(e.getMessage()); + return Result.error(e); + } + } + + + /** + * [医保]住院结算下单 + */ + public Result createOutHospOrder(MerchantEnum merchantEnum, PayInHosp order, PEnum serverEnum) { + String treatNum = order.getTreatNum(); + String payOrdId = order.getPayOrdId(); + String outTradeNo = order.getOutTradeNo(); + + if (ObjectUtils.isEmpty(outTradeNo) || ObjectUtils.isEmpty(payOrdId) || ObjectUtils.isEmpty(treatNum)) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + + try { + boolean hasDBOrder = false; + InHospPayDao inHospPayDao = new InHospPayDao(); + if (MerchantEnum.ALI_MEDICAL.equals(merchantEnum)) { // 支付宝取消支付可重新支付 + Order findOrder = inHospPayDao.selectMIOrderByPayOrdId(payOrdId); + if (findOrder != null) { + if (findOrder.hasPayStatusPaid()) { + return Result.error(ResultEnum.PAY_REPEAT); + } + hasDBOrder = true; + outTradeNo = findOrder.getOutTradeNo(); + order.setOutTradeNo(outTradeNo); + } + } + + + String orderTitle = "住院号:" + treatNum; + MedCreateOrder medOrder = createMedOrder(merchantEnum, OrderMIEnum.REG_PAY, hasDBOrder, orderTitle, order, serverEnum); + + if (!medOrder.hasMapData()) { + return Result.error(ResultEnum.PAY_ERROR_ORDER); + } + + String bankTransNo = medOrder.mapGetBankTansNo(); + order.setBankTransNo(bankTransNo); + order.setPayWay(merchantEnum.PAY_WAY_IN); + order.setPayStatus(-1); + order.setHisStatus(-1); + + Map map = medOrder.getMap(); + if (medOrder.hasCreateMerOrder()) { // 订单已发起支付 + log.info("[医保][住院结算]订单已发起支付 hasDBOrder={}, outTradeNo={}, payOrdId={}", hasDBOrder, outTradeNo, payOrdId); + return Result.error(ResultEnum.PAY_REPEAT); + } else { + if (hasDBOrder) { + log.info("[医保][住院结算]已有订单 hasDBOrder={}, outTradeNo={}, order={}", hasDBOrder, outTradeNo, JsonHelper.toJsonString(order)); + return Result.success(map); + } + } + + if (!inHospPayDao.insert(order)) { return Result.error(ResultEnum.DATA_INSERT_ERROR); } return Result.success(map); @@ -586,7 +679,7 @@ public class MedicalService { * @param openid openid * @param payInfo 支付信息 */ - public boolean inHospPaidNotify(MerchantEnum merchantEnum, String outTradeNo, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { + public boolean outHospPaidNotify(MerchantEnum merchantEnum, String outTradeNo, String bankTransNo, String payDate, String payTime, String openid, String payInfo) { if (outTradeNo == null || bankTransNo == null || payDate == null || payTime == null) { log.info("[医保][住院结算]HIS结算参数缺失 outTradeNo={}, bankTransNo={}, payDate={}, payTime={}", outTradeNo, bankTransNo, payDate, payTime); return false; @@ -649,10 +742,10 @@ public class MedicalService { return false; } - if (!WxMedConfig.IS_AUTO_REFUND) { - log.info("[医保][住院结算]现金自动退费功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); - return false; - } +// if (!WxMedConfig.IS_AUTO_REFUND) { +// log.info("[医保][住院结算]现金自动退费功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo); +// return false; +// } return false; } diff --git a/src/main/java/com/ynxbd/common/service/MiddleOfficeService.java b/src/main/java/com/ynxbd/common/service/MiddleOfficeService.java index 60db9d0..77a560f 100644 --- a/src/main/java/com/ynxbd/common/service/MiddleOfficeService.java +++ b/src/main/java/com/ynxbd/common/service/MiddleOfficeService.java @@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import java.util.Map; import java.util.Objects; +import java.util.UUID; @Slf4j public class MiddleOfficeService { @@ -19,7 +20,7 @@ public class MiddleOfficeService { try { if (HospEnum.红河州人民医院.isHosp()) { if (MiddleOfficeConfig.URL != null) { //平台数据上传 - String reqId = SnowHelper.nextStrId(); + String reqId = UUID.randomUUID().toString(); MiddleOfficeConfig.run(soapUrl, "" + SoapHelper.requestParams("HIS", null, reqId, params) + "", hisMedSoapMdUrl, transactionCode, result); if ("7004".equals(transactionCode) && JsonResult.xmlToBean(result, JsonResultEnum.SYS_HIS) != null) { MiddleOfficeConfig.uploadTreatNum("JH0104", Objects.requireNonNull(JsonResult.xmlToBean(result, JsonResultEnum.SYS_HIS)).getDataMapString("MZNum")); diff --git a/src/main/java/com/ynxbd/common/service/RecipeService.java b/src/main/java/com/ynxbd/common/service/RecipeService.java index 24fbc27..3605342 100644 --- a/src/main/java/com/ynxbd/common/service/RecipeService.java +++ b/src/main/java/com/ynxbd/common/service/RecipeService.java @@ -2,9 +2,9 @@ package com.ynxbd.common.service; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.action.pay.PEnum; +import com.ynxbd.common.bean.ConfigSelfHelp; import com.ynxbd.common.bean.HisRecipe; import com.ynxbd.common.bean.SelfHelpCount; -import com.ynxbd.common.bean.ConfigSelfHelp; import com.ynxbd.common.bean.StandardPrice; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Order; @@ -14,8 +14,11 @@ import com.ynxbd.common.dao.RefundDao; import com.ynxbd.common.dao.SelfHelpDao; import com.ynxbd.common.dao.his.HisAccountDao; import com.ynxbd.common.dao.his.HisRecipeDao; -import com.ynxbd.common.helper.common.*; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.helper.common.DateHelper; +import com.ynxbd.common.helper.common.ErrorHelper; +import com.ynxbd.common.helper.common.JsonHelper; +import com.ynxbd.common.helper.common.QuickDrugDispenseHelper; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; @@ -612,7 +615,7 @@ public class RecipeService { throw new ServiceException(ResultEnum.REFUND_MONEY_ERROR); } - String outRefundNo = HisHelper.getHisTradeNo(bankTransNo, pEnum); + String outRefundNo = HisFactory.getHisTradeNo(bankTransNo, pEnum); Order orderRefund = PayService.refund(merchantEnum, outTradeNo, outRefundNo, refundMoney, recipe.getTotalFee(), refundDesc, recipe.getUpdateTime(), recipe.getOpenid(), recipe.getPatientId(), null); boolean isResult = orderRefund.isSuccess(); diff --git a/src/main/java/com/ynxbd/common/service/RegService.java b/src/main/java/com/ynxbd/common/service/RegService.java index 17e5959..dfa095e 100644 --- a/src/main/java/com/ynxbd/common/service/RegService.java +++ b/src/main/java/com/ynxbd/common/service/RegService.java @@ -16,7 +16,7 @@ import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.dao.his.HisAccountDao; import com.ynxbd.common.dao.his.HisRegisterDao; import com.ynxbd.common.helper.common.DateHelper; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; @@ -112,7 +112,7 @@ public class RegService { Register reg; String regType, patientId; - String tradeNo = HisHelper.getHisTradeNo(bankTransNo, PEnum.REG); + String tradeNo = HisFactory.getHisTradeNo(bankTransNo, PEnum.REG); try { reg = queryRegByOrderNo(outTradeNo, null); if (reg == null) { @@ -149,7 +149,7 @@ public class RegService { ResultEnum resultEnum = e.getResultEnum(); String message = resultEnum == null ? "系统繁忙" : resultEnum.message; String pushMessage = "挂号失败已申请退款,原因:" + message + ",订单号:" + outTradeNo; // 推送消息 - regAutoRefund(merchantEnum, HisHelper.createErrorResult(message), openid, totalFee, outTradeNo, tradeNo, message, pushMessage, tradeDate); + regAutoRefund(merchantEnum, HisFactory.His().createErrorResult(message), openid, totalFee, outTradeNo, tradeNo, message, pushMessage, tradeDate); throw new ServiceException(message); } @@ -194,7 +194,7 @@ public class RegService { } else { // 不执行挂号-->退费 String message = "挂号类型异常:{" + regType + "}"; log.info("{} [挂号] patientId={}, message={}", merchantEnum.NAME, patientId, message); - jsonResult = HisHelper.createErrorResult(message); + jsonResult = HisFactory.His().createErrorResult(message); } @@ -553,7 +553,7 @@ public class RegService { throw new ServiceException(ResultEnum.REFUND_MONEY_ERROR); } - String outRefundNo = HisHelper.getHisTradeNo(reg.getBankTransNo(), pEnum); + String outRefundNo = HisFactory.getHisTradeNo(reg.getBankTransNo(), pEnum); Order refundInfo = PayService.refund(merchantEnum, outTradeNo, outRefundNo, refundMoney, dbPayMoney, refundDesc, reg.getUpdateTime(), reg.getOpenid(), reg.getPatientId(), null); boolean isResult = refundInfo.isSuccess(); log.info("{} [HIS挂号退费] 申请{} outTradeNo={}, outRefundNo={}, invoiceTransNo={},refundMoney={}, payMoney={}", merchantEnum.NAME, diff --git a/src/main/java/com/ynxbd/common/service/ThirdPartyPayService.java b/src/main/java/com/ynxbd/common/service/ThirdPartyPayService.java index bc2f310..522f34b 100644 --- a/src/main/java/com/ynxbd/common/service/ThirdPartyPayService.java +++ b/src/main/java/com/ynxbd/common/service/ThirdPartyPayService.java @@ -5,7 +5,7 @@ import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Register; import com.ynxbd.common.dao.RegisterDao; import com.ynxbd.common.dao.his.HisRegisterDao; -import com.ynxbd.common.helper.his.HisHelper; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ServiceException; @@ -35,7 +35,7 @@ public class ThirdPartyPayService { Register reg; String regType, patientId; - String tradeNo = HisHelper.getHisTradeNo(bankTransNo, PEnum.TPP_QR_REG); + String tradeNo = HisFactory.getHisTradeNo(bankTransNo, PEnum.TPP_QR_REG); try { reg = registerDao.selectByOutTradeNo(outTradeNo); if (reg == null) { diff --git a/src/main/java/com/ynxbd/jy/helper/JYPayConfig.java b/src/main/java/com/ynxbd/jy/helper/JYPayConfig.java index a79dae0..8b48fd9 100644 --- a/src/main/java/com/ynxbd/jy/helper/JYPayConfig.java +++ b/src/main/java/com/ynxbd/jy/helper/JYPayConfig.java @@ -21,7 +21,7 @@ public class JYPayConfig { public final static String PRIVATE_KEY; static { - XmlConfigHelper config = new XmlConfigHelper().read("xbd-config.xml", "pay"); + XmlConfigHelper config = new XmlConfigHelper().read("jy-config.xml", "pay"); URL = config.getString("url"); APPLICATION_ID = config.getString("application_id"); diff --git a/src/main/java/com/ynxbd/jy/helper/JYPayHelper.java b/src/main/java/com/ynxbd/jy/helper/JYPayHelper.java index 66ebe2b..6dad6e9 100644 --- a/src/main/java/com/ynxbd/jy/helper/JYPayHelper.java +++ b/src/main/java/com/ynxbd/jy/helper/JYPayHelper.java @@ -3,10 +3,9 @@ package com.ynxbd.jy.helper; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.ReqOrder; -import com.ynxbd.common.helper.common.ErrorHelper; import com.ynxbd.common.helper.common.JsonHelper; -import com.ynxbd.common.helper.rsa.RSAHelper; import com.ynxbd.common.helper.http.OkHttpHelper; +import com.ynxbd.common.helper.rsa.RSAHelper; import com.ynxbd.jy.bean.JYOrder; import com.ynxbd.wx.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; @@ -38,7 +37,7 @@ public class JYPayHelper { * @param msgOpenId 用于推送的openId * @return 成功返回 json, 否则返回null */ - public static JSONObject createOrder(MerchantEnum merchantEnum, String title, String totalFee, String outTradeNo, String notifyType, String ip, String payOpenId, String msgOpenId, ReqOrder reqOrder) { + public static JSONObject createOrder(MerchantEnum merchantEnum, String title, String outTradeNo, String totalFee, String notifyType, String ip, String payOpenId, String msgOpenId, ReqOrder reqOrder) { try { if (ObjectUtils.isEmpty(payOpenId) || ObjectUtils.isEmpty(outTradeNo) || merchantEnum == null || totalFee == null || notifyType == null) { @@ -50,13 +49,14 @@ public class JYPayHelper { try { cents = new BigDecimal(totalFee).movePointRight(2).toString(); // 金额转换=>单位分 } catch (Exception e) { - ErrorHelper.println(e); - log.info("【京硕】下单金额转换异常"); + log.info("【京硕】下单金额转换异常:", e); return null; } log.info("【京硕】下单 {},{},{},{},{}", title, outTradeNo, totalFee, ip, merchantEnum.NOTIFY_URL); + + log.info("hospitalId={}, applicationId={}, merchantI={}", JYPayConfig.HOSP_ID, JYPayConfig.APPLICATION_ID, JYPayConfig.MERCHANT_ID); JYOrder jyOrder = reqOrder.jyOrder; Map req = new HashMap<>(); @@ -78,7 +78,7 @@ public class JYPayHelper { req.put("patientName", reqOrder.getPatientName()); // 微信医保支付必传。其余支付方式若该接口若不传,需要调用2.1.6接口再次更新 req.put("patientGender", reqOrder.getPatientGender()); // 患者性别。综合支付对应用权限控制是否必传 1男 2女 9其他 最大不超过4位 该接口若不传,需要调用2.1.6接口再次更新 req.put("patientAge", reqOrder.getPatientAge()); // 患者年龄。综合支付对应用权限控制是否必传 该接口若不传,需要调用2.1.6接口再次更新 - req.put("patientIdNo", reqOrder.getPatientTel()); // 微信医保支付必传。其余支付方式若该接口若不传,需要调用2.1.6接口再次更新 + req.put("patientIdNo", reqOrder.getPatientIdCardNo()); // 微信医保支付必传。其余支付方式若该接口若不传,需要调用2.1.6接口再次更新 req.put("patientPhoneNumber", reqOrder.getPatientTel()); // 综合支付对应用权限控制是否必传 最大不超过16位 该接口若不传,需要调用2.1.6接口再次更新 req.put("patientId", reqOrder.getPatientId()); // 患者ID:综合支付对应用权限控制是否必传 最大不超过32位 该接口若不传,需要调用2.1.6接口再次更新 req.put("patientCardNo", reqOrder.getPatientId()); // 患者卡号:综合支付对应用权限控制是否必传 最大不超过32位该接口若不传,需要调用2.1.6接口再次更新 @@ -113,7 +113,8 @@ public class JYPayHelper { } req.put("signValue", signValue); // 数字签名:由接入方生成的签名,支付平台根据该字段对入参进行验签;签名生成规则参考4加签验签规则 - JSONObject resp = OkHttpHelper.postJson(JYPayConfig.URL + "/qy_iips_pay/paycore/prePayOrder", params -> { + log.info("req={}", JSONObject.toJSONString(req)); + JSONObject resp = OkHttpHelper.postForm(JYPayConfig.URL + "/qy_iips_pay/paycore/prePayOrder", params -> { params.putAll(req); }, headers -> { headers.add("content-type", "application/x-www-form-urlencoded"); diff --git a/src/main/java/com/ynxbd/wx/wxfactory/base/auth/Client.java b/src/main/java/com/ynxbd/wx/wxfactory/base/auth/Client.java index f21f74a..d9a5d30 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/base/auth/Client.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/base/auth/Client.java @@ -5,11 +5,9 @@ import com.ynxbd.common.helper.common.Base64Helper; import com.ynxbd.common.helper.common.CodeHelper; import com.ynxbd.common.helper.common.JsonHelper; import com.ynxbd.common.helper.http.OkHttpHelper; -import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ServiceException; import com.ynxbd.wx.wxfactory.WxCacheHelper; import com.ynxbd.wx.wxfactory.base.auth.models.*; -import com.ynxbd.wx.wxfactory.payment.WXPayUtility; import com.ynxbd.wx.wxfactory.utils.EmojiHelper; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/resources/hc-config.xml b/src/main/resources/hc-config.xml index 89cb015..de501ad 100644 --- a/src/main/resources/hc-config.xml +++ b/src/main/resources/hc-config.xml @@ -1,5 +1,27 @@ + + + true + true + false + false + + 31922 + e4a05c13301f2f6a8b07b3de872dfe2d + e5322dfd9bfab939851319812c30f9f1 + + 5a4a6eacbe1040d8a91c76608aefb943 + mfkwewyhkozizj0caqyikozizj0daqcdqgaepc6p0omuruc5lq7cwdu18ca4cgmqbtjpwdyrglo4wbal9/m3dv4oywez7fbgtnkkgj/kfojvze6sc/dka+ddca== + 4e181412b5874b22ba113ea3a907e244 + http://220.164.109.105:19211/internet + + + + + + + 31737 diff --git a/src/main/resources/hcode.properties b/src/main/resources/hcode.properties index 3d7426d..30520be 100644 --- a/src/main/resources/hcode.properties +++ b/src/main/resources/hcode.properties @@ -4,6 +4,7 @@ is_enable=true h.is_upload_data=false # \u662F\u5426\u6253\u5370\u4E0A\u62A5\u6570\u636E\u65E5\u5FD7 h.is_log_report=false + #\u5FAE\u4FE1\u5F00\u653E\u5E73\u53F0\u8C03\u7528\u53C2\u6570 h.app_id=e4a05c13301f2f6a8b07b3de872dfe2d h.app_secret=e5322dfd9bfab939851319812c30f9f1 diff --git a/src/main/resources/jy-config.xml b/src/main/resources/jy-config.xml index ee92db4..26ca6d1 100644 --- a/src/main/resources/jy-config.xml +++ b/src/main/resources/jy-config.xml @@ -1,9 +1,10 @@ - - http://127.0.0.1 - 1 - 1 + + http://192.168.1.26:8083 + 30007 + 20007 + 6910003 MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD1eiOktZm8bUwjHA2bFlrULg9v/VAmBfUWb8/1+xyZH5eSa7itvAG2Kdzv7L59nRIspXyO6ZW+gGmofnX8CqI5ofLrpissgoqZadNfz5v/k2Q78YTBM8BEMwkrPwOsbFX62poPSKr4kZRHgMADJkgS6AhsaDNBLdH6uRE8R0H6lQIDAQAB MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAPV6I6S1mbxtTCMcDZsWWtQuD2/9UCYF9RZvz/X7HJkfl5JruK28AbYp3O/svn2dEiylfI7plb6Aaah+dfwKojmh8uumKyyCiplp01/Pm/+TZDvxhMEzwEQzCSs/A6xsVframg9IqviRlEeAwAMmSBLoCGxoM0Et0fq5ETxHQfqVAgMBAAECgYAf8F9Y2+P/1zyzyL+gcR0qRD/v80aNW/MSk0O8noqPBcRD4c4qlK6oU/QSJ3x1fY1Sz8lQEuZP3gdhS+rv+zY2BjbfSq4HcZexmbBmh0NQ4Swd7i0hfkSM+koHZjVoPY/FJ/TW/Ks3iV+kpAZuVLCh60B66H8y9K5xu331nLxeYQJBAPzFeQPVJThxIBbk5g8/fYD/gbglEGqdurTJlo9tmCuqzty19fApBE+41ir9Sl2vguDnY1d9Zbuf1AlS21jsVx0CQQD4nNC1FyDKK6GxQvOm6Do+b663ft0WK7dum0c4pM57VPTRqxag4p6lYCu5KYmVvUL20KGE5LVZ9LaOIMIurD/ZAkEA4z4My1tFuPZKqQpjoXWsuNn7nrcDiTX/8iQBDTSzxx4qFtYnIh9d1uYO9Fr+DjeJa/PZpYAAg6rujutEcy8WKQJARir0WPgjIAx6gW5VGHmY3sBkvpOG0Ngb2JLo4hrZ0ENlKbwxEc2EW0aucH9BvsqBGOo/fCOU78O6tpiWVdf12QJAP8ENPIBQCLwHq0U5bzV+X94BmuOfTAqwvy/r6XQcOct0k/M/Lln0FUcPwAb6rl/1R55Xj1/DxI2UbTc4KNNpng== diff --git a/src/main/resources/webservice.properties b/src/main/resources/webservice.properties index c7795e2..52371f2 100644 --- a/src/main/resources/webservice.properties +++ b/src/main/resources/webservice.properties @@ -1 +1 @@ -# \u5F00\u542F\u5904\u65B9\u9884\u7ED3\u7B97\uFF08\u7B2C2\u5F00\u5173\uFF09\uFF08\u6CE8\u610F\u8BE5\u914D\u7F6E\u9700\u8054\u7CFBhis\u5F00\u53D1\u8005\u786E\u8BA4\u652F\u6301\u624D\u80FD\u5F00\u542F\uFF0C\u5426\u5219\u5B58\u5728\u98CE\u9669\uFF01\uFF09 his.is_recipe_prepay=false # \u672C\u5730 #his.url=127.0.0.1:8888 # HIS\u662F\u5426\u5F00\u542F\u652F\u4ED8\u5B9D\u5206\u5F00\u5BF9\u8D26 his.is_ali_mer=false # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=true # \u5DDE\u50A3\u533B\u4F7F\u7528 his.is_req_cdata=false # \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F his.is_push_msg=false #------------------------------- # \u6D4B\u8BD5\u73AF\u5883 his.dev_url=200.200.200.60:7777 # \u533B\u4FDD=========================== # \u65E7\u914D\u7F6E his.md_url=127.0.0.1:7777 # \u5FAE\u4FE1\u533B\u4FDD his.wx_med_url=10.20.10.7:7885 # \u652F\u4ED8\u5B9D\u533B\u4FDD his.ali_med_url=10.20.10.7:7885 # \u6D4B\u8BD5============================================================ # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u77F3\u6797\u53BF\u533B\u9662 #his.url=200.200.200.105:8888 # \u5FB7\u5B8F\u4E2D\u533B his.url=200.200.200.60:7777 # \u7EA2\u6CB3\u5DDE\u533B\u9662 #his.url=10.20.10.6:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # \u5B81\u8497\u5987\u5E7C #his.url=172.19.3.15:8888 # \u5B81\u8497\u53BF\u533B\u9662 #his.url=192.168.10.8:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.39:8888 #\u666F\u6D2A\u4E2D\u50A3\u533B #his.url=192.168.197.217:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u7EA2\u6CB3 #his.url=10.20.10.6:8888 # \u7EA2\u6CB3\u533B\u4FDD #his.url=10.20.10.6:8888 #his.url=192.168.12.10:8888 #his.md_url=192.168.1.128:7885 #his.dev_url=10.20.10.6:9988 # \u6C38\u80DC #his.url=200.200.200.20:8888 # \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:8888 # \u534E\u576A #his.url=192.168.1.115:8888 # \u8499\u81EA\u4E2D\u533B #his.url=192.168.0.228:8888 # \u7389\u9F99 #his.url=192.168.0.17:8888 # #his.url=172.16.10.15:8888 # \u7984\u529D\u949F\u7231 #his.url=200.200.200.5:8888 # \u8499\u81EA\u5E02\u4EBA\u6C11\u533B\u9662 #his.url=200.200.200.174:8080 # \u5143\u8C0B #his.url=200.200.200.29:8888 # \u5143\u8C0B\u533B\u4FDD #his.dev_url=200.200.200.36:9999 # \u8292\u5E02 #his.url=192.168.100.8:8888 # \u7EA2\u6CB3\u5987\u5E7C\u4FDD\u5065\u9662 #his.url=192.168.1.204:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # #his.url=10.10.11.23:8888 # \u77F3\u6797 #his.url=192.168.10.10:8888 # \u5BCC\u6C11 #his.url=200.200.201.27:8888 # \u897F\u53CC\u7248\u7EB3 #his.url=10.10.11.23:8888 #wx.password=ynxbd@6910 \ No newline at end of file +his.is_recipe_prepay=false # \u672C\u5730 #his.url=127.0.0.1:8888 # HIS\u662F\u5426\u5F00\u542F\u652F\u4ED8\u5B9D\u5206\u5F00\u5BF9\u8D26 his.is_ali_mer=false # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=true # \u5DDE\u50A3\u533B\u4F7F\u7528 his.is_req_cdata=false # \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F his.is_push_msg=false #------------------------------- # \u6D4B\u8BD5\u73AF\u5883 his.dev_url=200.200.200.60:7777 # \u533B\u4FDD=========================== # \u65E7\u914D\u7F6E his.md_url=127.0.0.1:7777 # \u5FAE\u4FE1\u533B\u4FDD his.wx_med_url=10.20.10.7:7885 # \u652F\u4ED8\u5B9D\u533B\u4FDD his.ali_med_url=10.20.10.7:7885 # \u6D4B\u8BD5============================================================ # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u77F3\u6797\u53BF\u533B\u9662 #his.url=200.200.200.105:8888 # \u5FB7\u5B8F\u4E2D\u533B his.url=200.200.200.60:7777 # \u7EA2\u6CB3\u5DDE\u533B\u9662 #his.url=10.20.10.6:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # \u5B81\u8497\u5987\u5E7C #his.url=172.19.3.15:8888 # \u5B81\u8497\u53BF\u533B\u9662 #his.url=192.168.10.8:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.39:8888 #\u666F\u6D2A\u4E2D\u50A3\u533B #his.url=192.168.197.217:8888 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u7EA2\u6CB3 #his.url=10.20.10.6:8888 # \u7EA2\u6CB3\u533B\u4FDD #his.url=10.20.10.6:8888 #his.url=192.168.12.10:8888 #his.md_url=192.168.1.128:7885 #his.dev_url=10.20.10.6:9988 # \u6C38\u80DC #his.url=200.200.200.20:8888 # \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:8888 # \u534E\u576A #his.url=192.168.1.115:8888 # \u8499\u81EA\u4E2D\u533B #his.url=192.168.0.228:8888 # \u7389\u9F99 #his.url=192.168.0.17:8888 # #his.url=172.16.10.15:8888 # \u7984\u529D\u949F\u7231 #his.url=200.200.200.5:8888 # \u8499\u81EA\u5E02\u4EBA\u6C11\u533B\u9662 #his.url=200.200.200.174:8080 # \u5143\u8C0B #his.url=200.200.200.29:8888 # \u5143\u8C0B\u533B\u4FDD #his.dev_url=200.200.200.36:9999 # \u8292\u5E02 #his.url=192.168.100.8:8888 # \u7EA2\u6CB3\u5987\u5E7C\u4FDD\u5065\u9662 #his.url=192.168.1.204:8888 # \u8292\u5E02\u5987\u5E7C #his.url=192.168.11.7:8888 # #his.url=10.10.11.23:8888 # \u77F3\u6797 #his.url=192.168.10.10:8888 # \u5BCC\u6C11 #his.url=200.200.201.27:8888 # \u897F\u53CC\u7248\u7EB3 #his.url=10.10.11.23:8888 #wx.password=ynxbd@6910 \ No newline at end of file diff --git a/src/main/resources/webservice.xml b/src/main/resources/webservice.xml new file mode 100644 index 0000000..4a892f9 --- /dev/null +++ b/src/main/resources/webservice.xml @@ -0,0 +1 @@ + false false false false false 127.0.0.1:8888 127.0.0.1:8888 200.200.200.60:7777 200.200.200.60:7777 \ No newline at end of file