1、支付类型划分call_no调整。

2、测试接口调用工具类抽离。
3、所有调用接口新增rid标识调用参数和返回参数的日志,便于排查,请求参数新增打印调用code。
4、支付宝回调通知接口,调用HIS接口时延迟12s后调用,且配置用于测试环境,生产环境待定。
5、支付宝退费接口调整,打印日志调整,对所有9月24号前所有测试订单进行退费处理。
7、支付宝查询订单接口,在查询不到订单时返回中文提示,订单退费后不返回订单信息的问题排查,新增字段标识交易状态作用。
8、公共部分代码逻辑优化。
debug
wangsq 3 weeks ago
parent 8885d698d4
commit 4ba9903ac1
  1. 2
      src/main/java/com/ynxbd/ali/helper/AliHelper.java
  2. 38
      src/main/java/com/ynxbd/ali/helper/AliMIHelper.java
  3. 1
      src/main/java/com/ynxbd/common/action/AccountsAction.java
  4. 2
      src/main/java/com/ynxbd/common/action/RecipeAction.java
  5. 2
      src/main/java/com/ynxbd/common/action/WechatMiniAction.java
  6. 34
      src/main/java/com/ynxbd/common/action/XBDAction.java
  7. 14
      src/main/java/com/ynxbd/common/action/pay/AliPayAction.java
  8. 10
      src/main/java/com/ynxbd/common/action/pay/MedicalAction.java
  9. 6
      src/main/java/com/ynxbd/common/action/pay/MedicalTestAction.java
  10. 5
      src/main/java/com/ynxbd/common/action/pay/NotifyAction.java
  11. 4
      src/main/java/com/ynxbd/common/action/pay/PayAction.java
  12. 2
      src/main/java/com/ynxbd/common/action/pay/WxPayAction.java
  13. 16
      src/main/java/com/ynxbd/common/action/test/TestAction.java
  14. 5
      src/main/java/com/ynxbd/common/bean/pay/Order.java
  15. 26
      src/main/java/com/ynxbd/common/dao/his/HisInHospDao.java
  16. 18
      src/main/java/com/ynxbd/common/dao/his/HisMIDao.java
  17. 4
      src/main/java/com/ynxbd/common/dao/his/HisMITestDao.java
  18. 22
      src/main/java/com/ynxbd/common/dao/his/HisRecipeDao.java
  19. 17
      src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java
  20. 5
      src/main/java/com/ynxbd/common/dao/his/dev/DevHisRecipeDao.java
  21. 58
      src/main/java/com/ynxbd/common/helper/TestHelper.java
  22. 7
      src/main/java/com/ynxbd/common/helper/common/JwtHelper.java
  23. 97
      src/main/java/com/ynxbd/common/helper/common/SnowHelper.java
  24. 5
      src/main/java/com/ynxbd/common/helper/common/SoapHelper.java
  25. 50
      src/main/java/com/ynxbd/common/helper/his/HisDevHelper.java
  26. 278
      src/main/java/com/ynxbd/common/helper/his/HisHelper.java
  27. 31
      src/main/java/com/ynxbd/common/helper/his/HisMIHelper.java
  28. 12
      src/main/java/com/ynxbd/common/helper/lis/RMLisHelper.java
  29. 14
      src/main/java/com/ynxbd/common/helper/xbd/XBDEnum.java
  30. 3
      src/main/java/com/ynxbd/common/result/JsonResult.java
  31. 2
      src/main/java/com/ynxbd/common/service/CasebookService.java
  32. 9
      src/main/java/com/ynxbd/common/service/MedicalService.java
  33. 4
      src/main/java/com/ynxbd/common/service/MiddleOfficeService.java
  34. 10
      src/main/java/com/ynxbd/common/service/OutCollectService.java
  35. 2
      src/main/java/com/ynxbd/common/service/PayService.java
  36. 5
      src/main/java/com/ynxbd/common/service/RecipeService.java
  37. 2
      src/main/java/com/ynxbd/common/service/RegService.java
  38. 1
      src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java
  39. 45
      src/main/resources/ali.properties
  40. 1
      src/main/resources/medical-ali.properties
  41. 2
      src/main/resources/webservice.properties
  42. 2
      src/main/resources/xbd.properties

@ -455,7 +455,7 @@ public class AliHelper {
return order;
}
if (isMIPay) {
return AliMedicalHelper.queryTrade(outTradeNo, null);
return AliMIHelper.queryTrade(outTradeNo, null);
}
return queryTransaction(outTradeNo);
}

