1、支付宝医保接口调整,日志打印调整,自动退费调整

2、云胶片新版对接
debug
wangsq 1 week ago
parent 1cff6ab923
commit 9a740ffc8a
  1. 39
      src/main/java/com/ynxbd/ali/config/AliMIConfig.java
  2. 36
      src/main/java/com/ynxbd/ali/helper/AliMedicalHelper.java
  3. 2
      src/main/java/com/ynxbd/ali/helper/AliUploadHelper.java
  4. 6
      src/main/java/com/ynxbd/common/action/MedicalInsuranceAction.java
  5. 46
      src/main/java/com/ynxbd/common/action/RecipeAction.java
  6. 20
      src/main/java/com/ynxbd/common/action/XBDAction.java
  7. 11
      src/main/java/com/ynxbd/common/action/pay/AliPayAction.java
  8. 22
      src/main/java/com/ynxbd/common/action/pay/MedicalAction.java
  9. 6
      src/main/java/com/ynxbd/common/action/pay/MedicalTestAction.java
  10. 4
      src/main/java/com/ynxbd/common/action/test/TestAction.java
  11. 27
      src/main/java/com/ynxbd/common/bean/enums/MerchantEnum.java
  12. 569
      src/main/java/com/ynxbd/common/dao/his/HisMIDao.java
  13. 8
      src/main/java/com/ynxbd/common/dao/his/HisMedicalTestDao.java
  14. 5
      src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java
  15. 2
      src/main/java/com/ynxbd/common/helper/his/HisEnum.java
  16. 97
      src/main/java/com/ynxbd/common/helper/his/HisHelper.java
  17. 50
      src/main/java/com/ynxbd/common/helper/his/HisMIHelper.java
  18. 2
      src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java
  19. 37
      src/main/java/com/ynxbd/common/service/MedicalService.java
  20. 72
      src/main/java/com/ynxbd/common/service/XBDService.java
  21. 37
      src/main/java/com/ynxbd/wx/wxfactory/WxMedicalHelper.java
  22. 4
      src/main/java/com/ynxbd/wx/wxfactory/WxMessageHelper.java
  23. 6
      src/main/java/com/ynxbd/wx/wxfactory/medical/Client.java
  24. 4
      src/main/java/com/ynxbd/wx/wxfactory/medical/WechatMIConfig.java
  25. 14
      src/main/resources/medical-ali.properties
  26. 2
      src/main/resources/webservice.properties
  27. 2
      src/main/resources/wx.properties

@ -0,0 +1,39 @@
package com.ynxbd.ali.config;
import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.wx.wxfactory.medical.WechatMIConfig;
// 支付宝医保配置
public class AliMIConfig {
private AliMIConfig() {
}
//配置文件读取项
public static final boolean IS_ENABLE;
public static final String CITY_CODE; // 城市编码
public static final String ORG_CHNL_CRTF_CODG;
public static final String ORG_NO;
public static final String ORG_APP_ID;
public static final String ORG_HOSPITAL_NAME;
public static boolean IS_DEV;
public static boolean IS_AUTO_REFUND;
static {
ProperHelper config = new ProperHelper().read("medical-ali.properties");
IS_ENABLE = config.getBoolean("mi_ali.is_enable", false);
config.setIsEnable(IS_ENABLE);
IS_DEV = config.getBoolean("mi_ali.is_dev", true);
IS_AUTO_REFUND = config.getBoolean("mi_ali.is_auto_refund", false);
ORG_NO = config.getString("mi_ali.org_no");
ORG_APP_ID = config.getString("mi_ali.org_app_id");
ORG_CHNL_CRTF_CODG = config.getString("mi_ali.org_chnl_crtf_codg");
ORG_HOSPITAL_NAME = config.getString("mi_ali.org_hospital_name");
// 相同数据赋值
CITY_CODE = WechatMIConfig.CITY_CODE;
}
}

