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; return order;
} }
if (isMIPay) { if (isMIPay) {
return AliMedicalHelper.queryTrade(outTradeNo, null); return AliMIHelper.queryTrade(outTradeNo, null);
} }
return queryTransaction(outTradeNo); return queryTransaction(outTradeNo);
} }

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

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

@ -223,7 +223,7 @@ public class RecipeAction extends BaseAction {
params.put("BankTransNo", bankTransNo); // 商户订单号 params.put("BankTransNo", bankTransNo); // 商户订单号
params.put("OpenId", recipe.getOpenid()); params.put("OpenId", recipe.getOpenid());
params.put("Token", WeChatConfig.TOKEN); 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()); return result.success() ? Result.success(result) : Result.error(result.getMessage());
} }

@ -66,7 +66,7 @@ public class WechatMiniAction extends BaseAction {
order.setPatientId(patientId); order.setPatientId(patientId);
order.setOpenid(mid); order.setOpenid(mid);
order.setPayWay(merchantEnum.PAY_WAY_MICRO); 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() return orderResult.isSuccess()
? Result.success(outTradeNo) ? Result.success(outTradeNo)

@ -89,7 +89,7 @@ public class XBDAction extends BaseAction {
if (patientId == null) { if (patientId == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); 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("patientID", patientId);
params.put("flagFP", 0); params.put("flagFP", 0);
params.put("flagSH", flagSh); params.put("flagSH", flagSh);
@ -137,7 +137,7 @@ public class XBDAction extends BaseAction {
@Action("getMRTemplateList") @Action("getMRTemplateList")
public Result getMRTemplateList() { public Result getMRTemplateList() {
try { 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)); return Result.success(JsonHelper.parseArray(jsonString));
} catch (Exception e) { } catch (Exception e) {
@ -190,7 +190,7 @@ public class XBDAction extends BaseAction {
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST); 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("ZYNum", zyNum);
params.put("ApplyName", applyName); params.put("ApplyName", applyName);
params.put("UseToNo", useToNo); params.put("UseToNo", useToNo);
@ -231,7 +231,7 @@ public class XBDAction extends BaseAction {
@Action("getMRHistory") @Action("getMRHistory")
public Result getMRHistory(String patientId) { public Result getMRHistory(String patientId) {
try { 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("patientID", patientId);
params.put("BorrowNo", -1); 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 申请单号 // * @param id 申请单号

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

@ -1,7 +1,7 @@
package com.ynxbd.common.action.pay; package com.ynxbd.common.action.pay;
import com.alibaba.fastjson.JSONObject; 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.action.base.BaseAction;
import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.bean.pay.Order;
@ -331,12 +331,12 @@ public class MedicalAction extends BaseAction {
return Result.error(order.getMessage()); return Result.error(order.getMessage());
} else if (merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) { } else if (merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) {
Order order = AliMedicalHelper.queryTrade(outTradeNo, medTransId); Order order = AliMIHelper.queryTrade(outTradeNo, medTransId);
order.setOrderObj(orderObj); order.setOrderObj(orderObj);
if (order.isSuccess()) { if (order.hasErrorMsg()) {
return Result.success(order);
}
return Result.error(order.getErrorMsg()); return Result.error(order.getErrorMsg());
}
return Result.success(order);
} else { } else {
return Result.error(ResultEnum.PAY_TYPE_ERROR); 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.action.base.BaseAction;
import com.ynxbd.common.bean.HisRecipe; import com.ynxbd.common.bean.HisRecipe;
import com.ynxbd.common.config.interceptor.AesDecode; 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.helper.common.DateHelper;
import com.ynxbd.common.result.Result; import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ResultEnum;
@ -43,7 +43,7 @@ public class MedicalTestAction extends BaseAction {
} }
int days = DateHelper.intervalDays(begDate, endDate, true); 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<>(); List<HisRecipe> dataList = new ArrayList<>();
for (HisRecipe hisRecipe : hisRecipes) { for (HisRecipe hisRecipe : hisRecipes) {
@ -68,7 +68,7 @@ public class MedicalTestAction extends BaseAction {
return Result.error("环境错误"); 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)); return Result.success(new RecipeService().filterPaidList(hisRecipeList));
} }

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

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

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

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

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

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

@ -61,7 +61,7 @@ public class HisMIDao {
params.put("YBBZCode", ybBZCode); params.put("YBBZCode", ybBZCode);
params.put("YBBZName", ybBZName); 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) { public static JsonResult regMIUploadFeeDetails(MerchantEnum merchantEnum, Register reg, String payAuthNo, String cardNo, Boolean isSplitTime) {
if (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("PatientID", reg.getPatientId());
params.put("PayMoney", reg.getPayMoney()); 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("PatientID", reg.getPatientId());
params.put("PayMoney", reg.getPayMoney()); params.put("PayMoney", reg.getPayMoney());
params.put("DeptCode", reg.getDeptCode()); params.put("DeptCode", reg.getDeptCode());
@ -136,7 +136,7 @@ public class HisMIDao {
* @param bankTransNo HIS流水号 * @param bankTransNo HIS流水号
*/ */
public static JsonResult regMIPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) { 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("UserID_YBZF", mdUserId);
params.put("PayMoney", cashFee); params.put("PayMoney", cashFee);
params.put("PayDate", payDate); params.put("PayDate", payDate);
@ -155,7 +155,7 @@ public class HisMIDao {
* @param mdInfo 医保下单对象 * @param mdInfo 医保下单对象
*/ */
public static JsonResult placeMIOrder(MerchantEnum merchantEnum, MedicalInfo 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()); params.put("PayAuthNo", mdInfo.getPayAuthNo());
// 授权token // 授权token
@ -179,7 +179,7 @@ public class HisMIDao {
* @param bankTransNo HIS流水号 * @param bankTransNo HIS流水号
*/ */
public static JsonResult rxMIPay(MerchantEnum merchantEnum, String mdUserId, String payDate, String payTime, String transNo, String bankTransNo, BigDecimal cashFee) { 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("UserID_YBZF", mdUserId);
params.put("PayMoney", cashFee); params.put("PayMoney", cashFee);
params.put("PayDate", payDate); params.put("PayDate", payDate);
@ -200,7 +200,7 @@ public class HisMIDao {
*/ */
// * @param refundType 退款类型(ALL:全部,CASH:只退现金 HI:只退医保) // * @param refundType 退款类型(ALL:全部,CASH:只退现金 HI:只退医保)
public static JsonResult miRefund(MerchantEnum merchantEnum, String payAuthNo, String fpNum, String bankTransNo, String refundTradeNo, BigDecimal cashFee) { 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("PayAuthNo", payAuthNo); // AUTH530100202206291132200000008
params.put("FPNum", fpNum); params.put("FPNum", fpNum);
params.put("PayWay", "4"); params.put("PayWay", "4");
@ -237,7 +237,7 @@ public class HisMIDao {
* -1 : 状态未知 * -1 : 状态未知
*/ */
public static JsonResult getMIAccounts(MerchantEnum merchantEnum, String mdUserId) { 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); params.put("UserID_YBZF", mdUserId);
}); });
} }
@ -277,7 +277,7 @@ public class HisMIDao {
*/ */
public static JsonResult getChronicList(String idCardNo) { public static JsonResult getChronicList(String idCardNo) {
return HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.YDZF_QueryDiseaseInfo, params -> { 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); params.put("IDCardNo", idCardNo);
}); });
} }

@ -11,7 +11,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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 -> { JsonResult jsonResult = HisMIHelper.getJsonResult(HisMIHelper.IS_DEV, HisEnum.AP_Query_UnPay_Invoice, params -> {
params.put("PatientID", patientId); params.put("PatientID", patientId);
params.put("IsLastWeekFlag", days <= 7 ? "1" : ""); params.put("IsLastWeekFlag", days <= 7 ? "1" : "");
params.put("CallNo", HisHelper.CALL_NO); params.put("CallNo", HisHelper.WECHAT_CALL_NO);
}); });
if (!jsonResult.success()) { // 失败 if (!jsonResult.success()) { // 失败

@ -83,7 +83,7 @@ public class HisRecipeDao {
params.put("PatientID", patientId); params.put("PatientID", patientId);
params.put("PersonNo", personNo); params.put("PersonNo", personNo);
params.put("IsLastWeekFlag", days <= 7 ? "1" : ""); params.put("IsLastWeekFlag", days <= 7 ? "1" : "");
params.put("CallNo", HisHelper.CALL_NO); params.put("CallNo", HisHelper.WECHAT_CALL_NO);
}); });
if (!jsonResult.success()) { // 失败 if (!jsonResult.success()) { // 失败
@ -103,7 +103,7 @@ public class HisRecipeDao {
JsonResult jsonResult = HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.XK_MEDICAL_RECIPE, params -> { JsonResult jsonResult = HisMIHelper.getJsonResult(HisMIHelper.IS_PROD, HisEnum.XK_MEDICAL_RECIPE, params -> {
params.put("PersonID", personID); params.put("PersonID", personID);
params.put("MZNum", treatNum); params.put("MZNum", treatNum);
params.put("CallNo", HisHelper.CALL_NO); params.put("CallNo", HisHelper.WECHAT_CALL_NO);
params.put("CFNums", recipes); params.put("CFNums", recipes);
}); });
@ -133,16 +133,13 @@ public class HisRecipeDao {
*/ */
public static JsonResult prepay(String patientId, String treatNum, List<String> recipeIds, String payMoney, public static JsonResult prepay(String patientId, String treatNum, List<String> recipeIds, String payMoney,
String payDate, String payTime, String payDeviceId, MerchantEnum merchantEnum) { String payDate, String payTime, String payDeviceId, MerchantEnum merchantEnum) {
StringBuilder recipeIdsXml = new StringBuilder(); StringBuilder recipeIdsXml = new StringBuilder();
for (String id : recipeIds) { for (String id : recipeIds) {
recipeIdsXml.append("<Id>").append(id).append("</Id>"); 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("Recipe", recipeIdsXml.toString());
params.put("PatientID", patientId); params.put("PatientID", patientId);
params.put("MZNum", treatNum); params.put("MZNum", treatNum);
params.put("PayMoney", payMoney); params.put("PayMoney", payMoney);
@ -154,7 +151,7 @@ public class HisRecipeDao {
params.put("BankTransNo", UUID.randomUUID().toString().replace("-", "")); params.put("BankTransNo", UUID.randomUUID().toString().replace("-", ""));
params.put("PayWay", merchantEnum.HIS_PAY_WAY); params.put("PayWay", merchantEnum.HIS_PAY_WAY);
}, merchantEnum); });
} }
@ -180,8 +177,8 @@ public class HisRecipeDao {
if (ObjectUtils.isNotEmpty(feeId) if (ObjectUtils.isNotEmpty(feeId)
&& ObjectUtils.isNotEmpty(feeInfo)) { // 新版本预缴费 && ObjectUtils.isNotEmpty(feeInfo)) { // 新版本预缴费
log.info("[预结算]回调 feeId={}", feeId); log.info("[HIS预结算]回调 feeId={}", feeId);
return HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice_New, params -> { return HisHelper.getJsonResultByMer(HisEnum.AP_Pay_Invoice_New, merchantEnum, params -> {
params.put("PatientID", patientId); params.put("PatientID", patientId);
params.put("PayDate", payDate); params.put("PayDate", payDate);
params.put("PayTime", payTime); params.put("PayTime", payTime);
@ -191,8 +188,11 @@ public class HisRecipeDao {
// 预结算 // 预结算
params.put("FeeID", feeId); params.put("FeeID", feeId);
params.put("FeeInfo", feeInfo); params.put("FeeInfo", feeInfo);
}, merchantEnum); });
} }
// <TransNo>2025092422001440171439259286C001</TransNo>
// <CallNo>843242395</CallNo>
// <FeeID>47465565</FeeID>
StringBuilder recipeIdsXml = new StringBuilder(); StringBuilder recipeIdsXml = new StringBuilder();
for (String id : recipeIds) { for (String id : recipeIds) {
@ -221,7 +221,7 @@ public class HisRecipeDao {
params.remove("Recipe"); params.remove("Recipe");
params.put("PayMoney", totalFee); //如果是体检支付就传入总金额 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("ReservationTransNo", tradeNo);
params.put("RecallTransNo", "R" + 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<>(); Map<String, Object> params = new HashMap<>();
params.put("TransNo", tradeNo); params.put("TransNo", tradeNo);
params.put("DelTransNo", "R" + 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("OpenId", reg.getOpenid());
params.put("Token", WeChatConfig.TOKEN); 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())) { if (!ObjectUtils.isEmpty(reg.getSubDeptCode())) {
params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code params.put("DeptCode_YZKCode", reg.getSubDeptCode()); // 亚专科code
} }
if (DateHelper.isToday(regDate)) { // 今日挂号 if (DateHelper.isToday(regDate)) { // 今日挂号
return HisHelper.getJsonResult(HisEnum.AP_Regist, params, merchantEnum); return HisHelper.getJsonResultByMer(HisEnum.AP_Regist, merchantEnum, params);
} }
// 预约挂号 // 预约挂号
params.put("ReservationDate", regDate); 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 * @param sourceId 号源id
* @return true false * @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<>(); Map<String, Object> params = new HashMap<>();
params.put("PatientID", patientId); params.put("PatientID", patientId);
params.put("SourceId", sourceId); params.put("SourceId", sourceId);
params.put("TransNo", CodeHelper.get32UUID()); 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; package com.ynxbd.common.dao.his.dev;
import com.ynxbd.common.bean.HisRecipe; 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.HisEnum;
import com.ynxbd.common.helper.his.HisHelper; import com.ynxbd.common.helper.his.HisHelper;
import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResult;
@ -18,10 +19,10 @@ public class DevHisRecipeDao {
public List<HisRecipe> getDevUnPayRecipe(String patientId, int days) { public List<HisRecipe> getDevUnPayRecipe(String patientId, int days) {
List<HisRecipe> resultList = new ArrayList<>(); 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("PatientID", patientId);
params.put("IsLastWeekFlag", days <= 7 ? "1" : ""); params.put("IsLastWeekFlag", days <= 7 ? "1" : "");
params.put("CallNo",HisHelper.CALL_NO); params.put("CallNo",HisHelper.WECHAT_CALL_NO);
}); });
if (!jsonResult.success()) { // 失败 if (!jsonResult.success()) { // 失败

@ -1,13 +1,59 @@
package com.ynxbd.common.helper; 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 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) { public static void main(String[] args) {
String treatNum = "1579733" + "huiyou69"; String token = createOpenIdToken("token", "openid-123");
String key = DigestUtils.md5Hex(treatNum).toUpperCase(); System.out.println(token);
System.out.println(key); String openid = getUserOpenId(token);
String substring = key.substring(3, 12); System.out.println(openid);
System.out.println(substring); }
/**
* 获取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.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.DecodedJWT;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.ServletActionContext; import org.apache.struts2.ServletActionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletRequest; import javax.servlet.ServletRequest;
import java.util.Calendar; import java.util.Calendar;
@ -19,9 +18,8 @@ import java.util.Calendar;
* @Author skotori * @Author skotori
* @Date 2019-11-08 11:50 * @Date 2019-11-08 11:50
*/ */
@Slf4j
public class JwtHelper { public class JwtHelper {
private static final Logger log = LoggerFactory.getLogger(JwtHelper.class);
// token头名 // token头名
public static final String TOKEN_HEADER = "AuthToken"; 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 USER_ID = "user_id";
public static final String USERNAME = "username"; public static final String USERNAME = "username";
/** /**
* 生成token * 生成token
* *

@ -1,101 +1,40 @@
package com.ynxbd.common.helper.common; package com.ynxbd.common.helper.common;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
/** /**
* @author wsq * @author wsq
* @description 雪花算法 * @description 雪花算法
* @date 2019/8/14 下午8:22 * @date 2019/8/14 下午8:22
*/ */
public class SnowHelper { public class SnowHelper {
/** private 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;
} }
lastStamp = curTimeStamp; private static Snowflake snowflake = null;
return (curTimeStamp - START_STAMP) << TIME_STAMP_LEFT //时间戳部分 private synchronized static void createSnowflake() {
| datacenterId << DATACENTER_LEFT //数据中心部分 snowflake = IdUtil.getSnowflake(0, 0);
| machineId << MACHINE_LEFT //机器标识部分
| sequence; //序列号部分
} }
private long getNextMill() { public static Long nextId() {
long mill = getCurTime(); if (snowflake == null) {
while (mill <= lastStamp) { createSnowflake();
mill = getCurTime();
} }
return mill; return snowflake.nextId();
} }
private long getCurTime() { public static String nextStrId() {
return System.currentTimeMillis(); if (snowflake == null) {
createSnowflake();
}
return String.valueOf(snowflake.nextId());
} }
public static void main(String[] args) { public static void main(String[] args) {
SnowHelper snowFlake = new SnowHelper(2, 3); for (int i = 0; i < 10; i++) {
for (int i = 0; i < (1 << 12); i++) { System.out.println(nextId());
System.out.println(snowFlake.nextId());
} }
} }
} }

@ -1,6 +1,7 @@
package com.ynxbd.common.helper.common; package com.ynxbd.common.helper.common;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -158,7 +159,7 @@ public class SoapHelper {
* @param params 数据 * @param params 数据
* @return 组合好的请求xml数据 * @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(); StringBuilder paramsXml = new StringBuilder();
String key; String key;
Object value; Object value;
@ -170,7 +171,7 @@ public class SoapHelper {
paramsXml.append("<").append(key).append(">").append(value).append("</").append(key).append(">"); 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(); 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.ProperHelper;
import com.ynxbd.common.helper.common.CodeHelper; import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.ErrorHelper; 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.helper.common.SoapHelper;
import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum; import com.ynxbd.common.result.JsonResultEnum;
@ -25,10 +26,10 @@ import java.util.Map;
public class HisHelper { 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 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 final String WECHAT_CALL_NO = "843242395";
public static String ALI_CALL_NO = ""; // 支付宝
public static final String ALI_CALL_NO = "675448357";
// private static final String NS = "http://tempuri.org/"; // private static final String NS = "http://tempuri.org/";
// private static String HIS_WSD_URL; // private static String HIS_WSD_URL;
@ -47,6 +48,8 @@ public class HisHelper {
// 是否传递openid给HIS推送消息 // 是否传递openid给HIS推送消息
public static final Boolean IS_PUSH_MSG; public static final Boolean IS_PUSH_MSG;
// 是否开启支付宝蓝旗调用call_no
public static final Boolean IS_ALI_MER;
// 开启预结算(第1开关)(如果HIS未限制-则存在直接入库风险!!!!!!!!!!!!!!!!!!) // 开启预结算(第1开关)(如果HIS未限制-则存在直接入库风险!!!!!!!!!!!!!!!!!!)
public static final boolean IS_RECIPE_PREPAY; public static final boolean IS_RECIPE_PREPAY;
@ -62,16 +65,11 @@ public class HisHelper {
String devMIUrl = config.getString("his.dev_mi_url"); String devMIUrl = config.getString("his.dev_mi_url");
String prodMIUrl = config.getString("his.prod_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_LOG_RESP = config.getBoolean("his.is_log_resp", false);
IS_PUSH_MSG = config.getBoolean("his.is_push_msg", 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); IS_RECIPE_PREPAY = config.getBoolean("his.is_recipe_prepay", false);
if (!ObjectUtils.isEmpty(aliCallNo)) {
ALI_CALL_NO = aliCallNo;
}
if (url == null) { if (url == null) {
log.error("WebService配置文件读取失败"); log.error("WebService配置文件读取失败");
} }
@ -110,26 +108,14 @@ public class HisHelper {
return prefix + pEnum.ORDER_CODE.toUpperCase() + "001"; return prefix + pEnum.ORDER_CODE.toUpperCase() + "001";
} }
// /**
// * 根据订单号获取类型 // // 修改callNo为阿里code
// * // public static void putCallNoByMer(MerchantEnum merchantEnum, Map<String, Object> params) {
// * @param bankTransNo 交易流水号 // if (merchantEnum == null) return;
// * @param tradeNo HIS订单号 //
// * @return 类型 // if (merchantEnum.equals(MerchantEnum.ALI) || merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) {
// */ // params.put("CallNo", ALI_CALL_NO);
// 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;
// } // }
@ -144,30 +130,6 @@ public class HisHelper {
return getResponseXml(hisEnum, HIS_SOAP_URL, params); 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请求工具类枚举版 * webService请求工具类枚举版
* *
@ -176,12 +138,9 @@ public class HisHelper {
* @return 响应的xml数据 * @return 响应的xml数据
*/ */
public static String getResponseXml(HisEnum hisEnum, String soapUrl, Map<String, Object> params) { 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请求工具类枚举版 * webService请求工具类枚举版
@ -189,64 +148,61 @@ public class HisHelper {
* @param hisEnum 枚举 * @param hisEnum 枚举
* @param soapUrl 路径 * @param soapUrl 路径
* @param params 参数 * @param params 参数
* @param merchantEnum 来源
* @return 响应xml * @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 method = hisEnum.METHOD;
String transactionCode = hisEnum.CODE; String transactionCode = hisEnum.CODE;
if (params == null || transactionCode == null || method == null) { if (params == null || transactionCode == null || method == null) {
log.info("WebService-{ map | transactionCode | method 为空 }"); log.info("[WebService]-{ map | transactionCode | method 为空 }");
return null; return null;
} }
Object callNo = params.get("CallNo"); Object callNo = params.get("CallNo");
if (params.get("CallNo") == null || "".equals(callNo)) { if (ObjectUtils.isEmpty(callNo)) {
params.put("CallNo", CALL_NO); params.put("CallNo", WECHAT_CALL_NO);
}
if ("ali".equals(merchantEnum.CODE) && !"".equals(ALI_CALL_NO)) {
params.put("CallNo", ALI_CALL_NO);
} }
params.put("TransactionCode", transactionCode); params.put("TransactionCode", transactionCode);
String result = null; String result = null;
try { try {
String reqId = SnowHelper.nextStrId();
long begTime = System.currentTimeMillis(); // 开始时间 long begTime = System.currentTimeMillis(); // 开始时间
String hisResponse = SoapHelper.post("HIS", soapUrl, null, SOAP_ENV + String hisResponse = SoapHelper.post("HIS", soapUrl, null, SOAP_ENV +
"xmlns:urn=\"urn:Interface_ABIntf-IInterface_AB\">" + "xmlns:urn=\"urn:Interface_ABIntf-IInterface_AB\">" +
"<soapenv:Header/><soapenv:Body>" + "<soapenv:Header/><soapenv:Body>" +
"<urn:" + method + " soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" + "<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>" "</urn:" + method + "></soapenv:Body></soapenv:Envelope>"
); );
long endTime = System.currentTimeMillis(); // 结束时间 long endTime = System.currentTimeMillis(); // 结束时间
String takeTime = (endTime - begTime) + "ms"; // 耗时 String takeTime = (endTime - begTime) + "ms"; // 耗时
if (hisResponse == null) { if (hisResponse == null) {
log.info("HIS请求无响应[{}]-耗时:[{}]", transactionCode, takeTime); log.info("[{}]HIS请求无响应[rid:{}]-耗时:[{}]", transactionCode, reqId, takeTime);
return null; return null;
} }
//解析响应消息,使用SAXReader对象 //解析响应消息,使用SAXReader对象
org.dom4j.Document document = DocumentHelper.parseText(hisResponse); org.dom4j.Document document = DocumentHelper.parseText(hisResponse);
if (document == null) { if (document == null) {
log.info("HIS响应内容解析失败[{}]-耗时:[{}]-返回xml={}", transactionCode, takeTime, hisResponse); log.info("[{}]HIS响应内容解析失败[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, hisResponse);
return null; return null;
} }
List<Node> nodes = document.selectNodes("//return"); List<Node> nodes = document.selectNodes("//return");
if (nodes.isEmpty()) { if (nodes.isEmpty()) {
log.info("HIS请求失败[{}]-耗时:[{}]-返回xml={}", transactionCode, takeTime, hisResponse); log.info("[{}]HIS请求失败[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, hisResponse);
return null; return null;
} }
Element element = (Element) nodes.get(0); Element element = (Element) nodes.get(0);
result = element.getText(); result = element.getText();
if (hisEnum.IS_LOG_RESP) { // 是否打印返回的xml if (hisEnum.IS_LOG_RESP) { // 是否打印返回的xml
log.info("HIS请求成功[{}]-耗时:[{}]-返回xml={}", transactionCode, takeTime, result); log.info("[{}]HIS请求成功[rid:{}]-耗时:[{}]-返回xml={}", transactionCode, reqId, takeTime, result);
} else { } else {
if (IS_LOG_RESP) { // 配置文件强制要求打印xml if (IS_LOG_RESP) { // 配置文件强制要求打印xml
if (!HisEnum.AP_Query_Statement.equals(hisEnum) && !HisEnum.Query_Area.equals(hisEnum)) { 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数据 * xml响应数据组装成为JSON数据
* *
@ -310,20 +229,12 @@ public class HisHelper {
return result; return result;
} }
/** public static void putAliCallNo(MerchantEnum merchantEnum, Map<String, Object> params) {
* [支付宝] xml响应数据组装成为JSON数据 if (IS_ALI_MER && params != null && merchantEnum != null) {
* if (merchantEnum.equals(MerchantEnum.ALI) || merchantEnum.equals(MerchantEnum.ALI_MEDICAL)) {
* @param hisEnum 接口枚举 params.put("CallNo", ALI_CALL_NO);
* @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;
} }
/** /**
@ -331,55 +242,39 @@ public class HisHelper {
* *
* @return 封装好的对象 * @return 封装好的对象
*/ */
public static JsonResult getJsonResult(HisEnum hisEnum, JsonResult.MapParams params) { public static JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, Map<String, Object> params) {
Map<String, Object> requestParams = new HashMap<>(); putAliCallNo(merchantEnum, params);
if (params != null) { return getJsonResult(hisEnum, params);
params.setParams(requestParams);
}
return getJsonResult(hisEnum, requestParams);
} }
// <TransactionCode>4004</TransactionCode>
// <CallNo>675448357</CallNo>
// <CallNo>843242395</CallNo>
/** /**
* xml响应数据组装成为JSON数据 * xml响应数据组装成为JSON数据
* *
* @return 封装好的对象 * @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<>(); Map<String, Object> requestParams = new HashMap<>();
if (params != null) { if (params != null) {
params.setParams(requestParams); params.setParams(requestParams);
} }
return getJsonResult(hisEnum, requestParams, merchantEnum); return getJsonResult(hisEnum, requestParams);
} }
// ---------------------------------------------------------------------------
// 测试环境
/** /**
* xml响应数据组装成为JSON数据 * xml响应数据组装成为JSON数据
* *
* @return 封装好的对象 * @return 封装好的对象
*/ */
public static JsonResult getDevJsonResult(HisEnum hisEnum, Map<String, Object> params) { public static JsonResult getJsonResultByMer(HisEnum hisEnum, MerchantEnum merchantEnum, JsonResult.MapParams 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) {
Map<String, Object> requestParams = new HashMap<>(); Map<String, Object> requestParams = new HashMap<>();
if (params != null) { if (params != null) {
params.setParams(requestParams); params.setParams(requestParams);
} }
return getDevJsonResult(hisEnum, requestParams); return getJsonResultByMer(hisEnum, merchantEnum, requestParams);
} }
@ -419,4 +314,93 @@ public class HisHelper {
return sb.toString(); 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; package com.ynxbd.common.helper.his;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum; import com.ynxbd.common.result.JsonResultEnum;
@ -18,7 +19,7 @@ public class HisMIHelper {
* @param params 发送的参数 * @param params 发送的参数
* @return 响应的xml数据 * @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); return HisHelper.getResponseXml(hisEnum, isDev ? HisHelper.HIS_DEV_MI_URL : HisHelper.HIS_PROD_MI_URL, params);
} }
@ -27,7 +28,9 @@ public class HisMIHelper {
* *
* @return 封装好的对象 * @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); JsonResult result = JsonResult.xmlToBean(getResponseXml(isDev, hisEnum, params), JsonResultEnum.SYS_HIS);
if (result == null) { // 如果返回为空可能为超时 if (result == null) { // 如果返回为空可能为超时
return HisHelper.createTimeoutResult(); return HisHelper.createTimeoutResult();
@ -40,11 +43,31 @@ public class HisMIHelper {
* *
* @return 封装好的对象 * @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<>(); Map<String, Object> requestParams = new HashMap<>();
if (params != null) { if (params != null) {
params.setParams(requestParams); 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.ProperHelper;
import com.ynxbd.common.helper.common.ErrorHelper; import com.ynxbd.common.helper.common.ErrorHelper;
import com.ynxbd.common.helper.common.FileHelper; 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.helper.common.SoapHelper;
import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum; import com.ynxbd.common.result.JsonResultEnum;
@ -26,15 +27,15 @@ public class RMLisHelper {
static { static {
ProperHelper config = new ProperHelper().read("webservice.properties"); ProperHelper config = new ProperHelper().read("webservice.properties");
String url = config.getString("lis.url"); String url = config.getString("lis.url");
Boolean unifiedEntrance = config.getBoolean("lis.unifiedEntrance",false); Boolean unifiedEntrance = config.getBoolean("lis.unifiedEntrance", false);
IS_LOG_RESP = config.getBoolean("lis.is_log_resp",false); IS_LOG_RESP = config.getBoolean("lis.is_log_resp", false);
if (url == null) { if (url == null) {
LIS_SOAP_URL = null; LIS_SOAP_URL = null;
log.error("Lis配置文件读取失败"); log.error("Lis配置文件读取失败");
} else if(unifiedEntrance==false){ } else if (!unifiedEntrance) {
LIS_SOAP_URL = "http://" + url + "/LisReportServics.asmx?wsdl"; LIS_SOAP_URL = "http://" + url + "/LisReportServics.asmx?wsdl";
}else { } else {
LIS_SOAP_URL = "http://" + url + "/LisReportServics.asmx?UnifiedEntrance"; LIS_SOAP_URL = "http://" + url + "/LisReportServics.asmx?UnifiedEntrance";
} }
} }
@ -54,6 +55,7 @@ public class RMLisHelper {
String result; String result;
try { try {
String reqId = SnowHelper.nextStrId();
long begTime = System.currentTimeMillis(); // 开始时间 long begTime = System.currentTimeMillis(); // 开始时间
String responseXml = SoapHelper.post("RMLis", LIS_SOAP_URL, null, 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\">" + "<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>" + "<soapenv:Body><ruim:UnifiedEntrance>" +
"<ruim:methodName>" + method + "</ruim:methodName>" + "<ruim:methodName>" + method + "</ruim:methodName>" +
"<ruim:parameterType>1</ruim:parameterType>" + "<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>" "</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; Test_ImportImage("Test_ImportImage","图片测试");
public final String Description;
XBDEnum(String Name, String Description) { public final String NAME;
this.Name = Name; public final String DESCRIPTION;
this.Description = 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<>(); Map<String, Object> map = new HashMap<>();
Set<String> keys = respObj.keySet(); Set<String> keys = respObj.keySet();
for (String key : keys) { for (String key : keys) {
if (ignoreParams != null && ignoreParams.length > 0) { if (ignoreParams != null) {
for (String ignoreParam : ignoreParams) { for (String ignoreParam : ignoreParams) {
if (key.equals(ignoreParam)) { if (key.equals(ignoreParam)) {
break; break;
@ -154,7 +154,6 @@ public class JsonResult {
} }
map.put(key, respObj.getString(key)); map.put(key, respObj.getString(key));
} }
result.setDataMap(map);
result.dataMap = map; result.dataMap = map;
result.successCode = jsonResultEnum.getSUCCESS_CODE(); result.successCode = jsonResultEnum.getSUCCESS_CODE();
if (jsonResultEnum.getTIMEOUT_CODE() == null) { if (jsonResultEnum.getTIMEOUT_CODE() == null) {

@ -115,7 +115,7 @@ public class CasebookService {
log.info("[病历] 开始回调支付状态 borrowNo-{}", casebookId); log.info("[病历] 开始回调支付状态 borrowNo-{}", casebookId);
try { 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("borrowNo", casebookId);
params.put("payDateTime", DateHelper.getCurDateTime()); params.put("payDateTime", DateHelper.getCurDateTime());
}); });

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

@ -1,6 +1,7 @@
package com.ynxbd.common.service; package com.ynxbd.common.service;
import com.ynxbd.common.bean.enums.HospEnum; 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.helper.common.SoapHelper;
import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.JsonResultEnum; import com.ynxbd.common.result.JsonResultEnum;
@ -18,7 +19,8 @@ public class MiddleOfficeService {
try { try {
if (HospEnum.红河州人民医院.isHosp()) { if (HospEnum.红河州人民医院.isHosp()) {
if (MiddleOfficeConfig.MIDDLE_OFFICE_URL != null) { //平台数据上传 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) { if ("7004".equals(transactionCode) && JsonResult.xmlToBean(result, JsonResultEnum.SYS_HIS) != null) {
MiddleOfficeConfig.uploadTreatNum("JH0104", Objects.requireNonNull(JsonResult.xmlToBean(result, JsonResultEnum.SYS_HIS)).getDataMapString("MZNum")); 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(); Order oResult = new Order();
PayOutCollect addInfo = CopyHelper.fatherToChild(order, PayOutCollect.class); PayOutCollect addInfo = CopyHelper.fatherToChild(order, PayOutCollect.class);
addInfo.setBarCode(brCode); 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); 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)) { if (ObjectUtils.isEmpty(collectId) || ObjectUtils.isEmpty(mid) || ObjectUtils.isEmpty(name) || ObjectUtils.isEmpty(cardNo)) {
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT); throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
@ -76,7 +76,7 @@ public class OutCollectService {
map.put("payAmount", totalFee); map.put("payAmount", totalFee);
map.put("bankTransNo", bankTransNo); map.put("bankTransNo", bankTransNo);
}); });
log. info("[外采]回调 resp={}", resp); log.info("[外采]回调 resp={}", resp);
if (resp == null) { if (resp == null) {
throw new ServiceException("[外采]回调请求失败"); 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(); OutCollectPayDao ocPayDao = new OutCollectPayDao();
PayOutCollect ocPay = ocPayDao.selectByOutTradeNo(outTradeNo); PayOutCollect ocPay = ocPayDao.selectByOutTradeNo(outTradeNo);

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

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

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

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

@ -1,42 +1,11 @@
ali.is_log=true
ali.is_enable=true ali.is_enable=true
# \u6D88\u606F\u63A8\u9001 # 消息推送
ali.is_push_msg=true ali.is_push_msg=false
# \u7CFB\u7EDF\u5546\u7B7E\u7EA6\u534F\u8BAE\u7684PID-\u516C\u53F8isv_pid\uFF08\u552F\u4E00\uFF09 # 公司ISV_PID(唯一)
ali.isv_partner_id=2088041605229629 ali.isv_partner_id=2088041605229629
#----------------------------------------- #----------------------------------
# appid\uFF08\u548C\u5546\u6237\u76F8\u5173-\u94B1\u5230\u7684\u5730\u65B9\uFF09 ali.app_id=2021002128669589
ali.app_id=2021003163655042
# \u533B\u9662\u8D26\u53F7id = \u5546\u6237pid
ali.hosp_id=2088541276656015
# \u5E94\u7528\u516C\u94A5->\u652F\u4ED8\u5B9D\u516C\u94A5 # \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 # \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 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==
#------------------------------------------
# \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

@ -2,7 +2,6 @@
mi_ali.is_dev=true mi_ali.is_dev=true
mi_ali.is_enable=true mi_ali.is_enable=true
mi_ali.is_auto_refund=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 # \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 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 xbd.200.cloud_film_url=http://200.200.200.70:3306/wx3306
# \u75C5\u5386\u590D\u5370 # \u75C5\u5386\u590D\u5370
#xbd.200.med_record_copy_url=http://10.20.10.41:8082 #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 # \u4F53\u68C0
xbd.100.peis_url=http://200.200.200.71:5050/peisReserve xbd.100.peis_url=http://200.200.200.71:5050/peisReserve
Loading…
Cancel
Save