1、新增:第三方扫码挂号的支付入口接口。

2、新增:新增扫码接口,对二维码的数据加密后重定向到前端,进行支付。
3、新增:新增微信回调处理接口,处理收到的扫码挂号的订单数据。
4、对接:对接和HIS的支付接口。
5、合并:合并支付回调的新旧版的处理逻辑。
6、维护:排查红河州医院体检系统发送短信未收到的问题,调整接口的打印日志和使用医院的名称记录。
debug
wangsq 1 month ago
parent a3d7ead435
commit b317ab7167
  1. 6
      src/main/java/com/ynxbd/common/action/PushAction.java
  2. 34
      src/main/java/com/ynxbd/common/action/RegisterAction.java
  3. 4
      src/main/java/com/ynxbd/common/action/SmsAction.java
  4. 2
      src/main/java/com/ynxbd/common/action/WechatMiniAction.java
  5. 17
      src/main/java/com/ynxbd/common/action/XBDAction.java
  6. 4
      src/main/java/com/ynxbd/common/action/pay/MedicalAction.java
  7. 47
      src/main/java/com/ynxbd/common/action/pay/NotifyAction.java
  8. 1
      src/main/java/com/ynxbd/common/action/pay/PEnum.java
  9. 7
      src/main/java/com/ynxbd/common/action/pay/PayAction.java
  10. 101
      src/main/java/com/ynxbd/common/action/pay/ThirdPartyPayAction.java
  11. 52
      src/main/java/com/ynxbd/common/action/pay/WxPayAction.java
  12. 2
      src/main/java/com/ynxbd/common/bean/SelfHelpCount.java
  13. 3
      src/main/java/com/ynxbd/common/dao/ReportDao.java
  14. 2
      src/main/java/com/ynxbd/common/dao/SelfHelpDao.java
  15. 20
      src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java
  16. 35
      src/main/java/com/ynxbd/common/helper/common/SmsHelper.java
  17. 4
      src/main/java/com/ynxbd/common/helper/his/HisEnum.java
  18. 16
      src/main/java/com/ynxbd/common/helper/xbd/XBDHelper.java
  19. 7
      src/main/java/com/ynxbd/common/helper/xbd/XBDHttpHelper.java
  20. 4
      src/main/java/com/ynxbd/common/service/MedicalService.java
  21. 3
      src/main/java/com/ynxbd/common/service/MicroService.java
  22. 64
      src/main/java/com/ynxbd/common/service/PayService.java
  23. 4
      src/main/java/com/ynxbd/common/service/RecipeService.java
  24. 3
      src/main/java/com/ynxbd/common/service/RegService.java
  25. 110
      src/main/java/com/ynxbd/common/service/ThirdPartyPayService.java
  26. 2
      src/main/java/com/ynxbd/common/service/params/RegParams.java
  27. 7
      src/main/java/com/ynxbd/common/test/PatientTest.java
  28. 12
      src/main/java/com/ynxbd/common/test/Test01.java
  29. 181
      src/main/java/com/ynxbd/wx/config/MeTechnologyReConfig.java
  30. 15
      src/main/java/com/ynxbd/wx/config/WeChatConfig.java
  31. 4
      src/main/java/com/ynxbd/wx/servlet/QServlet.java
  32. 25
      src/main/java/com/ynxbd/wx/utils/DesEncryptHelper.java
  33. 4
      src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java
  34. 8
      src/main/resources/wx.properties
  35. 6
      src/main/resources/xbd.properties

@ -25,11 +25,11 @@ public class PushAction extends BaseAction {
@Action("getRedis") @Action("getRedis")
public Result getRedis(String name) { public Result getRedis(String name) {
RequestBody requestBody = new FormBody.Builder() RequestBody requestBody = new FormBody.Builder()
.add("name",name) .add("name", name)
.build(); .build();
String url = "http://127.0.0.1:8123/MessagePlatform/api/getRedis"; String url = "http://127.0.0.1:8123/MessagePlatform/api/getRedis";
String requestResult = OkHttpHelper.post(url,requestBody); String requestResult = OkHttpHelper.post(url, requestBody);
log.info("[获取推送缓存]requestResult-{},url-{}",requestResult,url); log.info("[获取推送缓存]requestResult-{},url-{}", requestResult, url);
return Result.success(JsonHelper.parseObject(requestResult)); return Result.success(JsonHelper.parseObject(requestResult));
} }
} }