@ -11,9 +11,11 @@ import com.alipay.api.domain.MedicalNationalPayAuthInfo;
import com.alipay.api.request.AlipayCommerceMedicalAuthinfoAuthQueryRequest;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradeQueryRequest;
import com.alipay.api.request.AlipayTradeRefundApplyRequest;
import com.alipay.api.response.AlipayCommerceMedicalAuthinfoAuthQueryResponse;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.api.response.AlipayTradeRefundApplyResponse;
import com.ynxbd.ali.config.AliConfig;
import com.ynxbd.ali.config.AliMIConfig;
import com.ynxbd.common.bean.pay.Order;
@ -30,7 +32,7 @@ import java.net.URLDecoder;
import java.util.*;
@Slf4j
public class AliMedicalHelper {
public class AliMIHelper {
/**
* 国家医保局线上业务身份核验信息授权查询接口[alipay_commerce_medical_authinfo_auth_query_response]
@ -250,7 +252,11 @@ public class AliMedicalHelper {
if (response.isSuccess()) {
if ("TRADE_SUCCESS".equals(response.getTradeStatus())) {
order.setSuccess(true);
} else if ("TRADE_CLOSED".equals(response.getTradeStatus())) {
order.setTradeDesc("TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)");
}
order.setOpenid(response.getBuyerUserId());
order.setInfo(response.getBody());
order.setTradeState(response.getTradeStatus());
order.setTradeNo(response.getTradeNo());
@ -258,7 +264,8 @@ public class AliMedicalHelper {
order.setOutTradeNo(response.getOutTradeNo());
order.setTotalFee(new BigDecimal(response.getTotalAmount()));
} else {
order.setErrorMsg(response.getMsg());
order.setErrorCode(response.getSubCode());
order.setErrorMsg(response.getSubMsg());
}
} catch (AlipayApiException e) {
ErrorHelper.println(e);
@ -267,19 +274,29 @@ public class AliMedicalHelper {
}
// 5.2.2.6 交易退款接口alipay.trade.refund.apply
public static String refundTrade(String outTradeNo, String outRefundNo, String tradeNo, BigDecimal refundAmount, String refundReason) {
public static AlipayTradeRefundApplyResponse refundTrade(String outTradeNo, String outRefundNo, String tradeNo, BigDecimal refundAmount, String refundReason) throws Exception {
try {
if (ObjectUtils.isEmpty(outRefundNo)) {
log.info("[支付宝]退费outRefundNo为空");
return null;
}
if (ObjectUtils.isEmpty(outTradeNo) && ObjectUtils.isEmpty(tradeNo)) {
log.info("[支付宝]退费[outTradeNo 和 tradeNo]不能都为空");
return null;
}
AlipayClient alipayClient = new DefaultAlipayClient(AliConfig.getAlipayConfig());
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
AlipayTradeRefundApplyRequest request = new AlipayTradeRefundApplyRequest();
JSONObject bizContent = new JSONObject();
if (ObjectUtils.isEmpty(outTradeNo)) {
bizContent.put("trade_no", tradeNo);
} else {
bizContent.put("out_trade_no", outTradeNo);
}
bizContent.put("refund_amount", refundAmount.toString());
bizContent.put("out_request_no", outRefundNo); // 退款请求号-如需部分退款,则此参数必传
// 退款原因说明
bizContent.put("refund_reason", refundReason);
//亲情账户增加 end
JSONObject extendParams = new JSONObject();
extendParams.put("cancel_serial_no", outRefundNo);
extendParams.put("cancel_bill_no", outRefundNo);
@ -288,12 +305,17 @@ public class AliMedicalHelper {
request.setBizContent(JSONObject.toJSONString(bizContent));
log.info("[支付宝][医保]交易退款接口-入参 {}", JSONObject.toJSONString(request));
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
AlipayTradeRefundApplyResponse response = alipayClient.execute(request);
log.info("[支付宝][医保]交易退款接口-返回 {}", response.getBody());
if (response.isSuccess()) {
return response.getBody();
if ("REFUND_FAIL".equals(response.getRefundStatus())) {
log.info("[支付宝][医保]退款失败 outTradeNo={}, outRefundNo={}, refundStatus={}", outTradeNo, outRefundNo, response.getRefundStatus());
return null;
}
} catch (AlipayApiException e) {
log.info("[支付宝][医保]退款成功 outTradeNo={}, outRefundNo={}, refundStatus={}", outTradeNo, outRefundNo, response.getRefundStatus());
return response;
}
} catch (Exception e) {
ErrorHelper.println(e);
}
return null;

@ -24,7 +24,6 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.util.*;
/**

@ -223,7 +223,7 @@ public class RecipeAction extends BaseAction {
params.put("BankTransNo", bankTransNo); // 商户订单号
params.put("OpenId", recipe.getOpenid());
params.put("Token", WeChatConfig.TOKEN);
JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice, params, MerchantEnum.WX);
JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice, params);
return result.success() ? Result.success(result) : Result.error(result.getMessage());
}

@ -66,7 +66,7 @@ public class WechatMiniAction extends BaseAction {
order.setPatientId(patientId);
order.setOpenid(mid);
order.setPayWay(merchantEnum.PAY_WAY_MICRO);
Order orderResult = new OutCollectService().ocPayMicro(order, barCode, cardNo);
Order orderResult = new OutCollectService().createOCPayMicro(order, barCode, cardNo);
return orderResult.isSuccess()
? Result.success(outTradeNo)

@ -89,7 +89,7 @@ public class XBDAction extends BaseAction {
if (patientId == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
String resp = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_GetBA.Name, params -> {
String resp = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_GetBA.NAME, params -> {
params.put("patientID", patientId);
params.put("flagFP", 0);
params.put("flagSH", flagSh);
@ -137,7 +137,7 @@ public class XBDAction extends BaseAction {
@Action("getMRTemplateList")
public Result getMRTemplateList() {
try {
String jsonString = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_GetTemplate.Name, params -> {
String jsonString = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_GetTemplate.NAME, params -> {
});
return Result.success(JsonHelper.parseArray(jsonString));
} catch (Exception e) {
@ -190,7 +190,7 @@ public class XBDAction extends BaseAction {
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
}
String jsonString = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_SetAppointment.Name, params -> {
String jsonString = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_SetAppointment.NAME, params -> {
params.put("ZYNum", zyNum);
params.put("ApplyName", applyName);
params.put("UseToNo", useToNo);
@ -231,7 +231,7 @@ public class XBDAction extends BaseAction {
@Action("getMRHistory")
public Result getMRHistory(String patientId) {
try {
String jsonString = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_GetHistoryAppointment.Name, params -> {
String jsonString = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_GetHistoryAppointment.NAME, params -> {
params.put("patientID", patientId);
params.put("BorrowNo", -1);
});
@ -309,6 +309,32 @@ public class XBDAction extends BaseAction {
}
/**
* 图片测试
*
* @param patientId patientId
* @return 成功行数
*/
@Action("testImportImage")
public Result testImportImage(@AesDecode String patientId, String img1, String img2, String img3) {
try {
log.info("[图片测试]patientId={}, img1={}", patientId, img1);
if (ObjectUtils.isEmpty(patientId)) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
String jsonString = XBDHttpHelper.ExecMethodPost(XBDEnum.Test_ImportImage.NAME, params -> {
params.put("Img1", img1);
params.put("Img2", img2);
params.put("ImageType", 1);
});
return Result.success(jsonString);
} catch (Exception e) {
log.error("[图片测试] error-{}", e.toString());
return Result.error(ResultEnum.ERROR);
}
}
// /**
// * 病人修改病历的地址
// * @param id 申请单号

@ -1,12 +1,14 @@
package com.ynxbd.common.action.pay;
import com.alipay.api.domain.MedicalNationalPayAuthInfo;
import com.ynxbd.ali.config.AliMIConfig;
import com.ynxbd.ali.helper.AliHelper;
import com.ynxbd.ali.helper.AliMedicalHelper;
import com.ynxbd.ali.helper.AliMIHelper;
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.helper.common.DateHelper;
import com.ynxbd.common.helper.common.ErrorHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ServiceException;
@ -101,14 +103,20 @@ public class AliPayAction extends BaseAction {
}
log.info("[支付宝][医保][收到通知] order={}", JsonHelper.toJsonString(order));
try {
if (AliMIConfig.IS_DEV) {
Thread.sleep(1000 * 12); // 12s
}
String openid = order.getOpenid();
String bankTransNo = order.getBankTransNo();
String payInfo = order.getInfo();
BigDecimal totalFee = order.getTotalFee();
String payDate = DateHelper.getCurDate();
String payTime = DateHelper.getCurTime();
new MedicalService().commonNotify(MerchantEnum.ALI_MEDICAL, notifyType, outTradeNo, totalFee, bankTransNo, payDate, payTime, openid, payInfo);
} catch (Exception e) {
ErrorHelper.println(e);
}
return Result.respStr();
}
@ -121,7 +129,7 @@ public class AliPayAction extends BaseAction {
public Result queryMIAuth(String openid, String accessToken, String patientName, String patientCardNo, String reqBizNo, String callUrl) {
log.info("[支付宝][医保]授权查询 openid={}, accessToken={}, patientName={}, patientCardNo={}, reqBizNo={}, callUrl={}", openid, accessToken, patientName, patientCardNo, reqBizNo, callUrl);
try {
MedicalNationalPayAuthInfo dataInfo = AliMedicalHelper.queryMIAuth(openid, accessToken, patientName, patientCardNo, reqBizNo, callUrl);
MedicalNationalPayAuthInfo dataInfo = AliMIHelper.queryMIAuth(openid, accessToken, patientName, patientCardNo, reqBizNo, callUrl);
log.info("[支付宝][医保]授权查询 {}", JsonHelper.toJsonString(dataInfo));
if (dataInfo == null) {
return Result.error("授权查询失败");

@ -1,7 +1,7 @@
package com.ynxbd.common.action.pay;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.ali.helper.AliMedicalHelper;
import com.ynxbd.ali.helper.AliMIHelper;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Order;
@ -331,12 +331,12 @@ public class MedicalAction extends BaseAction {
return Result.error(order.getMessage());
} else if (merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) {
Order order = AliMedicalHelper.queryTrade(outTradeNo, medTransId);
Order order = AliMIHelper.queryTrade(outTradeNo, medTransId);
order.setOrderObj(orderObj);
if (order.isSuccess()) {
return Result.success(order);
}
if (order.hasErrorMsg()) {
return Result.error(order.getErrorMsg());
}
return Result.success(order);
} else {
return Result.error(ResultEnum.PAY_TYPE_ERROR);
}

@ -4,7 +4,7 @@ import com.ynxbd.ali.config.AliMIConfig;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.HisRecipe;
import com.ynxbd.common.config.interceptor.AesDecode;
import com.ynxbd.common.dao.his.HisMedicalTestDao;
import com.ynxbd.common.dao.his.HisMITestDao;
import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
@ -43,7 +43,7 @@ public class MedicalTestAction extends BaseAction {
}
int days = DateHelper.intervalDays(begDate, endDate, true);
List<HisRecipe> hisRecipes = HisMedicalTestDao.devUnPayList(patientId, days);
List<HisRecipe> hisRecipes = HisMITestDao.devUnPayList(patientId, days);
List<HisRecipe> dataList = new ArrayList<>();
for (HisRecipe hisRecipe : hisRecipes) {
@ -68,7 +68,7 @@ public class MedicalTestAction extends BaseAction {
return Result.error("环境错误");
}
List<HisRecipe> hisRecipeList = HisMedicalTestDao.devPaidRecipeList(patientId, begDate, endDate);
List<HisRecipe> hisRecipeList = HisMITestDao.devPaidRecipeList(patientId, begDate, endDate);
return Result.success(new RecipeService().filterPaidList(hisRecipeList));
}

@ -59,12 +59,11 @@ public class NotifyAction extends BaseAction {
String notifyType = notifyInfo.getAttach();
log.info("notifyInfo={}", notifyInfo);
log.info("【微信】[{}] native收到通知 outTradeNo={}, bankTransNo={}", notifyType, outTradeNo, bankTransNo);
log.info("【微信native支付】[{}] 收到通知 outTradeNo={}, bankTransNo={}, notifyInfo={}", notifyType, outTradeNo, bankTransNo, notifyInfo);
switch (PQREnum.toEnum(notifyType)) {
case OUT_COLLECT:
new OutCollectService().ocPayNotify(MerchantEnum.WX, openid, totalFee, bankTransNo, outTradeNo, payInfo);
new OutCollectService().ocPaidNotify(MerchantEnum.WX, openid, totalFee, bankTransNo, outTradeNo, payInfo);
break;
default:

@ -106,7 +106,7 @@ public class PayAction extends BaseAction {
log.info("{} [处方]预结算开始... patientId={}", merchantEnum.NAME, patientId);
// 调用预结算!!!!注意如果HIS不支持开启改功能后,会存在直接入库的风险
List<Recipe> respList = recipeService.hisRecipePrepay(recipeJson, patientId, treatNum);
List<Recipe> respList = recipeService.hisRxPrepay(recipeJson, patientId, treatNum);
return Result.success(respList);
}
@ -895,7 +895,7 @@ public class PayAction extends BaseAction {
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
try {
new OutCollectService().ocPay(outTradeNo, totalFee, collectId, openid, mid, name, cardNo, patientId, remark);
new OutCollectService().creatorOCOrder(outTradeNo, totalFee, collectId, openid, mid, name, cardNo, patientId, remark);
} catch (ServiceException e) {
return Result.error(e);
}

@ -62,7 +62,7 @@ public class WxPayAction extends BaseAction {
switch (PQREnum.toEnum(notifyType)) {
case OUT_COLLECT:
new OutCollectService().ocPayNotify(MerchantEnum.WX, openid, totalFee, bankTransNo, outTradeNo, payInfo);
new OutCollectService().ocPaidNotify(MerchantEnum.WX, openid, totalFee, bankTransNo, outTradeNo, payInfo);
break;
default:

@ -1,6 +1,7 @@
package com.ynxbd.common.action.test;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.ali.helper.AliMIHelper;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.his.HisTreat;
import com.ynxbd.common.bean.pay.Recipe;
@ -86,12 +87,18 @@ public class TestAction extends BaseAction {
return Result.success();
}
@Action("md_refund_test")
public Result md_refund_test() throws ServiceException {
@Action("wx_med_refund_test")
public Result wx_med_refund_test() throws ServiceException {
WxMedicalHelper.refundCash("WX_M202f622bb3444a033f7a014a421b", "ORD530100202505100932115202726", new BigDecimal("183.390"), "人工退费");
return Result.success();
}
@Action("ali_med_refund_test")
public Result ali_med_refund_test() throws Exception {
AliMIHelper.refundTrade("", "", null, new BigDecimal(""), "退费测试");
return Result.success();
}
@Action("md_add")
public Result md_add(String outTradeNo) {
@ -108,7 +115,6 @@ public class TestAction extends BaseAction {
Recipe recipe = new Recipe();
recipe.setUpdateTime(new Date());
recipe.setOpenid(order.getOpenid());
recipe.setPatientId("1xbd");
recipe.setPayStatus(0);
recipe.setHisStatus(-1);
recipe.setOutTradeNo(outTradeNo);
@ -119,9 +125,11 @@ public class TestAction extends BaseAction {
String payOrdId = jsonObject.getString("payOrdId");
recipe.setTradeNo(payOrdId);
recipe.setPayOrdId(payOrdId);
// ==========================
recipe.setPatientId("1xbd");
recipe.setMdTrtId("xbd-med");
recipe.setMdUserId("xbd-med");
recipe.setPayWay("0");
recipe.setHisResult("订单未调用HIS接口");
recipe.setTotalFee(order.getTotalFee());

@ -111,6 +111,8 @@ public class Order implements Serializable {
private String errorMsg;
// 订单交易状态
private String tradeState;
// 交易状态描述
private String tradeDesc;
// 判断支付是否成功标识
private boolean isSuccess;
// 判断是否需要退费标识
@ -206,4 +208,7 @@ public class Order implements Serializable {
return ("OK".equals(this.refundResult));
}
public boolean hasErrorMsg() {
return !ObjectUtils.isEmpty(errorMsg) || !ObjectUtils.isEmpty(errorCode);
}
}

@ -79,33 +79,33 @@ public class HisInHospDao {
/**
* 通过患者ID查询住院记录
*
* @param patientId 患者id
* @return 住院记录
*/
public JsonResult getAllHospList(String patientId){
return HisHelper.getJsonResult(HisEnum.Query_InHospListByPatientId,params-> {
params.put("PatientID",patientId);
params.put("CallNo",HisHelper.CALL_NO);
public JsonResult getAllHospList(String patientId) {
return HisHelper.getJsonResult(HisEnum.Query_InHospListByPatientId, params -> {
params.put("PatientID", patientId);
params.put("CallNo", HisHelper.WECHAT_CALL_NO);
});
}
public JsonResult getAllFee(String treatNum){
return HisHelper.getJsonResult(HisEnum.Query_InHospFeeDailyByTreat,params-> {
params.put("ZYNum",treatNum);
params.put("CallNo",HisHelper.CALL_NO);
public JsonResult getAllFee(String treatNum) {
return HisHelper.getJsonResult(HisEnum.Query_InHospFeeDailyByTreat, params -> {
params.put("ZYNum", treatNum);
params.put("CallNo", HisHelper.WECHAT_CALL_NO);
});
}
/**
* [住院]预交金缴费
*
* @param patientId 患者id
* @return 预交金缴费记录
*/
public JsonResult inHospPrepay(MerchantEnum payType, String patientId, String patientName, BigDecimal payMoney, String payDate, String payTime, String backTransNo, String tradeNo, String treatNum) {
return HisHelper.getJsonResult(HisEnum.Query_InHospPrepay, params -> {
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 -> {
params.put("PatientId", patientId);
params.put("PatientName", patientName);
params.put("ZYNum", treatNum);
@ -114,9 +114,9 @@ public class HisInHospDao {
params.put("PayTime", payTime);
params.put("TransNo", tradeNo);
params.put("BankTransNo", backTransNo);
params.put("PayWay", payType.HIS_PAY_WAY);
params.put("PayWay", merchantEnum.HIS_PAY_WAY);
params.put("PayDeviceID", "mobile");
},payType);
});
}

@ -61,7 +61,7 @@ public class HisMIDao {
params.put("YBBZCode", ybBZCode);
params.put("YBBZName", ybBZName);
}
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.AP_Pay_Invoice, params);
return HisMIHelper.getJsonResultByMer(merchantEnum.IS_DEV, HisEnum.AP_Pay_Invoice, merchantEnum, params);
}
@ -70,7 +70,7 @@ public class HisMIDao {
*/
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 -> {
return HisMIHelper.getJsonResultByMer(merchantEnum.IS_DEV, HisEnum.AP_Regist_New, merchantEnum, params -> {
params.put("PatientID", reg.getPatientId());
params.put("PayMoney", reg.getPayMoney());
@ -99,7 +99,7 @@ public class HisMIDao {
});
}
// 非分时段挂号 医保支付
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.AP_Regist, params -> {
return HisMIHelper.getJsonResultByMer(merchantEnum.IS_DEV, HisEnum.AP_Regist, merchantEnum, params -> {
params.put("PatientID", reg.getPatientId());
params.put("PayMoney", reg.getPayMoney());
params.put("DeptCode", reg.getDeptCode());
@ -136,7 +136,7 @@ public class HisMIDao {
* @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 -> {
return HisMIHelper.getJsonResultByMer(merchantEnum.IS_DEV, HisEnum.Medical_PAY, merchantEnum, params -> {
params.put("UserID_YBZF", mdUserId);
params.put("PayMoney", cashFee);
params.put("PayDate", payDate);
@ -155,7 +155,7 @@ public class HisMIDao {
* @param mdInfo 医保下单对象
*/
public static JsonResult placeMIOrder(MerchantEnum merchantEnum, MedicalInfo mdInfo) {
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_PayOrders, params -> {
return HisMIHelper.getJsonResultByMer(merchantEnum.IS_DEV, HisEnum.Medical_PayOrders, merchantEnum, params -> {
// 授权码
params.put("PayAuthNo", mdInfo.getPayAuthNo());
// 授权token
@ -179,7 +179,7 @@ public class HisMIDao {
* @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 -> {
return HisMIHelper.getJsonResultByMer(merchantEnum.IS_DEV, HisEnum.Medical_PAY, merchantEnum, params -> {
params.put("UserID_YBZF", mdUserId);
params.put("PayMoney", cashFee);
params.put("PayDate", payDate);
@ -200,7 +200,7 @@ public class HisMIDao {
*/
// * @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 -> {
return HisMIHelper.getJsonResultByMer(merchantEnum.IS_DEV, HisEnum.Medical_Refund, merchantEnum, params -> {
params.put("PayAuthNo", payAuthNo); // AUTH530100202206291132200000008
params.put("FPNum", fpNum);
params.put("PayWay", "4");
@ -237,7 +237,7 @@ public class HisMIDao {
* -1 : 状态未知
*/
public static JsonResult getMIAccounts(MerchantEnum merchantEnum, String mdUserId) {
return HisMIHelper.getJsonResult(merchantEnum.IS_DEV, HisEnum.Medical_QueryOrderStatus, params -> {
return HisMIHelper.getJsonResultByMer(merchantEnum.IS_DEV, HisEnum.Medical_QueryOrderStatus, merchantEnum, params -> {
params.put("UserID_YBZF", mdUserId);
});
}
@ -277,7 +277,7 @@ public class HisMIDao {
*/
public static JsonResult getChronicList(String idCardNo) {
return HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.YDZF_QueryDiseaseInfo, params -> {
params.put("CallNo", HisHelper.CALL_NO);
params.put("CallNo", HisHelper.WECHAT_CALL_NO);
params.put("IDCardNo", idCardNo);
});
}

@ -11,7 +11,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class HisMedicalTestDao {
public class HisMITestDao {
/**
* [测试]查询处方
@ -25,7 +25,7 @@ public class HisMedicalTestDao {
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.WECHAT_CALL_NO);
});
if (!jsonResult.success()) { // 失败

@ -83,7 +83,7 @@ public class HisRecipeDao {
params.put("PatientID", patientId);
params.put("PersonNo", personNo);
params.put("IsLastWeekFlag", days <= 7 ? "1" : "");
params.put("CallNo", HisHelper.CALL_NO);
params.put("CallNo", HisHelper.WECHAT_CALL_NO);
});
if (!jsonResult.success()) { // 失败
@ -103,7 +103,7 @@ public class HisRecipeDao {
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);
params.put("CallNo", HisHelper.WECHAT_CALL_NO);
params.put("CFNums", recipes);
});
@ -133,16 +133,13 @@ public class HisRecipeDao {
*/
public static JsonResult prepay(String patientId, String treatNum, List<String> recipeIds, String payMoney,
String payDate, String payTime, String payDeviceId, MerchantEnum merchantEnum) {
StringBuilder recipeIdsXml = new StringBuilder();
for (String id : recipeIds) {
recipeIdsXml.append("<Id>").append(id).append("</Id>");
}
return HisHelper.getJsonResult(HisEnum.AP_PrePay_Invoice_New, params -> {
return HisHelper.getJsonResultByMer(HisEnum.AP_PrePay_Invoice_New, merchantEnum, params -> {
params.put("Recipe", recipeIdsXml.toString());
params.put("PatientID", patientId);
params.put("MZNum", treatNum);
params.put("PayMoney", payMoney);
@ -154,7 +151,7 @@ public class HisRecipeDao {
params.put("BankTransNo", UUID.randomUUID().toString().replace("-", ""));
params.put("PayWay", merchantEnum.HIS_PAY_WAY);
}, merchantEnum);
});
}
@ -180,8 +177,8 @@ public class HisRecipeDao {
if (ObjectUtils.isNotEmpty(feeId)
&& ObjectUtils.isNotEmpty(feeInfo)) { // 新版本预缴费
log.info("[预结算]回调 feeId={}", feeId);
return HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice_New, params -> {
log.info("[HIS预结算]回调 feeId={}", feeId);
return HisHelper.getJsonResultByMer(HisEnum.AP_Pay_Invoice_New, merchantEnum, params -> {
params.put("PatientID", patientId);
params.put("PayDate", payDate);
params.put("PayTime", payTime);
@ -191,8 +188,11 @@ public class HisRecipeDao {
// 预结算
params.put("FeeID", feeId);
params.put("FeeInfo", feeInfo);
}, merchantEnum);
});
}
// <TransNo>2025092422001440171439259286C001</TransNo>
// <CallNo>843242395</CallNo>
// <FeeID>47465565</FeeID>
StringBuilder recipeIdsXml = new StringBuilder();
for (String id : recipeIds) {
@ -221,7 +221,7 @@ public class HisRecipeDao {
params.remove("Recipe");
params.put("PayMoney", totalFee); //如果是体检支付就传入总金额
}
return HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice, params, merchantEnum);
return HisHelper.getJsonResultByMer(HisEnum.AP_Pay_Invoice, merchantEnum, params);
}

@ -597,7 +597,7 @@ public class HisRegisterDao {
params.put("ReservationTransNo", tradeNo);
params.put("RecallTransNo", "R" + tradeNo);
return HisHelper.getJsonResult(HisEnum.AP_Recall_Reservation, params, merchantEnum);
return HisHelper.getJsonResultByMer(HisEnum.AP_Recall_Reservation, merchantEnum, params);
}
/**
@ -609,7 +609,8 @@ public class HisRegisterDao {
Map<String, Object> params = new HashMap<>();
params.put("TransNo", tradeNo);
params.put("DelTransNo", "R" + tradeNo);
return HisHelper.getJsonResult(HisEnum.AP_Refund_Register, params, merchantEnum);
return HisHelper.getJsonResultByMer(HisEnum.AP_Refund_Register, merchantEnum, params);
}
/**
@ -969,7 +970,7 @@ public class HisRegisterDao {
params.put("OpenId", reg.getOpenid());
params.put("Token", WeChatConfig.TOKEN);
return HisHelper.getJsonResult(HisEnum.AP_Regist_New, params, merchantEnum);
return HisHelper.getJsonResultByMer(HisEnum.AP_Regist_New, merchantEnum, params);
}
/**
@ -999,14 +1000,13 @@ public class HisRegisterDao {
if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) {
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
}
if (DateHelper.isToday(regDate)) { // 今日挂号
return HisHelper.getJsonResult(HisEnum.AP_Regist, params, merchantEnum);
return HisHelper.getJsonResultByMer(HisEnum.AP_Regist, merchantEnum, params);
}
// 预约挂号
params.put("ReservationDate", regDate);
return HisHelper.getJsonResult(HisEnum.AP_Reservation, params, merchantEnum);
return HisHelper.getJsonResultByMer(HisEnum.AP_Reservation, merchantEnum, params);
}
/**
@ -1016,13 +1016,12 @@ public class HisRegisterDao {
* @param sourceId 号源id
* @return true false
*/
public synchronized static JsonResult isOccupySource(String patientId, String sourceId, MerchantEnum merchantEnum) {
public synchronized static JsonResult hasOccupySource(String patientId, String sourceId, MerchantEnum merchantEnum) {
Map<String, Object> params = new HashMap<>();
params.put("PatientID", patientId);
params.put("SourceId", sourceId);
params.put("TransNo", CodeHelper.get32UUID());
return HisHelper.getJsonResult(HisEnum.AP_Occupy_Source_New, params, merchantEnum);
return HisHelper.getJsonResultByMer(HisEnum.AP_Occupy_Source_New, merchantEnum, params);
}
/**

@ -1,6 +1,7 @@
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.result.JsonResult;
@ -18,10 +19,10 @@ public class DevHisRecipeDao {
public List<HisRecipe> getDevUnPayRecipe(String patientId, int days) {
List<HisRecipe> resultList = new ArrayList<>();
JsonResult jsonResult = HisHelper.getDevJsonResult(HisEnum.AP_Query_UnPay_Invoice, params -> {
JsonResult jsonResult = HisDevHelper.getDevJsonResult(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.WECHAT_CALL_NO);
});
if (!jsonResult.success()) { // 失败

@ -1,13 +1,59 @@
package com.ynxbd.common.helper;
import org.apache.commons.codec.digest.DigestUtils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.ynxbd.common.helper.common.JwtHelper;
import lombok.extern.slf4j.Slf4j;
import java.util.Calendar;
@Slf4j
public class TestHelper {
// public static void main(String[] args) {
// String treatNum = "1579733" + "huiyou69";
// String key = DigestUtils.md5Hex(treatNum).toUpperCase();
// System.out.println(key);
// String substring = key.substring(3, 12);
// System.out.println(substring);
// }
private static final String TOKEN_KEY = "OPEN_ID";
/**
* 生成token
*
* @param sign 密钥
* @return token
*/
public static String createOpenIdToken(String sign, String openId) {
try {
JWTCreator.Builder builder = JWT.create();
builder.withClaim(TOKEN_KEY, openId);
// 有效时间
Calendar instance = Calendar.getInstance();
instance.add(Calendar.HOUR, 1);
builder.withExpiresAt(instance.getTime());
return builder.sign(Algorithm.HMAC256(sign));
} catch (Exception e) {
log.error("生成token异常:[ {} ]", e.getMessage());
return null;
}
}
public static void main(String[] args) {
String treatNum = "1579733" + "huiyou69";
String key = DigestUtils.md5Hex(treatNum).toUpperCase();
System.out.println(key);
String substring = key.substring(3, 12);
System.out.println(substring);
String token = createOpenIdToken("token", "openid-123");
System.out.println(token);
String openid = getUserOpenId(token);
System.out.println(openid);
}
/**
* 获取userId
*
* @return userId
*/
public static String getUserOpenId(String token) {
return JwtHelper.getTokenVal(token, TOKEN_KEY, String.class);
}
}

@ -5,10 +5,9 @@ import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.ServletActionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletRequest;
import java.util.Calendar;
@ -19,9 +18,8 @@ import java.util.Calendar;
* @Author skotori
* @Date 2019-11-08 11:50
*/
@Slf4j
public class JwtHelper {
private static final Logger log = LoggerFactory.getLogger(JwtHelper.class);
// token头名
public static final String TOKEN_HEADER = "AuthToken";
@ -29,6 +27,7 @@ public class JwtHelper {
public static final String USER_ID = "user_id";
public static final String USERNAME = "username";
/**
* 生成token
*

@ -1,101 +1,40 @@
package com.ynxbd.common.helper.common;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
/**
* @author wsq
* @description 雪花算法
* @date 2019/8/14 下午8:22
*/
public class SnowHelper {
/**
* 起始的时间戳
*/
private final static long START_STAMP = 3500522218L;
/**
* 每一部分占用的位数
*/
private final static long SEQUENCE_BIT = 12; // 序列号占用的位数
private final static long MACHINE_BIT = 5; // 机器标识占用的位数
private final static long DATACENTER_BIT = 5; // 数据中心占用的位数
/**
* 每一部分的最大值
*/
private final static long MAX_DATACENTER_NUM = ~(-1L << DATACENTER_BIT);
private final static long MAX_MACHINE_NUM = ~(-1L << MACHINE_BIT);
private final static long MAX_SEQUENCE = ~(-1L << SEQUENCE_BIT);
/**
* 每一部分向左的位移
*/
private final static long MACHINE_LEFT = SEQUENCE_BIT;
private final static long DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
private final static long TIME_STAMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;
private long datacenterId; // 数据中心
private long machineId; // 机器标识
private long sequence = 0L; // 序列号
private long lastStamp = -1L; // 上一次时间戳
public SnowHelper(long datacenterId, long machineId) {
if (datacenterId > MAX_DATACENTER_NUM || datacenterId < 0) {
throw new IllegalArgumentException("datacenterId can't be greater than MAX_DATACENTER_NUM or less than 0");
}
if (machineId > MAX_MACHINE_NUM || machineId < 0) {
throw new IllegalArgumentException("machineId can't be greater than MAX_MACHINE_NUM or less than 0");
}
this.datacenterId = datacenterId;
this.machineId = machineId;
}
/**
* 产生下一个ID
*
*/
public synchronized long nextId() {
long curTimeStamp = getCurTime();
if (curTimeStamp < lastStamp) {
throw new RuntimeException("Clock moved backwards. Refusing to generate id");
}
if (curTimeStamp == lastStamp) {
//相同毫秒内,序列号自增
sequence = (sequence + 1) & MAX_SEQUENCE;
//同一毫秒的序列数已经达到最大
if (sequence == 0L) {
curTimeStamp = getNextMill();
}
} else {
//不同毫秒内,序列号置为0
sequence = 0L;
private SnowHelper() {
}
lastStamp = curTimeStamp;
private static Snowflake snowflake = null;
return (curTimeStamp - START_STAMP) << TIME_STAMP_LEFT //时间戳部分
| datacenterId << DATACENTER_LEFT //数据中心部分
| machineId << MACHINE_LEFT //机器标识部分
| sequence; //序列号部分
private synchronized static void createSnowflake() {
snowflake = IdUtil.getSnowflake(0, 0);
}
private long getNextMill() {
long mill = getCurTime();
while (mill <= lastStamp) {
mill = getCurTime();
public static Long nextId() {
if (snowflake == null) {
createSnowflake();
}
return mill;
return snowflake.nextId();
}
private long getCurTime() {
return System.currentTimeMillis();
public static String nextStrId() {
if (snowflake == null) {
createSnowflake();
}
return String.valueOf(snowflake.nextId());
}
public static void main(String[] args) {
SnowHelper snowFlake = new SnowHelper(2, 3);
for (int i = 0; i < (1 << 12); i++) {
System.out.println(snowFlake.nextId());
for (int i = 0; i < 10; i++) {
System.out.println(nextId());
}
}
}

@ -1,6 +1,7 @@
package com.ynxbd.common.helper.common;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -158,7 +159,7 @@ public class SoapHelper {
* @param params 数据
* @return 组合好的请求xml数据
*/
public static String requestParams(String sys, Map<String, Object> params) {
public static String requestParams(String sys, String reqCode, String reqId, Map<String, Object> params) {
StringBuilder paramsXml = new StringBuilder();
String key;
Object value;
@ -170,7 +171,7 @@ public class SoapHelper {
paramsXml.append("<").append(key).append(">").append(value).append("</").append(key).append(">");
}
log.info("{} <Request>" + paramsXml + "</Request>", sys);
log.info("{}{}[rid:{}]<Request>{}</Request>", ObjectUtils.isEmpty(reqCode) ? "" : "[" + reqCode + "]", sys, reqId, paramsXml);
return paramsXml.toString();
}
}

@ -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 HisDevHelper {
// 测试环境---------------------------------------------------------------------------
/**
* 测试环境
*
* @param hisEnum 枚举
* @param params 发送的参数
* @return 响应的xml数据
*/
public static String getDevResponseXml(HisEnum hisEnum, Map<String, Object> params) {
return HisHelper.getResponseXml(hisEnum, HisHelper.HIS_SOAP_DEV_URL, params);
}
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getDevJsonResult(HisEnum hisEnum, Map<String, Object> 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<String, Object> requestParams = new HashMap<>();
if (params != null) {
params.setParams(requestParams);
}
return getDevJsonResult(hisEnum, requestParams);
}
}

@ -6,6 +6,7 @@ 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;
@ -25,10 +26,10 @@ import java.util.Map;
public class HisHelper {
public static final String SOAP_ENV = "<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" ";
public static final String CALL_NO = "843242395";
public static String ALI_CALL_NO = "";
// 微信
public static final String WECHAT_CALL_NO = "843242395";
// 支付宝
public static final String ALI_CALL_NO = "675448357";
// private static final String NS = "http://tempuri.org/";
// private static String HIS_WSD_URL;
@ -47,6 +48,8 @@ public class HisHelper {
// 是否传递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;
@ -62,16 +65,11 @@ public class HisHelper {
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_ALI_MER = config.getBoolean("his.is_ali_mer", false);
IS_RECIPE_PREPAY = config.getBoolean("his.is_recipe_prepay", false);
if (!ObjectUtils.isEmpty(aliCallNo)) {
ALI_CALL_NO = aliCallNo;
}
if (url == null) {
log.error("WebService配置文件读取失败");
}
@ -110,26 +108,14 @@ public class HisHelper {
return prefix + pEnum.ORDER_CODE.toUpperCase() + "001";
}
// /**
// * 根据订单号获取类型
// *
// * @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;
// }
// // 修改callNo为阿里code
// public static void putCallNoByMer(MerchantEnum merchantEnum, Map<String, Object> params) {
// if (merchantEnum == null) return;
//
// if (merchantEnum.equals(MerchantEnum.ALI) || merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) {
// params.put("CallNo", ALI_CALL_NO);
// }
// return null;
// }
@ -144,30 +130,6 @@ public class HisHelper {
return getResponseXml(hisEnum, HIS_SOAP_URL, params);
}
/**
* webService请求工具类枚举版
*
* @param hisEnum 枚举
* @param params 发送的参数
* @param merchantEnum 支付宝标志
* @return 响应的xml数据
*/
public static String getResponseXml(HisEnum hisEnum, Map<String, Object> params, MerchantEnum merchantEnum) {
return getResponseXml(hisEnum, HIS_SOAP_URL, params, merchantEnum);
}
/**
* 测试环境
*
* @param hisEnum 枚举
* @param params 发送的参数
* @return 响应的xml数据
*/
public static String getDevResponseXml(HisEnum hisEnum, Map<String, Object> params) {
return getResponseXml(hisEnum, HIS_SOAP_DEV_URL, params);
}
/**
* webService请求工具类枚举版
*
@ -176,12 +138,9 @@ public class HisHelper {
* @return 响应的xml数据
*/
public static String getResponseXml(HisEnum hisEnum, String soapUrl, Map<String, Object> params) {
return getResponseXmlForCallNo(hisEnum, soapUrl, params, MerchantEnum.WX);
return getResponseXmlForCallNo(hisEnum, soapUrl, params);
}
public static String getResponseXml(HisEnum hisEnum, String soapUrl, Map<String, Object> params, MerchantEnum merchantEnum) {
return getResponseXmlForCallNo(hisEnum, soapUrl, params, merchantEnum);
}
/**
* webService请求工具类枚举版
@ -189,64 +148,61 @@ public class HisHelper {
* @param hisEnum 枚举
* @param soapUrl 路径
* @param params 参数
* @param merchantEnum 来源
* @return 响应xml
*/
public static String getResponseXmlForCallNo(HisEnum hisEnum, String soapUrl, Map<String, Object> params, MerchantEnum merchantEnum) {
public static String getResponseXmlForCallNo(HisEnum hisEnum, String soapUrl, Map<String, Object> params) {
String method = hisEnum.METHOD;
String transactionCode = hisEnum.CODE;
if (params == null || transactionCode == null || method == null) {
log.info("WebService-{ map | transactionCode | method 为空 }");
log.info("[WebService]-{ map | transactionCode | method 为空 }");
return null;
}
Object callNo = params.get("CallNo");
if (params.get("CallNo") == null || "".equals(callNo)) {
params.put("CallNo", CALL_NO);
}
if ("ali".equals(merchantEnum.CODE) && !"".equals(ALI_CALL_NO)) {
params.put("CallNo", ALI_CALL_NO);
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\">" +
"<soapenv:Header/><soapenv:Body>" +
"<urn:" + method + " soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" +
"<InputStr xsi:type=\"xsd:string\"><Request>" + SoapHelper.requestParams("HIS", params) + "</Request></InputStr>" +
"<InputStr xsi:type=\"xsd:string\"><Request>" + SoapHelper.requestParams("HIS", transactionCode, reqId, params) + "</Request></InputStr>" +
"</urn:" + method + "></soapenv:Body></soapenv:Envelope>"
);
long endTime = System.currentTimeMillis(); // 结束时间
String takeTime = (endTime - begTime) + "ms"; // 耗时
if (hisResponse == null) {
log.info("HIS请求无响应[{}]-耗时:[{}]", transactionCode, takeTime);
log.info("[{}]HIS请求无响应[rid:{}]-耗时:[{}]", transactionCode, reqId, takeTime);
return null;
}
//解析响应消息,使用SAXReader对象
org.dom4j.Document document = DocumentHelper.parseText(hisResponse);
if (document == null) {
log.info("HIS响应内容解析失败[{}]-耗时:[{}]-返回xml={}", transactionCode, takeTime, hisResponse);
log.info("[{}]HIS响应内容解析失败[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, hisResponse);
return null;
}
List<Node> nodes = document.selectNodes("//return");
if (nodes.isEmpty()) {
log.info("HIS请求失败[{}]-耗时:[{}]-返回xml={}", transactionCode, takeTime, hisResponse);
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请求成功[{}]-耗时:[{}]-返回xml={}", transactionCode, takeTime, result);
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请求成功[{}]-耗时:[{}]-返回xml={}", transactionCode, takeTime, result);
log.info("[强制打印][{}]HIS请求成功[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, result);
}
}
}
@ -260,43 +216,6 @@ public class HisHelper {
}
// /**
// * 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<String, Object> map = new HashMap<>();
// Set<String> 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;
// }
/**
* xml响应数据组装成为JSON数据
*
@ -310,20 +229,12 @@ public class HisHelper {
return result;
}
/**
* [支付宝] xml响应数据组装成为JSON数据
*
* @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);
if (result == null) { // 如果返回为空可能为超时
return createTimeoutResult();
public static void putAliCallNo(MerchantEnum merchantEnum, Map<String, Object> 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);
}
}
return result;
}
/**
@ -331,55 +242,39 @@ public class HisHelper {
*
* @return 封装好的对象
*/
public static JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params) {
Map<String, Object> requestParams = new HashMap<>();
if (params != null) {
params.setParams(requestParams);
}
return getJsonResult(hisEnum, requestParams);
public static JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, Map<String, Object> params) {
putAliCallNo(merchantEnum, params);
return getJsonResult(hisEnum, params);
}
// <TransactionCode>4004</TransactionCode>
// <CallNo>675448357</CallNo>
// <CallNo>843242395</CallNo>
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params, MerchantEnum merchantEnum) {
public static JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params) {
Map<String, Object> requestParams = new HashMap<>();
if (params != null) {
params.setParams(requestParams);
}
return getJsonResult(hisEnum, requestParams, merchantEnum);
return getJsonResult(hisEnum, requestParams);
}
// ---------------------------------------------------------------------------
// 测试环境
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getDevJsonResult(HisEnum hisEnum, Map<String, Object> params) {
JsonResult result = JsonResult.xmlToBean(getDevResponseXml(hisEnum, params), JsonResultEnum.SYS_HIS);
if (result == null) { // 如果返回为空可能为超时
return createTimeoutResult();
}
return result;
}
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getDevJsonResult(HisEnum hisEnum, JsonResult.MapParams params) {
public static JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, JsonResult.MapParams params) {
Map<String, Object> requestParams = new HashMap<>();
if (params != null) {
params.setParams(requestParams);
}
return getDevJsonResult(hisEnum, requestParams);
return getJsonResultByMer(hisEnum, merchantEnum, requestParams);
}
@ -419,4 +314,93 @@ public class HisHelper {
return sb.toString();
}
// /**
// * [支付宝] xml响应数据组装成为JSON数据
// *
// * @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);
// if (result == null) { // 如果返回为空可能为超时
// return createTimeoutResult();
// }
// return result;
// }
// /**
// * xml响应数据组装成为JSON数据
// *
// * @return 封装好的对象
// */
// public static JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params, MerchantEnum merchantEnum) {
// Map<String, Object> 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<String, Object> map = new HashMap<>();
// Set<String> 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;
// }
}

@ -1,5 +1,6 @@
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;
@ -18,7 +19,7 @@ public class HisMIHelper {
* @param params 发送的参数
* @return 响应的xml数据
*/
public static String getResponseXml(boolean isDev, HisEnum hisEnum, Map<String, Object> params) {
private 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);
}
@ -27,7 +28,9 @@ public class HisMIHelper {
*
* @return 封装好的对象
*/
public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, Map<String, Object> params) {
public static JsonResult getJsonResultByMer(boolean isDev, HisEnum hisEnum, MerchantEnum merchantEnum, Map<String, Object> params) {
HisHelper.putAliCallNo(merchantEnum, params);
JsonResult result = JsonResult.xmlToBean(getResponseXml(isDev, hisEnum, params), JsonResultEnum.SYS_HIS);
if (result == null) { // 如果返回为空可能为超时
return HisHelper.createTimeoutResult();
@ -40,11 +43,31 @@ public class HisMIHelper {
*
* @return 封装好的对象
*/
public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, JsonResult.MapParams params) {
public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, Map<String, Object> params) {
return getJsonResultByMer(isDev, hisEnum, null, params);
}
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getJsonResultByMer(boolean isDev, HisEnum hisEnum, MerchantEnum merchantEnum, JsonResult.MapParams params) {
Map<String, Object> requestParams = new HashMap<>();
if (params != null) {
params.setParams(requestParams);
}
return getJsonResult(isDev, hisEnum, requestParams);
return getJsonResultByMer(isDev, hisEnum, merchantEnum, requestParams);
}
/**
* xml响应数据组装成为JSON数据
*
* @return 封装好的对象
*/
public static JsonResult getJsonResult(boolean isDev, HisEnum hisEnum, JsonResult.MapParams params) {
return getJsonResultByMer(isDev, hisEnum, null, params);
}
}

@ -3,6 +3,7 @@ package com.ynxbd.common.helper.lis;
import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.common.helper.common.ErrorHelper;
import com.ynxbd.common.helper.common.FileHelper;
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;
@ -26,15 +27,15 @@ public class RMLisHelper {
static {
ProperHelper config = new ProperHelper().read("webservice.properties");
String url = config.getString("lis.url");
Boolean unifiedEntrance = config.getBoolean("lis.unifiedEntrance",false);
IS_LOG_RESP = config.getBoolean("lis.is_log_resp",false);
Boolean unifiedEntrance = config.getBoolean("lis.unifiedEntrance", false);
IS_LOG_RESP = config.getBoolean("lis.is_log_resp", false);
if (url == null) {
LIS_SOAP_URL = null;
log.error("Lis配置文件读取失败");
} else if(unifiedEntrance==false){
} else if (!unifiedEntrance) {
LIS_SOAP_URL = "http://" + url + "/LisReportServics.asmx?wsdl";
}else {
} else {
LIS_SOAP_URL = "http://" + url + "/LisReportServics.asmx?UnifiedEntrance";
}
}
@ -54,6 +55,7 @@ public class RMLisHelper {
String result;
try {
String reqId = SnowHelper.nextStrId();
long begTime = System.currentTimeMillis(); // 开始时间
String responseXml = SoapHelper.post("RMLis", LIS_SOAP_URL, null,
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ruim=\"http://www.ruimei.com.cn\">" +
@ -61,7 +63,7 @@ public class RMLisHelper {
"<soapenv:Body><ruim:UnifiedEntrance>" +
"<ruim:methodName>" + method + "</ruim:methodName>" +
"<ruim:parameterType>1</ruim:parameterType>" +
"<ruim:parameterValue><![CDATA[<Request>" + SoapHelper.requestParams("RMLis", params) + "</Request>]]></ruim:parameterValue>" +
"<ruim:parameterValue><![CDATA[<Request>" + SoapHelper.requestParams("RMLis", null, reqId, params) + "</Request>]]></ruim:parameterValue>" +
"</ruim:UnifiedEntrance></soapenv:Body></soapenv:Envelope>"
);

@ -34,13 +34,15 @@ public enum XBDEnum {
/**
* [病案翻拍] 停止预约
*/
BLSM_Appointment_StopAppointment("BLSM_Appointment_StopAppointment","停止预约");
BLSM_Appointment_StopAppointment("BLSM_Appointment_StopAppointment","停止预约"),
public final String Name;
public final String Description;
Test_ImportImage("Test_ImportImage","图片测试");
XBDEnum(String Name, String Description) {
this.Name = Name;
this.Description = Description;
public final String NAME;
public final String DESCRIPTION;
XBDEnum(String NAME, String DESCRIPTION) {
this.NAME = NAME;
this.DESCRIPTION = DESCRIPTION;
}
}

@ -137,7 +137,7 @@ public class JsonResult {
Map<String, Object> map = new HashMap<>();
Set<String> keys = respObj.keySet();
for (String key : keys) {
if (ignoreParams != null && ignoreParams.length > 0) {
if (ignoreParams != null) {
for (String ignoreParam : ignoreParams) {
if (key.equals(ignoreParam)) {
break;
@ -154,7 +154,6 @@ public class JsonResult {
}
map.put(key, respObj.getString(key));
}
result.setDataMap(map);
result.dataMap = map;
result.successCode = jsonResultEnum.getSUCCESS_CODE();
if (jsonResultEnum.getTIMEOUT_CODE() == null) {

@ -115,7 +115,7 @@ public class CasebookService {
log.info("[病历] 开始回调支付状态 borrowNo-{}", casebookId);
try {
String jsonString = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_SetISPay.Name, params -> {
String jsonString = XBDHttpHelper.ExecMethodPost(XBDEnum.BLSM_Appointment_SetISPay.NAME, params -> {
params.put("borrowNo", casebookId);
params.put("payDateTime", DateHelper.getCurDateTime());
});

@ -1,8 +1,9 @@
package com.ynxbd.common.service;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.response.AlipayTradeRefundApplyResponse;
import com.ynxbd.ali.config.AliMIConfig;
import com.ynxbd.ali.helper.AliMedicalHelper;
import com.ynxbd.ali.helper.AliMIHelper;
import com.ynxbd.common.action.pay.PEnum;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.*;
@ -215,9 +216,9 @@ public class MedicalService {
throw new ServiceException("【支付宝】医保授权码medicalCardId为空");
}
Order order = hasDBOrder ? AliMedicalHelper.queryTrade(outTradeNo, null) : new Order();
Order order = hasDBOrder ? AliMIHelper.queryTrade(outTradeNo, null) : new Order();
String notifyUrl = WeChatConfig.getHttpsBaseUrl() + merchantEnum.getNotifyUrl(outTradeNo, notifyType);
Map<String, Object> map = AliMedicalHelper.createOrder(orderMIEnum,
Map<String, Object> map = AliMIHelper.createOrder(orderMIEnum,
openid,
outTradeNo,
chrgBchno,
@ -723,7 +724,7 @@ public class MedicalService {
} else {
// 支付宝
String respBody = AliMedicalHelper.refundTrade(outTradeNo, outRefundNo, tradeNo, cashFee, "线上退费");
AlipayTradeRefundApplyResponse respBody = AliMIHelper.refundTrade(outTradeNo, outRefundNo, tradeNo, cashFee, "线上退费");
boolean isOk = respBody != null;
log.info("[支付宝][处方][现金]退费{} outTradeNo={}, bankTransNo={}, tradeNo={}", (isOk ? "成功" : "失败"), outTradeNo, bankTransNo, tradeNo);
if (isOk) {

@ -1,6 +1,7 @@
package com.ynxbd.common.service;
import com.ynxbd.common.bean.enums.HospEnum;
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;
@ -18,7 +19,8 @@ public class MiddleOfficeService {
try {
if (HospEnum.红河州人民医院.isHosp()) {
if (MiddleOfficeConfig.MIDDLE_OFFICE_URL != null) { //平台数据上传
MiddleOfficeConfig.run(soapUrl, "<Request>" + SoapHelper.requestParams("HIS", params) + "</Request>", hisSoapMdUrl, transactionCode, result);
String reqId = SnowHelper.nextStrId();
MiddleOfficeConfig.run(soapUrl, "<Request>" + SoapHelper.requestParams("HIS", null, reqId, params) + "</Request>", hisSoapMdUrl, 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"));
}

@ -21,7 +21,7 @@ public class OutCollectService {
/**
* [外采]扫收款码支付
*/
public Order ocPayMicro(Order order, String brCode, String cardNo) {
public Order createOCPayMicro(Order order, String brCode, String cardNo) {
Order oResult = new Order();
PayOutCollect addInfo = CopyHelper.fatherToChild(order, PayOutCollect.class);
addInfo.setBarCode(brCode);
@ -37,9 +37,9 @@ public class OutCollectService {
/**
* [外采]支付
*
* @param totalFee
* @param totalFee 金额
*/
public void ocPay(String outTradeNo, BigDecimal totalFee, String collectId, String openid, String mid, String name, String cardNo, String patientId, String remark) throws ServiceException {
public void creatorOCOrder(String outTradeNo, BigDecimal totalFee, String collectId, String openid, String mid, String name, String cardNo, String patientId, String remark) throws ServiceException {
log.info("collectId={}, mid={}, name={}, cardNo={}, patientId={}, remark={}", collectId, mid, name, cardNo, patientId, remark);
if (ObjectUtils.isEmpty(collectId) || ObjectUtils.isEmpty(mid) || ObjectUtils.isEmpty(name) || ObjectUtils.isEmpty(cardNo)) {
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
@ -76,7 +76,7 @@ public class OutCollectService {
map.put("payAmount", totalFee);
map.put("bankTransNo", bankTransNo);
});
log. info("[外采]回调 resp={}", resp);
log.info("[外采]回调 resp={}", resp);
if (resp == null) {
throw new ServiceException("[外采]回调请求失败");
}
@ -96,7 +96,7 @@ public class OutCollectService {
/**
* [外采]回调通知
*/
public void ocPayNotify(MerchantEnum merchantEnum, String openid, BigDecimal totalFee, String outTradeNo, String bankTransNo, String payInfo) throws ServiceException {
public void ocPaidNotify(MerchantEnum merchantEnum, String openid, BigDecimal totalFee, String outTradeNo, String bankTransNo, String payInfo) throws ServiceException {
OutCollectPayDao ocPayDao = new OutCollectPayDao();
PayOutCollect ocPay = ocPayDao.selectByOutTradeNo(outTradeNo);

@ -80,7 +80,7 @@ public class PayService {
break;
case OUT_COLLECT:
new OutCollectService().ocPayNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
new OutCollectService().ocPaidNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
break;
case OL_REG:

@ -154,11 +154,11 @@ public class RecipeService {
* @param treatNum 门诊号
* @return 是否完成操作
*/
public List<Recipe> hisRecipePrepay(String recipeJson, String patientId, String treatNum) {
public List<Recipe> hisRxPrepay(String recipeJson, String patientId, String treatNum) {
log.info("[处方]预结算 patientId={}, treatNum={}, recipeJson={}", patientId, treatNum, recipeJson);
List<Recipe> respList = new ArrayList<>();
List<Recipe> recipeList = JsonHelper.parseArray(recipeJson, Recipe.class);
if (recipeList == null || recipeList.size() == 0) {
if (recipeList == null || recipeList.isEmpty()) {
log.info("[处方]预结算勾选处方数量为0 或 数据转换失败");
return respList;
}
@ -434,6 +434,7 @@ public class RecipeService {
recipe.getFeeId(),
recipe.getFeeInfo());
log.info("[处方]结算返回 resp={}", JsonHelper.toJsonString(response));
String respCode = response.getCode();
String respMessage = response.getMessage();

@ -698,7 +698,7 @@ public class RegService {
String sourceId = reg.getSourceId();
// 占用查询开关被开启
if (isOccupySource != null && isOccupySource) {
JsonResult result = HisRegisterDao.isOccupySource(patientId, sourceId, merchantEnum);
JsonResult result = HisRegisterDao.hasOccupySource(patientId, sourceId, merchantEnum);
if (!result.success()) {
return Result.error(result.getMessage());
}

@ -125,6 +125,7 @@ public class WxAuthHelper {
HttpSession session = request.getSession();
Object openid = session.getAttribute("openid");
if (openid != null) {
User user = WxCacheHelper.getCacheUser((String) openid);
if (user == null) {

@ -1,42 +1,11 @@
ali.is_log=true
ali.is_enable=true
# \u6D88\u606F\u63A8\u9001
ali.is_push_msg=true
# \u7CFB\u7EDF\u5546\u7B7E\u7EA6\u534F\u8BAE\u7684PID-\u516C\u53F8isv_pid\uFF08\u552F\u4E00\uFF09
# 消息推送
ali.is_push_msg=false
# 公司ISV_PID(唯一)
ali.isv_partner_id=2088041605229629
#-----------------------------------------
# appid\uFF08\u548C\u5546\u6237\u76F8\u5173-\u94B1\u5230\u7684\u5730\u65B9\uFF09
ali.app_id=2021003163655042
# \u533B\u9662\u8D26\u53F7id = \u5546\u6237pid
ali.hosp_id=2088541276656015
#----------------------------------
ali.app_id=2021002128669589
# \u5E94\u7528\u516C\u94A5->\u652F\u4ED8\u5B9D\u516C\u94A5
ali.public_key=miibijanbgkqhkig9w0baqefaaocaq8amiibcgkcaqeaiirkzafc4fuxbmtprisjiy/ongxhpkpqemhqjroehgydcd+fwsqmi4cougift27vktqokw23df2mnhjws/nbofswgqdkbstjr2eqhnmzhkyf6d30wnb1c19ocdrburaeaotctt7equamnz5updzpv5w6qoh1nwysshuoyzxdhpwsanjrw5a3gdsqtodikoxgfzrvw7yzszbtwsvnrezk7yxyi2nxalnehquoypbxe6a30kjcehlze9dn3eaho5/h2o3xxgqiunwltkqrc5uo785e6b7eyuswl2cky3eauguaiidzdkslavi+5bgfwhhexgskf4bd1acapc9bhmgiwwidaqab
ali.public_key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg//Py3c3G+g2cVQTvEZ7Er1QY3woI31myGiez2tgs6thVPA5WJ+mjAxp0ZdqPNvgm7/fCRQtX2LcYmk5YGwcTW5JjAAYvW4ebyj9BtfJJ4UoDF7lC7WVtojtosCZ8xMQApISYhZaR694jolyyZbXWUCGP81GfZpaM+/ZQ5pzkVgZLpmpffXR8xlw68h59l74sYsGraofoZaNfx5LlnNm0cBi8v0cz0x2tkRDlD3+5iooVccGBxxoRhHyTxxLRq+8O9i/rdxWPHQWlzPQxFohyTF8+9diRSa8cDFuqqJV/JiiaU8wCojfS6cIcso/07zYkvgoTUzkFkIahUi7JjxbZQIDAQAB
# \u5E94\u7528\u79C1\u94A5
ali.app_private_key=miievgibadanbgkqhkig9w0baqefaascbkgwggskageaaoibaqdni1a+z5ha7msqjeim11covr3m0faybpsx82cmgh1soquq98mrtgybmj44fzitezkqsyu0auwbzke35aquncgdop9k0q5eeok4pzzo6dxgcp6gzsd/p6tiynaoqrxuroxy45stzvv32g/ufb6h9t2htx+qn33d0mnqtklm1buqim1iobnbsjmcrdbkewfx32qxxqxzeoq9eepphu7yuigohjya5tvpd6mykd7bwph6fvgy8rpl7shr+iwzt4kmq+qkyi5a93z51qa41d+i12hwgr4je25rlu6arhuoxu9uvzd57zsckn5wx6zkud+k6khklinv7utyqbrrrdiqsmlhagmbaaecggebamrptuyc96iev1q7woukxsmfwlezl8sjwklu63vezrro6r4bjdxyniozzmen/cqumuywcwjndksxzsncvt2pdsktkrcmh3k825dtcdati1ofstqdxd2uugt8u9l26c6i8rrkd9lcxdw8zzdlufvpphcnlzkg/ao9gwtkykwuqzzuimewk9rllgorp7bqxgth8r2cutdylzbue2aq2w3pf0xkhpkg82cgwmtnxhjbxfhoo+3ciyta5ncrymzc+icuqwersdktctp1+s83aks6cya66rxzlp2rz3eb2n4maj+y+dodkju4gok7askmxth+wgwwqxbvbftu+99jw5a9laecgyea5o8mjhfc7b04u/jn7y2hyfrqwixjqhzf8cqoogprrb/y5f3pvzlpiltfgtgkodnsvbc3ilt0svf56zganhrwf8rteyerun5tl8vzdutp5enjvqb1jxo0w1urklnrx13dysxcrt6maumvcu8w5em+jh2v+nv5qwu9w9vwwtddx3ecgyea5dmre5k1yuk3c8kppmul/quwououfswqnaz9z6ojaref9y6rdqdoruzgokmi4lu3s9jz3pmn0ezzd8svplzzr9gnrpo39jwag5zwnllysjjllk+yjijplb78fxz4/eey+s3ynspy0t73c0wcnfbpuwb4jeiaijw6iykd8dvfkdccgyea0x1qsjwmjhq4zjrxqevcqe5xun13aw7tg0p/oreu4wtzsgstcyod6fc1hzk6pu3i9hdsdck7x40ifk4wcda6qsolvnx9iyudmmsqh5/qtaddzazorgvnw95bhnuuxnqzvvkhl9knc8fib97is1ltczyydysf9gggyvyy5jgiceecgyadcue8wkovvw1zc9ggd8a3hduf3dj8gmilismvt0pvaopjjzpwaoembokwpuqwcd7tynmhbbrwpv4eanzrr6ridmvgcrtpndq5iyejefo8gzguek3wpyucurxz7fm5yzqcl7r8blpffnxcsq6g8vwiuwa6fndr6wgmyhgccex+zqkbgdjweqqx9m7zivj3dzbzn5bbs0fgbm0vascwcx1fgd2kml1qm6rj2unjaen2yi81bdrn5calu9eipvopia3jvxtfrubrf5l+0/vyaj9olqayumzgk6qf1a4rmfglxfugo7jd8ow9mq5tqtz3ldelaqlijkvyu+5ssphj2twgtzan
#------------------------------------------
# \u533B\u9662\u767B\u8BB0\u53F7
ali.hosp_register_id=43278598053310011a2101
# \u79DF\u6237\u5E94\u7528id
ali.tenant_app_id= 20221116560100034264
# \u533B\u9662\u540D\u79F0
ali.hosp_name=\u5FB7\u5B8F\u5DDE\u4E2D\u533B\u533B\u9662
# \u533B\u9662\u522B\u540D
ali.hosp_alias=\u5FB7\u5B8F\u5DDE\u4E2D\u533B\u533B\u9662
# \u533B\u7597\u5B9A\u70B9\u673A\u6784\u7F16\u53F7
ali.hosp_standard_code=h53310300023
# \u533B\u9662\u6240\u5728\u7701\u4EFD
ali.hosp_province=\u4E91\u5357\u7701
# \u533B\u9662\u6240\u5728\u57CE\u5E02
ali.hosp_city=\u8292\u5E02
# \u533B\u9662\u6240\u5728\u57CE\u5E02\u533A\u5212\u7F16\u7801
ali.hosp_district=530600
# \u533B\u9662\u5730\u5740
ali.hosp_addr=\u4E91\u5357\u7701\u5FB7\u5B8F\u50A3\u65CF\u666F\u9887\u65CF\u81EA\u6CBB\u5DDE\u8292\u5E02\u5357\u868C\u8DEF87\u53F7
# \u533B\u9662\u7ECF\u5EA6
ali.hosp_lgt=98.574521
# \u533B\u9662\u7EAC\u5EA6
ali.hosp_lat=24.414922
# \u533B\u9662\u7C7B\u578B
ali.hosp_type=\u516C\u7ACB
# \u533B\u9662\u7B49\u7EA7
ali.hosp_grade=\u4E09\u7EA7
ali.app_private_key=MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDGaCGdSQUaNT3JZZrQWZm+Uf73MOzlQLNjdyE6HZur0Pp0B7h2VaDRMHIf4dUoiSB5qrRgzyDgbegcjtc68TNmv1euFhK7KD6NW+aPRM6jiyXvj3l9yQazC91ZtuEmx12kBKPHQbEp6sto9iXHdwsahh/yKg9jf3R+fevvRRmaJfk8MQlCaHeNr44cW9FlsW0JWvHva2w7/aeEFkiMSUR8mK3aSE/wmcb2MI2qvHlcDigVbXPtEnb+/RqEKS3QuW2d7cFrHkcspdL6026HRJgKFepnrrQsYpZFxfnEBPhvfwNJDBeb6ZCoxgxX/sasrb/slO9eUOhFLXzCqvwx7+U9AgMBAAECggEBALPIPdVhCj+SSPeKmvr6hebANBHXgoHF3AdgNnqLw7iv95JWQJ7xvnRvuqoLH/TINOYqeaJTbc4PqUjfYkYls9cBwTidBcITmILM6KGfzsLA3tIxpvwEwY5STPPzVBeohcCO970hWKDMAh+NE/SneSdCrAXqeOFG58+K2NSKP8W90fBfJkYIBIyOJSItJJfsCfLSNPNW5yMi1FxTtAQPpsN9eEE+F7bCXKjA48grppa78BU7vnFZu7WdAjnOsBk91bf7nHi4Xt0fbFdaHYR3qkFAZ72xS+8k3vTE7BAEWZIKEFTB8Yao4S2ZEs9OU3iLoqXVG2ke1KO/HwuFUmxRZL0CgYEA/OP6VN8k90MF0tcsj/Vs6rGZR3bUFxGNzFnR7Wn6OWgsyy6wWIIiUna2fMVaHqZkDXSnZ8Hriz1UzkMRiiiEVb/ljFYUOy1lGKPGROoj0wsrC96speb1hNLKLosFLAkWYnGWnHGbJxs+2KMCW9NKd8RYyN6TEdrWpVZrKCJmOJsCgYEAyNinuUrvr+GJGqEWIyQ/T5H3HOMqKISiD/5yaWL/tQRtWisaU7BPbU+vMM4BK+ewjK30+y7y+qzCdgx8xJrvP7wgMxkHB/ONTLCuQnsHQ23b1UMaY0eBNUGz0hBx+1W9fpRqU+UlQd6P/XQIpw0ATuOCEkWAOlal9aBQcVBEGwcCgYEAqR4Ag49ylhRxKY2SFHeJLe401hDGRuMLU7RhagasOoXLJtmDPr1QHJuc8BW+ba7STBlN9lo9nbEXLJS3fxAXZ4zcApxyDR0PdYnYhq+Z44GdeOOhy5SHbhrU8IkxnUA6gvz5PofOvTlALvncEvJa43sf8Ly/13nkf08qe/19JK8CgYA1b07QQVubk4mCiDD3kIE3jkIMcXOZ7A+h6bROzYPyiQb+4lDSyymWj4iwl15AbBfQlceDvG3wu13RQmk/dWkJr+dxMMtqFiYVrTvvfAPmsKe4CW5P04pQvPY2gSGSGLGdp6bSQziyWaA9ck2LBC58zpKggdUnsD3fJ5O/UfeMqQKBgQCQT27hHAGoAmNmXbL2LjnwtS08xEQo6m5YE1eRVoKNFkJD7tBzQ99M4VFpRaxwmL+wRzrNfYrzSI/SUHuOKD+P7nS8FyNf1vXqP14D30vTKSIWRKMW3K7PiBIYkhbIK2iI/yxEDT2D6OdxC4flinEdwbNuvBpARQavkJ82aly5Cg==

@ -2,7 +2,6 @@
mi_ali.is_dev=true
mi_ali.is_enable=true
mi_ali.is_auto_refund=true
mi_ali.mi_ali.dev_openid=
# \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

@ -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 #------------------------------------------------------------- # \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 # \u533B\u4FDD\u6D4B\u8BD5\u73AF\u5883 his.dev_mi_url=10.20.10.7:7885 # \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
# \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 # 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 # \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 # \u533B\u4FDD\u6D4B\u8BD5\u73AF\u5883 his.dev_mi_url=10.20.10.7:7885 # \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

@ -18,7 +18,7 @@
xbd.200.cloud_film_url=http://200.200.200.70:3306/wx3306
# \u75C5\u5386\u590D\u5370
#xbd.200.med_record_copy_url=http://10.20.10.41:8082
xbd.200.med_record_copy_url=http://10.255.248.186:8080
xbd.200.med_record_copy_url=http://192.168.12.66:8080
# \u4F53\u68C0
xbd.100.peis_url=http://200.200.200.71:5050/peisReserve
Loading…
Cancel
Save