@ -7,15 +7,17 @@ import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayCommerceMedicalAuthinfoAuthQueryModel;
import com.alipay.api.domain.AuthExtendParams;
import com.alipay.api.domain.MedicalNationalPayAuthInfo;
import com.alipay.api.request.AlipayCommerceMedicalAuthinfoAuthQueryRequest;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayCommerceMedicalAuthinfoAuthQueryResponse;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.ynxbd.ali.config.AliConfig;
import com.ynxbd.ali.config.AliMIConfig;
import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.common.ErrorHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.wx.wxfactory.bean.OrderMIEnum;
import com.ynxbd.wx.wxfactory.medical.MIConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@ -37,7 +39,7 @@ public class AliMedicalHelper {
* @param callUrl 回调地址
* @return
*/
public static String queryMIAuth(String openId, String accessToken, String patientName, String patientCardNo, String callUrl) {
public static MedicalNationalPayAuthInfo queryMIAuth(String openId, String accessToken, String patientName, String patientCardNo, String callUrl) {
try {
// 初始化SDK
AlipayClient alipayClient = new DefaultAlipayClient(AliConfig.getAlipayConfig());
@ -64,11 +66,11 @@ public class AliMedicalHelper {
model.setCallUrl(callUrl);
// 设置olBizTypeCode=04107(医保移动支付业务)时必传
model.setOrgAppId(MIConfig.ORG_APP_ID);
model.setOrgAppId(AliMIConfig.ORG_APP_ID);
// 设置机构渠道认证编码
model.setOrgChnlCrtfCode(MIConfig.ORG_CHNL_CRTF_CODG);
model.setOrgChnlCrtfCode(AliMIConfig.ORG_CHNL_CRTF_CODG);
// 设置定点医药机构代码
model.setOrgCode(MIConfig.ORG_NO);
model.setOrgCode(AliMIConfig.ORG_NO);
// 设置扩展信息-亲情账户支付场景增加
AuthExtendParams extendParams = new AuthExtendParams();
@ -92,17 +94,17 @@ public class AliMedicalHelper {
// 设置auth_token,同access_token(用户访问令牌)
request.putOtherTextParam("auth_token", accessToken);
log.info("[支付宝]国家医保局线上业务身份核验信息授权查询接口-入参{}", JsonHelper.toJsonString(request));
AlipayCommerceMedicalAuthinfoAuthQueryResponse response = alipayClient.execute(request);
log.info("[支付宝]国家医保局线上业务身份核验信息授权查询接口-返回{}", response.getBody());
log.info("[支付宝]国家医保局线上业务身份核验信息授权查询接口-调用{} {}", response.isSuccess() ? "[成功]" : "[失败]", response.getBody());
if (response.isSuccess()) {
System.out.println("调用成功");
return response.getBody();
} else {
System.out.println("调用失败");
// sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接
// String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
// System.out.println(diagnosisUrl);
return response.getData();
}
// sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接
// String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
// System.out.println(diagnosisUrl);
} catch (Exception e) {
ErrorHelper.println(e);
}
@ -130,7 +132,7 @@ public class AliMedicalHelper {
* @param familyType 保卡类型"1":亲情支付"0":"本人支付"为空默认本人支付
* @param familyName 家属姓名这里不使用
* @param familyCardNo 医保电子凭证授权码 获取线上医保业务授权接口返回medicalCardId参数"6638aabe-7b4d-4d10-bdf0-b44804da3dab"
* @return
* @return map
*/
public static Map<String, Object> createOrder(OrderMIEnum orderMIEnum, String openid, String outTradeNo, String payOrdId, String payAuthNo, BigDecimal totalAmount, BigDecimal cashFee, String subject, String notifyUrl, String notifyType, String familyType, String familyName, String familyCardNo) {
try {
@ -163,9 +165,9 @@ public class AliMedicalHelper {
medicalRequestExt.put("bill_no", payOrdId); // 移动支付中心订单号payOrdId
medicalRequestExt.put("pay_auth_no", payAuthNo); // 移动支付中心返回授权编号 获取线上医保业务授权接口返回payAuthNo参数
//
medicalRequestExt.put("org_no", MIConfig.ORG_NO); //医药机构编号
medicalRequestExt.put("org_name", MIConfig.HOSPITAL_NAME); // 医药机构名称
medicalRequestExt.put("payment_city_code", MIConfig.CITY_CODE); // 医保结算地城市编码(国标)
medicalRequestExt.put("org_no", AliMIConfig.ORG_NO); // 医药机构编号
medicalRequestExt.put("org_name", AliMIConfig.ORG_HOSPITAL_NAME); // 医药机构名称
medicalRequestExt.put("payment_city_code", AliMIConfig.CITY_CODE); // 医保结算地城市编码(国标)
//
medicalRequestExt.put("industry", "HOSPITAL"); //行业标识 医院:HOSPITAL
medicalRequestExt.put("chinfo", "gjydzf"); // 渠道标识-默认为gjydzf

@ -69,7 +69,7 @@ public class AliUploadHelper {
public static void uploadDept(List<Dept> deptList, boolean isReserve) {
if (deptList == null || deptList.size() == 0) {
if (deptList == null || deptList.isEmpty()) {
return;
}
if (!AliConfig.IS_PUSH_MSG) {

@ -2,7 +2,7 @@ package com.ynxbd.common.action;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.HisChronic;
import com.ynxbd.common.dao.his.HisMedicalDao;
import com.ynxbd.common.dao.his.HisMIDao;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.result.Result;
import org.apache.struts2.convention.annotation.Action;
@ -20,7 +20,7 @@ public class MedicalInsuranceAction extends BaseAction {
*/
@Action("getBillInfo")
public Result getBillInfo(String queryNumType, String queryNumber, String begDate, String endDate) {
return HisMedicalDao.getBillInfo(queryNumType, queryNumber, begDate, endDate);
return HisMIDao.getBillInfo(queryNumType, queryNumber, begDate, endDate);
}
/**
@ -29,6 +29,6 @@ public class MedicalInsuranceAction extends BaseAction {
*/
@Action("getChronicList")
public Result getChronicList(String idCardNo){
return Result.success(JsonHelper.parseArray(HisMedicalDao.getChronicList(idCardNo).getDataMapString("DiseaseInfo"), HisChronic.class));
return Result.success(JsonHelper.parseArray(HisMIDao.getChronicList(idCardNo).getDataMapString("DiseaseInfo"), HisChronic.class));
}
}

@ -170,7 +170,7 @@ public class RecipeAction extends BaseAction {
if (treatNum == null || personID == null || recipes == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
return new HisRecipeDao().uploadMedicalRecipe(treatNum, personID, recipes);
return new HisRecipeDao().uploadRxMI(treatNum, personID, recipes);
}
@ -189,27 +189,7 @@ public class RecipeAction extends BaseAction {
return new HisRecipeDao().queryElectronInvoice(invoiceNo);
}
// /**
// * 获取未缴费项目
// */
// @Action("getDevUnPayList")
// public Result getDevUnPayList(String patientId, String begDate, String endDate ) {
// log.info("[处方]未缴费项目查询 patientId={}, begDate={}, endDate={}", patientId, begDate, endDate);
// if (patientId == null || begDate == null || endDate == null) {
// return Result.error(ResultEnum.PARAM_IS_DEFECT);
// }
//
// int days = DateHelper.intervalDays(begDate, endDate, true);
// List<HisRecipe> hisRecipes = new DevHisRecipeDao().getDevUnPayRecipe(patientId, days);
//
// List<HisRecipe> resultList = new ArrayList<>();
// for (HisRecipe hisRecipe : hisRecipes) {
// if (hisRecipe.getDate() != null && DateHelper.inDateRange(begDate, endDate, hisRecipe.getDate(), DateHelper.DateEnum.yyyy_MM_dd)) {
// resultList.add(hisRecipe);
// }
// }
// return Result.success(resultList);
// }
/**
@ -382,6 +362,28 @@ public class RecipeAction extends BaseAction {
// ErrorHelper.println(e);
// }
// return Result.error();
// }
// /**
// * 获取未缴费项目
// */
// @Action("getDevUnPayList")
// public Result getDevUnPayList(String patientId, String begDate, String endDate ) {
// log.info("[处方]未缴费项目查询 patientId={}, begDate={}, endDate={}", patientId, begDate, endDate);
// if (patientId == null || begDate == null || endDate == null) {
// return Result.error(ResultEnum.PARAM_IS_DEFECT);
// }
//
// int days = DateHelper.intervalDays(begDate, endDate, true);
// List<HisRecipe> hisRecipes = new DevHisRecipeDao().getDevUnPayRecipe(patientId, days);
//
// List<HisRecipe> resultList = new ArrayList<>();
// for (HisRecipe hisRecipe : hisRecipes) {
// if (hisRecipe.getDate() != null && DateHelper.inDateRange(begDate, endDate, hisRecipe.getDate(), DateHelper.DateEnum.yyyy_MM_dd)) {
// resultList.add(hisRecipe);
// }
// }
// return Result.success(resultList);
// }
}

@ -7,6 +7,7 @@ import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.PayCasebook;
import com.ynxbd.common.bean.xbd.MRHistory;
import com.ynxbd.common.bean.xbd.MedicalRecord;
import com.ynxbd.common.config.interceptor.AesDecode;
import com.ynxbd.common.helper.common.Base64Helper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.xbd.XBDEnum;
@ -23,9 +24,6 @@ import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.util.HashMap;
import java.util.Map;
/**
* @author 李进才
* @ClassName XBDAction
@ -62,6 +60,22 @@ public class XBDAction extends BaseAction {
}
}
/**
* 获取云胶片的授权地址
*
* @param patientId 患者id
*/
@Action("pacsAuth")
public Result pacsAuth(Integer version, @AesDecode String patientId, @AesDecode String treatNum, String treatType) {
try {
String url = new XBDService().getPacsAuthUrl(version, patientId, treatNum, treatType);
return Result.success(url);
} catch (Exception e) {
return Result.error(e);
}
}
/**
* 获取该病人已归档可以翻拍的病历[红河]
*

@ -1,5 +1,6 @@
package com.ynxbd.common.action.pay;
import com.alipay.api.domain.MedicalNationalPayAuthInfo;
import com.ynxbd.ali.helper.AliHelper;
import com.ynxbd.ali.helper.AliMedicalHelper;
import com.ynxbd.common.action.base.BaseAction;
@ -114,19 +115,19 @@ public class AliPayAction extends BaseAction {
}
/**
* [支付宝]授权查询
* [支付宝]医保授权查询
*
* @return 是否成功
*/
@Action("queryMIAuth")
public Result queryMIAuth(String openid, String accessToken, String patientName, String patientCardNo, String callUrl) {
log.info("[支付宝][医保]授权查询 openid={}, accessToken={}, patientName={}, patientCardNo={}, callUrl={}", openid, accessToken, patientName, patientCardNo, callUrl);
String data = AliMedicalHelper.queryMIAuth(openid, accessToken, patientName, patientCardNo, callUrl);
log.info("[支付宝][医保]授权查询 body={}", data);
if (data == null) {
MedicalNationalPayAuthInfo dataInfo = AliMedicalHelper.queryMIAuth(openid, accessToken, patientName, patientCardNo, callUrl);
log.info("[支付宝][医保]授权查询 {}", JsonHelper.toJsonString(dataInfo));
if (dataInfo == null) {
return Result.error("授权查询失败");
}
return Result.success(data);
return Result.success(dataInfo);
}
// /**

@ -7,7 +7,7 @@ import com.ynxbd.common.bean.pay.Order;
import com.ynxbd.common.bean.pay.Recipe;
import com.ynxbd.common.bean.pay.Register;
import com.ynxbd.common.dao.RecipeDao;
import com.ynxbd.common.dao.his.HisMedicalDao;
import com.ynxbd.common.dao.his.HisMIDao;
import com.ynxbd.common.helper.common.AesMicroHelper;
import com.ynxbd.common.helper.common.Base64Helper;
import com.ynxbd.common.helper.common.DateHelper;
@ -20,7 +20,7 @@ import com.ynxbd.common.service.MedicalService;
import com.ynxbd.common.service.params.RequestParams;
import com.ynxbd.wx.wxfactory.*;
import com.ynxbd.wx.wxfactory.bean.*;
import com.ynxbd.wx.wxfactory.medical.MIConfig;
import com.ynxbd.wx.wxfactory.medical.WechatMIConfig;
import com.ynxbd.wx.wxfactory.utils.MdRespHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@ -118,7 +118,7 @@ public class MedicalAction extends BaseAction {
@Action("medicalAuth")
public Result medicalAuth(String openid, String qrCode) {
log.info("[医保建档] openid-{},qrCode={}", openid, qrCode);
MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(MIConfig.PARTNER_URL, openid, qrCode);
MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(WechatMIConfig.PARTNER_URL, openid, qrCode);
log.info("[医保建档获取用户信息] resp-{}", info);
return Result.success(info);
}
@ -286,11 +286,15 @@ public class MedicalAction extends BaseAction {
/**
* HIS查询医保对账记录
* 查询HIS医保对账记录
*/
@Action("getHisAccountsInfo")
public Result getHisAccountsInfo(String mdUserId) {
JsonResult jsonResult = HisMedicalDao.getMedicalAccounts(mdUserId);
public Result getHisAccountsInfo(String payCode, String mdUserId) {
MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode);
if (merchantEnum == null) {
return Result.error(ResultEnum.PAY_TYPE_ERROR);
}
JsonResult jsonResult = HisMIDao.getMIAccounts(merchantEnum, mdUserId);
return Result.success(jsonResult);
}
@ -336,9 +340,9 @@ public class MedicalAction extends BaseAction {
public Result payNotify() {
try {
log.info("[微信][医保]回调通知...");
MedicalNotify notifyInfo = WxMedicalHelper.medicalPayNotify(request);
MedicalNotify notifyInfo = WxMedicalHelper.paidMINotify(request);
// 成功返回
Result.respXml(MdRespHelper.respOk(MIConfig.PAY_KEY));
Result.respXml(MdRespHelper.respOk(WechatMIConfig.PAY_KEY));
String openid = notifyInfo.getOpenid();
String bankTransNo = notifyInfo.getMedTransId();
@ -356,7 +360,7 @@ public class MedicalAction extends BaseAction {
new MedicalService().commonNotify(MerchantEnum.WX_MEDICAL, notifyType, outTradeNo, totalFee, bankTransNo, payDate, payTime, openid, payInfo);
return null;
} catch (ServiceException e) {
return Result.respXml(MdRespHelper.resp(e, MIConfig.PAY_KEY));
return Result.respXml(MdRespHelper.resp(e, WechatMIConfig.PAY_KEY));
}
}

@ -9,7 +9,7 @@ import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.service.RecipeService;
import com.ynxbd.wx.wxfactory.WxMedicalHelper;
import com.ynxbd.wx.wxfactory.bean.MedicalOrder;
import com.ynxbd.wx.wxfactory.medical.MIConfig;
import com.ynxbd.wx.wxfactory.medical.WechatMIConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
@ -37,7 +37,7 @@ public class MedicalTestAction extends BaseAction {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
if (!MIConfig.IS_DEV) {
if (!WechatMIConfig.IS_DEV) {
return Result.error("环境错误");
}
@ -65,7 +65,7 @@ public class MedicalTestAction extends BaseAction {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
if (!MIConfig.IS_DEV) {
if (!WechatMIConfig.IS_DEV) {
return Result.error("环境错误");
}
List<HisRecipe> hisRecipeList = HisMedicalTestDao.devPaidRecipeList(patientId, begDate, endDate);

@ -8,7 +8,7 @@ import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.wx.wxfactory.WxMedicalHelper;
import com.ynxbd.wx.wxfactory.medical.MIConfig;
import com.ynxbd.wx.wxfactory.medical.WechatMIConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
@ -74,7 +74,7 @@ public class TestAction extends BaseAction {
@Action("test03")
public Result test03() throws ServiceException {
System.out.println("开关" + MIConfig.IS_AUTO_REFUND);
System.out.println("开关" + WechatMIConfig.IS_AUTO_REFUND);
log.info("日志测试");
System.out.println(System.getProperty("fileEncoding"));
System.out.println(System.getProperty("encoding"));

@ -1,5 +1,7 @@
package com.ynxbd.common.bean.enums;
import com.ynxbd.ali.config.AliMIConfig;
import com.ynxbd.wx.wxfactory.medical.WechatMIConfig;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@ -19,32 +21,42 @@ import java.util.List;
public enum MerchantEnum {
// 支付宝
ALI("ali", "【支付宝】", "3",
ALI("ali", "【支付宝】",
false,
"3",
"25,26,27,28,29,30",
"ali_pay/notify",
"",
"10", "11", "12"),
// 微信
WX("wx", "【微信】", "4",
WX("wx", "【微信】",
false,
"4",
"10,11,12,13,14,15",
"wx_pay/apiNotify",
"wx_pay/nativeNotify",
"0", "1", "2"),
BCM("bcm", "【交行】", "4",
BCM("bcm", "【交行】",
false,
"4",
"",
"bcm_pay/notify",
"",
"20", "21", "22"),
WX_MEDICAL("wx_medical", "【微信医保】", "4",
WX_MEDICAL("wx_medical", "【微信医保】",
WechatMIConfig.IS_DEV,
"4",
"10,11,12,13,14,15",
"medical/payNotify",
"",
"0", "1", "2"),
ALI_MEDICAL("ali_medical", "【支付宝医保】", "3",
ALI_MEDICAL("ali_medical", "【支付宝医保】",
AliMIConfig.IS_DEV,
"3",
"25,26,27,28,29,30",
"ali_pay/medical_notify",
"",
@ -56,6 +68,8 @@ public enum MerchantEnum {
public final String NAME;
public final boolean IS_DEV;
public final String HIS_PAY_WAY;
// 条码规则
public final String BAR_CODE_RULES;
@ -70,9 +84,10 @@ public enum MerchantEnum {
// 盒子支付代码
public final String PAY_WAY_MICRO;
MerchantEnum(String CODE, String NAME, String HIS_PAY_WAY, String BAR_CODE_RULES, String NOTIFY_URL, String QR_NOTIFY_URL, String PAY_WAY_IN, String PAY_WAY_QR, String PAY_WAY_MICRO) {
MerchantEnum(String CODE, String NAME, boolean IS_DEV, String HIS_PAY_WAY, String BAR_CODE_RULES, String NOTIFY_URL, String QR_NOTIFY_URL, String PAY_WAY_IN, String PAY_WAY_QR, String PAY_WAY_MICRO) {
this.CODE = CODE;
this.NAME = NAME;
this.IS_DEV = IS_DEV;
this.HIS_PAY_WAY = HIS_PAY_WAY;
this.BAR_CODE_RULES = BAR_CODE_RULES;
this.NOTIFY_URL = NOTIFY_URL;

@ -1,284 +1,285 @@
package com.ynxbd.common.dao.his;
import com.alibaba.fastjson.JSONArray;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Recipe;
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.result.JsonResult;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.wx.wxfactory.bean.MedicalInfo;
import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HisMedicalDao {
/**
* [医保处方]上传明细请求地址不通
*
* @param payAuthNo 授权码
* @param patientId 患者ID
* @param cardNo 卡号
* @param treatNum 治疗号
* @param recipeJson 处方json
* @param totalFee 总金额
*/
public static JsonResult recipeMdUploadFeeDetails(String payAuthNo, String cardNo, String openid, String patientId, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) {
List<Recipe> recipeList = JsonHelper.parseArray(recipeJson, Recipe.class);
if (recipeList == null || recipeList.isEmpty()) {
return HisHelper.createErrorResult("处方数量为 0 或 数据转换失败");
}
StringBuilder recipeIdsXml = new StringBuilder();
for (Recipe item : recipeList) {
recipeIdsXml.append("<Id>").append(item.getRecipeId()).append("</Id>");
}
Map<String, Object> params = new HashMap<>();
params.put("PatientID", patientId);
params.put("MZNum", treatNum);
params.put("Recipe", recipeIdsXml.toString());
params.put("PayMoney", totalFee);
params.put("PayDate", DateHelper.getCurDate());
params.put("PayTime", DateHelper.getCurTime());
params.put("TransNo", CodeHelper.get32UUID());
params.put("PayWay", "4");
// 医保-----------------------------------
params.put("PayAuthNo", payAuthNo);
params.put("PersonID", cardNo);
if (ObjectUtils.isNotEmpty(ybAttrib) && ObjectUtils.isNotEmpty(ybBZCode) && ObjectUtils.isNotEmpty(ybBZName)) {
params.put("YBAttrib", ybAttrib);
params.put("YBBZCode", ybBZCode);
params.put("YBBZName", ybBZName);
}
return HisHelper.getMdJsonResult(HisEnum.AP_Pay_Invoice, params);
}
/**
* [医保]获取该病人的慢病列表
*
* @param idCardNo 身份证号
*/
public static JsonResult getChronicList(String idCardNo) {
return HisHelper.getMdJsonResult(HisEnum.YDZF_QueryDiseaseInfo, params -> {
params.put("CallNo", HisHelper.CALL_NO);
params.put("IDCardNo", idCardNo);
});
}
/**
* [医保挂号]分时段挂号
*/
public static JsonResult regTimeMdUploadFeeDetails(Register reg, String payAuthNo, String cardNo, MerchantEnum merchantEnum, Boolean isSplitTime) {
if (isSplitTime) {
return HisHelper.getMdJsonResult(HisEnum.AP_Regist_New, params -> {
params.put("PatientID", reg.getPatientId());
params.put("PayMoney", reg.getPayMoney());
params.put("DeptCode", reg.getDeptCode());
params.put("DoctCode", reg.getDoctCode());
params.put("SourceId", reg.getSourceId());
params.put("TimeInterval", reg.getTid());
params.put("BegTime", reg.getBegTime());
params.put("EndTime", reg.getEndTime());
params.put("RegistCode", reg.getRegCode());
params.put("RegistDate", reg.getRegDate());
params.put("PayDate", DateHelper.getCurDate());
params.put("PayTime", DateHelper.getCurTime());
params.put("TransNo", CodeHelper.get32UUID());
params.put("PayWay", merchantEnum.HIS_PAY_WAY);
if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) {
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
}
// 医保-----------------------------------
params.put("PayAuthNo", payAuthNo);
params.put("PersonID", cardNo);
});
}
// 非分时段挂号 医保支付
return HisHelper.getMdJsonResult(HisEnum.AP_Regist, params -> {
params.put("PatientID", reg.getPatientId());
params.put("PayMoney", reg.getPayMoney());
params.put("DeptCode", reg.getDeptCode());
params.put("DoctCode", reg.getDoctCode());
params.put("ClinicCode", reg.getClinicCode());
params.put("TID", reg.getTid());
params.put("RegFee", reg.getRegFee());
params.put("ClinicFee", reg.getClinicFee());
params.put("PayDate", DateHelper.getCurDate());
params.put("PayTime", DateHelper.getCurTime());
params.put("TransNo", CodeHelper.get32UUID());
params.put("PayDeviceID", reg.getPayDeviceId());
params.put("BankTransNo", reg.getBankTransNo());
params.put("PayWay", merchantEnum.HIS_PAY_WAY);
if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) {
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
}
// 医保-----------------------------------
params.put("PayAuthNo", payAuthNo);
params.put("PersonID", cardNo);
});
}
/**
* HIS医保结算
*
* @param mdUserId 医保用户ID
* @param cashFee 现金
* @param payDate 支付日期
* @param payTime 支付实际
* @param transNo HIS交易流水号
* @param bankTransNo HIS流水号
*/
public static JsonResult regMdPay(String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) {
return HisHelper.getMdJsonResult(HisEnum.Medical_PAY, params -> {
params.put("UserID_YBZF", mdUserId);
params.put("PayMoney", cashFee);
params.put("PayDate", payDate);
params.put("PayTime", payTime);
params.put("TransNo", transNo);
params.put("BankTransNo", bankTransNo);
params.put("PayWay", "4");
params.put("PayDeviceID", "mobile");
});
}
/**
* [医保]HIS调用支付下单
*
* @param mdInfo 医保下单对象
*/
public static JsonResult mdPlaceOrder(MedicalInfo mdInfo) {
return HisHelper.getMdJsonResult(HisEnum.Medical_PayOrders, params -> {
// 授权码
params.put("PayAuthNo", mdInfo.getPayAuthNo());
// 授权token
params.put("PayToken", mdInfo.getPayToken());
// 订单id
params.put("PayOrdId", mdInfo.getPayOrdId());
params.put("MdtrtId", mdInfo.getMdTrtId());
params.put("ChrgBchno", mdInfo.getChrgBchno());
params.put("UserID_YBZF", mdInfo.getMdUserId());
});
}
/**
* 医保退费需先退医保才能再退现金
*
* @param payAuthNo 用户授权码
* @param fpNum 发票号上传费用明细返回的 chrgBchno 把第一位M 过滤后传入
*/
// * @param refundType 退款类型(ALL:全部,CASH:只退现金 HI:只退医保)
public static JsonResult mdRefund(String payAuthNo, String fpNum, String bankTransNo, String refundTradeNo, BigDecimal cashFee) {
return HisHelper.getMdJsonResult(HisEnum.Medical_Refund, params -> {
params.put("PayAuthNo", payAuthNo); // AUTH530100202206291132200000008
params.put("FPNum", fpNum);
params.put("PayWay", "4");
params.put("BankTransNo", bankTransNo);
params.put("TransNo", refundTradeNo);
params.put("PayDeviceID", "mobile");
params.put("PayMoney", cashFee);
});
}
/**
* HIS医保结算
*
* @param mdUserId 医保用户ID
* @param cashFee 现金
* @param payDate 支付日期
* @param payTime 支付实际
* @param transNo HIS交易流水号
* @param bankTransNo HIS流水号
*/
public static JsonResult mdRecipePay(String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) {
return HisHelper.getMdJsonResult(HisEnum.Medical_PAY, params -> {
params.put("UserID_YBZF", mdUserId);
params.put("PayMoney", cashFee);
params.put("PayDate", payDate);
params.put("PayTime", payTime);
params.put("TransNo", transNo);
params.put("BankTransNo", bankTransNo);
params.put("PayWay", "4");
params.put("PayDeviceID", "mobile");
});
}
/**
* [医保]查询医保订单结算信息
*
* @param mdUserId 医保用户ID
* <p>
* StatusCode值域
* 0 : 已保存
* 1 : 预结算完成
* 2 : 结算中
* 3 : 自费完成
* 4 : 医保支付完成
* 5 : 院内结算完成
* 6 : 结算完成
* 7 : 已退款
* 8 : 已医保全部退款
* 9 : 仅自费全部退款
* 10 : 仅自费部分退款
* 11 : 医保全部退自费部分退款
* 12 : 已撤销
* 13 : 医保已撤销
* 14 : 异常
* 15 : 结算失败
* -1 : 状态未知
*/
public static JsonResult getMedicalAccounts(String mdUserId) {
return HisHelper.getMdJsonResult(HisEnum.Medical_QueryOrderStatus, params -> {
params.put("UserID_YBZF", mdUserId);
});
}
/**
* HIS医保结算信息查询
*
* @param queryNumType 类型
* @param queryNumber 查询号码
* @param begDate 开始日期
* @param endDate 结束日期
* @return 结果
*/
public static Result getBillInfo(String queryNumType, String queryNumber, String begDate, String endDate) {
if (ObjectUtils.isEmpty(queryNumType) || ObjectUtils.isEmpty(queryNumber) || ObjectUtils.isEmpty(begDate) || ObjectUtils.isEmpty(endDate)) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
JsonResult JsonResult = HisHelper.getMdJsonResult(HisEnum.Medical_Insurance_Bill, params -> {
params.put("QueryNumType", queryNumType);
params.put("QueryNumber", queryNumber);
params.put("BegDate", begDate);
params.put("EndDate", endDate);
});
if (JsonResult.success()) {
JSONArray resultList = JsonResult.getJsonArray("SettlementInfo", "Item");
return Result.success(resultList);
}
return Result.error(JsonResult.getMessage());
}
}
package com.ynxbd.common.dao.his;
import com.alibaba.fastjson.JSONArray;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Recipe;
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.HisMIHelper;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.wx.wxfactory.bean.MedicalInfo;
import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// HIS医保接口
public class HisMIDao {
/**
* [医保处方]上传明细请求地址不通
*
* @param payAuthNo 授权码
* @param patientId 患者ID
* @param cardNo 卡号
* @param treatNum 治疗号
* @param recipeJson 处方json
* @param totalFee 总金额
*/
public static JsonResult rxMIUploadFeeDetails(MerchantEnum merchantEnum, String payAuthNo, String cardNo, String openid, String patientId, String treatNum, String recipeJson, BigDecimal totalFee, String ybAttrib, String ybBZCode, String ybBZName) {
List<Recipe> recipeList = JsonHelper.parseArray(recipeJson, Recipe.class);
if (recipeList == null || recipeList.isEmpty()) {
return HisHelper.createErrorResult("处方数量为 0 或 数据转换失败");
}
StringBuilder recipeIdsXml = new StringBuilder();
for (Recipe item : recipeList) {
recipeIdsXml.append("<Id>").append(item.getRecipeId()).append("</Id>");
}
Map<String, Object> params = new HashMap<>();
params.put("PatientID", patientId);
params.put("MZNum", treatNum);
params.put("Recipe", recipeIdsXml.toString());
params.put("PayMoney", totalFee);
params.put("PayDate", DateHelper.getCurDate());
params.put("PayTime", DateHelper.getCurTime());
params.put("TransNo", CodeHelper.get32UUID());
params.put("PayWay", "4");
// 医保-----------------------------------
params.put("PayAuthNo", payAuthNo);
params.put("PersonID", cardNo);
if (ObjectUtils.isNotEmpty(ybAttrib) && ObjectUtils.isNotEmpty(ybBZCode) && ObjectUtils.isNotEmpty(ybBZName)) {
params.put("YBAttrib", ybAttrib);
params.put("YBBZCode", ybBZCode);
params.put("YBBZName", ybBZName);
}
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.AP_Pay_Invoice, params);
}
/**
* [医保挂号]分时段挂号
*/
public static JsonResult regMIUploadFeeDetails(MerchantEnum merchantEnum, Register reg, String payAuthNo, String cardNo, Boolean isSplitTime) {
if (isSplitTime) {
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.AP_Regist_New, params -> {
params.put("PatientID", reg.getPatientId());
params.put("PayMoney", reg.getPayMoney());
params.put("DeptCode", reg.getDeptCode());
params.put("DoctCode", reg.getDoctCode());
params.put("SourceId", reg.getSourceId());
params.put("TimeInterval", reg.getTid());
params.put("BegTime", reg.getBegTime());
params.put("EndTime", reg.getEndTime());
params.put("RegistCode", reg.getRegCode());
params.put("RegistDate", reg.getRegDate());
params.put("PayDate", DateHelper.getCurDate());
params.put("PayTime", DateHelper.getCurTime());
params.put("TransNo", CodeHelper.get32UUID());
params.put("PayWay", merchantEnum.HIS_PAY_WAY);
if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) {
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
}
// 医保-----------------------------------
params.put("PayAuthNo", payAuthNo);
params.put("PersonID", cardNo);
});
}
// 非分时段挂号 医保支付
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.AP_Regist, params -> {
params.put("PatientID", reg.getPatientId());
params.put("PayMoney", reg.getPayMoney());
params.put("DeptCode", reg.getDeptCode());
params.put("DoctCode", reg.getDoctCode());
params.put("ClinicCode", reg.getClinicCode());
params.put("TID", reg.getTid());
params.put("RegFee", reg.getRegFee());
params.put("ClinicFee", reg.getClinicFee());
params.put("PayDate", DateHelper.getCurDate());
params.put("PayTime", DateHelper.getCurTime());
params.put("TransNo", CodeHelper.get32UUID());
params.put("PayDeviceID", reg.getPayDeviceId());
params.put("BankTransNo", reg.getBankTransNo());
params.put("PayWay", merchantEnum.HIS_PAY_WAY);
if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) {
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
}
// 医保-----------------------------------
params.put("PayAuthNo", payAuthNo);
params.put("PersonID", cardNo);
});
}
/**
* HIS医保结算
*
* @param mdUserId 医保用户ID
* @param cashFee 现金
* @param payDate 支付日期
* @param payTime 支付实际
* @param transNo HIS交易流水号
* @param bankTransNo HIS流水号
*/
public static JsonResult regMIPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) {
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_PAY, params -> {
params.put("UserID_YBZF", mdUserId);
params.put("PayMoney", cashFee);
params.put("PayDate", payDate);
params.put("PayTime", payTime);
params.put("TransNo", transNo);
params.put("BankTransNo", bankTransNo);
params.put("PayWay", "4");
params.put("PayDeviceID", "mobile");
});
}
/**
* [医保]HIS调用支付下单
*
* @param mdInfo 医保下单对象
*/
public static JsonResult placeMIOrder(MerchantEnum merchantEnum, MedicalInfo mdInfo) {
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_PayOrders, params -> {
// 授权码
params.put("PayAuthNo", mdInfo.getPayAuthNo());
// 授权token
params.put("PayToken", mdInfo.getPayToken());
// 订单id
params.put("PayOrdId", mdInfo.getPayOrdId());
params.put("MdtrtId", mdInfo.getMdTrtId());
params.put("ChrgBchno", mdInfo.getChrgBchno());
params.put("UserID_YBZF", mdInfo.getMdUserId());
});
}
/**
* HIS医保结算
*
* @param mdUserId 医保用户ID
* @param cashFee 现金
* @param payDate 支付日期
* @param payTime 支付实际
* @param transNo HIS交易流水号
* @param bankTransNo HIS流水号
*/
public static JsonResult rxMIPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) {
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_PAY, params -> {
params.put("UserID_YBZF", mdUserId);
params.put("PayMoney", cashFee);
params.put("PayDate", payDate);
params.put("PayTime", payTime);
params.put("TransNo", transNo);
params.put("BankTransNo", bankTransNo);
params.put("PayWay", "4");
params.put("PayDeviceID", "mobile");
});
}
/**
* 医保退费需先退医保才能再退现金
*
* @param payAuthNo 用户授权码
* @param fpNum 发票号上传费用明细返回的 chrgBchno 把第一位M 过滤后传入
*/
// * @param refundType 退款类型(ALL:全部,CASH:只退现金 HI:只退医保)
public static JsonResult miRefund(MerchantEnum merchantEnum, String payAuthNo, String fpNum, String bankTransNo, String refundTradeNo, BigDecimal cashFee) {
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_Refund, params -> {
params.put("PayAuthNo", payAuthNo); // AUTH530100202206291132200000008
params.put("FPNum", fpNum);
params.put("PayWay", "4");
params.put("BankTransNo", bankTransNo);
params.put("TransNo", refundTradeNo);
params.put("PayDeviceID", "mobile");
params.put("PayMoney", cashFee);
});
}
/**
* [医保]查询医保订单结算信息
*
* @param mdUserId 医保用户ID
* <p>
* StatusCode值域
* 0 : 已保存
* 1 : 预结算完成
* 2 : 结算中
* 3 : 自费完成
* 4 : 医保支付完成
* 5 : 院内结算完成
* 6 : 结算完成
* 7 : 已退款
* 8 : 已医保全部退款
* 9 : 仅自费全部退款
* 10 : 仅自费部分退款
* 11 : 医保全部退自费部分退款
* 12 : 已撤销
* 13 : 医保已撤销
* 14 : 异常
* 15 : 结算失败
* -1 : 状态未知
*/
public static JsonResult getMIAccounts(MerchantEnum merchantEnum, String mdUserId) {
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_QueryOrderStatus, params -> {
params.put("UserID_YBZF", mdUserId);
});
}
/**
* HIS医保结算信息查询
*
* @param queryNumType 类型
* @param queryNumber 查询号码
* @param begDate 开始日期
* @param endDate 结束日期
* @return 结果
*/
public static Result getBillInfo(String queryNumType, String queryNumber, String begDate, String endDate) {
if (ObjectUtils.isEmpty(queryNumType) || ObjectUtils.isEmpty(queryNumber) || ObjectUtils.isEmpty(begDate) || ObjectUtils.isEmpty(endDate)) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
JsonResult JsonResult = HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.Medical_Insurance_Bill, params -> {
params.put("QueryNumType", queryNumType);
params.put("QueryNumber", queryNumber);
params.put("BegDate", begDate);
params.put("EndDate", endDate);
});
if (JsonResult.success()) {
JSONArray resultList = JsonResult.getJsonArray("SettlementInfo", "Item");
return Result.success(resultList);
}
return Result.error(JsonResult.getMessage());
}
/**
* [医保]获取该病人的慢病列表
*
* @param idCardNo 身份证号
*/
public static JsonResult getChronicList(String idCardNo) {
return HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.YDZF_QueryDiseaseInfo, params -> {
params.put("CallNo", HisHelper.CALL_NO);
params.put("IDCardNo", idCardNo);
});
}
}

@ -3,6 +3,7 @@ package com.ynxbd.common.dao.his;
import com.ynxbd.common.bean.HisRecipe;
import com.ynxbd.common.helper.his.HisEnum;
import com.ynxbd.common.helper.his.HisHelper;
import com.ynxbd.common.helper.his.HisMIHelper;
import com.ynxbd.common.result.JsonResult;
import java.util.ArrayList;
@ -21,10 +22,10 @@ public class HisMedicalTestDao {
public static List<HisRecipe> devUnPayList(String patientId, int days) {
List<HisRecipe> resultList = new ArrayList<>();
JsonResult jsonResult = HisHelper.getMdJsonResult(HisEnum.AP_Query_UnPay_Invoice, params -> {
JsonResult jsonResult = HisMIHelper.getJsonResult(HisMIHelper.IS_DEV, HisEnum.AP_Query_UnPay_Invoice, params -> {
params.put("PatientID", patientId);
params.put("IsLastWeekFlag", days <= 7 ? "1" : "");
params.put("CallNo",HisHelper.CALL_NO);
params.put("CallNo", HisHelper.CALL_NO);
});
if (!jsonResult.success()) { // 失败
@ -39,7 +40,6 @@ public class HisMedicalTestDao {
}
/**
* 根据患者id查询已缴费项目
*
@ -56,7 +56,7 @@ public class HisMedicalTestDao {
params.put("RecipeID", "");
params.put("StartTime", begDate);
params.put("EndTime", endDate);
JsonResult jsonResult = HisHelper.getMdJsonResult(HisEnum.AP_Query_OutpatientFee, params);
JsonResult jsonResult = HisMIHelper.getJsonResult(HisMIHelper.IS_DEV, HisEnum.AP_Query_OutpatientFee, params);
if (!jsonResult.success()) { // 请求失败
return resultList;

@ -5,6 +5,7 @@ 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.HisMIHelper;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.Result;
import com.ynxbd.wx.config.WeChatConfig;
@ -96,10 +97,10 @@ public class HisRecipeDao {
return resultList;
}
public Result uploadMedicalRecipe(String treatNum, String personID, String recipes) {
public Result uploadRxMI(String treatNum, String personID, String recipes) {
List<medicalRecipe> resultList = new ArrayList<>();
JsonResult jsonResult = HisHelper.getMdJsonResult(HisEnum.XK_MEDICAL_RECIPE, params -> {
JsonResult jsonResult = HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.XK_MEDICAL_RECIPE, params -> {
params.put("PersonID", personID);
params.put("MZNum", treatNum);
params.put("CallNo", HisHelper.CALL_NO);

@ -7,8 +7,6 @@ public enum HisEnum {
AP_Binding_Card("[患者]身份证绑定", "1002", "AP_Binding_Card", true),
AP_UnBinding_Card("[患者]身份证解绑", "1003", "AP_UnBinding_Card", true),
Medical_Insurance_Bill("[医保]查询患者医保结算清单", "1008", "UniversalInterface", true),
// 快速发药[自定义]

@ -34,11 +34,13 @@ public class HisHelper {
// private static String HIS_WSD_URL;
// webService请求地址
private static final String HIS_SOAP_URL;
private static final String HIS_SOAP_MD_URL;
protected static final String HIS_SOAP_URL;
protected static final String HIS_SOAP_DEV_URL;
// HIS医保环境
protected static final String HIS_DEV_MI_URL;
protected static final String HIS_PROD_MI_URL;
// 挂号
private static final String HIS_SOAP_DEV_URL;
// 是否强制打印HIS响应的xml
private static final Boolean IS_LOG_RESP;
@ -53,37 +55,41 @@ public class HisHelper {
ProperHelper config = new ProperHelper().read("webservice.properties");
String url = config.getString("his.url");
String mdUrl = config.getString("his.md_url");
String devUrl = config.getString("his.dev_url");
// 医保---------------------------------------------------------
String mdUrl = config.getString("his.md_url"); // 旧版地址
String devMIUrl = config.getString("his.dev_mi_url");
String prodMIUrl = config.getString("his.prod_mi_url");
String aliCallNo = config.getString("ali_code");
IS_LOG_RESP = config.getBoolean("his.is_log_resp", false);
IS_PUSH_MSG = config.getBoolean("his.is_push_msg", false);
IS_RECIPE_PREPAY = config.getBoolean("his.is_recipe_prepay", false);
if (!(aliCallNo == null || "".equals(aliCallNo))) {
if (!ObjectUtils.isEmpty(aliCallNo)) {
ALI_CALL_NO = aliCallNo;
}
if (url == null) {
HIS_SOAP_URL = null;
log.error("WebService配置文件读取失败");
} else {
HIS_SOAP_URL = "http://" + url + "/WebService_AB.dll/soap/IInterface_AB";
}
HIS_SOAP_URL = initSoapURL(url);
HIS_SOAP_DEV_URL = initSoapURL(devUrl);
if (mdUrl == null) {
HIS_SOAP_MD_URL = null;
} else {
HIS_SOAP_MD_URL = "http://" + mdUrl + "/WebService_AB.dll/soap/IInterface_AB";
}
// 医保---------------------------------
HIS_DEV_MI_URL = initSoapURL(devMIUrl);
HIS_PROD_MI_URL = initSoapURL(prodMIUrl == null ? mdUrl : prodMIUrl);
}
if (devUrl == null) {
HIS_SOAP_DEV_URL = null;
} else {
HIS_SOAP_DEV_URL = "http://" + devUrl + "/WebService_AB.dll/soap/IInterface_AB";
private static String initSoapURL(String ip) {
if (ObjectUtils.isEmpty(ip)) {
return null;
}
return "http://" + ip + "/WebService_AB.dll/soap/IInterface_AB";
}
/**
* HIS订单号
*/
@ -150,16 +156,6 @@ public class HisHelper {
return getResponseXml(hisEnum, HIS_SOAP_URL, params, merchantEnum);
}
/**
* 医保环境
*
* @param hisEnum 枚举
* @param params 发送的参数
* @return 响应的xml数据
*/
public static String getMdResponseXml(HisEnum hisEnum, Map<String, Object> params) {
return getResponseXml(hisEnum, HIS_SOAP_MD_URL, params);
}
/**
* 测试环境
@ -237,7 +233,7 @@ public class HisHelper {
}
List<Node> nodes = document.selectNodes("//return");
if (nodes.size() == 0) {
if (nodes.isEmpty()) {
log.info("HIS请求失败[{}]-耗时:[{}]-返回xml={}", transactionCode, takeTime, hisResponse);
return null;
}
@ -255,7 +251,7 @@ public class HisHelper {
}
}
new MiddleOfficeService().req_his_JH0104(soapUrl, HIS_SOAP_MD_URL, params, transactionCode, result);
new MiddleOfficeService().req_his_JH0104(soapUrl, HIS_PROD_MI_URL, params, transactionCode, result);
} catch (DocumentException e) {
ErrorHelper.println(e);
@ -317,10 +313,10 @@ public class HisHelper {
/**
* [支付宝] xml响应数据组装成为JSON数据
*
* @param hisEnum
* @param params
* @param merchantEnum
* @return
* @param hisEnum 接口枚举
* @param params 参数
* @param merchantEnum 支付类型
* @return JsonResult
*/
public static JsonResult getJsonResult(HisEnum hisEnum, Map<String, Object> params, MerchantEnum merchantEnum) {
JsonResult result = JsonResult.xmlToBean(getResponseXml(hisEnum, params, merchantEnum), JsonResultEnum.SYS_HIS);
@ -357,35 +353,6 @@ public class HisHelper {
}
// 医保-------------------------------------------------------------------------------------------------------------
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getMdJsonResult(HisEnum hisEnum, Map<String, Object> params) {
JsonResult result = JsonResult.xmlToBean(getMdResponseXml(hisEnum, params), JsonResultEnum.SYS_HIS);
if (result == null) { // 如果返回为空可能为超时
return createTimeoutResult();
}
return result;
}
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getMdJsonResult(HisEnum hisEnum, JsonResult.MapParams params) {
Map<String, Object> requestParams = new HashMap<>();
if (params != null) {
params.setParams(requestParams);
}
return getMdJsonResult(hisEnum, requestParams);
}
// ---------------------------------------------------------------------------
// 测试环境
@ -433,7 +400,7 @@ public class HisHelper {
*
* @return 封装好的对象
*/
private static JsonResult createTimeoutResult() {
protected static JsonResult createTimeoutResult() {
return JsonResult.createTimeoutResult("【HIS】请求超时", JsonResultEnum.SYS_HIS);
}

@ -0,0 +1,50 @@
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 HisMIHelper {
public final static boolean IS_PROD = false; // false为生产环境
public final static boolean IS_DEV = true; // true为测试环境
/**
* 医保环境
*
* @param hisEnum 枚举
* @param params 发送的参数
* @return 响应的xml数据
*/
public static String getResponseXml(boolean isDev, HisEnum hisEnum, Map<String, Object> params) {
return HisHelper.getResponseXml(hisEnum, isDev ? HisHelper.HIS_DEV_MI_URL : HisHelper.HIS_PROD_MI_URL, params);
}
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, Map<String, Object> params) {
JsonResult result = JsonResult.xmlToBean(getResponseXml(isDev, hisEnum, params), JsonResultEnum.SYS_HIS);
if (result == null) { // 如果返回为空可能为超时
return HisHelper.createTimeoutResult();
}
return result;
}
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, JsonResult.MapParams params) {
Map<String, Object> requestParams = new HashMap<>();
if (params != null) {
params.setParams(requestParams);
}
return getJsonResult(isDev, hisEnum, requestParams);
}
}

@ -28,4 +28,6 @@ public class XBDHelper {
}
outTeamDao = new OutTeamDao(CLOUD_FILM_URL);
}
}

@ -9,7 +9,7 @@ import com.ynxbd.common.bean.pay.Recipe;
import com.ynxbd.common.bean.pay.Register;
import com.ynxbd.common.dao.RecipeDao;
import com.ynxbd.common.dao.RegisterDao;
import com.ynxbd.common.dao.his.HisMedicalDao;
import com.ynxbd.common.dao.his.HisMIDao;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.result.JsonResult;
@ -23,7 +23,7 @@ import com.ynxbd.wx.wxfactory.bean.MedicalInfo;
import com.ynxbd.wx.wxfactory.bean.MedicalOrder;
import com.ynxbd.wx.wxfactory.bean.MedicalUserInfo;
import com.ynxbd.wx.wxfactory.bean.OrderMIEnum;
import com.ynxbd.wx.wxfactory.medical.MIConfig;
import com.ynxbd.wx.wxfactory.medical.WechatMIConfig;
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
@ -72,8 +72,8 @@ public class MedicalService {
}
log.info("[医保]上传明细:patientId={}, cardNo={}, realName={}, reg={}", patientId, cardNo, realName, reg);
JsonResult result = HisMedicalDao.regTimeMdUploadFeeDetails(reg, payAuthNo, cardNo, MerchantEnum.WX, isSplitTime);
return hisMIPlaceOrder(payAuthNo, result);
JsonResult result = HisMIDao.regMIUploadFeeDetails(merchantEnum, reg, payAuthNo, cardNo, isSplitTime);
return hisMIPlaceOrder(merchantEnum, payAuthNo, result);
}
/**
@ -98,8 +98,8 @@ public class MedicalService {
}
log.info("[医保]上传明细:patientId={}, totalFee={}, cardNo={}, recipeJson={}", patientId, totalFee, cardNo, recipeJson);
JsonResult result = HisMedicalDao.recipeMdUploadFeeDetails(payAuthNo, cardNo, openid, patientId, treatNum, recipeJson, totalFee, ybAttrib, ybBZCode, ybBZName);
return hisMIPlaceOrder(payAuthNo, result);
JsonResult result = HisMIDao.rxMIUploadFeeDetails(merchantEnum, payAuthNo, cardNo, openid, patientId, treatNum, recipeJson, totalFee, ybAttrib, ybBZCode, ybBZName);
return hisMIPlaceOrder(merchantEnum, payAuthNo, result);
}
/**
@ -107,7 +107,7 @@ public class MedicalService {
*
* @param payAuthNo 授权码
*/
private MedicalInfo hisMIPlaceOrder(String payAuthNo, JsonResult result) throws ServiceException {
private MedicalInfo hisMIPlaceOrder(MerchantEnum merchantEnum, String payAuthNo, JsonResult result) throws ServiceException {
if (result == null) {
throw new ServiceException("[医保]返回数据为空");
}
@ -134,7 +134,7 @@ public class MedicalService {
medicalInfo.setChrgBchno(chrgBchno);
medicalInfo.setMdUserId(mdUserId);
JsonResult resp = HisMedicalDao.mdPlaceOrder(medicalInfo);
JsonResult resp = HisMIDao.placeMIOrder(merchantEnum, medicalInfo);
if (!resp.success()) {
log.info("[上传明细失败] {}", resp.getMessage());
throw new ServiceException(resp.getMessage());
@ -412,7 +412,7 @@ public class MedicalService {
return false;
}
JsonResult jsonResult = HisMedicalDao.regMdPay(mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee);
JsonResult jsonResult = HisMIDao.regMIPay(merchantEnum, mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee);
if (!jsonResult.success()) {
String respCode = jsonResult.getCode();
String respMessage = jsonResult.getMessage();
@ -440,7 +440,7 @@ public class MedicalService {
return false;
}
if (!MIConfig.IS_AUTO_REFUND) {
if (!WechatMIConfig.IS_AUTO_REFUND) {
log.info("[医保][挂号]现金自动退费功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo);
return false;
}
@ -533,7 +533,7 @@ public class MedicalService {
log.info("{} [医保][处方]更新商户信息成功 outTradeNo={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, bankTransNo);
}
JsonResult jsonResult = HisMedicalDao.mdRecipePay(mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee);
JsonResult jsonResult = HisMIDao.rxMIPay(merchantEnum, mdUserId, payDate, payTime, tradeNo, bankTransNo, cashFee);
if (!jsonResult.success()) {
String respCode = jsonResult.getCode();
@ -563,7 +563,7 @@ public class MedicalService {
return false;
}
if (!MIConfig.IS_AUTO_REFUND) {
if (!WechatMIConfig.IS_AUTO_REFUND) {
log.info("[医保][处方][现金自动退费]功能未开启 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo);
return false;
}
@ -609,9 +609,8 @@ public class MedicalService {
}
// 医保退费-必须先执行
log.info("[医保][处方][个账]退费开始 tradeNo={}, payAuthNo={}, fpNum={}", tradeNo, payAuthNo, fpNum);
JsonResult jsonResult = HisMedicalDao.mdRefund(payAuthNo, fpNum, bankTransNo, ("R" + tradeNo), cashFee);
JsonResult jsonResult = HisMIDao.miRefund(MerchantEnum.WX, payAuthNo, fpNum, bankTransNo, ("R" + tradeNo), cashFee);
if (!jsonResult.success()) { // 失败
log.info("[医保][处方][个账]退费失败 outTradeNo={}, bankTransNo={}, tradeNo={}", outTradeNo, bankTransNo, tradeNo);
String message = jsonResult.getMessage();
@ -680,9 +679,13 @@ public class MedicalService {
*
* @param mdUserId 用户ID
*/
public MedicalInfo getMedicalAccounts(String mdUserId) {
log.info("[医保]退费开始 mdUserId={}", mdUserId);
JsonResult jsonResult = HisMedicalDao.getMedicalAccounts(mdUserId);
public MedicalInfo getMedicalAccounts(String payCode, String mdUserId) {
log.info("[医保]退费开始 payCode={} mdUserId={}", payCode, mdUserId);
MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode);
if (merchantEnum == null) {
return null;
}
JsonResult jsonResult = HisMIDao.getMIAccounts(merchantEnum, mdUserId);
if (!jsonResult.success()) { // 未找到
return null;
}

@ -1,8 +1,12 @@
package com.ynxbd.common.service;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.ObjectUtils;
@Slf4j
public class XBDService {
public String getCloudToken(String treatNum) {
@ -13,4 +17,72 @@ public class XBDService {
}
return key.substring(3, 12);
}
/**
* 获取云胶片的授权地址
*
* @param treatNum 门诊号|住院号
* @param treatType 类型[1:门诊2:住院]
*/
public String getPacsAuthUrl(Integer version, String patientId, String treatNum, String treatType) throws ServiceException {
if (version == null) {
version = 1;
}
if (version == 1) {
return getPacsAuthUrlByPatientId(version, patientId);
}
if (version == 2) {
return getPacsAuthUrlByTreatNum(version, treatNum, treatType);
}
throw new ServiceException("[云胶片]授权version未匹配");
}
/**
* 获取云胶片的授权地址[版本2]
*
* @param treatNum 门诊号|住院号
* @param treatType 类型[1:门诊2:住院]
*/
public String getPacsAuthUrlByTreatNum(Integer version, String treatNum, String treatType) throws ServiceException {
log.info("[云胶片]授权 version={}, treatType={}, treatNum={}", version, treatType, treatNum);
if (treatType == null || treatNum == null) {
throw new ServiceException(ResultEnum.PARAM_IS_INVALID);
}
String token = DigestUtils.md5Hex(treatNum + "huiyou69");
if (ObjectUtils.isEmpty(token)) {
throw new ServiceException("token转化失败");
}
if (token.length() < 12) {
throw new ServiceException("token长度错误");
}
token = token.substring(3, 12).toUpperCase();
String url = "/smsPacs?token=" + token + ("1".equals(treatType) ? "&opsNum=" : "&inHosNum=") + treatNum;
log.info("[云胶片]授权 url={}", url);
return url;
}
/**
* 获取云胶片的授权地址[版本1]
*
* @param patientId 患者id
*/
public String getPacsAuthUrlByPatientId(Integer version, String patientId) throws ServiceException {
log.info("[云胶片]授权 version={}, patientId={}", version, patientId);
if (ObjectUtils.isEmpty(patientId)) {
throw new ServiceException(ResultEnum.PARAM_IS_INVALID);
}
String token = DigestUtils.md5Hex(patientId + "huiyou69");
if (ObjectUtils.isEmpty(token)) {
throw new ServiceException("token转化失败");
}
String url = "/smsPacs?token=" + token.toUpperCase() + "&patID=" + patientId;
log.info("[云胶片]授权 url={}", url);
return url;
}
}

@ -9,7 +9,7 @@ import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.base.auth.models.RespAccessToken;
import com.ynxbd.wx.wxfactory.base.auth.models.RespJsapiTicket;
import com.ynxbd.wx.wxfactory.bean.*;
import com.ynxbd.wx.wxfactory.medical.MIConfig;
import com.ynxbd.wx.wxfactory.medical.WechatMIConfig;
import com.ynxbd.wx.wxfactory.medical.enums.MdRefundTypeEnum;
import com.ynxbd.wx.wxfactory.utils.WxSignHelper;
import lombok.extern.slf4j.Slf4j;
@ -34,7 +34,7 @@ public class WxMedicalHelper {
*/
public static MedicalUserInfo getUserInfo(String openid, String qrCode, String cardNo, String realName) throws ServiceException {
log.info("[医保]获取用户信息 openid={}, qrCode={}", openid, qrCode);
MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(MIConfig.PARTNER_URL, openid, qrCode);
MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(WechatMIConfig.PARTNER_URL, openid, qrCode);
if (info == null || !info.isSuccess()) {
String message = info == null ? "授权失败" : info.getMessage();
log.info("[医保授权]失败 {}", message);
@ -69,7 +69,7 @@ public class WxMedicalHelper {
* @param request 请求
* @return 支付信息
*/
public static MedicalNotify medicalPayNotify(HttpServletRequest request) throws ServiceException {
public static MedicalNotify paidMINotify(HttpServletRequest request) throws ServiceException {
try {
// 转换数据对象
Map<String, Object> paramsMap = WxSignHelper.getReqXmlParamsMap(request);
@ -78,12 +78,13 @@ public class WxMedicalHelper {
}
// 签名验证
if (!WxSignHelper.validateSign(paramsMap, MIConfig.PAY_KEY)) { // 验证未通过,通知支付失败
if (!WxSignHelper.validateSign(paramsMap, WechatMIConfig.PAY_KEY)) { // 验证未通过,通知支付失败
throw new ServiceException("[医保]回调通知签名验证未通过!");
}
String json = JsonHelper.toJsonString(paramsMap);
if ("".equals(json)) {
if (ObjectUtils.isEmpty(json)) {
throw new ServiceException("[医保]回调通知下单信息为空");
}
@ -155,8 +156,8 @@ public class WxMedicalHelper {
, outTradeNo, openid, cardNo, realName, payOrdId, payAuthNo, totalFee, insuranceFee, cashFee, familyType, familyName, familyCardNo);
MedicalPayOrder order = WxFactory.Medical.Common().createOrder(OrderMIEnum, WxCacheHelper.getAccessToken(),
MIConfig.MD_APP_ID, WeChatConfig.MCH_ID, MIConfig.PAY_KEY,
MIConfig.CITY_CODE, MIConfig.HOSPITAL_NAME, MIConfig.ORG_NO, MIConfig.CHANNEL,
WechatMIConfig.MD_APP_ID, WeChatConfig.MCH_ID, WechatMIConfig.PAY_KEY,
WechatMIConfig.CITY_CODE, WechatMIConfig.HOSPITAL_NAME, WechatMIConfig.ORG_NO, WechatMIConfig.CHANNEL,
openid,
payAuthNo,
payOrdId,
@ -203,9 +204,9 @@ public class WxMedicalHelper {
public static MedicalOrder queryOrder(String accessToken, String outTradeNo, String medTransId) {
return WxFactory.Medical.Common().queryOrder(
accessToken,
MIConfig.MD_APP_ID,
WechatMIConfig.MD_APP_ID,
WeChatConfig.MCH_ID,
MIConfig.PAY_KEY,
WechatMIConfig.PAY_KEY,
outTradeNo,
medTransId);
}
@ -251,9 +252,9 @@ public class WxMedicalHelper {
public static MedicalOrder refund(String outTradeNo, String outRefundNo, String payOrdId, BigDecimal cashFee, String reason) {
return WxFactory.Medical.Common().refund(
WxCacheHelper.getAccessToken(),
MIConfig.MD_APP_ID,
WechatMIConfig.MD_APP_ID,
WeChatConfig.MCH_ID,
MIConfig.PAY_KEY,
WechatMIConfig.PAY_KEY,
outTradeNo,
outRefundNo,
payOrdId,
@ -269,9 +270,9 @@ public class WxMedicalHelper {
public static MedicalOrder refundCash(String outTradeNo, String outRefundNo, String payOrdId, BigDecimal cashFee, String reason) {
return WxFactory.Medical.Common().refund(
WxCacheHelper.getAccessToken(),
MIConfig.MD_APP_ID,
WechatMIConfig.MD_APP_ID,
WeChatConfig.MCH_ID,
MIConfig.PAY_KEY,
WechatMIConfig.PAY_KEY,
outTradeNo,
outRefundNo,
payOrdId,
@ -296,9 +297,9 @@ public class WxMedicalHelper {
return WxFactory.Medical.Common().downBill(
WxCacheHelper.getAccessToken(),
MIConfig.MD_APP_ID,
WechatMIConfig.MD_APP_ID,
WeChatConfig.MCH_ID,
MIConfig.PAY_KEY,
WechatMIConfig.PAY_KEY,
billDate,
billType);
}
@ -310,9 +311,9 @@ public class WxMedicalHelper {
public static MedicalRefundInfo queryRefund(String accessToken, String outTradeNo, String mdTransId) {
return WxFactory.Medical.Common().queryRefund(
accessToken,
MIConfig.MD_APP_ID,
WechatMIConfig.MD_APP_ID,
WeChatConfig.MCH_ID,
MIConfig.PAY_KEY,
WechatMIConfig.PAY_KEY,
outTradeNo,
mdTransId);
}
@ -329,7 +330,7 @@ public class WxMedicalHelper {
return cacheToken;
}
RespAccessToken response = WxFactory.Base.OAuth().getAccessToken(MIConfig.MD_APP_ID, MIConfig.MD_APP_SECRET);
RespAccessToken response = WxFactory.Base.OAuth().getAccessToken(WechatMIConfig.MD_APP_ID, WechatMIConfig.MD_APP_SECRET);
if (!response.isSuccess()) {
log.error("[微信]access_token请求失败 code={}, message={}", response.getErrCode(), response.getErrMsg());
return null;

@ -2,7 +2,7 @@ package com.ynxbd.wx.wxfactory;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.medical.MIConfig;
import com.ynxbd.wx.wxfactory.medical.WechatMIConfig;
import com.ynxbd.wx.wxfactory.message.MdClient;
import lombok.extern.slf4j.Slf4j;
@ -26,7 +26,7 @@ public class WxMessageHelper {
public static void regPush(String url, Integer status, String patCardNo, String patName, String patHospitalId, String deptName, String docName, String appointmentTime, String memo) {
JsonResult result = new MdClient().push(WxCacheHelper.getAccessToken(), WeChatConfig.APP_ID, 9001, "123",
messageType -> messageType.reg(
MIConfig.HOSPITAL_NAME,
WechatMIConfig.HOSPITAL_NAME,
url,
status,
patCardNo,

@ -32,7 +32,7 @@ public class Client {
* @param url url
*/
public String getAuthUrl(String url) {
String configUrl = MIConfig.getConfigUrl(url);
String configUrl = WechatMIConfig.getConfigUrl(url);
log.info("[医保]免密授权地址-{}", configUrl);
return configUrl;
}
@ -119,7 +119,7 @@ public class Client {
//==========================================================
params.put("hospital_name", hospitalName); //
if (MIConfig.IS_DEV) {
if (WechatMIConfig.IS_DEV) {
params.put("use_sandbox", 1);
}
@ -322,7 +322,7 @@ public class Client {
MedicalUserInfo info = new MedicalUserInfo();
String timestamp = Long.toString(System.currentTimeMillis());
String signature = MIConfig.createSignature(timestamp);
String signature = WechatMIConfig.createSignature(timestamp);
if (signature == null) {
info.setMessage("signature签名错误");
return info;

@ -9,8 +9,8 @@ import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class MIConfig {
private MIConfig() {
public class WechatMIConfig {
private WechatMIConfig() {
}
// 免密授权

@ -0,0 +1,14 @@
# \u533B\u4FDD\u914D\u7F6E
mi_ali.is_dev=true
mi_ali.is_enable=true
mi_ali.is_auto_refund=true
# \u5B9A\u70B9\u533B\u7597\u673A\u6784\u540D\u79F0\uFF08\u652F\u4ED8\u5B9D\u53EF\u80FD\u4E0D\u540C\uFF09
mi_ali.org_hospital_name=\u4E91\u5357\u7701\u6EC7\u5357\u4E2D\u5FC3\u533B\u9662
# \u533B\u4FDD\uFF08PDF\u6587\u6863\uFF09----------------------------------------------------------------------------------
# \u5B9A\u70B9\u533B\u836F\u673A\u6784\u7F16\u7801
mi_ali.org_no=H53250301796
# \u5B9A\u70B9\u533B\u836F\u673A\u6784\u5C0F\u7A0B\u5E8F/h5\u5E94\u7528id\uFF08\u6B63\u5F0F\u73AF\u5883\uFF1A\u6E20\u9053\u7F16\u53F7\uFF09
mi_ali.org_app_id=1J06MILHV0JM4460C80A0000F05B9B68
# \u5B9A\u70B9\u533B\u836F\u673A\u6784\u6E20\u9053\u8BA4\u8BC1\u7F16\u7801
mi_ali.org_chnl_crtf_codg=BqK1kMStlhVDgN2uHf4EsP9BQzovPtfTZGwRsyhqMMY05hWhBzmfAN/glcC2Qe8q

@ -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 lis.url=192.168.1.185:8090 lis.unifiedEntrance=true # \u672C\u5730 #his.url=127.0.0.1:8888 # \u6D4B\u8BD5\u73AF\u5883 ali_code=675448357 # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=true # \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F his.is_push_msg=false #------------------------------------------------------------- #\u672C\u5730 his.md_url=127.0.0.1:7777 his.dev_url=127.0.0.1:7777 ### \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:8888 # \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 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.39: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 # \u4E91\u9F99 #his.url=200.200.200.69: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
# \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 lis.url=192.168.1.185:8090 lis.unifiedEntrance=true # \u672C\u5730 #his.url=127.0.0.1:8888 # \u6D4B\u8BD5\u73AF\u5883 ali_code=675448357 # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=true # \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F his.is_push_msg=false #------------------------------------------------------------- # \u6D4B\u8BD5\u73AF\u5883 his.dev_url=127.0.0.1:7777 # \u533B\u4FDD====================== # \u65E7\u914D\u7F6E his.md_url=127.0.0.1:7777 # \u533B\u4FDD\u6B63\u5F0F\u73AF\u5883 his.prod_mi_url=127.0.0.1:7777 \u672C\u5730 \u672C\u5730 \u672C\u5730 his.md_url=127.0.0.1:7777 \u672C\u5730 his.dev_url=127.0.0.1:7777# \u6D4B\u8BD5============================================================ ### \u5FB7\u5B8F\u4E2D\u533B #his.url=200.200.200.60:8888 # \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 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.39: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 # \u4E91\u9F99 #his.url=200.200.200.69: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

@ -7,7 +7,7 @@
#wx.baseURL=http://www.dljcxrmyy.com/wx/
#wx.webPath=/web
#wx.appId=wx64cc4b42bbed4090
wx.appId=wx64cc4b42bbed4090
#wx.appSecret=7d5d713378e7885c5186c739ba1bcf0c
#wx.token=ynxbd
#wx.aesKey=s3ib5r9aE7VtICXjrix0zi9cZ2bipshqh4gzXkjJoh0

Loading…
Cancel
Save