@ -19,10 +19,7 @@ import org.apache.commons.lang3.ObjectUtils;
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.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -358,18 +355,29 @@ public class RegisterAction extends BaseAction {
*/ */
@Action("getReLineSignInRecord") @Action("getReLineSignInRecord")
public Result getReLineSignInRecord(String patientId, String begDate, String endDate) { public Result getReLineSignInRecord(String patientId, String begDate, String endDate) {
log.info("[查询预约待签到记录(包含今日挂号)]patientId-{} begDate={}, endDate={}", patientId, begDate, endDate); log.info("[查询预约待签到记录(包含今日挂号)] patientId-{} begDate={}, endDate={}", patientId, begDate, endDate);
if (patientId == null || begDate == null || endDate == null) { if (patientId == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
if (getDecodeString(patientId) == null) { String decodePatientId = getDecodeString(patientId);
return Result.error(ResultEnum.PARAM_IS_DEFECT); if (decodePatientId == null) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
if (begDate == null || endDate == null) {
begDate = DateHelper.getCurDate() + " 06:00:00";
endDate = DateHelper.getCurDate() + " 23:59:59";
} }
JSONArray reLineSignInRecord = new HisRegisterDao().getReLineSignInRecord(begDate, endDate); JSONArray dataList = new HisRegisterDao().getReLineSignInRecord(begDate, endDate);
if (reLineSignInRecord == null) { Map<String, Object> dataMap = new HashMap<>();
return Result.success(); dataMap.put("date", DateHelper.getCurDateTime());
if (dataList == null || dataList.isEmpty()) {
dataMap.put("list", new ArrayList<>());
return Result.success(dataMap);
} }
return Result.success(reLineSignInRecord.stream().filter(iter -> Objects.equals(((JSONObject) iter).getString("PatientId"), getDecodeString(patientId))).collect(Collectors.toList())); List<Object> findDataList = dataList.stream().filter(iter -> Objects.equals(((JSONObject) iter).getString("PatientId"), decodePatientId)).collect(Collectors.toList());
dataMap.put("list", findDataList);
return Result.success(dataMap);
} }
/** /**
@ -381,7 +389,7 @@ public class RegisterAction extends BaseAction {
@Action("handleLineSignIn") @Action("handleLineSignIn")
public Result handleLineSignIn(String treatNum) { public Result handleLineSignIn(String treatNum) {
log.info("[执行预约签到(只进行分诊叫号)] treatNum={}", treatNum); log.info("[执行预约签到(只进行分诊叫号)] treatNum={}", treatNum);
if (treatNum == null || treatNum.isEmpty()) { if (treatNum == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT); return Result.error(ResultEnum.PARAM_IS_DEFECT);
} }
return Result.success(new HisRegisterDao().handleLineSignIn(treatNum)); return Result.success(new HisRegisterDao().handleLineSignIn(treatNum));

@ -196,14 +196,14 @@ public class SmsAction extends BaseAction {
} }
/** /**
* 天助平台短信推送 * 天助平台短信推送红河州第一人民医院影像报告使用
* @param tel 电话号码 * @param tel 电话号码
* @param content 内容 * @param content 内容
* @return 返回发送结果 * @return 返回发送结果
*/ */
@Action("danMiSms") @Action("danMiSms")
public Result DanMiSms(String tel, String content) { public Result DanMiSms(String tel, String content) {
log.info("[天助平台短信]url-{},content={}", tel, content); log.info("[天助平台短信]url-{}, content={}", tel, content);
if (tel == null || content == null) { if (tel == null || content == null) {
return Result.error(ResultEnum.PARAM_IS_INVALID); return Result.error(ResultEnum.PARAM_IS_INVALID);
} }

@ -31,7 +31,7 @@ public class WechatMiniAction extends BaseAction {
*/ */
@Action("miniPayMicro") @Action("miniPayMicro")
public Result microPay(String authCode, String title, String operateUser, BigDecimal totalFee, String barCode, String patientId, String cardNo, String mid) { public Result microPay(String authCode, String title, String operateUser, BigDecimal totalFee, String barCode, String patientId, String cardNo, String mid) {
Result result = PayService.isNoPay(); Result result = PayService.isPaymentPermittedByTime();
if (result != null) { if (result != null) {
return result; return result;
} }

@ -11,6 +11,7 @@ import com.ynxbd.common.helper.xbd.XBDHelper;
import com.ynxbd.common.helper.xbd.XBDHttpHelper; import com.ynxbd.common.helper.xbd.XBDHttpHelper;
import com.ynxbd.common.result.Result; import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.CasebookService; import com.ynxbd.common.service.CasebookService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Action;
@ -27,6 +28,13 @@ import org.apache.struts2.convention.annotation.Namespace;
@Namespace("/xbd") @Namespace("/xbd")
public class XBDAction extends BaseAction { public class XBDAction extends BaseAction {
@Action("test03")
public Result test03() throws ServiceException {
System.out.println("测试");
return Result.success();
}
/** /**
* 获取智能云胶片的地址 * 获取智能云胶片的地址
* *
@ -35,7 +43,14 @@ public class XBDAction extends BaseAction {
*/ */
@Action("cloudFilm") @Action("cloudFilm")
public Result cloudFilm(String info) { public Result cloudFilm(String info) {
return Result.success(XBDHelper.outTeamDao.getCloudFilmPath(info)); try {
log.info("[云胶片]info={}", info);
String path = XBDHelper.outTeamDao.getCloudFilmPath(info);
return Result.success(path);
} catch (Exception e) {
log.error("[云胶片]{}", e.getMessage());
return Result.error("请求异常");
}
} }
/** /**

@ -111,10 +111,10 @@ public class MedicalAction extends BaseAction {
@Action("medicalAuth") @Action("medicalAuth")
public Result medicalAuth(String openid,String qrCode) { public Result medicalAuth(String openid, String qrCode) {
log.info("[医保建档] openid-{},qrCode={}", openid, qrCode); log.info("[医保建档] openid-{},qrCode={}", openid, qrCode);
MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(MdConfig.PARTNER_URL, openid, qrCode); MedicalUserInfo info = WxFactory.Medical.Common().getUserInfo(MdConfig.PARTNER_URL, openid, qrCode);
log.info("[医保建档获取用户信息] resp-{}",info); log.info("[医保建档获取用户信息] resp-{}", info);
return Result.success(info); return Result.success(info);
} }

@ -13,7 +13,6 @@ import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.Namespace;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
/** /**
@ -33,51 +32,7 @@ public class NotifyAction extends BaseAction {
WxPayNotify notifyInfo = WxPayHelper.payNotify(request); WxPayNotify notifyInfo = WxPayHelper.payNotify(request);
Result.respXml(WxRespHelper.respOk()); // 收到请求-解析成功 Result.respXml(WxRespHelper.respOk()); // 收到请求-解析成功
String openid = notifyInfo.getOpenid(); PayService.WxNotify(notifyInfo);
String bankTransNo = notifyInfo.getTransactionId();
String outTradeNo = notifyInfo.getOutTradeNo();
String payInfo = notifyInfo.getPayInfo();
BigDecimal totalFee = notifyInfo.getTotalFee();
String payDate = notifyInfo.getPayDate();
String payTime = notifyInfo.getPayTime();
String notifyType = notifyInfo.getAttach();
log.info("【微信】[{}]-收到通知 outTradeNo={}, bankTransNo={}", notifyType, outTradeNo, bankTransNo);
switch (PEnum.toEnum(notifyType)) {
case RECIPE:
new RecipeService().recipeListPay(MerchantEnum.WX, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
break;
case REG: // 挂号
try {
new RegService().regPaidNotify(MerchantEnum.WX, totalFee, openid, bankTransNo, outTradeNo, null, payDate, payTime, payInfo, new Date());
} catch (ServiceException e) {
log.info("【微信】[挂号]通知异常 outTradeNo={}, bankTransNo={}, message={}", outTradeNo, bankTransNo, e.getMessage());
}
break;
case IN_HOSP:
boolean isInsert = new InHospService().inHospNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
log.info("【微信】[住院预交金] 预存{}", (isInsert ? "成功" : "失败"));
break;
case CASEBOOK:
new CasebookService().payNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
break;
case OUT_COLLECT:
new OutCollectService().ocPayNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
break;
case OL_REG:
new MicroService().InternetHospNotice(outTradeNo,bankTransNo,openid,totalFee,payDate,payTime);
break;
default:
log.info("【微信】通知类型错误,结束请求");
break;
}
} catch (ServiceException e) { } catch (ServiceException e) {
Result.respXml(WxRespHelper.resp(e)); // 收到请求-解析失败 Result.respXml(WxRespHelper.resp(e)); // 收到请求-解析失败
} }

@ -24,6 +24,7 @@ public enum PEnum {
OL_REG("问诊挂号", "ol_register", "OG"), OL_REG("问诊挂号", "ol_register", "OG"),
TPP_QR_REG("第三方-扫码挂号", "tpp_qr_reg", "G"),
; ;
public final String NAME; public final String NAME;

@ -1,7 +1,6 @@
package com.ynxbd.common.action.pay; package com.ynxbd.common.action.pay;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.bocom.api.response.foreignccy.QueryReservationRegistResponseV1;
import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.ConfigSelfHelp; import com.ynxbd.common.bean.ConfigSelfHelp;
import com.ynxbd.common.bean.RecipeHelp; import com.ynxbd.common.bean.RecipeHelp;
@ -206,7 +205,7 @@ public class PayAction extends BaseAction {
*/ */
@Action("inHospPrepay") @Action("inHospPrepay")
public Result inHospPrepay(String openid, String patientId, String patientName, String treatNum, String payMoney, String payWay, String payCode) { public Result inHospPrepay(String openid, String patientId, String patientName, String treatNum, String payMoney, String payWay, String payCode) {
Result result = PayService.isNoPay(); Result result = PayService.isPaymentPermittedByTime();
if (result != null) { if (result != null) {
return result; return result;
} }
@ -267,7 +266,7 @@ public class PayAction extends BaseAction {
*/ */
@Action("payMicro") @Action("payMicro")
public Result payMicro(String authCode, String callNo, String treatNum, String patientId, String title, String operateUser, BigDecimal totalFee, String invoiceTransNo, String regDate) { public Result payMicro(String authCode, String callNo, String treatNum, String patientId, String title, String operateUser, BigDecimal totalFee, String invoiceTransNo, String regDate) {
Result result = PayService.isNoPay(); Result result = PayService.isPaymentPermittedByTime();
if (result != null) { if (result != null) {
return result; return result;
} }
@ -362,7 +361,7 @@ public class PayAction extends BaseAction {
/** /**
* [His退费] * 扫码盒子[His退费]
* *
* @param callNo 调用码 { recipe处方register挂号in_hosp住院预交金 } * @param callNo 调用码 { recipe处方register挂号in_hosp住院预交金 }
* @param patientId 患者ID * @param patientId 患者ID

@ -0,0 +1,101 @@
package com.ynxbd.common.action.pay;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Register;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.common.URLHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.service.PayService;
import com.ynxbd.common.service.RegService;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.ReqParamHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import java.math.BigDecimal;
@Slf4j
@Namespace("/tpp")
public class ThirdPartyPayAction extends BaseAction {
@Action("qr_reg")
public Result qr_reg(String callNo, String sourceId, String patientId, BigDecimal money, String date) {
log.info("[第三方][扫码挂号] callNo={}, sourceId={}, patientId={}, money={}, date={}", callNo, sourceId, patientId, money, date);
// http://127.0.0.1:8080/wx/tpp/qr_reg?sourceId=1&patientId=2&money=0.01&date=2025-04-15
if (ObjectUtils.isEmpty(sourceId) || ObjectUtils.isEmpty(patientId) || ObjectUtils.isEmpty(date) || money == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
String params = URLHelper.mapToUrl(map -> {
map.put("partnerId", patientId);
map.put("enPatientId", ReqParamHelper.encode(patientId));
map.put("sourceId", sourceId);
map.put("enSourceId", ReqParamHelper.encode(sourceId));
map.put("date", date);
map.put("enDate", ReqParamHelper.encode(date));
}, true);
return Result.redirect(WeChatConfig.getWebUrl() + "tpp-qr-reg.html" + params);
}
@Action("qr_reg_pay")
public Result qr_reg_pay(String payCode, String openid, String sourceId, String patientId, BigDecimal money, String date) {
log.info("[第三方][扫码挂号-支付] sourceId={}, patientId={}, money={}, date={}", sourceId, patientId, money, date);
if (ObjectUtils.isEmpty(openid)) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
if (ObjectUtils.isEmpty(sourceId) || ObjectUtils.isEmpty(patientId) || ObjectUtils.isEmpty(date) || money == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByCode(payCode);
if (merchantEnum == null) {
return Result.error(ResultEnum.PAY_TYPE_ERROR); // 支付方式异常
}
if (money.compareTo(BigDecimal.ZERO) == 0) {
return Result.error(ResultEnum.PAY_MONEY_IS_ZERO);
}
Register reg = new Register();
reg.setOpenid(openid);
reg.setRegDate(date);
// 挂号类型:1:预约挂号,2:今日挂号;3:分时段预约挂号,4:分时段今日挂号
reg.setRegType(DateHelper.isToday(date) ? "2" : "1");
reg.setSourceId(sourceId);
reg.setPatientId(patientId);
reg.setTotalFee(money);
reg.setPayMoney(money);
reg.setRegFee(money);
reg.setClinicFee(BigDecimal.ZERO);
reg.setPayDeviceId("mobile");
reg.setPayWay(merchantEnum.PAY_WAY_IN);
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
reg.setOutTradeNo(outTradeNo);
log.info("{} [第三方-扫码挂号]生成 outTradeNo={}", merchantEnum.NAME, outTradeNo);
if (!new RegService().isSaveRegPrepay(reg)) {
log.info("{} [第三方-扫码挂号]预存支付信息失败 patientId={}, sourceId={}", merchantEnum.NAME, patientId, sourceId);
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
}
String ip = request.getRemoteAddr();
String body = "扫码挂号" + date + " 患者:" + patientId;
JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, money.toString(), outTradeNo, PEnum.TPP_QR_REG.CODE, ip, body);
if (respJson == null) {
return Result.error(ResultEnum.PAY_ERROR); // 支付异常
}
respJson.put("outTradeNo", outTradeNo);
respJson.put("dateTime", DateHelper.getCurDateTime());
return Result.success(respJson);
}
}

@ -30,57 +30,7 @@ public class WxPayAction extends BaseAction {
WxPayNotify notifyInfo = WxPayHelper.payNotify(request); WxPayNotify notifyInfo = WxPayHelper.payNotify(request);
Result.respXml(WxRespHelper.respOk()); // 收到请求-解析成功 Result.respXml(WxRespHelper.respOk()); // 收到请求-解析成功
String openid = notifyInfo.getOpenid(); PayService.WxNotify(notifyInfo);
String bankTransNo = notifyInfo.getTransactionId();
String outTradeNo = notifyInfo.getOutTradeNo();
String payInfo = notifyInfo.getPayInfo();
BigDecimal totalFee = notifyInfo.getTotalFee();
String payDate = notifyInfo.getPayDate();
String payTime = notifyInfo.getPayTime();
String notifyType = notifyInfo.getAttach();
log.info("【微信】[{}]收到通知 outTradeNo={}, bankTransNo={}", notifyType, outTradeNo, bankTransNo);
switch (PEnum.toEnum(notifyType)) {
case RECIPE:
new RecipeService().recipeListPay(MerchantEnum.WX, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
break;
case REG: // 挂号
try {
new RegService().regPaidNotify(MerchantEnum.WX, totalFee, openid, bankTransNo, outTradeNo, null, payDate, payTime, payInfo, new Date());
} catch (ServiceException e) {
log.info("【微信】[挂号]通知异常 outTradeNo={}, bankTransNo={}, message={}", outTradeNo, bankTransNo, e.getMessage());
}
break;
case IN_HOSP:
boolean isInsert = new InHospService().inHospNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
log.info("【微信】[住院预交金] 预存{}", (isInsert ? "成功" : "失败"));
break;
case CASEBOOK:
new CasebookService().payNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
break;
case OUT_COLLECT:
new OutCollectService().ocPayNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
break;
case OL_REG:
new MicroService().InternetHospNotice(outTradeNo, bankTransNo, openid, totalFee, payDate, payTime);
break;
case PEIS_RESERVE:
new PeisService().payNotify(MerchantEnum.WX,openid,totalFee,outTradeNo,bankTransNo,payInfo,new Date());
break;
default:
log.info("【微信】通知类型错误,结束请求");
break;
}
} catch (ServiceException e) { } catch (ServiceException e) {
Result.respXml(WxRespHelper.resp(e)); // 收到请求-解析失败 Result.respXml(WxRespHelper.resp(e)); // 收到请求-解析失败
} }

@ -1,4 +1,4 @@
package com.ynxbd.common.action.pay; package com.ynxbd.common.bean;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

@ -1,11 +1,8 @@
package com.ynxbd.common.dao; package com.ynxbd.common.dao;
import com.ynxbd.common.bean.Dept;
import com.ynxbd.common.config.db.DataBase; import com.ynxbd.common.config.db.DataBase;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.List;
/** /**
* @author 李进才 * @author 李进才
* @ClassName 统计报表 表的一些增删改查 * @ClassName 统计报表 表的一些增删改查

@ -1,6 +1,6 @@
package com.ynxbd.common.dao; package com.ynxbd.common.dao;
import com.ynxbd.common.action.pay.SelfHelpCount; import com.ynxbd.common.bean.SelfHelpCount;
import com.ynxbd.common.bean.ConfigSelfHelp; import com.ynxbd.common.bean.ConfigSelfHelp;
import com.ynxbd.common.bean.SelfHelp; import com.ynxbd.common.bean.SelfHelp;
import com.ynxbd.common.config.db.DataBase; import com.ynxbd.common.config.db.DataBase;

@ -864,8 +864,6 @@ public class HisRegisterDao {
} }
/** /**
* 执行分时段挂号 * 执行分时段挂号
* *
@ -1034,5 +1032,23 @@ public class HisRegisterDao {
return HisHelper.getJsonResult(HisEnum.AP_Line_SignIN, params); return HisHelper.getJsonResult(HisEnum.AP_Line_SignIN, params);
} }
/**
* 第三方扫码挂号
*/
public JsonResult tppQRReg(MerchantEnum merchantEnum, String sourceId, String payMoney, String payDate, String payTime, String openId, String bankTransNo, String tradeNo) {
Map<String, Object> params = new HashMap<>();
params.put("SourceId", sourceId);
params.put("PayMoney", payMoney);
params.put("PayDate", payDate);
params.put("PayTime", payTime);
params.put("PayWay", merchantEnum.HIS_PAY_WAY);
params.put("PayDeviceID", "mobile");
params.put("OpenId", openId);
params.put("TransNo", tradeNo);
params.put("BankTransNo", bankTransNo);
return HisHelper.getJsonResult(HisEnum.TPP_QR_Reg, params);
}
} }

@ -7,13 +7,10 @@ import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient; import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType; import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.DefaultProfile;
import com.ynxbd.common.bean.sms.SmsRegTem;
import com.ynxbd.common.bean.sms.SmsTemplate; import com.ynxbd.common.bean.sms.SmsTemplate;
import com.ynxbd.common.config.EhCacheConfig; import com.ynxbd.common.config.EhCacheConfig;
import com.ynxbd.common.helper.ProperHelper; import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.wx.config.WeChatConfig;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody; import okhttp3.FormBody;
import okhttp3.RequestBody; import okhttp3.RequestBody;
@ -22,8 +19,6 @@ import org.apache.commons.lang3.StringUtils;
import org.ehcache.Cache; import org.ehcache.Cache;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Slf4j @Slf4j
public class SmsHelper { public class SmsHelper {
@ -192,22 +187,30 @@ public class SmsHelper {
} }
/**
* 天助平台短信平台
*
* @param templateId 模板id
* @param tel 电话号码
* @param content 发送内容
* @return string
*/
public static String sendDanMi(String templateId, String tel, String content) { public static String sendDanMi(String templateId, String tel, String content) {
String accountSid = "301d69a6ea6ed34b0827a4dec3ca1ff8"; String accountSid = "301d69a6ea6ed34b0827a4dec3ca1ff8";
String authToken = "94f37caeddeb36a8400ad0ecc9b04ece"; String authToken = "94f37caeddeb36a8400ad0ecc9b04ece";
String timestamp = String.valueOf(new Date().getTime()); String timestamp = String.valueOf(new Date().getTime());
RequestBody requestBody = new FormBody.Builder() RequestBody requestBody = new FormBody.Builder()
.add("accountSid",accountSid) .add("accountSid", accountSid)
.add("templateid",templateId) .add("templateid", templateId)
.add("to",tel) .add("to", tel)
.add("timestamp",timestamp) .add("timestamp", timestamp)
.add("param",content) .add("param", content)
.add("sig", DigestUtils.md5Hex(accountSid+authToken+timestamp)) .add("sig", DigestUtils.md5Hex(accountSid + authToken + timestamp))
.build(); .build();
String result = OkHttpHelper.post("https://openapi.danmi.com/textSMS/sendSMS/V1",requestBody, headers -> { String result = OkHttpHelper.post("https://openapi.danmi.com/textSMS/sendSMS/V1", requestBody, headers -> {
headers.add("content-type","application/x-www-form-urlencoded"); headers.add("content-type", "application/x-www-form-urlencoded");
}); });
log.info("[天助平台] 短信发送 result-{},tel-{},templateId-{},content-{}",result,tel,templateId,content); log.info("[天助平台] 短信发送 result-{},tel-{},templateId-{},content-{}", result, tel, templateId, content);
return result; return result;
} }
@ -299,7 +302,6 @@ public class SmsHelper {
// send("SMS_462460638","18206787486",sms); // send("SMS_462460638","18206787486",sms);
// Map<String,String> sms = new HashMap<>(); // Map<String,String> sms = new HashMap<>();
// sms.put("address", "四号楼2楼6号诊室骨伤科(脊柱)"); // sms.put("address", "四号楼2楼6号诊室骨伤科(脊柱)");
// sms.put("deptName", "骨伤科-骨伤科专家门诊"); // sms.put("deptName", "骨伤科-骨伤科专家门诊");
@ -310,8 +312,7 @@ public class SmsHelper {
// sms.put("time", "2024-12-05 10:00:00-10:03:00"); // sms.put("time", "2024-12-05 10:00:00-10:03:00");
// send("SMS_475980406","18206787486",sms); // send("SMS_475980406","18206787486",sms);
sendDanMi("1000000002608","13608818101","影像报告已经出,请及时到医院自助机进行报告打印或点击链接 https://wx.hhzyy.com/smsPacs?token=A88A6D089&inHosNum=1579733"); sendDanMi("1000000002608", "13608818101", "影像报告已经出,请及时到医院自助机进行报告打印或点击链接 https://wx.hhzyy.com/smsPacs?token=A88A6D089&inHosNum=1579733");
// Map<String,String> sms = new HashMap<>(); // Map<String,String> sms = new HashMap<>();

@ -14,6 +14,8 @@ public enum HisEnum {
// 快速发药[自定义] // 快速发药[自定义]
QuickDrugDispense("[处方]快速发药", "11001", "UniversalInterface", true), QuickDrugDispense("[处方]快速发药", "11001", "UniversalInterface", true),
TPP_QR_Reg("[第三方]扫码挂号", "11002", "UniversalInterface", true),
// 标准物价查询[自定义] // 标准物价查询[自定义]
Recipe_Query_StandardPrice("[价格]标准物价查询", "8002", "UniversalInterface", false), Recipe_Query_StandardPrice("[价格]标准物价查询", "8002", "UniversalInterface", false),
@ -23,7 +25,7 @@ public enum HisEnum {
// 报告------------------ // 报告------------------
AP_Query_PEISReport("[报告]体检报告", "9001", "AP_Query_PEISReport", true), AP_Query_PEISReport("[报告]体检报告", "9001", "AP_Query_PEISReport", true),
AP_Query_CheckApplication("[报告]检查申请单", "5001", "AP_Query_CheckApplication", true), AP_Query_CheckApplication("[报告]检查申请单", "5001", "AP_Query_CheckApplication", true),
AP_Query_InspectionApplication("[报告]检验申请单", "5002", "AP_Query_InspectionApplication", true), AP_Query_InspectionApplication("[报告]检验(化验)申请单", "5002", "AP_Query_InspectionApplication", true),
// 挂号记录--------------- // 挂号记录---------------
AP_Query_Regist("[现场挂号]查询现场挂号记录", "2004", "AP_Query_Regist", true), AP_Query_Regist("[现场挂号]查询现场挂号记录", "2004", "AP_Query_Regist", true),

@ -12,20 +12,20 @@ import lombok.extern.slf4j.Slf4j;
*/ */
@Slf4j @Slf4j
public class XBDHelper { public class XBDHelper {
private static final String OUT_TEAM_CLOUD_FILM; private static final String CLOUD_FILM_LINK;
public static final String MEDICAL_RECORD_REMAKE_URL; public static final String MED_RECORD_COPY_URL;
public static final String XBD_PEIS; public static final String XBD_PEIS;
public static OutTeamDao outTeamDao; public static OutTeamDao outTeamDao;
static { static {
ProperHelper config = new ProperHelper().read("xbd.properties"); ProperHelper config = new ProperHelper().read("xbd.properties");
OUT_TEAM_CLOUD_FILM = config.getString("xbd.out_team_cloud_film_link"); CLOUD_FILM_LINK = config.getString("xbd.200.cloud_film_link");
MEDICAL_RECORD_REMAKE_URL = config.getString("xbd.medical_record_remake_url"); MED_RECORD_COPY_URL = config.getString("xbd.200.med_record_copy_url");
XBD_PEIS = config.getString("xbd.peis"); XBD_PEIS = config.getString("xbd.100.peis_url");
if (OUT_TEAM_CLOUD_FILM == null) { if (CLOUD_FILM_LINK == null) {
log.error("新八达内部团队配置文件读取失败"); log.error("新八达200团队配置文件读取失败");
} }
outTeamDao = new OutTeamDao(OUT_TEAM_CLOUD_FILM); outTeamDao = new OutTeamDao(CLOUD_FILM_LINK);
} }
} }

@ -1,7 +1,6 @@
package com.ynxbd.common.helper.xbd; package com.ynxbd.common.helper.xbd;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.helper.common.ErrorHelper;
import com.ynxbd.common.helper.http.OkHttpHelper; import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.JsonResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -10,11 +9,9 @@ import okhttp3.*;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.GZIPInputStream; import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
@ -87,7 +84,7 @@ public class XBDHttpHelper {
private static String UsePost(String methodName, RequestBody requestBody){ private static String UsePost(String methodName, RequestBody requestBody){
OkHttpClient httpClient = OkHttpHelper.creatClient(); OkHttpClient httpClient = OkHttpHelper.creatClient();
Headers.Builder headersBuilder = new Headers.Builder(); Headers.Builder headersBuilder = new Headers.Builder();
HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(XBDHelper.MEDICAL_RECORD_REMAKE_URL + "/api/SqlContext/PostMethodByNameEncryption")).newBuilder(); HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(XBDHelper.MED_RECORD_COPY_URL + "/api/SqlContext/PostMethodByNameEncryption")).newBuilder();
try (Response response = httpClient.newCall(new Request.Builder().url(urlBuilder.build()).post(requestBody).headers(headersBuilder.build()).build()).execute()) { try (Response response = httpClient.newCall(new Request.Builder().url(urlBuilder.build()).post(requestBody).headers(headersBuilder.build()).build()).execute()) {
JSONObject JSON = JSONObject.parseObject(response.body().string()); JSONObject JSON = JSONObject.parseObject(response.body().string());
if(response.isSuccessful()){ if(response.isSuccessful()){
@ -107,7 +104,7 @@ public class XBDHttpHelper {
private static String UseGet(String methodName, Object paramDic) { private static String UseGet(String methodName, Object paramDic) {
try { try {
OkHttpClient httpClient = OkHttpHelper.creatClient(); OkHttpClient httpClient = OkHttpHelper.creatClient();
HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(XBDHelper.MEDICAL_RECORD_REMAKE_URL + "/api/SqlContext/ExecMethodByNameEncryption")).newBuilder(); HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(XBDHelper.MED_RECORD_COPY_URL + "/api/SqlContext/ExecMethodByNameEncryption")).newBuilder();
// 加密序列化 // 加密序列化
String methodNameEnv = URLEncoder.encode(EncHelper.AES_Encrypt(methodName), StandardCharsets.UTF_8.toString()); String methodNameEnv = URLEncoder.encode(EncHelper.AES_Encrypt(methodName), StandardCharsets.UTF_8.toString());
urlBuilder.addQueryParameter("methodNameEnc", methodNameEnv); urlBuilder.addQueryParameter("methodNameEnc", methodNameEnv);

@ -143,7 +143,7 @@ public class MedicalService {
*/ */
public static Result createOrder(String payCode, String openid, String patientId, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, public static Result createOrder(String payCode, String openid, String patientId, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType,
String recipeJson, String treatNum, String payWay) { String recipeJson, String treatNum, String payWay) {
Result result = PayService.isNoPay(); Result result = PayService.isPaymentPermittedByTime();
if (result != null) { if (result != null) {
return result; return result;
} }
@ -233,7 +233,7 @@ public class MedicalService {
* 挂号下单 * 挂号下单
*/ */
public static Result createRegOrder(String payCode, String openid, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, Register reg) { public static Result createRegOrder(String payCode, String openid, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType, Register reg) {
Result result = PayService.isNoPay(); Result result = PayService.isPaymentPermittedByTime();
if (result != null) { if (result != null) {
return result; return result;
} }

@ -5,7 +5,6 @@ import com.ynxbd.common.helper.http.OkHttpHelper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody; import okhttp3.FormBody;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import org.apache.poi.hpsf.Decimal;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -18,7 +17,7 @@ import java.math.BigDecimal;
@Slf4j @Slf4j
public class MicroService { public class MicroService {
public void InternetHospNotice(String outTradeNo, String bankTransNo, String openid, BigDecimal totalFee, String payDate, String payTime) { public void OLReg(String openid, BigDecimal totalFee, String outTradeNo, String bankTransNo, String payDate, String payTime) {
RequestBody body = new FormBody.Builder(). RequestBody body = new FormBody.Builder().
add("callNo", "ol_register"). add("callNo", "ol_register").
add("outTradeNo", AesHelper.enCode(outTradeNo)). add("outTradeNo", AesHelper.enCode(outTradeNo)).

@ -17,6 +17,7 @@ import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.cache.PayCache; import com.ynxbd.common.service.cache.PayCache;
import com.ynxbd.wx.wxfactory.WxMedicalHelper; import com.ynxbd.wx.wxfactory.WxMedicalHelper;
import com.ynxbd.wx.wxfactory.WxPayHelper; import com.ynxbd.wx.wxfactory.WxPayHelper;
import com.ynxbd.wx.wxfactory.bean.WxPayNotify;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -38,8 +39,69 @@ public class PayService {
} }
} }
/**
* 微信回调处理
*
* @param notifyInfo 回调信息
*/
public static void WxNotify(WxPayNotify notifyInfo) throws ServiceException {
String openid = notifyInfo.getOpenid();
String bankTransNo = notifyInfo.getTransactionId();
String outTradeNo = notifyInfo.getOutTradeNo();
String payInfo = notifyInfo.getPayInfo();
BigDecimal totalFee = notifyInfo.getTotalFee();
String payDate = notifyInfo.getPayDate();
String payTime = notifyInfo.getPayTime();
String notifyType = notifyInfo.getAttach();
log.info("【微信】[{}]收到通知 outTradeNo={}, bankTransNo={}", notifyType, outTradeNo, bankTransNo);
switch (PEnum.toEnum(notifyType)) {
case RECIPE:
new RecipeService().recipeListPay(MerchantEnum.WX, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
break;
case REG: // 挂号
try {
new RegService().regPaidNotify(MerchantEnum.WX, totalFee, openid, bankTransNo, outTradeNo, null, payDate, payTime, payInfo, new Date());
} catch (ServiceException e) {
log.info("【微信】[挂号]通知异常 outTradeNo={}, bankTransNo={}, message={}", outTradeNo, bankTransNo, e.getMessage());
}
break;
case IN_HOSP:
boolean isInsert = new InHospService().inHospNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
log.info("【微信】[住院预交金] 预存{}", (isInsert ? "成功" : "失败"));
break;
case CASEBOOK:
new CasebookService().payNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
break;
case OUT_COLLECT:
new OutCollectService().ocPayNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
break;
case OL_REG:
new MicroService().OLReg(openid, totalFee, outTradeNo, bankTransNo, payDate, payTime);
break;
public static Result isNoPay() { case TPP_QR_REG:
new ThirdPartyPayService().tppQRRegNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
break;
default:
log.info("【微信】通知类型错误,结束请求");
break;
}
}
/**
* 是否允许付款
*/
public static Result isPaymentPermittedByTime() {
if (DateHelper.inTimeRangeH_m_s("23:55:00", "23:59:59") || DateHelper.inTimeRangeH_m_s("00:00:00", "00:00:30")) { if (DateHelper.inTimeRangeH_m_s("23:55:00", "23:59:59") || DateHelper.inTimeRangeH_m_s("00:00:00", "00:00:30")) {
return Result.error(ResultEnum.SYSTEM_IS_BILLING); return Result.error(ResultEnum.SYSTEM_IS_BILLING);
} }

@ -2,7 +2,7 @@ package com.ynxbd.common.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.pay.PEnum; import com.ynxbd.common.action.pay.PEnum;
import com.ynxbd.common.action.pay.SelfHelpCount; import com.ynxbd.common.bean.SelfHelpCount;
import com.ynxbd.common.bean.ConfigSelfHelp; import com.ynxbd.common.bean.ConfigSelfHelp;
import com.ynxbd.common.bean.StandardPrice; import com.ynxbd.common.bean.StandardPrice;
import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.enums.MerchantEnum;
@ -90,7 +90,7 @@ public class RecipeService {
* @return 是否完成操作 * @return 是否完成操作
*/ */
public Result recipeHand(MerchantEnum merchantEnum, String openid, String patientId, String treatNum, String totalFee, String recipeJson, String payWay, Integer awaitSecond) { public Result recipeHand(MerchantEnum merchantEnum, String openid, String patientId, String treatNum, String totalFee, String recipeJson, String payWay, Integer awaitSecond) {
Result result = PayService.isNoPay(); Result result = PayService.isPaymentPermittedByTime();
if (result != null) { if (result != null) {
return result; return result;
} }

@ -148,7 +148,6 @@ public class RegService {
log.info("{} 开始调用HIS挂号:patientId={}, bankTransNo={}", merchantEnum.NAME, patientId, bankTransNo); log.info("{} 开始调用HIS挂号:patientId={}, bankTransNo={}", merchantEnum.NAME, patientId, bankTransNo);
String hisTransNo = null, treatNum = null, hisQueueNo, callNum = null, invoiceTransNo = null; String hisTransNo = null, treatNum = null, hisQueueNo, callNum = null, invoiceTransNo = null;
// 挂号类型:1:预约挂号,2:现场挂号;3:分时段预约挂号,4:分时段现场挂号 // 挂号类型:1:预约挂号,2:现场挂号;3:分时段预约挂号,4:分时段现场挂号
JsonResult jsonResult; JsonResult jsonResult;
@ -735,7 +734,7 @@ public class RegService {
* 挂号下单 * 挂号下单
*/ */
public Result regPlaceOrder(String payCode, String ip, Boolean isOccupySource, Boolean isZeroPay, Register reg) { public Result regPlaceOrder(String payCode, String ip, Boolean isOccupySource, Boolean isZeroPay, Register reg) {
Result noPayTime = PayService.isNoPay(); Result noPayTime = PayService.isPaymentPermittedByTime();
if (noPayTime != null) { if (noPayTime != null) {
return noPayTime; return noPayTime;
} }

@ -0,0 +1,110 @@
package com.ynxbd.common.service;
import com.ynxbd.common.action.pay.PEnum;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.Register;
import com.ynxbd.common.dao.RegisterDao;
import com.ynxbd.common.dao.his.HisRegisterDao;
import com.ynxbd.common.helper.his.HisHelper;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.wx.config.MessagePushConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;
@Slf4j
public class ThirdPartyPayService {
/**
* 挂号回调
*
* @param merchantEnum 商户类型
* @param totalFee 订单金额
* @param openid openid
* @param bankTransNo 商户返回流水号
* @param outTradeNo 订单号
* @param payDate 支付日期
* @param payTime 支付时间
* @return 是否完成
*/
public boolean tppQRRegNotify(MerchantEnum merchantEnum, String openid, BigDecimal totalFee, String outTradeNo, String bankTransNo, String payDate, String payTime, String payInfo) throws ServiceException {
RegisterDao registerDao = new RegisterDao();
Register reg;
String regType, patientId;
String tradeNo = HisHelper.getHisTradeNo(bankTransNo, PEnum.TPP_QR_REG);
try {
reg = registerDao.selectByOutTradeNo(outTradeNo);
if (reg == null) {
throw new ServiceException(ResultEnum.DATA_NOT_FOUND,
String.format("{%s} [第三方][扫码挂号]数据库中未找到订单 outTradeNo={%s}, bankTransNo={%s}, tradeNo={%s}", merchantEnum.NAME, outTradeNo, bankTransNo, tradeNo));
}
Integer hisStatus = reg.getHisStatus();
Integer payStatus = reg.getPayStatus();
if (payStatus == null || hisStatus == null || payStatus == 0 || hisStatus == 0) { // 状态不明确
log.info("{{}} [第三方][扫码挂号]订单已支付,停止向下执行 outTradeNo={{}}, bankTransNo={{}}, tradeNo={{}}", merchantEnum.NAME, outTradeNo, bankTransNo, tradeNo);
return false;
}
// 更新商户支付状态
if (!registerDao.updateMerPaidByOutTradeNo(outTradeNo, payDate, payTime, bankTransNo, tradeNo, null)) {
log.info("{{}} [第三方][扫码挂号]更新订单失败,停止向下执行 outTradeNo={{}}, bankTransNo={{}}, tradeNo={{}}", merchantEnum.NAME, outTradeNo, bankTransNo, tradeNo);
return false;
}
reg.setPayDate(payDate);
reg.setPayTime(payTime);
reg.setBankTransNo(bankTransNo);
reg.setTradeNo(tradeNo);
// 挂号类型:1:预约挂号,2:今日挂号;3:分时段预约挂号,4:分时段今日挂号
regType = reg.getRegType();
patientId = reg.getPatientId();
if (ObjectUtils.isEmpty(reg.getSourceId())) {
throw new ServiceException(ResultEnum.PARAM_IS_BLANK,
String.format("{%s} [第三方][扫码挂号]号源ID缺失 outTradeNo={%s}, bankTransNo={%s}, tradeNo={%s}", merchantEnum.NAME, outTradeNo, bankTransNo, tradeNo));
}
if (ObjectUtils.isEmpty(patientId) || ObjectUtils.isEmpty(regType) || ObjectUtils.isEmpty(reg.getRegDate())) {
throw new ServiceException(ResultEnum.PARAM_IS_BLANK,
String.format("{%s} [第三方][扫码挂号]参数缺失 outTradeNo={%s}, bankTransNo={%s}, tradeNo={%s}", merchantEnum.NAME, outTradeNo, bankTransNo, tradeNo));
}
} catch (ServiceException e) {
log.error(e.getMessage());
throw new ServiceException(e.getMessage());
}
log.info("{} [第三方][扫码挂号]开始调用HIS:patientId={}, bankTransNo={}", merchantEnum.NAME, patientId, bankTransNo);
JsonResult jsonResult = new HisRegisterDao().tppQRReg(merchantEnum, reg.getSourceId(), String.valueOf(totalFee), payDate, payTime, openid, bankTransNo, tradeNo);
String message = jsonResult.getMessage();
if (!jsonResult.success()) { // 调用HIS失败-->自动退款
log.info("{} [第三方][扫码挂号]调用HIS挂号失败:patientId={}", merchantEnum.NAME, patientId);
throw new ServiceException(message);
}
String invoiceTransNo = jsonResult.getDataMapString("InvoiceTransNo");
String hisTransNo = jsonResult.getDataMapString("HISTransNo");
String hisQueueNo = jsonResult.getDataMapString("QueueNo");
// 挂号成功-->更新挂号信息
log.info("{} [第三方][扫码挂号]更新HIS挂号信息[after] outTradeNo={}, tradeNo={}, patientId={}, bankTransNo={}", merchantEnum.NAME, outTradeNo, tradeNo, patientId, bankTransNo);
if (registerDao.updateHisRegInfo(outTradeNo, bankTransNo, hisTransNo, null, invoiceTransNo, null)) {
log.info("{} [第三方][扫码挂号]更新HIS挂号信息成功 patientId={}", merchantEnum.NAME, patientId);
}
if (MerchantEnum.WX.equals(merchantEnum)) {
MessagePushConfig.regPush(merchantEnum, reg);
}
return true;
}
public static void main(String[] args) {
System.out.println(0.1 + 0.2);
}
}

@ -81,7 +81,7 @@ public class RegParams {
log.info("[挂号类型]{}", (isSplitTime ? "分时段挂号" : "普通挂号")); log.info("[挂号类型]{}", (isSplitTime ? "分时段挂号" : "普通挂号"));
reg.setIsSplitTime(isSplitTime); reg.setIsSplitTime(isSplitTime);
if (isSplitTime) { if (isSplitTime) { // 分时段
String tName = params.getString("tName"); String tName = params.getString("tName");
String queueNum = params.getString("queueNum"); String queueNum = params.getString("queueNum");
String sourceId = params.getString("sourceId"); String sourceId = params.getString("sourceId");

@ -1,7 +0,0 @@
package com.ynxbd.common.test;
import com.ynxbd.common.helper.common.Base64Helper;
public class PatientTest {
}

@ -0,0 +1,12 @@
package com.ynxbd.common.test;
import com.ynxbd.common.helper.common.AesHelper;
import com.ynxbd.wx.wxfactory.ReqParamHelper;
public class Test01 {
public static void main(String[] args) {
// 患者id
System.out.println(ReqParamHelper.encode("282466"));
}
}

@ -29,7 +29,8 @@ import java.util.Map;
*/ */
@Slf4j @Slf4j
public class MeTechnologyReConfig { public class MeTechnologyReConfig {
private MeTechnologyReConfig() {} private MeTechnologyReConfig() {
}
public static final String MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL; public static final String MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL;
public static final String MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO; public static final String MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO;
@ -37,90 +38,90 @@ public class MeTechnologyReConfig {
public static final String MEDICAL_TECHNOLOGY_RESERVE_JSON_URL; public static final String MEDICAL_TECHNOLOGY_RESERVE_JSON_URL;
public static final MediaType JSON public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8"); = MediaType.parse("application/json; charset=utf-8");
static { static {
ProperHelper config = new ProperHelper().read("medical-technology-reserve.properties"); ProperHelper config = new ProperHelper().read("medical-technology-reserve.properties");
if (config ==null){ if (config == null) {
MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL = null; MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL = null;
MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO = null; MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO = null;
MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID = null; MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID = null;
MEDICAL_TECHNOLOGY_RESERVE_JSON_URL = null; MEDICAL_TECHNOLOGY_RESERVE_JSON_URL = null;
} } else {
else { MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL = config.getString("medical_technology_reserve_webservice_url");
MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL = config.getString("medical_technology_reserve_webservice_url");
MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO = config.getString("medical_technology_reserve_terminal_no"); MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO = config.getString("medical_technology_reserve_terminal_no");
MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID = config.getString("medical_technology_reserve_test_patientId"); MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID = config.getString("medical_technology_reserve_test_patientId");
MEDICAL_TECHNOLOGY_RESERVE_JSON_URL = config.getString("medical_technology_reserve_json_url"); MEDICAL_TECHNOLOGY_RESERVE_JSON_URL = config.getString("medical_technology_reserve_json_url");
} }
} }
public static void reserveRun(String patientId){ public static void reserveRun(String patientId) {
try { try {
if(MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL==null){ if (MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL == null) {
return; return;
} }
if(MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID!=null){ if (MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID != null) {
if(!patientId.equals(MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID)){ if (!patientId.equals(MEDICAL_TECHNOLOGY_RESERVE_TEST_PATIENT_ID)) {
log.info("[天助预约平台] 不是测试账号,不允许调用接口 patientId-{}", patientId); log.info("[天助预约平台] 不是测试账号,不允许调用接口 patientId-{}", patientId);
return; return;
} }
} }
String result = OkHttpHelper.get(MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL, params->{ String result = OkHttpHelper.get(MEDICAL_TECHNOLOGY_RESERVE_WEBSERVICE_URL, params -> {
params.put("patientID",patientId); params.put("patientID", patientId);
params.put("terminalNo",MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO); params.put("terminalNo", MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO);
}); });
JsonResult jsonResult = JsonResult.xmlToBean(result, JsonResultEnum.SYS_RESERVE); JsonResult jsonResult = JsonResult.xmlToBean(result, JsonResultEnum.SYS_RESERVE);
if(jsonResult==null){ if (jsonResult == null) {
log.info("[天助预约平台] xml转换出错,result-{}",result); log.info("[天助预约平台] xml转换出错,result-{}", result);
return; return;
} }
if(jsonResult.success()){ if (jsonResult.success()) {
log.info("[天助预约平台] 预约成功 message-{}",jsonResult.getMessage()); log.info("[天助预约平台] 预约成功 message-{}", jsonResult.getMessage());
// MessagePushConfig.businessPush("天助预约平台",patientId,jsonResult.getMessage(),null); // MessagePushConfig.businessPush("天助预约平台",patientId,jsonResult.getMessage(),null);
} }
} } catch (Exception e) {
catch (Exception e) {
log.error("[天助预约平台] 调用医技预约出错,error-{}", e.toString()); log.error("[天助预约平台] 调用医技预约出错,error-{}", e.toString());
} }
} }
public static String getToken(){ public static String getToken() {
String result = OkHttpHelper.get(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/Tools/Tool/GetToken",params-> { String result = OkHttpHelper.get(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/Tools/Tool/GetToken", params -> {
params.put("clientName","WXAPP"); params.put("clientName", "WXAPP");
params.put("clientCode","wxapp"); params.put("clientCode", "wxapp");
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
if(jsonObject==null){ if (jsonObject == null) {
log.info("[天助预约平台] token获取失败,result-{}",result); log.info("[天助预约平台] token获取失败,result-{}", result);
return null; return null;
} }
String token = jsonObject.getString("token"); String token = jsonObject.getString("token");
log.info("[天助预约平台] token获取成功,token={}",token); log.info("[天助预约平台] token获取成功,token={}", token);
return token; return token;
} }
/** /**
* 预约平台提供终端调用主要用来获取患者申请单列表用于预约改约 * 预约平台提供终端调用主要用来获取患者申请单列表用于预约改约
*
* @return 根据患者身份获得开立检查单情况 * @return 根据患者身份获得开立检查单情况
*/ */
public static Result getCanBookOrders(String patientId,String startDate,String endDate){ public static Result getCanBookOrders(String patientId, String startDate, String endDate) {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("PatientId", patientId); params.put("PatientId", patientId);
params.put("StartDate", startDate); params.put("StartDate", startDate);
params.put("EndDate", endDate); params.put("EndDate", endDate);
params.put("TerminalNo", MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO); params.put("TerminalNo", MEDICAL_TECHNOLOGY_RESERVE_TERMINAL_NO);
params.put("IsBooked", "2"); params.put("IsBooked", "2");
RequestBody requestBody = RequestBody.create(JSON,JsonHelper.toJsonString(params)); RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params));
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL+"/BookDetails/BookDetails/GetCanBookOrders",requestBody,headers -> { String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetCanBookOrders", requestBody, headers -> {
headers.add("token",getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
if(jsonObject==null){ if (jsonObject == null) {
log.info("[天助预约平台] patientId-{},startDate-{},endDate-{} 获取患者申请信息失败,result-{}",patientId,startDate,endDate,result); log.info("[天助预约平台] patientId-{},startDate-{},endDate-{} 获取患者申请信息失败,result-{}", patientId, startDate, endDate, result);
return Result.error(); return Result.error();
} }
if(!"0".equals(jsonObject.getString("ResultCode"))){ if (!"0".equals(jsonObject.getString("ResultCode"))) {
log.info("[天助预约平台] 获取患者申请信息失败,失败原因-{}",jsonObject.getString("ResultContent")); log.info("[天助预约平台] 获取患者申请信息失败,失败原因-{}", jsonObject.getString("ResultContent"));
return Result.error(jsonObject.getString("ResultCode")); return Result.error(jsonObject.getString("ResultCode"));
} }
return Result.success(jsonObject.getJSONArray("OrderLists").toJavaList(BookOrder.class)); return Result.success(jsonObject.getJSONArray("OrderLists").toJavaList(BookOrder.class));
@ -128,14 +129,15 @@ public class MeTechnologyReConfig {
/** /**
* 根据日期范围获得可使用资源概况 * 根据日期范围获得可使用资源概况
* @param patientId 患者id *
* @param startDate 开始时间 * @param patientId 患者id
* @param endDate 结束时间 * @param startDate 开始时间
* @param docDetailedNo 申请单编号 * @param endDate 结束时间
* @param docDetailedNo 申请单编号
* @param intervalTimeType 上午或者下午 * @param intervalTimeType 上午或者下午
* @return 日期范围获得可使用资源概况 * @return 日期范围获得可使用资源概况
*/ */
public static Result getNumberSourceStatistics(String patientId, String startDate, String endDate, String docDetailedNo, String intervalTimeType){ public static Result getNumberSourceStatistics(String patientId, String startDate, String endDate, String docDetailedNo, String intervalTimeType) {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("PatientId", patientId); params.put("PatientId", patientId);
params.put("StartDate", startDate); params.put("StartDate", startDate);
@ -145,16 +147,16 @@ public class MeTechnologyReConfig {
String json = JsonHelper.toJsonString(params); String json = JsonHelper.toJsonString(params);
RequestBody requestBody = RequestBody.create(JSON, json); RequestBody requestBody = RequestBody.create(JSON, json);
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL+"/BookDetails/BookDetails/GetNumberSourceStatistics",requestBody,headers -> { String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetNumberSourceStatistics", requestBody, headers -> {
headers.add("token",getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
if(jsonObject==null){ if (jsonObject == null) {
log.info("[天助预约平台] patientId-{},startDate-{},endDate-{},docDetailedNo-{},intervalTimeType-{} 根据日期范围获得可使用资源概况失败,result-{}",patientId,startDate,endDate,docDetailedNo,intervalTimeType,result); log.info("[天助预约平台] patientId-{},startDate-{},endDate-{},docDetailedNo-{},intervalTimeType-{} 根据日期范围获得可使用资源概况失败,result-{}", patientId, startDate, endDate, docDetailedNo, intervalTimeType, result);
return Result.error(); return Result.error();
} }
if(!"0".equals(jsonObject.getString("resultCode"))){ if (!"0".equals(jsonObject.getString("resultCode"))) {
log.info("[天助预约平台] 根据日期范围获得可使用资源概况失败,失败原因-{}",jsonObject.getString("resultContent")); log.info("[天助预约平台] 根据日期范围获得可使用资源概况失败,失败原因-{}", jsonObject.getString("resultContent"));
return Result.error(jsonObject.getString("resultCode")); return Result.error(jsonObject.getString("resultCode"));
} }
return Result.success(jsonObject.getJSONArray("numberSourceStatisticsApplyDTO").toJavaList(NumberSourceStatistics.class)); return Result.success(jsonObject.getJSONArray("numberSourceStatisticsApplyDTO").toJavaList(NumberSourceStatistics.class));
@ -162,31 +164,32 @@ public class MeTechnologyReConfig {
/** /**
* 预约平台提供终端调用主要用来获取号池明细信息 * 预约平台提供终端调用主要用来获取号池明细信息
*
* @param examRoomOrQueue 检查室或队列 * @param examRoomOrQueue 检查室或队列
* @param startDate 开始时间 * @param startDate 开始时间
* @param endDate 结束时间 * @param endDate 结束时间
* @param appFromID 医嘱申请单号 * @param appFromID 医嘱申请单号
* @return 号池明细信息 * @return 号池明细信息
*/ */
public static Result getNumberSourceDetails(String examRoomOrQueue, String startDate, String endDate, String appFromID){ public static Result getNumberSourceDetails(String examRoomOrQueue, String startDate, String endDate, String appFromID) {
JSONObject jsonParams = new JSONObject(); JSONObject jsonParams = new JSONObject();
jsonParams.put("examRoomOrQueue",examRoomOrQueue); jsonParams.put("examRoomOrQueue", examRoomOrQueue);
jsonParams.put("StartDate",startDate); jsonParams.put("StartDate", startDate);
jsonParams.put("EndDate",endDate); jsonParams.put("EndDate", endDate);
jsonParams.put("appFromID",appFromID); jsonParams.put("appFromID", appFromID);
RequestBody requestBody = RequestBody.create(JSON, jsonParams.toJSONString()); RequestBody requestBody = RequestBody.create(JSON, jsonParams.toJSONString());
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL+"/BookDetails/BookDetails/GetNumberSourceDetails",requestBody,headers -> { String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetNumberSourceDetails", requestBody, headers -> {
headers.add("token",getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
if(jsonObject==null){ if (jsonObject == null) {
log.info("[天助预约平台] examRoomOrQueue-{},startDate-{},endDate-{},appFromID-{}, 获取号池明细失败,result-{}",examRoomOrQueue,startDate,endDate,appFromID,result); log.info("[天助预约平台] examRoomOrQueue-{},startDate-{},endDate-{},appFromID-{}, 获取号池明细失败,result-{}", examRoomOrQueue, startDate, endDate, appFromID, result);
return Result.error(); return Result.error();
} }
if(!"0".equals(jsonObject.getString("resultCode"))){ if (!"0".equals(jsonObject.getString("resultCode"))) {
log.info("[天助预约平台] 获取号池明细失败,失败原因-{}",jsonObject.getString("resultContent")); log.info("[天助预约平台] 获取号池明细失败,失败原因-{}", jsonObject.getString("resultContent"));
return Result.error(jsonObject.getString("resultCode")); return Result.error(jsonObject.getString("resultCode"));
} }
return Result.success(jsonObject.getJSONArray("numPoolDetailsDTOList").toJavaList(NumberSourceDetails.class)); return Result.success(jsonObject.getJSONArray("numPoolDetailsDTOList").toJavaList(NumberSourceDetails.class));
@ -194,14 +197,15 @@ public class MeTechnologyReConfig {
/** /**
* 根据提交时段锁定号池资源 * 根据提交时段锁定号池资源
* @param appFormID 检查室或队列 *
* @param appFormID 检查室或队列
* @param examRoomOrQueue 检查室或队列 * @param examRoomOrQueue 检查室或队列
* @param beginDateTime 开始时间 * @param beginDateTime 开始时间
* @param endDateTime 结束时间 * @param endDateTime 结束时间
* @param lockStatus 锁定状态 * @param lockStatus 锁定状态
* @return 是否锁定成功 * @return 是否锁定成功
*/ */
public static Boolean lockedBookNo(String appFormID,String examRoomOrQueue,String beginDateTime,String endDateTime,Boolean lockStatus){ public static Boolean lockedBookNo(String appFormID, String examRoomOrQueue, String beginDateTime, String endDateTime, Boolean lockStatus) {
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("appFormID", appFormID); params.put("appFormID", appFormID);
params.put("examRoomOrQueue", examRoomOrQueue); params.put("examRoomOrQueue", examRoomOrQueue);
@ -209,50 +213,49 @@ public class MeTechnologyReConfig {
params.put("endDateTime", endDateTime); params.put("endDateTime", endDateTime);
params.put("lockStatus", lockStatus); params.put("lockStatus", lockStatus);
RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params)); RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toJsonString(params));
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL+"/BookDetails/BookDetails/LockedBookNo",requestBody,headers -> { String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/LockedBookNo", requestBody, headers -> {
headers.add("token",getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
if(jsonObject==null){ if (jsonObject == null) {
log.info("[天助预约平台] examRoomOrQueue-{},beginDateTime-{},endDateTime-{},lockStatus-{}, 根据提交时段锁定号池资源失败,result-{}",examRoomOrQueue,beginDateTime,endDateTime,lockStatus,result); log.info("[天助预约平台] examRoomOrQueue-{},beginDateTime-{},endDateTime-{},lockStatus-{}, 根据提交时段锁定号池资源失败,result-{}", examRoomOrQueue, beginDateTime, endDateTime, lockStatus, result);
return false; return false;
} }
if(!"0".equals(jsonObject.getString("resultCode"))){ if (!"0".equals(jsonObject.getString("resultCode"))) {
log.info("[天助预约平台] 根据提交时段锁定号池资源失败,失败原因-{}",jsonObject.getString("resultContent")); log.info("[天助预约平台] 根据提交时段锁定号池资源失败,失败原因-{}", jsonObject.getString("resultContent"));
return false; return false;
} }
return true; return true;
} }
public static Result getBookedDateTime(String appFormID, String examRoomOrQueue, String beginDateTime, String endDateTime, String patientId, String patientName){ public static Result getBookedDateTime(String appFormID, String examRoomOrQueue, String beginDateTime, String endDateTime, String patientId, String patientName) {
Map<String,String> param = new HashMap<>(); Map<String, String> param = new HashMap<>();
param.put("AppFormID",appFormID); param.put("AppFormID", appFormID);
param.put("ExamRoomOrQueue",examRoomOrQueue); param.put("ExamRoomOrQueue", examRoomOrQueue);
param.put("BeginDateTime",beginDateTime); param.put("BeginDateTime", beginDateTime);
param.put("EndDateTime",endDateTime); param.put("EndDateTime", endDateTime);
List<Map<String,String>> paramList = new ArrayList<>(); List<Map<String, String>> paramList = new ArrayList<>();
paramList.add(param); paramList.add(param);
Map<String,Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
params.put("BookedDateTimeDTOList",paramList); params.put("BookedDateTimeDTOList", paramList);
params.put("ScheduleUserId",patientId); params.put("ScheduleUserId", patientId);
params.put("ScheduleUser",patientName); params.put("ScheduleUser", patientName);
log.info("[天助预约平台] 确定预约json={}",JsonHelper.toProJsonString(params)); log.info("[天助预约平台] 确定预约json={}", JsonHelper.toProJsonString(params));
RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toProJsonString(params)); RequestBody requestBody = RequestBody.create(JSON, JsonHelper.toProJsonString(params));
String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL+"/BookDetails/BookDetails/GetBookedDateTime",requestBody,headers -> { String result = OkHttpHelper.post(MEDICAL_TECHNOLOGY_RESERVE_JSON_URL + "/BookDetails/BookDetails/GetBookedDateTime", requestBody, headers -> {
headers.add("token",getToken()); headers.add("token", getToken());
}); });
JSONObject jsonObject = JsonHelper.parseObject(result); JSONObject jsonObject = JsonHelper.parseObject(result);
if(jsonObject==null){ if (jsonObject == null) {
log.info("[天助预约平台] examRoomOrQueue-{},startDate-{},endDate-{},appFromID-{}, patientId-{},patientName-{}, 提交预约具体时间失败,result-{}",examRoomOrQueue,beginDateTime,endDateTime,appFormID,patientId,patientName,result); log.info("[天助预约平台] examRoomOrQueue-{},startDate-{},endDate-{},appFromID-{}, patientId-{},patientName-{}, 提交预约具体时间失败,result-{}", examRoomOrQueue, beginDateTime, endDateTime, appFormID, patientId, patientName, result);
return Result.error(); return Result.error();
} }
if(!"0".equals(jsonObject.getString("resultCode"))){ if (!"0".equals(jsonObject.getString("resultCode"))) {
log.info("[天助预约平台] 提交预约具体时间失败,失败原因-{}",jsonObject.getString("resultContent")); log.info("[天助预约平台] 提交预约具体时间失败,失败原因-{}", jsonObject.getString("resultContent"));
return Result.error(jsonObject.getString("resultCode")); return Result.error(jsonObject.getString("resultCode"));
} }
return Result.success(jsonObject.getJSONArray("bookedInfos").toJavaList(BookedInfo.class).get(0)); return Result.success(jsonObject.getJSONArray("bookedInfos").toJavaList(BookedInfo.class).get(0));
} }
} }

@ -18,6 +18,8 @@ public class WeChatConfig {
public static final String MCH_KEY; public static final String MCH_KEY;
// //
public static final String PASSWORD; public static final String PASSWORD;
public static final String DEV_OPEN_IDS;
// //
private static String BASE_URL; private static String BASE_URL;
private static String WEB_PATH; private static String WEB_PATH;
@ -39,6 +41,8 @@ public class WeChatConfig {
MCH_ID = config.getString("wx.mchId"); MCH_ID = config.getString("wx.mchId");
MCH_KEY = config.getString("wx.mchKey"); MCH_KEY = config.getString("wx.mchKey");
DEV_OPEN_IDS = config.getString("wx.dev_open_ids", "");
WEB_PATH = config.getString("wx.webPath"); WEB_PATH = config.getString("wx.webPath");
if (WEB_PATH == null) { if (WEB_PATH == null) {
WEB_PATH = ""; WEB_PATH = "";
@ -132,6 +136,17 @@ public class WeChatConfig {
return CACHE_WEB_URL; return CACHE_WEB_URL;
} }
/**
* 判断是否为开发用户
*/
public static boolean isDevUser(String openid) {
if (ObjectUtils.isEmpty(openid)) {
return false;
}
String openIds = DEV_OPEN_IDS == null ? "" : DEV_OPEN_IDS;
return openIds.contains(openid);
}
// public static String getAccessToken() { // public static String getAccessToken() {
// String accessToken = ACCESS_TOKEN_CACHE.get(ACCESS_TOKEN_KEY); // String accessToken = ACCESS_TOKEN_CACHE.get(ACCESS_TOKEN_KEY);

@ -33,11 +33,11 @@ public class QServlet extends HttpServlet {
MDC.remove("ip"); MDC.remove("ip");
MDC.put("ip", HttpHelper.getIpAddress(request)); MDC.put("ip", HttpHelper.getIpAddress(request));
// if (StringUtils.isEmpty(userAgent)) { // if (StringUtils.isEmpty(userAgent)) {
// log.info(ResultEnum.PAY_TYPE_NOT_SUPPORT.message); // log.info(ResultEnum.PAY_TYPE_NOT_SUPPORT.message);
// HttpHelper.outRespAlert(response, ResultEnum.PAY_TYPE_NOT_SUPPORT.message); // HttpHelper.outRespAlert(response, ResultEnum.PAY_TYPE_NOT_SUPPORT.message);
// return; // return;
// } // }
MerchantEnum merchantEnum = MerchantEnum.WX; MerchantEnum merchantEnum = MerchantEnum.WX;
String userAgent = request.getHeader("user-agent"); String userAgent = request.getHeader("user-agent");

@ -18,16 +18,11 @@ package com.ynxbd.wx.utils;
public class DesEncryptHelper { public class DesEncryptHelper {
private static final String KEY = "2018ynhm8321"; private static final String KEY = "2018ynhm8321";
public static void main(String[] args) {
String s = enCode("oeso-t62kkoRwLVVkSkwmmjPfUXk");
String a= deCode("2235AE2E1563DF971CBF4C3F2D4DC06F1D0AA3BF5EA65B865C5DF0E0694DF3FFBA5360D9607A60F80CC71F9C7D7E8F241E00310C63D5C5B414D5FEB43A0B2E7A2AA335CD601DB3727BAF0DFEDB48388CFEA7A8301CDEAA42817F7316E6CBF0B7AC2671148FCA0E2DA337CF664C0C4FD85F7D799D496125D2186D82889E6B81D25107616591DDC46D");
System.out.println(a);
}
/** /**
* 加密 * 加密
*
* @param s 加密的字符串 * @param s 加密的字符串
* @return 加密后的字符 * @return 加密后的字符
*/ */
public static String enCode(String s) { public static String enCode(String s) {
return new DesHelper().stringEnc(s, KEY); return new DesHelper().stringEnc(s, KEY);
@ -35,8 +30,9 @@ public class DesEncryptHelper {
/** /**
* 解密 * 解密
*
* @param s 需要解密的字符串 * @param s 需要解密的字符串
* @return 解密后的内容 * @return 解密后的内容
*/ */
public static String deCode(String s) { public static String deCode(String s) {
return new DesHelper().stringDec(s, KEY); return new DesHelper().stringDec(s, KEY);
@ -44,6 +40,7 @@ public class DesEncryptHelper {
/** /**
* 自定义key的加密 * 自定义key的加密
*
* @param s * @param s
* @param strKey 自定义的key * @param strKey 自定义的key
* @return * @return
@ -54,22 +51,28 @@ public class DesEncryptHelper {
/** /**
* 自定义key的解密 * 自定义key的解密
*
* @param s * @param s
* @param strKey 自定义的key * @param strKey 自定义的key
* @return * @return
*/ */
public static String deCode(String s, String strKey) { public static String deCode(String s, String strKey) {
return new DesHelper().stringDec(s, strKey); return new DesHelper().stringDec(s, strKey);
} }
public static char[] enCodeChar(String s, String strKey) { public static char[] enCodeChar(String s, String strKey) {
return new DesHelper().charEnc(s, strKey); return new DesHelper().charEnc(s, strKey);
} }
public static char[] deCodeChar(String s, String strKey) { public static char[] deCodeChar(String s, String strKey) {
return new DesHelper().charDec(s, strKey); return new DesHelper().charDec(s, strKey);
} }
// public static void main(String[] args) throws Exception { // public static void main(String[] args) throws Exception {
//// System.out.println(DesEncryptHelper.enCode("oeso-t5DIu2qpb0LJaKeJ06TRgzw", KEY)); // String s = enCode("oeso-t62kkoRwLVVkSkwmmjPfUXk");
// System.out.println(DesEncryptHelper.deCode("39E1BBDCA603241A017F6ABE802153ED94B2C5CD51DE268E63ECC53A8EE8241AF4D8E90E7C01D67D096AC60B3942817CBA8EEAF25B3BAA360566BE598C989659F6DC8A37E07FA5BD266A255BF3BE7256A82D9541864884310EA1F949CDAA9DEB3494C2EE12F16D7C27CF0E8A56BE1D6F9F90987EC1614A7F6C1541EDB5C496174054C25180DA77270F93E7A6564708BCA688FC09355CD0AC9605D6E07CBC7FA3", KEY)); // String a = deCode("2235AE2E1563DF971CBF4C3F2D4DC06F1D0AA3BF5EA65B865C5DF0E0694DF3FFBA5360D9607A60F80CC71F9C7D7E8F241E00310C63D5C5B414D5FEB43A0B2E7A2AA335CD601DB3727BAF0DFEDB48388CFEA7A8301CDEAA42817F7316E6CBF0B7AC2671148FCA0E2DA337CF664C0C4FD85F7D799D496125D2186D82889E6B81D25107616591DDC46D");
// System.out.println(a);
// } // }
} }

@ -10,6 +10,7 @@ import com.ynxbd.common.service.PatientService;
import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.bean.SnsOath2AccessToken; import com.ynxbd.wx.wxfactory.bean.SnsOath2AccessToken;
import com.ynxbd.wx.wxfactory.bean.SnsUserInfo; import com.ynxbd.wx.wxfactory.bean.SnsUserInfo;
import lombok.extern.slf4j.Slf4j;
import org.ehcache.Cache; import org.ehcache.Cache;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -21,6 +22,7 @@ import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@Slf4j
public class WxAuthHelper { public class WxAuthHelper {
public static String auth(HttpServletRequest request, HttpServletResponse response, boolean isUserInfo) { public static String auth(HttpServletRequest request, HttpServletResponse response, boolean isUserInfo) {
@ -43,7 +45,7 @@ public class WxAuthHelper {
request.getSession().setAttribute("openid", openid); request.getSession().setAttribute("openid", openid);
Cache<String, User> cache = WxCacheHelper.getUserCache(); Cache<String, User> cache = WxCacheHelper.getUserCache();
if (!cache.containsKey(openid)) { if (WeChatConfig.isDevUser(openid) || !cache.containsKey(openid)) {
String unionId = snsToken.getUnionid(); String unionId = snsToken.getUnionid();
User user = new User(); User user = new User();
user.setUnionId(unionId); user.setUnionId(unionId);

@ -16,16 +16,18 @@
#wx.baseURL=http://wx.mzsrmyy.net/wx/ #wx.baseURL=http://wx.mzsrmyy.net/wx/
#wx.webPath=/web #wx.webPath=/web
#wx.password=ynxbd@6910 #wx.password=ynxbd@6910
## 开启处方预结算(第2开关)(注意该配置需联系HIS开发者确认支持才能开启,否则存在风险!) ## \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
#wx.is_recipe_prepay=true #wx.is_recipe_prepay=true
# 芒市妇幼配置 # \u8292\u5E02\u5987\u5E7C\u914D\u7F6E
wx.appId=wx7d33a52af019f134 wx.appId=wx7d33a52af019f134
wx.appSecret=56ac2bc26672f05f06d6c557d978c0b1 wx.appSecret=56ac2bc26672f05f06d6c557d978c0b1
wx.token=ynxbd wx.token=ynxbd
wx.aesKey=SvUOQUIaawWoB6ptViNqcYkrTs1bmq5cbhiBglhtkct wx.aesKey=SvUOQUIaawWoB6ptViNqcYkrTs1bmq5cbhiBglhtkct
wx.mchId=1605084861 wx.mchId=1605084861
wx.mchKey=MsfyBJ8871934EKFJA03jdslkfajAaBC wx.mchKey=MsfyBJ8871934EKFJA03jdslkfajAaBC
wx.baseURL=http://www.msfyy.com/wx/ wx.baseURL=http://127.0.0.1/wx/
wx.webPath=/web wx.webPath=/web
wx.password=ynxbd@6910 wx.password=ynxbd@6910
# \u7ED5\u8FC7\u7528\u6237\u7F13\u5B58\uFF1A\u82F1\u6587\u9017\u53F7\u9694\u5F00
wx.dev_open_ids=1,2,3

@ -1,9 +1,9 @@
# \u4E91\u80F6\u7247\u5730\u5740 # \u4E91\u80F6\u7247\u5730\u5740
xbd.out_team_cloud_film_link= http://192.168.10.43:3307/wx3307 xbd.200.token_url=http://10.20.10.41:8082
# \u75C5\u5386\u590D\u5370 # \u75C5\u5386\u590D\u5370
xbd.medical_record_remake_url = http://192.168.12.66:8081 xbd.200.med_record_copy_url=http://192.168.12.66:8081
# \u4F53\u68C0 # \u4F53\u68C0
xbd.peis = http://192.168.12.102:3000/peisReserve xbd.100.peis_url=http://192.168.12.102:3000/peisReserve
#location /wx3303{ #location /wx3303{

Loading…
Cancel
Save