1、支付相关下单和退费接口调整

debug
王绍全 6 days ago
parent bc10372a7d
commit e0f05ffd2f
  1. 4
      src/main/java/com/ynxbd/common/action/WechatMiniAction.java
  2. 4
      src/main/java/com/ynxbd/common/action/XBDAction.java
  3. 11
      src/main/java/com/ynxbd/common/action/auth/WxAuthAction.java
  4. 6
      src/main/java/com/ynxbd/common/action/pay/MedicalAction.java
  5. 40
      src/main/java/com/ynxbd/common/action/pay/PayAction.java
  6. 9
      src/main/java/com/ynxbd/common/action/pay/ThirdPartyPayAction.java
  7. 2
      src/main/java/com/ynxbd/common/action/test/TestAction.java
  8. 508
      src/main/java/com/ynxbd/common/bean/enums/MerchantEnum.java
  9. 7
      src/main/java/com/ynxbd/common/bean/pay/Order.java
  10. 24
      src/main/java/com/ynxbd/common/bean/pay/Register.java
  11. 4
      src/main/java/com/ynxbd/common/dao/InHospPayDao.java
  12. 119
      src/main/java/com/ynxbd/common/dao/RecipeDao.java
  13. 16
      src/main/java/com/ynxbd/common/dao/RegisterDao.java
  14. 69
      src/main/java/com/ynxbd/common/dao/his/HisRegisterDao.java
  15. 37
      src/main/java/com/ynxbd/common/helper/common/CodeHelper.java
  16. 2
      src/main/java/com/ynxbd/common/helper/his/HisHelper.java
  17. 6
      src/main/java/com/ynxbd/common/service/CasebookService.java
  18. 2
      src/main/java/com/ynxbd/common/service/InHospService.java
  19. 28
      src/main/java/com/ynxbd/common/service/MedicalService.java
  20. 15
      src/main/java/com/ynxbd/common/service/PayService.java
  21. 29
      src/main/java/com/ynxbd/common/service/RecipeService.java
  22. 37
      src/main/java/com/ynxbd/common/service/RegService.java
  23. 14
      src/main/java/com/ynxbd/wx/config/WeChatConfig.java
  24. 2
      src/main/java/com/ynxbd/wx/servlet/oldpay/QRPayServlet.java
  25. 10
      src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java
  26. 12
      src/main/java/com/ynxbd/wx/wxfactory/WxMiniHelper.java
  27. 25
      src/main/java/com/ynxbd/wx/wxfactory/WxPayHelper.java
  28. 2
      src/main/resources/webservice.properties
  29. 5
      src/main/resources/wx.properties

@ -36,7 +36,7 @@ public class WechatMiniAction extends BaseAction {
return result;
}
MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByAuthCode(authCode);
MerchantEnum merchantEnum = MerchantEnum.findEnumByAuthCode(authCode);
if (merchantEnum == null) {
log.info("[外采支付]条码不符合规则 authCode={}", authCode);
return Result.error(ResultEnum.PAY_AUTH_CODE_RULES_ERROR); // 条码不符合规则
@ -48,7 +48,7 @@ public class WechatMiniAction extends BaseAction {
}
String ip = HttpHelper.getIpAddress(request);
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
Order order = PayService.payMicro(merchantEnum, outTradeNo, title, totalFee, authCode, ip);
if (!order.isSuccess()) {

@ -252,7 +252,7 @@ public class XBDAction extends BaseAction {
* @return 支付回调参数
*/
@Action("caseBookPay")
public Result caseBookPay(String payCode, String openid, @AesDecode String patientId, String patientName, String treatNum, BigDecimal totalFee, String applyId, Integer getWay, String useToNo, String useToName, String address, String phone) {
public Result caseBookPay(String payCode, String payOpenId, String openid, @AesDecode String patientId, String patientName, String treatNum, BigDecimal totalFee, String applyId, Integer getWay, String useToNo, String useToName, String address, String phone) {
try {
log.info("[病历复印]下单 payCode={}, openid={}, patientId={}, patientName={}, treatNum={}, totalFee={}, useToName={}", payCode, openid, patientId, patientName, treatNum, totalFee, useToName);
MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode);
@ -260,7 +260,7 @@ public class XBDAction extends BaseAction {
return Result.error(ResultEnum.PAY_TYPE_ERROR);
}
String ip = request.getRemoteAddr();
return new CasebookService().placeOrder(merchantEnum, ip, openid, patientId, patientName, treatNum, totalFee, applyId, getWay, useToNo, useToName, address, phone);
return new CasebookService().placeOrder(merchantEnum, ip, payOpenId, openid, patientId, patientName, treatNum, totalFee, applyId, getWay, useToNo, useToName, address, phone);
} catch (Exception e) {
return Result.error(e);
}

@ -1,10 +1,14 @@
package com.ynxbd.common.action.auth;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.WxAuthHelper;
import com.ynxbd.wx.wxfactory.WxMiniHelper;
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;
@ -38,7 +42,10 @@ public class WxAuthAction extends BaseAction {
@Action("mini_auth")
public Result mini_auth(String jsCode) {
String auth = WxMiniHelper.auth(jsCode);
return Result.success();
if (ObjectUtils.isEmpty(jsCode)) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
JSONObject auth = WxMiniHelper.auth(WeChatConfig.GMC_MINI_APP_ID, WeChatConfig.GMC_MINI_APP_SECRET, jsCode);
return Result.success(auth);
}
}

@ -174,7 +174,7 @@ public class MedicalAction extends BaseAction {
* @param familyCardNo 家人证件号码非必传
*/
@Action("order")
public Result order(String callNo, String payCode, String openid, String patientId, String cardNo, String realName, String treatNum, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId,
public Result order(String callNo, String payCode, String payOpenId, String openid, String patientId, String cardNo, String realName, String treatNum, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId,
BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) {
try {
log.info("[医保]下单入参 callNo={}, payCode={}, openid={}, patientId={}, totalFee={}", callNo, payCode, openid, patientId, totalFee);
@ -186,7 +186,7 @@ public class MedicalAction extends BaseAction {
case REG:
Register reg = new Register().getRegParams(new RequestParams(request), true);
return new MedicalService().createRegOrder(payCode, openid, cardNo, realName, ip, payOrdId, payAuthNo, mdTrtId, chrgBchno, mdUserId,
return new MedicalService().createRegOrder(payCode, payOpenId, openid, cardNo, realName, ip, payOrdId, payAuthNo, mdTrtId, chrgBchno, mdUserId,
totalFee, acctFee, hifpFee, insuranceFee, cashFee, callNo, reg,
familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId);
@ -196,7 +196,7 @@ public class MedicalAction extends BaseAction {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
String payWay = getString("payWay");
return new MedicalService().createRxOrder(payCode, openid, patientId, cardNo, realName, ip,
return new MedicalService().createRxOrder(payCode, payOpenId, openid, patientId, cardNo, realName, ip,
payOrdId, payAuthNo, mdTrtId, chrgBchno, mdUserId,
totalFee, acctFee, hifpFee, insuranceFee, cashFee,
callNo, recipeJson, treatNum, payWay, familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId);

@ -54,7 +54,6 @@ public class PayAction extends BaseAction {
log.info("[挂号]下单 payCode={}, isOccupySource={}, isZeroPay={}", payCode, isOccupySource, isZeroPay);
try {
Register reg = new Register().getRegParams(new RequestParams(request), true);
String ip = HttpHelper.getIpAddress(request);
return new RegService().createRegOrder(payCode, ip, isOccupySource, isZeroPay, reg, isHttpsWithProxy());
@ -78,7 +77,7 @@ public class PayAction extends BaseAction {
* @param awaitSecond 待秒数0继续执行不等待不传或null 为0
*/
@Action("recipePay")
public Result recipePay(boolean isPrepay, String payCode, String openid, String patientId, String treatNum, String totalFee, String recipeJson, String payWay, Integer awaitSecond) {
public Result recipePay(boolean isPrepay, String payCode, String payOpenId, String openid, String patientId, String treatNum, String totalFee, String recipeJson, String payWay, Integer awaitSecond) {
MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode);
if (merchantEnum == null) { // 支付方式异常
return Result.error(ResultEnum.PAY_TYPE_ERROR);
@ -94,7 +93,7 @@ public class PayAction extends BaseAction {
}
}
Result result = recipeService.recipeHand(merchantEnum, openid, patientId, treatNum, totalFee, recipeJson, payWay, awaitSecond, isHttpsWithProxy());
Result result = recipeService.recipeHand(merchantEnum, payOpenId, openid, patientId, treatNum, totalFee, recipeJson, payWay, awaitSecond, isHttpsWithProxy());
if (!result.isOK() || result.getData() != null) { // 业务错误 || 存在返回数据-需提前返回
return result;
}
@ -111,9 +110,9 @@ public class PayAction extends BaseAction {
}
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
// 订单信息预存
if (!recipeService.isSaveRecipeInfo(recipeJson, payWay, openid, patientId, treatNum, outTradeNo, totalFee)) {
if (!recipeService.saveRecipeInfo(merchantEnum, payOpenId, openid, recipeJson, payWay, patientId, treatNum, outTradeNo, totalFee)) {
log.info("{} [处方支付]预存支付信息失败 patientId={}", merchantEnum.NAME, patientId);
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
}
@ -121,7 +120,7 @@ public class PayAction extends BaseAction {
String ip = request.getRemoteAddr();
String body = "诊间支付 患者:" + patientId + "\n门诊号:" + treatNum;
JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, totalFee, outTradeNo, PEnum.RECIPE.CODE, ip, body);
JSONObject respJson = PayService.createOrder(merchantEnum, payOpenId, openid, patientId, totalFee, outTradeNo, PEnum.RECIPE.CODE, ip, body);
// 支付异常
if (respJson == null) {
return Result.error(ResultEnum.PAY_ERROR);
@ -136,15 +135,14 @@ public class PayAction extends BaseAction {
* * @param payCode 退款支付方式 { ali支付宝wx微信 }
*/
@Action("inHospDepositPay")
public Result inHospDepositPay(String openid, String patientId, String patientName, String treatNum, String payMoney, String payWay, String payCode) {
public Result inHospDepositPay(String payCode, String payOpenId, String openid, String patientId, String patientName, String treatNum, String payMoney, String payWay) {
Result result = PayService.isPaymentPermittedByTime();
if (result != null) {
return result;
}
MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode);
if (merchantEnum == null) {
// 支付方式异常
if (merchantEnum == null) { // 支付方式异常
return Result.error(ResultEnum.PAY_TYPE_ERROR);
}
log.info("{} [住院]预交金信息预存 payCode={}, openid={}, patientId={}, patientName={}, payMoney={}, treatNum={}", merchantEnum.NAME, payCode, openid, patientId, patientName, payMoney, treatNum);
@ -155,7 +153,7 @@ public class PayAction extends BaseAction {
String ip = request.getRemoteAddr();
String body = "住院缴费 患者:" + patientId + " 住院号:" + treatNum;
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
PayInHosp payInHosp = new PayInHosp();
payInHosp.setOpenid(openid);
@ -166,6 +164,8 @@ public class PayAction extends BaseAction {
payInHosp.setTotalFee(new BigDecimal(payMoney));
payInHosp.setPayWay(payWay);
payInHosp.setOutTradeNo(outTradeNo);
payInHosp.setPayOpenId(payOpenId);
payInHosp.setPayMchCode(merchantEnum.CODE);
boolean isResult = new InHospService().saveInHospPayInfo(payInHosp);
if (!isResult) {
@ -173,7 +173,7 @@ public class PayAction extends BaseAction {
return Result.error(ResultEnum.PAY_PREPAY_SAVE_ERROR);
}
JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, payMoney, outTradeNo, PEnum.IN_HOSP.CODE, ip, body);
JSONObject respJson = PayService.createOrder(merchantEnum, payOpenId, openid, patientId, payMoney, outTradeNo, PEnum.IN_HOSP.CODE, ip, body);
if (respJson == null) {
// 支付异常
return Result.error(ResultEnum.PAY_ERROR);
@ -203,7 +203,7 @@ public class PayAction extends BaseAction {
return result;
}
MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByAuthCode(authCode);
MerchantEnum merchantEnum = MerchantEnum.findEnumByAuthCode(authCode);
if (merchantEnum == null) {
log.info("[盒子支付]条码不符合规则 authCode={}", authCode);
return Result.error(ResultEnum.PAY_AUTH_CODE_RULES_ERROR); // 条码不符合规则
@ -230,7 +230,7 @@ public class PayAction extends BaseAction {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
Order order = PayService.saveMicroOrderNo(pEnum, merchantEnum, outTradeNo, authCode, treatNum, patientId, operateUser, invoiceTransNo, totalFee, regDate);
if (!order.isSuccess()) {
return Result.error(order.getErrorMsg());
@ -736,7 +736,7 @@ public class PayAction extends BaseAction {
* [在线问诊]支付
*/
@Action("createOLOrder")
public Result createOLOrder(String payCode, String outTradeNo, String enOutTradeNo, String openid, String patientId, BigDecimal totalFee, String deptCode, String deptName, String doctName, String doctCode) {
public Result createOLOrder(String payCode, String payOpenId, String openid, String outTradeNo, String enOutTradeNo, String patientId, BigDecimal totalFee, String deptCode, String deptName, String doctName, String doctCode) {
log.info("[问诊]订单创建 payCode={}, outTradeNo={}, enOutTradeNo={}, deptCode={}, doctCode={}, totalFee={}", payCode, outTradeNo, enOutTradeNo, deptCode, doctCode, totalFee);
if (totalFee == null || ObjectUtils.isEmpty(openid) || ObjectUtils.isEmpty(patientId) || ObjectUtils.isEmpty(deptName) || ObjectUtils.isEmpty(doctName)) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
@ -745,7 +745,7 @@ public class PayAction extends BaseAction {
return Result.error(ResultEnum.PAY_MONEY_IS_ZERO);
}
if (ObjectUtils.isEmpty(outTradeNo)) {
outTradeNo = CodeHelper.getOutTradeNo(MerchantEnum.WX);
outTradeNo = MerchantEnum.WX.createOutTradeNo();
} else {
if (outTradeNo.length() > 32) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
@ -762,7 +762,7 @@ public class PayAction extends BaseAction {
String ip = HttpHelper.getIpAddress(request);
String body = "在线问诊:" + deptName + "-" + doctName;
JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, totalFee.toString(), outTradeNo, PEnum.OL_REG.CODE, ip, body);
JSONObject respJson = PayService.createOrder(merchantEnum, payOpenId, openid, patientId, totalFee.toString(), outTradeNo, PEnum.OL_REG.CODE, ip, body);
if (respJson == null) {
return Result.error(ResultEnum.PAY_ERROR); // 支付异常
}
@ -824,7 +824,7 @@ public class PayAction extends BaseAction {
return Result.error(ResultEnum.PAY_MONEY_IS_ZERO);
}
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
try {
new OutCollectService().creatorOCOrder(outTradeNo, totalFee, collectId, openid, mid, name, cardNo, patientId, remark);
@ -861,7 +861,7 @@ public class PayAction extends BaseAction {
* @param noticeOrderNo 体检订单号
*/
@Action("createPEISOrder")
public Result createPEISOrder(String payCode, String openid, String patientId, String treatNum, String totalFee, String noticeOrderNo) {
public Result createPEISOrder(String payCode, String payOpenId, String openid, String patientId, String treatNum, String totalFee, String noticeOrderNo) {
log.info("[体检预约]下单 payCode={}, openid={}, patientId={}, treatNum={}, totalFee={}, noticeOrderNo={}", payCode, openid, patientId, treatNum, totalFee, noticeOrderNo);
MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode);
if (merchantEnum == null) { // 支付方式异常
@ -879,7 +879,7 @@ public class PayAction extends BaseAction {
return Result.error(ResultEnum.PAY_MONEY_IS_ZERO);
}
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
PEISService peisService = new PEISService();
if (peisService.hasPaidByNoticeOrderNo(noticeOrderNo)) {
@ -894,7 +894,7 @@ public class PayAction extends BaseAction {
String ip = request.getRemoteAddr();
String body = "体检预约 患者:" + patientId + "\n体检号:" + treatNum + "\n订单号:" + noticeOrderNo;
JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, totalFee, outTradeNo, PEnum.PEIS_RESERVE.CODE, ip, body);
JSONObject respJson = PayService.createOrder(merchantEnum, payOpenId, openid, patientId, totalFee, outTradeNo, PEnum.PEIS_RESERVE.CODE, ip, body);
if (respJson == null) {
return Result.error(ResultEnum.PAY_ERROR);
}

@ -45,7 +45,7 @@ public class ThirdPartyPayAction extends BaseAction {
}
@Action("qr_reg_pay")
public Result qr_reg_pay(String payCode, String openid, String sourceId, String patientId, BigDecimal money, String date) {
public Result qr_reg_pay(String payCode, String payOpenId, 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);
@ -77,11 +77,12 @@ public class ThirdPartyPayAction extends BaseAction {
reg.setPayDeviceId("mobile");
reg.setPayWay(merchantEnum.PAY_WAY_IN);
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
reg.setOutTradeNo(outTradeNo);
log.info("{} [第三方-扫码挂号]生成 outTradeNo={}", merchantEnum.NAME, outTradeNo);
if (!new RegService().updateRegPrepay(reg)) {
if (!new RegService().saveRegPrepay(reg)) {
log.info("{} [第三方-扫码挂号]预存支付信息失败 patientId={}, sourceId={}", merchantEnum.NAME, patientId, sourceId);
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
}
@ -90,7 +91,7 @@ public class ThirdPartyPayAction extends BaseAction {
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);
JSONObject respJson = PayService.createOrder(merchantEnum, payOpenId, openid, patientId, money.toString(), outTradeNo, PEnum.TPP_QR_REG.CODE, ip, body);
if (respJson == null) {
return Result.error(ResultEnum.PAY_ERROR); // 支付异常
}

@ -32,7 +32,7 @@ public class TestAction extends BaseAction {
public synchronized void refund_handle() {
if (i == 0) {
i++;
WxPayHelper.refund("", "", new BigDecimal("6.230"), new BigDecimal("6.230"), "手动退费");
WxPayHelper.refund(null, "", "", new BigDecimal(" 6.230 "), new BigDecimal(" 6.230 "), " 手动退费 ");
}
}

@ -1,248 +1,260 @@
package com.ynxbd.common.bean.enums;
import com.ynxbd.ali.config.AliMedConfig;
import com.ynxbd.wx.wxfactory.medical.WxMedConfig;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 商户类型
*
* @Author wsq
*/
@Slf4j
@ToString
public enum MerchantEnum {
// 支付宝
ALI("ali", "【支付宝】",
false,
"3",
"25,26,27,28,29,30",
"ali_pay/notify",
"",
"10", "11", "12"),
// 微信
WX("wx", "【微信】",
false,
"4",
"10,11,12,13,14,15",
"wx_pay/apiNotify",
"wx_pay/nativeNotify",
"0", "1", "2"),
BCM("bcm", "【交行】",
false,
"4",
"",
"bcm_pay/notify",
"",
"20", "21", "22"),
WX_MEDICAL("wx_medical", "【微信医保】",
WxMedConfig.IS_DEV,
"4",
"10,11,12,13,14,15",
"medical/payNotify",
"",
"0", "1", "2"),
ALI_MEDICAL("ali_medical", "【支付宝医保】",
AliMedConfig.IS_DEV,
"3",
"25,26,27,28,29,30",
"ali_pay/medical_notify",
"",
"10", "11", "12"),
;
public final String CODE;
public final String NAME;
public final boolean IS_DEV;
public final String HIS_PAY_WAY;
// 条码规则
public final String BAR_CODE_RULES;
// 支付回调通知地址
public final String NOTIFY_URL;
public final String QR_NOTIFY_URL;
// 程序内支付代码
public final String PAY_WAY_IN;
// 扫码支付代码
public final String PAY_WAY_QR;
// 盒子支付代码
public final String PAY_WAY_MICRO;
MerchantEnum(String CODE, String NAME, boolean IS_DEV, String HIS_PAY_WAY, String BAR_CODE_RULES, String NOTIFY_URL, String QR_NOTIFY_URL, String PAY_WAY_IN, String PAY_WAY_QR, String PAY_WAY_MICRO) {
this.CODE = CODE;
this.NAME = NAME;
this.IS_DEV = IS_DEV;
this.HIS_PAY_WAY = HIS_PAY_WAY;
this.BAR_CODE_RULES = BAR_CODE_RULES;
this.NOTIFY_URL = NOTIFY_URL;
this.QR_NOTIFY_URL = QR_NOTIFY_URL;
this.PAY_WAY_IN = PAY_WAY_IN;
this.PAY_WAY_QR = PAY_WAY_QR;
this.PAY_WAY_MICRO = PAY_WAY_MICRO;
}
/**
* 查询支付类型
*
* @param code 用于匹配的编码
* @param defaultMerchant 为空时的返回
* @return enum
*/
public static MerchantEnum findEnumByCode(String code, MerchantEnum defaultMerchant) {
if (ObjectUtils.isEmpty(code)) {
return defaultMerchant;
}
for (MerchantEnum merchantEnum : MerchantEnum.values()) {
if (merchantEnum.CODE.equals(code)) {
return merchantEnum;
}
}
return null;
}
public static MerchantEnum findEnumByCode(String code) {
return findEnumByCode(code, null);
}
/**
* 根据商户订单号获取支付类型
*
* @param outTradeNo 商户订单号
* @return 支付类型
*/
public static MerchantEnum findEnumByOutTradeNo(String outTradeNo) {
if (outTradeNo == null) {
return null;
}
if (outTradeNo.length() < 12) {
log.error("订单号长度小于4 outTradeNo={}", outTradeNo);
return null;
}
if (MerchantEnum.WX.CODE.toUpperCase().equals(outTradeNo.substring(0, 2))) {
return MerchantEnum.WX;
} else if (MerchantEnum.ALI.CODE.toUpperCase().equals(outTradeNo.substring(0, 3))) {
return MerchantEnum.ALI;
} else if (MerchantEnum.BCM.CODE.toUpperCase().equals(outTradeNo.substring(0, 3))) {
return MerchantEnum.BCM;
} else {
return null;
}
}
/**
* 根据数据库中的payWay判断支付方式
*
* @param payWay 支付代码
* @return 支付方式
*/
public static MerchantEnum findEnumByPayWay(String payWay) {
if (ObjectUtils.isEmpty(payWay)) {
return MerchantEnum.WX;
}
for (MerchantEnum item : MerchantEnum.values()) {
if (item.PAY_WAY_IN.equals(payWay) || item.PAY_WAY_QR.equals(payWay) || item.PAY_WAY_MICRO.equals(payWay)) {
return item;
}
}
return null;
}
/**
* 根据扫码的客户端判断支付类型
*
* @param userAgent 用户客户端信息
* @return 支付类型
*/
public static MerchantEnum findEnumByQr(String userAgent) {
if (userAgent.contains("MicroMessenger")) {
return MerchantEnum.WX;
} else if (userAgent.contains("AlipayClient")) {
return MerchantEnum.ALI;
} else {
return null;
}
}
/**
* 根据支付方式获取支付代码集合
*
* @param merchantEnum 支付方式
* @return 支付代码集合
*/
public static List<String> getPayWayValues(MerchantEnum merchantEnum) {
List<String> resultList = new ArrayList<>();
if (merchantEnum == null) {
return resultList;
}
for (MerchantEnum item : MerchantEnum.values()) {
if (item.CODE.equals(merchantEnum.CODE)) {
resultList.add(item.PAY_WAY_IN);
resultList.add(item.PAY_WAY_QR);
resultList.add(item.PAY_WAY_MICRO);
return resultList;
}
}
return resultList;
}
/**
* 根据扫码的客户端判断支付类型
*
* @param authCode 编码
* @return 支付类型
*/
public static MerchantEnum getMerchantEnumByAuthCode(String authCode) {
if (StringUtils.isEmpty(authCode) || authCode.length() < 16) {
return null;
}
String prefix = authCode.substring(0, 2);
for (MerchantEnum item : MerchantEnum.values()) {
if (Arrays.asList(item.BAR_CODE_RULES.split(",")).contains(prefix)) {
return item;
}
}
return null;
}
/**
* 拼接回调地址
*/
public String getNotifyUrl(String outTradeNo, String notifyType) {
return this.NOTIFY_URL + "?notifyType=" + notifyType
+ (ObjectUtils.isEmpty(outTradeNo) ? "" : ("&outTradeNo=" + outTradeNo));
}
public boolean isWx() {
return this == MerchantEnum.WX || this == MerchantEnum.WX_MEDICAL;
}
}
package com.ynxbd.common.bean.enums;
import com.ynxbd.ali.config.AliConfig;
import com.ynxbd.ali.config.AliMedConfig;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.medical.WxMedConfig;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 商户类型
*
* @Author wsq
*/
@Slf4j
@ToString
public enum MerchantEnum {
// 支付宝
ALI("ali", "【支付宝】", AliConfig.APP_ID, "ALI",
false,
"3",
"25,26,27,28,29,30",
"ali_pay/notify",
"",
"10", "11", "12"),
// 微信
WX("wx", "【微信】", WeChatConfig.APP_ID, "WX"
, false,
"4",
"10,11,12,13,14,15",
"wx_pay/apiNotify",
"wx_pay/nativeNotify",
"0", "1", "2"),
// Global Medical Communities
WX_GMC("wx_gmc_mini", "【微信医共体】", WeChatConfig.GMC_MINI_APP_ID, "WMC",
WX.IS_DEV,
WX.HIS_PAY_WAY,
WX.BAR_CODE_RULES,
WX.NOTIFY_URL,
WX.QR_NOTIFY_URL,
WX.PAY_WAY_IN, WX.PAY_WAY_QR, WX.PAY_WAY_MICRO),
WX_MEDICAL("wx_medical", "【微信医保】", WxMedConfig.MD_APP_ID, WX.OUT_TRADE_NO_PREFIX,
WxMedConfig.IS_DEV,
WX.HIS_PAY_WAY,
WX.BAR_CODE_RULES,
"medical/payNotify",
"",
WX.PAY_WAY_IN, WX.PAY_WAY_QR, WX.PAY_WAY_MICRO),
BCM("bcm", "【交行】", "", "BCM",
false,
"4",
"",
"bcm_pay/notify",
"",
"20", "21", "22"),
ALI_MEDICAL("ali_medical", "【支付宝医保】", AliConfig.APP_ID, ALI.OUT_TRADE_NO_PREFIX,
AliMedConfig.IS_DEV,
"3",
"25,26,27,28,29,30",
"ali_pay/medical_notify",
"",
"10", "11", "12"),
;
public final String CODE;
public final String NAME;
public final String APP_ID;
// 商户订单号前缀
public final String OUT_TRADE_NO_PREFIX;
public final boolean IS_DEV;
public final String HIS_PAY_WAY;
// 条码规则
public final String BAR_CODE_RULES;
// 支付回调通知地址
public final String NOTIFY_URL;
public final String QR_NOTIFY_URL;
// 程序内支付代码
public final String PAY_WAY_IN;
// 扫码支付代码
public final String PAY_WAY_QR;
// 盒子支付代码
public final String PAY_WAY_MICRO;
MerchantEnum(String CODE, String NAME, String APP_ID, String OUT_TRADE_NO_PREFIX, boolean IS_DEV, String HIS_PAY_WAY, String BAR_CODE_RULES, String NOTIFY_URL, String QR_NOTIFY_URL, String PAY_WAY_IN, String PAY_WAY_QR, String PAY_WAY_MICRO) {
this.CODE = CODE;
this.NAME = NAME;
this.APP_ID = APP_ID;
this.OUT_TRADE_NO_PREFIX = OUT_TRADE_NO_PREFIX;
this.IS_DEV = IS_DEV;
this.HIS_PAY_WAY = HIS_PAY_WAY;
this.BAR_CODE_RULES = BAR_CODE_RULES;
this.NOTIFY_URL = NOTIFY_URL;
this.QR_NOTIFY_URL = QR_NOTIFY_URL;
this.PAY_WAY_IN = PAY_WAY_IN;
this.PAY_WAY_QR = PAY_WAY_QR;
this.PAY_WAY_MICRO = PAY_WAY_MICRO;
}
/**
* 获取不重复的商户订单号
*/
public String createOutTradeNo() {
String prefix = this.OUT_TRADE_NO_PREFIX;
if (prefix.length() > 4) {
prefix = prefix.substring(0, 4);
}
prefix = prefix.toUpperCase();
return prefix + CodeHelper.get28UUID();
}
/**
* 匹配支付类型
*
* @param code 用于匹配的编码
* @param defaultMerchant 为空时的返回
* @return enum
*/
public static MerchantEnum findEnumByCode(String code, MerchantEnum defaultMerchant) {
if (ObjectUtils.isEmpty(code)) {
return defaultMerchant;
}
for (MerchantEnum merchantEnum : MerchantEnum.values()) {
if (merchantEnum.CODE.equals(code)) {
return merchantEnum;
}
}
return null;
}
public static MerchantEnum findEnumByCode(String code) {
return findEnumByCode(code, null);
}
/**
* 根据商户订单号获取支付类型
*
* @param outTradeNo 商户订单号
* @return 支付类型
*/
public static MerchantEnum findEnumByOutTradeNo(String outTradeNo) {
if (outTradeNo == null) {
return null;
}
if (outTradeNo.length() < 12) {
log.error("商户订单号长度小于12位 outTradeNo={}", outTradeNo);
return null;
}
if (MerchantEnum.WX.OUT_TRADE_NO_PREFIX.toUpperCase().equals(outTradeNo.substring(0, MerchantEnum.WX.OUT_TRADE_NO_PREFIX.length()))) {
return MerchantEnum.WX;
} else if (MerchantEnum.WX_GMC.OUT_TRADE_NO_PREFIX.toUpperCase().equals(outTradeNo.substring(0, MerchantEnum.WX_GMC.OUT_TRADE_NO_PREFIX.length()))) {
return MerchantEnum.WX_GMC;
} else if (MerchantEnum.ALI.OUT_TRADE_NO_PREFIX.toUpperCase().equals(outTradeNo.substring(0, MerchantEnum.ALI.OUT_TRADE_NO_PREFIX.length()))) {
return MerchantEnum.ALI;
} else if (MerchantEnum.BCM.OUT_TRADE_NO_PREFIX.toUpperCase().equals(outTradeNo.substring(0, MerchantEnum.BCM.OUT_TRADE_NO_PREFIX.length()))) {
return MerchantEnum.BCM;
} else {
return null;
}
}
/**
* 根据数据库中的payWay判断支付方式
*
* @param payWay 支付代码
* @return 支付方式
*/
public static MerchantEnum findEnumByPayWay(String payWay) {
if (ObjectUtils.isEmpty(payWay)) {
return MerchantEnum.WX;
}
for (MerchantEnum item : MerchantEnum.values()) {
if (item.PAY_WAY_IN.equals(payWay) || item.PAY_WAY_QR.equals(payWay) || item.PAY_WAY_MICRO.equals(payWay)) {
return item;
}
}
return null;
}
/**
* 根据扫码的客户端判断支付类型
*
* @param userAgent 用户客户端信息
* @return 支付类型
*/
public static MerchantEnum findEnumByQr(String userAgent) {
if (userAgent.contains("MicroMessenger")) {
return MerchantEnum.WX;
} else if (userAgent.contains("AlipayClient")) {
return MerchantEnum.ALI;
} else {
return null;
}
}
/**
* 根据扫码的客户端判断支付类型
*
* @param authCode 编码
* @return 支付类型
*/
public static MerchantEnum findEnumByAuthCode(String authCode) {
if (StringUtils.isEmpty(authCode) || authCode.length() < 16) {
return null;
}
String prefix = authCode.substring(0, 2);
for (MerchantEnum item : MerchantEnum.values()) {
if (Arrays.asList(item.BAR_CODE_RULES.split(",")).contains(prefix)) {
return item;
}
}
return null;
}
/**
* 拼接回调地址
*/
public String getNotifyUrl(String outTradeNo, String notifyType) {
return this.NOTIFY_URL + "?notifyType=" + notifyType
+ (ObjectUtils.isEmpty(outTradeNo) ? "" : ("&outTradeNo=" + outTradeNo));
}
public boolean isWx() {
return this == MerchantEnum.WX || this == MerchantEnum.WX_MEDICAL;
}
}

@ -33,6 +33,10 @@ public class Order implements Serializable {
private Date updateTime;
// openid
private String openid;
// 用于支付的openId
private String payOpenId;
// 支付商户编码
private String payMchCode;
// 患者id
private String patientId;
// 加密的patientId
@ -69,8 +73,11 @@ public class Order implements Serializable {
private String merchantName;
// 单笔金额
private BigDecimal payMoney;
// 加密支付金额
private String enPayMoney;
// 订单总金额
private BigDecimal totalFee;
// 记录支付完成状态的时间
private Date payStatusTime;
// 商户支付状态

@ -1,14 +1,17 @@
package com.ynxbd.common.bean.pay;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.RegService;
import com.ynxbd.common.service.params.RequestParams;
import com.ynxbd.wx.wxfactory.AesWxHelper;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;
@ -40,7 +43,6 @@ public class Register extends Order {
private BigDecimal regFee;
private BigDecimal clinicFee;
private String enTotalFee; // 加密订单总金额
private String clinicCode;
private String clinicName;
@ -125,15 +127,25 @@ public class Register extends Order {
*/
public Register getRegParams(RequestParams params, boolean isDesc) throws ServiceException {
String openid = params.getString("openid");
String patientId = params.getString("patientId");
String cardNo = params.getString("idCardNo");
String payOpenId = params.getString("payOpenId"); // 下单的openId
String patientName = params.getString("patientName");
if (cardNo == null) {
String patientId = AesWxHelper.decode(params.getString("enPatientId"));
if (ObjectUtils.isEmpty(patientId)) {
patientId = params.getString("patientId");
}
String cardNo = AesWxHelper.decode(params.getString("enCardNo"));
if (ObjectUtils.isEmpty(cardNo)) {
cardNo = params.getString("idCardNo");
}
if (ObjectUtils.isEmpty(cardNo)) {
cardNo = params.getString("cardNo");
}
BigDecimal payMoney = params.getBigDecimal("payMoney");
BigDecimal totalFee = params.getBigDecimal("totalFee");
String enPayMoney = params.getString("enPayMoney");
String deptCode = params.getString("deptCode");
String subDeptCode = params.getString("subDeptCode");
@ -230,11 +242,15 @@ public class Register extends Order {
// 金额
this.setPayMoney(payMoney);
this.setTotalFee(totalFee);
this.setEnPayMoney(enPayMoney);
// 个人信息
this.setOpenid(openid);
this.setPayOpenId(payOpenId);
this.setPatientId(patientId);
this.setPatientName(patientName);
this.setIdCardNo(cardNo);
return this;
}
}

@ -33,7 +33,7 @@ public class InHospPayDao {
* @return 是否成功
*/
public boolean insert(PayInHosp payInHosp) {
String sql = "insert into pay_in_hosp(updateTime, hisStatus, payStatus, openid, patientId, patientName, outTradeNo, bankTransNo, tradeNo, treatNum, payWay, payMoney, authCode, invoiceTransNo, hisTransNo, operateUser, totalFee, payOrdId, AcctFee, HifpFee, ChrgBchno, MdTrtId, MdUserId) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?)";
String sql = "insert into pay_in_hosp(updateTime, hisStatus, payStatus, openid, patientId, patientName, outTradeNo, bankTransNo, tradeNo, treatNum, payWay, payMoney, authCode, invoiceTransNo, hisTransNo, operateUser, totalFee, payOrdId, AcctFee, HifpFee, ChrgBchno, MdTrtId, MdUserId, payMchCode, payOpenId) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
return DataBase.insert(sql, ps -> {
ps.setInt(1, payInHosp.getHisStatus());
ps.setInt(2, payInHosp.getPayStatus());
@ -58,6 +58,8 @@ public class InHospPayDao {
ps.setString(20, payInHosp.getChrgBchno());
ps.setString(21, payInHosp.getMdTrtId());
ps.setString(22, payInHosp.getMdUserId());
ps.setString(23, payInHosp.getPayMchCode());
ps.setString(24, payInHosp.getPayOpenId());
}) > 0;
}

@ -9,6 +9,8 @@ import com.ynxbd.common.helper.his.HisHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.*;
import java.util.stream.Collectors;
@ -58,48 +60,9 @@ public class RecipeDao {
*/
public boolean isHisPaidByOutTradeNo(String outTradeNo) {
String sql = "select * from pay where outTradeNo=? and hisStatus=0";
return DataBase.select(sql, Recipe.class, ps -> {
return !DataBase.select(sql, Recipe.class, ps -> {
ps.setString(1, outTradeNo);
}).size() > 0;
}
/**
* 处方支付数据预存单个
*
* @param recipe 支付信息
* @return 是否存储成功
*/
public boolean insert(Recipe recipe) {
String sql = "insert into pay(updateTime, hisStatus, payStatus, openId, patientId, payWay, payMoney, totalFee, outTradeNo, bankTransNo, tradeNo, recipeId, treatNum, authCode, invoiceTransNo, hisTransNo, operateUser, deptCode, deptName, reqDeptCode, reqDeptName, hospitalArea, feeId, feeInfo, orderType) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?)";
return DataBase.insert(sql, ps -> {
ps.setInt(1, recipe.getHisStatus());
ps.setInt(2, recipe.getPayStatus());
ps.setString(3, recipe.getOpenid());
ps.setString(4, recipe.getPatientId());
ps.setString(5, recipe.getPayWay());
ps.setBigDecimal(6, recipe.getPayMoney());
ps.setBigDecimal(7, recipe.getTotalFee());
//
ps.setString(8, recipe.getOutTradeNo());
ps.setString(9, recipe.getBankTransNo());
ps.setString(10, recipe.getTradeNo());
ps.setString(11, recipe.getRecipeId());
ps.setString(12, recipe.getTreatNum());
ps.setString(13, recipe.getAuthCode());
ps.setString(14, recipe.getInvoiceTransNo());
ps.setString(15, recipe.getHisTransNo());
ps.setString(16, recipe.getOperateUser());
ps.setString(17, recipe.getDeptCode());
ps.setString(18, recipe.getDeptName());
ps.setString(19, recipe.getReqDeptCode());
ps.setString(20, recipe.getReqDeptName());
ps.setString(21, recipe.getHospitalArea());
ps.setString(22, recipe.getFeeId());
ps.setString(23, recipe.getFeeInfo());
ps.setString(24, recipe.getOrderType());
}) > 0;
}).isEmpty();
}
@ -110,7 +73,7 @@ public class RecipeDao {
* @return 是否存储成功
*/
public boolean insertMedical(Recipe recipe) {
String sql = "insert into pay(updateTime, hisStatus, payStatus, openId, patientId, payWay, payMoney, totalFee, outTradeNo, bankTransNo, tradeNo, recipeId, treatNum, authCode, invoiceTransNo, hisTransNo, operateUser, deptCode, deptName, reqDeptCode, reqDeptName, hospitalArea, PayOrdId, AcctFee, HifpFee, ChrgBchno, MdTrtId, MdUserId, RecipeJson) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?)";
String sql = "insert into pay(updateTime, hisStatus, payStatus, openId, patientId, payWay, payMoney, totalFee, outTradeNo, bankTransNo, tradeNo, recipeId, treatNum, authCode, invoiceTransNo, hisTransNo, operateUser, deptCode, deptName, reqDeptCode, reqDeptName, hospitalArea, PayOrdId, AcctFee, HifpFee, ChrgBchno, MdTrtId, MdUserId, RecipeJson, PayMchCode, PayOpenId) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?)";
return DataBase.insert(sql, ps -> {
ps.setInt(1, recipe.getHisStatus());
ps.setInt(2, recipe.getPayStatus());
@ -144,10 +107,43 @@ public class RecipeDao {
ps.setString(26, recipe.getMdTrtId());
ps.setString(27, recipe.getMdUserId());
ps.setString(28, recipe.getRecipeJson());
ps.setString(29, recipe.getPayMchCode());
ps.setString(30, recipe.getPayOpenId());
}) > 0;
}
private void setRxInsertPs(PreparedStatement ps, Recipe recipe) throws SQLException {
ps.setInt(1, recipe.getHisStatus());
ps.setInt(2, recipe.getPayStatus());
ps.setString(3, recipe.getOpenid());
ps.setString(4, recipe.getPatientId());
ps.setString(5, recipe.getPayWay());
ps.setBigDecimal(6, recipe.getPayMoney());
ps.setBigDecimal(7, recipe.getTotalFee());
//
ps.setString(8, recipe.getOutTradeNo());
ps.setString(9, recipe.getBankTransNo());
ps.setString(10, recipe.getTradeNo());
ps.setString(11, recipe.getRecipeId());
ps.setString(12, recipe.getTreatNum());
ps.setString(13, recipe.getAuthCode());
ps.setString(14, recipe.getInvoiceTransNo());
ps.setString(15, recipe.getHisTransNo());
ps.setString(16, recipe.getOperateUser());
ps.setString(17, recipe.getDeptCode());
ps.setString(18, recipe.getDeptName());
ps.setString(19, recipe.getReqDeptCode());
ps.setString(20, recipe.getReqDeptName());
ps.setString(21, recipe.getHospitalArea());
ps.setString(22, recipe.getFeeId());
ps.setString(23, recipe.getFeeInfo());
ps.setString(24, recipe.getOrderType());
ps.setString(25, recipe.getPayMchCode());
ps.setString(26, recipe.getPayOpenId());
}
/**
* 处方支付数据预存(集合)
*
@ -155,40 +151,25 @@ public class RecipeDao {
* @return 是否存储成功
*/
public int insertBatch(List<Recipe> recipeList) {
String sql = "insert into pay(updateTime, hisStatus, payStatus, openId, patientId, payWay, payMoney, totalFee, outTradeNo, bankTransNo, tradeNo, recipeId, treatNum, authCode, invoiceTransNo, hisTransNo, operateUser, deptCode, deptName, reqDeptCode, reqDeptName, hospitalArea, feeId, feeInfo, orderType) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?)";
String sql = "insert into pay(updateTime, hisStatus, payStatus, openId, patientId, payWay, payMoney, totalFee, outTradeNo, bankTransNo, tradeNo, recipeId, treatNum, authCode, invoiceTransNo, hisTransNo, operateUser, deptCode, deptName, reqDeptCode, reqDeptName, hospitalArea, feeId, feeInfo, orderType, payMchCode, payOpenId) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?)";
if (recipeList.size() == 1) {
return DataBase.insert(sql, ps -> {
setRxInsertPs(ps, recipeList.get(0));
});
}
return DataBase.insertBatch(sql, ps -> {
for (Recipe recipe : recipeList) {
ps.setInt(1, recipe.getHisStatus());
ps.setInt(2, recipe.getPayStatus());
ps.setString(3, recipe.getOpenid());
ps.setString(4, recipe.getPatientId());
ps.setString(5, recipe.getPayWay());
ps.setBigDecimal(6, recipe.getPayMoney());
ps.setBigDecimal(7, recipe.getTotalFee());
//
ps.setString(8, recipe.getOutTradeNo());
ps.setString(9, recipe.getBankTransNo());
ps.setString(10, recipe.getTradeNo());
ps.setString(11, recipe.getRecipeId());
ps.setString(12, recipe.getTreatNum());
ps.setString(13, recipe.getAuthCode());
ps.setString(14, recipe.getInvoiceTransNo());
ps.setString(15, recipe.getHisTransNo());
ps.setString(16, recipe.getOperateUser());
ps.setString(17, recipe.getDeptCode());
ps.setString(18, recipe.getDeptName());
ps.setString(19, recipe.getReqDeptCode());
ps.setString(20, recipe.getReqDeptName());
ps.setString(21, recipe.getHospitalArea());
ps.setString(22, recipe.getFeeId());
ps.setString(23, recipe.getFeeInfo());
ps.setString(24, recipe.getOrderType());
setRxInsertPs(ps, recipe);
ps.addBatch();
}
});
}
public boolean insert(Recipe recipe) {
return insertBatch(Collections.singletonList(recipe)) > 0;
}
/**
* 查询同一次支付的所有处方信息多处方一次支付多张发票

@ -104,7 +104,7 @@ public class RegisterDao {
List<Dept> resultList = DataBase.select(sql, Dept.class, ps -> {
ps.setString(1, deptCode);
});
return resultList.size() > 0 ? resultList.get(0) : null;
return resultList.isEmpty() ? null : resultList.get(0);
}
/**
@ -167,7 +167,7 @@ public class RegisterDao {
ps.setString(3, deptCode);
});
if (regs.size() > 0) {
if (!regs.isEmpty()) {
return true;
}
@ -291,8 +291,8 @@ public class RegisterDao {
if (reg.getPayMoney() == null) {
reg.setPayMoney(reg.getTotalFee());
}
String sql = "insert into register(updateTime, hisStatus, payStatus, openid, patientId, idCardNo, outTradeNo, bankTransNo, tradeNo, regFee, clinicFee, totalFee, payMoney, address, deptCode, deptName, doctCode, doctName, payDeviceId, clinicCode, regType, regDate, regCode, tid, tName, begTime, endTime, treatNum, queueNum, sourceId, tel, payWay, authCode, invoiceTransNo, hisTransNo, operateUser, HospitalArea, subDeptCode)"
+ " values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?)";
String sql = "insert into register(updateTime, hisStatus, payStatus, openid, patientId, idCardNo, outTradeNo, bankTransNo, tradeNo, regFee, clinicFee, totalFee, payMoney, address, deptCode, deptName, doctCode, doctName, payDeviceId, clinicCode, regType, regDate, regCode, tid, tName, begTime, endTime, treatNum, queueNum, sourceId, tel, payWay, authCode, invoiceTransNo, hisTransNo, operateUser, HospitalArea, subDeptCode, payMchCode, payOpenId)"
+ " values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?)";
return DataBase.insert(sql, ps -> {
ps.setInt(1, reg.getHisStatus());
ps.setInt(2, reg.getPayStatus());
@ -338,6 +338,8 @@ public class RegisterDao {
ps.setString(35, reg.getOperateUser());
ps.setString(36, reg.getHospitalArea());
ps.setString(37, reg.getSubDeptCode());
ps.setString(38, reg.getPayMchCode());
ps.setString(39, reg.getPayOpenId());
}) > 0;
}
@ -349,8 +351,8 @@ public class RegisterDao {
* @return 是否成功
*/
public boolean insertMedical(Register reg) {
String sql = "insert into register(updateTime, hisStatus, payStatus, openid, patientId, idCardNo, outTradeNo, bankTransNo, tradeNo, regFee, clinicFee, totalFee, payMoney, address, deptCode, deptName, doctCode, doctName, payDeviceId, clinicCode, regType, regDate, regCode, tid, tName, begTime, endTime, treatNum, queueNum, sourceId, tel, payWay, authCode, invoiceTransNo, hisTransNo, operateUser, HospitalArea, subDeptCode, AcctFee, HifpFee, ChrgBchno, MdTrtId, MdUserId, PayOrdId)"
+ " values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?)";
String sql = "insert into register(updateTime, hisStatus, payStatus, openid, patientId, idCardNo, outTradeNo, bankTransNo, tradeNo, regFee, clinicFee, totalFee, payMoney, address, deptCode, deptName, doctCode, doctName, payDeviceId, clinicCode, regType, regDate, regCode, tid, tName, begTime, endTime, treatNum, queueNum, sourceId, tel, payWay, authCode, invoiceTransNo, hisTransNo, operateUser, HospitalArea, subDeptCode, AcctFee, HifpFee, ChrgBchno, MdTrtId, MdUserId, PayOrdId, payMchCode, payOpenId)"
+ " values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
return DataBase.insert(sql, ps -> {
ps.setInt(1, reg.getHisStatus());
ps.setInt(2, reg.getPayStatus());
@ -403,6 +405,8 @@ public class RegisterDao {
ps.setString(41, reg.getMdTrtId());
ps.setString(42, reg.getMdUserId());
ps.setString(43, reg.getPayOrdId());
ps.setString(44, reg.getPayMchCode());
ps.setString(45, reg.getPayOpenId());
}) > 0;
}

@ -13,6 +13,7 @@ import com.ynxbd.common.helper.his.HisEnum;
import com.ynxbd.common.helper.his.HisHelper;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.AesWxHelper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@ -64,7 +65,7 @@ public class HisRegisterDao {
Doctor doctorItem;
JSONObject node;
Register regItem;
BigDecimal regFee, clinicFee;
BigDecimal regFee, clinicFee, payMoney;
for (int i = 0; i < jsonArray.size(); i++) {
node = jsonArray.getJSONObject(i);
doctorItem = new Doctor();
@ -100,7 +101,11 @@ public class HisRegisterDao {
}
regItem.setRegFee(regFee);
regItem.setClinicFee(clinicFee);
regItem.setPayMoney(regFee.add(clinicFee));
// 金额
payMoney = regFee.add(clinicFee);
regItem.setTotalFee(payMoney);
regItem.setPayMoney(payMoney);
regItem.setEnPayMoney(AesWxHelper.encode(payMoney));
doctorItem.setRegister(regItem);
doctorList.add(doctorItem);
@ -153,7 +158,7 @@ public class HisRegisterDao {
Doctor doctorItem;
JSONObject node;
Register regItem;
BigDecimal regFee, clinicFee;
BigDecimal regFee, clinicFee, payMoney;
String today = DateHelper.getCurDate();
for (int i = 0; i < jsonArray.size(); i++) {
node = jsonArray.getJSONObject(i);
@ -188,7 +193,11 @@ public class HisRegisterDao {
}
regItem.setRegFee(regFee);
regItem.setClinicFee(clinicFee);
regItem.setPayMoney(regFee.add(clinicFee));
// 金额
payMoney = regFee.add(clinicFee);
regItem.setTotalFee(payMoney);
regItem.setPayMoney(payMoney);
regItem.setEnPayMoney(AesWxHelper.encode(payMoney));
doctorItem.setRegister(regItem);
doctorList.add(doctorItem);
@ -933,6 +942,10 @@ public class HisRegisterDao {
sourceItem.setAddress(sourceNode.getString("ClinicAddress"));
sourceItem.setAllowReg(sourceNode.getInteger("AllowOnline"));
sourceItem.setIsUsed(sourceNode.getInteger("IsUsed"));
sourceItem.setTotalFee(regMoney);
sourceItem.setPayMoney(regMoney);
sourceItem.setEnPayMoney(AesWxHelper.encode(regMoney));
dataList.add(sourceItem);
}
}
@ -1108,32 +1121,32 @@ public class HisRegisterDao {
params.put("BegDate", begDate);
params.put("EndDate", endDate);
});
if (jsonResult.success()) {
List<RegSign> regSignList = new ArrayList<>();
JSONArray jsonArray = jsonResult.getJsonArray("Items", "Item");
if (!jsonResult.success()) {
return new ArrayList<>();
}
List<RegSign> regSignList = new ArrayList<>();
JSONArray jsonArray = jsonResult.getJsonArray("Items", "Item");
RegSign regSign;
JSONObject item;
for (int i = 0; i < jsonArray.size(); i++) {
item = jsonArray.getJSONObject(i);
regSign = new RegSign();
regSign.setTreatNum(item.getString("MZNum"));
regSign.setPatientId(item.getString("PatientId"));
regSign.setPatientName(item.getString("PatientName"));
regSign.setDeptCode(item.getString("DeptCode"));
regSign.setDeptName(item.getString("DeptName"));
regSign.setDoctCode(item.getString("DoctCode"));
regSign.setDoctName(item.getString("DoctName"));
regSign.setBegTime(item.getString("BegTime"));
regSign.setEndTime(item.getString("EndTime"));
regSign.setReservationDate(item.getString("ReservationDate"));
regSign.setScheduleDate(item.getString("ScheduleDate"));
regSign.setRegDateTime(item.getString("RegistDate"));
regSignList.add(regSign);
}
return regSignList;
RegSign regSign;
JSONObject item;
for (int i = 0; i < jsonArray.size(); i++) {
item = jsonArray.getJSONObject(i);
regSign = new RegSign();
regSign.setTreatNum(item.getString("MZNum"));
regSign.setPatientId(item.getString("PatientId"));
regSign.setPatientName(item.getString("PatientName"));
regSign.setDeptCode(item.getString("DeptCode"));
regSign.setDeptName(item.getString("DeptName"));
regSign.setDoctCode(item.getString("DoctCode"));
regSign.setDoctName(item.getString("DoctName"));
regSign.setBegTime(item.getString("BegTime"));
regSign.setEndTime(item.getString("EndTime"));
regSign.setReservationDate(item.getString("ReservationDate"));
regSign.setScheduleDate(item.getString("ScheduleDate"));
regSign.setRegDateTime(item.getString("RegistDate"));
regSignList.add(regSign);
}
return null;
return regSignList;
}

@ -14,7 +14,7 @@ public class CodeHelper {
*
* @param prefix 编码前缀
*/
public static List<Order> getOutTradeNo(String prefix, String middle, List<Long> ids) {
public static List<Order> createTradeNo(String prefix, String middle, List<Long> ids) {
if (prefix == null) {
prefix = get28UUID();
}
@ -36,23 +36,24 @@ public class CodeHelper {
return tradeList;
}
/**
* 获取不重复的编码
*
* @param merchantEnum 支付类型
*/
public static String getOutTradeNo(MerchantEnum merchantEnum) {
String prefix;
if (merchantEnum == null) {
merchantEnum = MerchantEnum.WX;
}
prefix = merchantEnum.CODE;
if (prefix.length() > 4) {
prefix = prefix.substring(0, 4);
}
prefix = prefix.toUpperCase();
return prefix + get28UUID();
}
// /**
// * 获取不重复的编码
// *
// * @param merchantEnum 支付类型
// */
// public static String createTradeNo(MerchantEnum merchantEnum) {
// String prefix;
// if (merchantEnum == null) {
// merchantEnum = MerchantEnum.WX;
// }
// prefix = merchantEnum.CODE;
// if (prefix.length() > 4) {
// prefix = prefix.substring(0, 4);
// }
// prefix = prefix.toUpperCase();
// return prefix + get28UUID();
// }
public static void main(String[] args) {
System.out.println(UUID.randomUUID());

@ -98,7 +98,7 @@ public class HisHelper {
if (pEnum == null) {
return null;
}
return CodeHelper.getOutTradeNo(prefix, pEnum.ORDER_CODE.toUpperCase(), ids);
return CodeHelper.createTradeNo(prefix, pEnum.ORDER_CODE.toUpperCase(), ids);
}
/**

@ -24,7 +24,7 @@ import java.util.List;
public class CasebookService {
// 下单
public Result placeOrder(MerchantEnum merchantEnum, String ip, String openId, String patientId, String patientName, String treatNum, BigDecimal totalFee, String applyId, Integer getWay, String useToNo, String useToName, String address, String phone) throws ServiceException {
public Result placeOrder(MerchantEnum merchantEnum, String ip, String payOpenId, String openId, String patientId, String patientName, String treatNum, BigDecimal totalFee, String applyId, Integer getWay, String useToNo, String useToName, String address, String phone) throws ServiceException {
if (openId == null || patientId == null || patientName == null || treatNum == null || totalFee == null || applyId == null || getWay == null || useToName == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
@ -34,7 +34,7 @@ public class CasebookService {
}
PayCasebook order = selectOrderByApplyId(applyId, treatNum);
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
if (order == null) {
PayCasebook addInfo = new PayCasebook();
addInfo.setTreatNum(treatNum);
@ -73,7 +73,7 @@ public class CasebookService {
}
String body = "病历复印 住院号:" + treatNum;
JSONObject respJson = PayService.createOrder(merchantEnum, openId, patientId, totalFee.toString(), outTradeNo, PQREnum.CASEBOOK.CODE, ip, body);
JSONObject respJson = PayService.createOrder(merchantEnum, payOpenId, openId, patientId, totalFee.toString(), outTradeNo, PQREnum.CASEBOOK.CODE, ip, body);
if (respJson == null) {
return Result.error(ResultEnum.PAY_ERROR); // 支付异常
}

@ -112,7 +112,7 @@ public class InHospService {
throw new ServiceException("条码为空");
}
MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByAuthCode(authCode);
MerchantEnum merchantEnum = MerchantEnum.findEnumByAuthCode(authCode);
if (merchantEnum == null) {
log.info("[HIS住院退费]失败,支付方式异常 authCode={}", authCode);
throw new ServiceException(ResultEnum.PAY_TYPE_ERROR);

@ -10,7 +10,6 @@ import com.ynxbd.common.bean.pay.*;
import com.ynxbd.common.dao.RecipeDao;
import com.ynxbd.common.dao.RegisterDao;
import com.ynxbd.common.dao.his.HisMedDao;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.Result;
@ -185,14 +184,17 @@ public class MedicalService {
}
// 创建医保订单
private MedCreateOrder createMIOrder(MerchantEnum merchantEnum, OrderMIEnum orderMIEnum, boolean hasDBOrder, String orderTitle, String openid, String outTradeNo, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String chrgBchno,
private MedCreateOrder createMIOrder(MerchantEnum merchantEnum, OrderMIEnum orderMIEnum, boolean hasDBOrder, String orderTitle, String payOpenId, String msgOpenId, String outTradeNo, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String chrgBchno,
BigDecimal totalFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType,
String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) throws ServiceException {
MedCreateOrder medCreateOrder = new MedCreateOrder();
if (ObjectUtils.isEmpty(payOpenId)) {
payOpenId = msgOpenId;
}
if (MerchantEnum.WX_MEDICAL.equals(merchantEnum)) {
Map<String, Object> map = WxMedHelper.createOrder(orderMIEnum,
openid,
payOpenId,
outTradeNo,
chrgBchno,
cardNo,
@ -221,7 +223,7 @@ public class MedicalService {
Order order = hasDBOrder ? AliMedHelper.queryTrade(outTradeNo, null) : new Order();
String notifyUrl = WeChatConfig.getHttpsBaseURL() + merchantEnum.getNotifyUrl(outTradeNo, notifyType);
Map<String, Object> map = AliMedHelper.createOrder(orderMIEnum,
openid,
msgOpenId,
outTradeNo,
chrgBchno,
payOrdId,
@ -248,7 +250,7 @@ public class MedicalService {
/**
* [医保]处方下单
*/
public Result createRxOrder(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 Result createRxOrder(String payCode, String payOpenId, String openid, String patientId, String cardNo, String realName, String ip, String payOrdId, String payAuthNo, String mdTrtId, String chrgBchno, String mdUserId, BigDecimal totalFee, BigDecimal acctFee, BigDecimal hifpFee, BigDecimal insuranceFee, BigDecimal cashFee, String notifyType,
String recipeJson, String treatNum, String payWay, String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) {
Result result = PayService.isPaymentPermittedByTime();
if (result != null) {
@ -262,7 +264,7 @@ public class MedicalService {
// 0:公众号内支付,1:扫码支付
payWay = payWay == null ? "0" : payWay;
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
Recipe rxInfo = new RecipeService().recipeJsonToInfo(treatNum, recipeJson);
log.info("[医保][处方]JSON解析 RxInfo={}", rxInfo);
if (rxInfo == null) {
@ -276,7 +278,7 @@ public class MedicalService {
try {
boolean hasDBOrder = false;
RecipeDao recipeDao = new RecipeDao();
if (MerchantEnum.ALI_MEDICAL.equals(merchantEnum)) { // 支付取消支付可重新支付
if (MerchantEnum.ALI_MEDICAL.equals(merchantEnum)) { // 支付取消支付可重新支付
Order findOrder = recipeDao.selectMIOrderByPayOrdId(payOrdId);
if (findOrder != null) {
if (findOrder.hasPayStatusPaid()) {
@ -290,7 +292,7 @@ public class MedicalService {
log.info("[医保][处方]下单 hasDBOrder={}, openid={}, patientId={}, treatNum={}, outTradeNo={}, payOrdId={}, payAuthNo={}, totalFee={}, acctFee={}, hifpFee={}, cashFee={}, idCardNo={}, realName={}, familyType={}, familyName={}, medicalCardId={}, medicalCardInstId={}", hasDBOrder, openid, patientId, treatNum, outTradeNo, payOrdId, payAuthNo, totalFee, acctFee, hifpFee, cashFee, cardNo, realName, familyType, familyName, medicalCardId, medicalCardInstId);
String orderTitle = "门诊号:" + treatNum;
MedCreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.DIAG_PAY, hasDBOrder, orderTitle, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno,
MedCreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.DIAG_PAY, hasDBOrder, orderTitle, payOpenId, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno,
totalFee, insuranceFee, cashFee, notifyType,
familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId);
@ -325,6 +327,8 @@ public class MedicalService {
addRecipe.setBankTransNo(bankTransNo);
addRecipe.setPayStatus(-1);
addRecipe.setHisStatus(-1);
addRecipe.setPayMchCode(merchantEnum.CODE);
addRecipe.setPayOpenId(payOpenId);
Map<String, Object> map = miOrder.getMap();
if (miOrder.hasCreateMerOrder()) { // 订单已发起支付
@ -352,7 +356,7 @@ public class MedicalService {
/**
* [医保]挂号下单
*/
public 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 Result createRegOrder(String payCode, String payOpenId, 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,
String familyType, String familyName, String familyCardNo, String medicalCardInstId, String medicalCardId) {
Result result = PayService.isPaymentPermittedByTime();
if (result != null) {
@ -364,7 +368,7 @@ public class MedicalService {
return Result.error(ResultEnum.PAY_TYPE_ERROR);
}
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
try {
boolean hasDBOrder = false;
RegisterDao regDao = new RegisterDao();
@ -384,7 +388,7 @@ public class MedicalService {
log.info("[医保][挂号]下单 hasDBOrder={}, openid={}, patientId={}, treatNum={}, outTradeNo={}, payOrdId={}, payAuthNo={}, totalFee={}, acctFee={}, hifpFee={}, cashFee={}, idCardNo={}, realName={}, familyType={}, familyName={}, medicalCardId={}, medicalCardInstId={}", hasDBOrder, openid, patientId, treatNum, outTradeNo, payOrdId, payAuthNo, totalFee, acctFee, hifpFee, cashFee, cardNo, realName, familyType, familyName, medicalCardId, medicalCardInstId);
String orderTitle = "挂号";
MedCreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.REG_PAY, hasDBOrder, orderTitle, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno,
MedCreateOrder miOrder = createMIOrder(merchantEnum, OrderMIEnum.REG_PAY, hasDBOrder, orderTitle, payOpenId, openid, outTradeNo, cardNo, realName, ip, payOrdId, payAuthNo, chrgBchno,
totalFee, insuranceFee, cashFee, notifyType,
familyType, familyName, familyCardNo, medicalCardInstId, medicalCardId);
@ -407,6 +411,8 @@ public class MedicalService {
reg.setHisStatus(-1);
reg.setBankTransNo(bankTransNo);
reg.setPayWay(merchantEnum.PAY_WAY_IN);
reg.setPayMchCode(merchantEnum.CODE);
reg.setPayOpenId(payOpenId);
Map<String, Object> map = miOrder.getMap();
if (miOrder.hasCreateMerOrder()) { // 订单已发起支付

@ -256,12 +256,12 @@ public class PayService {
* @param refundMoney 退费金额
* @param totalFee 微信 退费总金额
* @param refundDesc 微信 退费描述
* @param openid 微信 推送者openid
* @param msgOpenId 微信 推送者openid
* @param patientId 微信 推送者患者id
* @param pushInfo 微信 推送内容为空不推送
* @return 退费信息
*/
public static Order refund(MerchantEnum merchantEnum, String outTradeNo, String outRefundNo, BigDecimal refundMoney, BigDecimal totalFee, String refundDesc, Date tradeDate, String openid, String patientId, String pushInfo) {
public static Order refund(MerchantEnum merchantEnum, String outTradeNo, String outRefundNo, BigDecimal refundMoney, BigDecimal totalFee, String refundDesc, Date tradeDate, String msgOpenId, String patientId, String pushInfo) {
Order order = new Order();
if (merchantEnum == null || StringUtils.isEmpty(outTradeNo) || refundMoney == null) {
return order;
@ -269,7 +269,7 @@ public class PayService {
switch (merchantEnum) {
case WX:
order = WxPayHelper.refund(outTradeNo, outRefundNo, refundMoney, totalFee, refundDesc);
order = WxPayHelper.refund(merchantEnum, outTradeNo, outRefundNo, refundMoney, totalFee, refundDesc);
break;
case ALI:
@ -532,16 +532,19 @@ public class PayService {
/**
* 唤起支付-创建订单
*/
public static JSONObject createOrder(MerchantEnum merchantEnum, String openid, String patientId, String totalFee, String outTradeNo, String notifyType, String ip, String title) {
public static JSONObject createOrder(MerchantEnum merchantEnum, String payOpenId, String msgOpenId, String patientId, String totalFee, String outTradeNo, String notifyType, String ip, String title) {
if (merchantEnum == null || ObjectUtils.isEmpty(notifyType)) {
return null;
}
if (ObjectUtils.isEmpty(payOpenId)) {
payOpenId = msgOpenId;
}
if (MerchantEnum.WX.equals(merchantEnum)) { // 微信下单
return WxPayHelper.createOrder(merchantEnum, title, totalFee, outTradeNo, notifyType, ip, openid, patientId);
return WxPayHelper.createOrder(merchantEnum, title, totalFee, outTradeNo, notifyType, ip, payOpenId, msgOpenId);
} else if (MerchantEnum.ALI.equals(merchantEnum)) { // 支付宝下单
return AliHelper.createOrder(merchantEnum, title, outTradeNo, totalFee, notifyType, openid);
return AliHelper.createOrder(merchantEnum, title, outTradeNo, totalFee, notifyType, payOpenId);
} else if (MerchantEnum.BCM.equals(merchantEnum)) {
return BCMHelper.createOrder(merchantEnum, title, outTradeNo, totalFee, notifyType);

@ -90,7 +90,7 @@ public class RecipeService {
* @param treatNum 门诊号
* @return 是否完成操作
*/
public Result recipeHand(MerchantEnum merchantEnum, String openid, String patientId, String treatNum, String totalFee, String recipeJson, String payWay, Integer awaitSecond, boolean isHttps) {
public Result recipeHand(MerchantEnum merchantEnum, String payOpenId, String openid, String patientId, String treatNum, String totalFee, String recipeJson, String payWay, Integer awaitSecond, boolean isHttps) {
Result result = PayService.isPaymentPermittedByTime();
if (result != null) {
return result;
@ -120,9 +120,9 @@ public class RecipeService {
// 金额为0的处方不进行回调通知
if ("0".equals(totalFee)) {
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
// 订单信息预存
if (!recipeService.isSaveRecipeInfo(recipeJson, payWay, openid, patientId, treatNum, outTradeNo, totalFee)) {
if (!recipeService.saveRecipeInfo(merchantEnum, payOpenId, openid, recipeJson, payWay, patientId, treatNum, outTradeNo, totalFee)) {
log.info("{} [处方支付]预存支付信息失败 patientId={}", merchantEnum.NAME, patientId);
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
}
@ -219,8 +219,8 @@ public class RecipeService {
* @param outTradeNo 订单号
* @return 是否完成操作
*/
public boolean isSaveRecipeInfo(String recipeJson, String payWay, String openid, String patientId, String treatNum, String outTradeNo, String totalFee) {
log.info("[处方支付]预存信息 patientId={}, treatNum={}, recipeJson={}", patientId, treatNum, recipeJson);
public boolean saveRecipeInfo(MerchantEnum merchantEnum, String payOpenId, String openid, String recipeJson, String payWay, String patientId, String treatNum, String outTradeNo, String totalFee) {
log.info("{}[处方支付]预存信息 patientId={}, treatNum={}, recipeJson={}", merchantEnum.NAME, patientId, treatNum, recipeJson);
List<Recipe> recipeList = JsonHelper.parseArray(recipeJson, Recipe.class);
if (recipeList == null || recipeList.isEmpty()) {
log.info("[处方支付]勾选处方数量为0 或 数据转换失败");
@ -235,7 +235,9 @@ public class RecipeService {
if (ObjectUtils.isEmpty(recipe.getRecipeId()) || ObjectUtils.isEmpty(recipe.getRecipeFee())) {
return false;
}
recipe.setPayMchCode(merchantEnum.CODE);
recipe.setOpenid(openid);
recipe.setPayOpenId(payOpenId);
recipe.setPatientId(patientId);
recipe.setTreatNum(treatNum);
recipe.setOutTradeNo(outTradeNo);
@ -251,14 +253,7 @@ public class RecipeService {
}
}
boolean isResult;
if (recipeList.size() == 1) {
// 单个处方
isResult = recipeDao.insert(recipeList.get(0));
} else {
// 多个处方
isResult = recipeDao.insertBatch(recipeList) == recipeList.size();
}
boolean isResult = recipeDao.insertBatch(recipeList) == recipeList.size();
log.info("[处方]信息预存{}, patientId={}, treatNum={}", (isResult ? "成功" : "失败"), patientId, treatNum);
return isResult;
}
@ -303,7 +298,7 @@ public class RecipeService {
}
// 订单金额验证
BigDecimal rxTotalFee = new BigDecimal(0);
BigDecimal rxTotalFee = BigDecimal.ZERO;
for (Recipe recipe : recipeList) {
rxTotalFee = rxTotalFee.add(recipe.getPayMoney());
}
@ -368,7 +363,7 @@ public class RecipeService {
refundDesc = "缴费失败 处方号:" + failedRecipeId + "\n原因:[" + errorCode + "]" + errorMsg;
try {
// 自动退费
recipeAutoRefund(merchantEnum, openid, patientId, outTradeNo, failed.getTradeNo(), failedRecipeId, failed.getPayMoney(), new BigDecimal(totalFee), failed.getUpdateTime(), errorCode, errorMsg, refundDesc);
rxAutoRefund(merchantEnum, openid, patientId, outTradeNo, failed.getTradeNo(), failedRecipeId, failed.getPayMoney(), new BigDecimal(totalFee), failed.getUpdateTime(), errorCode, errorMsg, refundDesc);
} catch (Exception e) {
ErrorHelper.println(e);
}
@ -508,7 +503,7 @@ public class RecipeService {
* @param refundDesc 退费说明
* @return 是否成功
*/
public boolean recipeAutoRefund(MerchantEnum merchantEnum, String openid, String patientId, String outTradeNo, String tradeNo, String recipeId, BigDecimal recipeFee, BigDecimal totalFee, Date tradeDate, String respCode, String respMessage, String refundDesc) {
public boolean rxAutoRefund(MerchantEnum merchantEnum, String openid, String patientId, String outTradeNo, String tradeNo, String recipeId, BigDecimal recipeFee, BigDecimal totalFee, Date tradeDate, String respCode, String respMessage, String refundDesc) {
if (recipeFee == null || totalFee == null || ObjectUtils.isEmpty(outTradeNo) || ObjectUtils.isEmpty(recipeId) || ObjectUtils.isEmpty(tradeNo)) {
log.info("[处方自动退款]参数缺失:outTradeNo={}, recipeId={}, tradeNo={}, fee={}, payMoney={}", outTradeNo, recipeId, tradeNo, recipeFee, totalFee);
return false;
@ -596,7 +591,7 @@ public class RecipeService {
throw new ServiceException("条码为空");
}
MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByAuthCode(authCode);
MerchantEnum merchantEnum = MerchantEnum.findEnumByAuthCode(authCode);
if (merchantEnum == null) {
log.info("[HIS处方退费]失败,支付方式异常 authCode={}", authCode);
throw new ServiceException(ResultEnum.PAY_TYPE_ERROR);

@ -22,6 +22,7 @@ import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.wx.config.MessagePushConfig;
import com.ynxbd.wx.utils.DateGenerate;
import com.ynxbd.wx.wxfactory.AesWxHelper;
import com.ynxbd.wx.wxfactory.WxMedHelper;
import com.ynxbd.wx.wxfactory.WxPayHelper;
import com.ynxbd.wx.wxfactory.medical.models.WxMedOrder;
@ -69,7 +70,7 @@ public class RegService {
* @param reg 挂号信息
* @return 是否成功
*/
public boolean updateRegPrepay(Register reg) {
public boolean saveRegPrepay(Register reg) {
if (reg == null) {
log.info("reg is null");
return false;
@ -400,7 +401,7 @@ public class RegService {
return Result.error("支付方式未匹配 outTradeNo=" + outTradeNo);
}
log.info("{}[挂号][取消预约]开始退款outTradeNo={}, dbTradeNo={}, payMoney={}", merchantEnum.NAME, outTradeNo, dbTradeNo, payMoney);
log.info("{}[挂号][取消预约]开始退款... outTradeNo={}, dbTradeNo={}, payMoney={}", merchantEnum.NAME, outTradeNo, dbTradeNo, payMoney);
String pushInfo = "取消预约 科室:" + reg.getDeptName();
@ -438,7 +439,6 @@ public class RegService {
return Result.error(ResultEnum.REG_NOT_FIND);
}
String tradeNo = reg.getTradeNo();
String outTradeNo = reg.getOutTradeNo();
MerchantEnum merchantEnum = MerchantEnum.findEnumByOutTradeNo(outTradeNo);
@ -467,7 +467,7 @@ public class RegService {
new MiddleOfficeService().reg_JH0105(reg.getTreatNum());
log.info("{}[今日挂号][取消预约]开始退款outTradeNo={}, dbTradeNo={}, payMoney={}", merchantEnum.NAME, outTradeNo, dbTradeNo, payMoney);
log.info("{}[今日挂号][取消预约]开始退款... outTradeNo={}, dbTradeNo={}, payMoney={}", merchantEnum.NAME, outTradeNo, dbTradeNo, payMoney);
String pushInfo = "取消预约 科室:" + reg.getDeptName();
@ -516,7 +516,7 @@ public class RegService {
throw new ServiceException("条码为空");
}
MerchantEnum merchantEnum = MerchantEnum.getMerchantEnumByAuthCode(authCode);
MerchantEnum merchantEnum = MerchantEnum.findEnumByAuthCode(authCode);
if (merchantEnum == null) {
log.info("[HIS挂号退费] 支付方式异常 authCode={}", authCode);
throw new ServiceException(ResultEnum.PAY_TYPE_ERROR);
@ -656,7 +656,7 @@ public class RegService {
String refundResult;
if (totalFee.compareTo(BigDecimal.ZERO) != 0) { // 金为0
log.info("[挂号][退款]开始申请 outTradeNo={}, pushInfo={}", outTradeNo, pushInfo);
log.info("{}[挂号][退款]开始申请 outTradeNo={}, pushInfo={}", merchantEnum.NAME, outTradeNo, pushInfo);
Order orderRefund = PayService.refund(merchantEnum, outTradeNo, tradeNo, totalFee, totalFee, pushInfo, tradeDate, openid, null, pushInfo);
if (!orderRefund.isSuccess()) {
log.info("{} [挂号][退费错误] outTradeNo={}, tradeNo={}, totalFee={}", merchantEnum.NAME, outTradeNo, tradeNo, totalFee);
@ -680,19 +680,19 @@ public class RegService {
* 挂号下单
*/
public Result createRegOrder(String payCode, String ip, Boolean isOccupySource, Boolean isZeroPay, Register reg, boolean isHttps) {
Result noPayTime = PayService.isPaymentPermittedByTime();
if (noPayTime != null) {
return noPayTime;
}
MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode);
if (merchantEnum == null) {
return Result.error(ResultEnum.PAY_TYPE_ERROR); // 支付方式异常
}
Result noPayTime = PayService.isPaymentPermittedByTime();
if (noPayTime != null) {
return noPayTime;
}
String openid = reg.getOpenid();
String payOpenId = reg.getPayOpenId();
String patientId = reg.getPatientId();
if (reg.getIsSplitTime()) { // 分时段挂号
String sourceId = reg.getSourceId();
// 占用查询开关被开启
@ -704,9 +704,9 @@ public class RegService {
}
}
JSONObject mdRespJson = PayService.getMedAuthUrl(merchantEnum, PEnum.REG, isHttps);
if (mdRespJson != null) {
return Result.success(mdRespJson);
JSONObject medRespJson = PayService.getMedAuthUrl(merchantEnum, PEnum.REG, isHttps);
if (medRespJson != null) {
return Result.success(medRespJson);
}
String deptName = reg.getDeptName();
@ -714,14 +714,15 @@ public class RegService {
BigDecimal totalFee = reg.getPayMoney();
String body = deptName + " 挂号(" + regDate + ")";
String outTradeNo = CodeHelper.getOutTradeNo(merchantEnum);
String outTradeNo = merchantEnum.createOutTradeNo();
log.info("{} [挂号]生成 outTradeNo={}", merchantEnum.NAME, outTradeNo);
reg.setPayDeviceId("mobile");
reg.setOutTradeNo(outTradeNo);
reg.setPayWay(merchantEnum.PAY_WAY_IN);
reg.setPayMchCode(merchantEnum.CODE);
if (!updateRegPrepay(reg)) {
if (!saveRegPrepay(reg)) {
log.info("{} [挂号]预存支付信息失败 patientId={}", merchantEnum.NAME, patientId);
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
}
@ -743,7 +744,7 @@ public class RegService {
}
}
JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, totalFee.toString(), outTradeNo, PEnum.REG.CODE, ip, body);
JSONObject respJson = PayService.createOrder(merchantEnum, payOpenId, openid, patientId, totalFee.toString(), outTradeNo, PEnum.REG.CODE, ip, body);
if (respJson == null) {
return Result.error(ResultEnum.PAY_ERROR); // 支付异常
}

@ -49,10 +49,16 @@ public class WeChatConfig {
// 是否为医共体主服务
public static final boolean IS_GMC_SERVER;
// public static final String GMC_AUTH_APP_ID;
// public static final String GMC_AUTH_APP_SECRET;
// public static final String GMC_AUTH_APP_SECRET;
public static final String GMC_AUTH_DOMAIN;
// 医共体主体公众号的AppId
public static final String GMC_APP_ID;
// 医共体主体小程序AppId
public static final String GMC_MINI_APP_ID;
public static final String GMC_MINI_APP_SECRET;
static {
ProperHelper config = new ProperHelper().read("wx.properties");
@ -83,11 +89,13 @@ public class WeChatConfig {
// 医共体
IS_ENABLE_GMC = config.getBoolean("wx.gmc.is_enable", false);
// GMC_AUTH_APP_ID = config.getString("wx.gmc.auth_app_id");
// GMC_AUTH_APP_SECRET = config.getString("wx.gmc.auth_app_secret");
GMC_AUTH_DOMAIN = config.getString("wx.gmc.auth_domain");
GMC_APP_ID = config.getString("wx.gmc.app_id");
GMC_MINI_APP_ID = config.getString("wx.gmc.mini.app_id");
GMC_MINI_APP_SECRET = config.getString("wx.gmc.mini.app_secret");
IS_GMC_SERVER = DOMAIN != null && DOMAIN.equals(GMC_AUTH_DOMAIN);
}

@ -117,7 +117,7 @@ public class QRPayServlet extends HttpServlet {
return;
}
String outTradeNo = CodeHelper.getOutTradeNo(MerchantEnum.WX);
String outTradeNo = MerchantEnum.WX.createOutTradeNo();
String title = "";
if (flag.equals("1")) {
title = ("ID:" + patientId + " 处方单号:" + recipeId);

@ -3,6 +3,8 @@ package com.ynxbd.wx.wxfactory;
import com.ynxbd.common.helper.common.AesHelper;
import org.apache.commons.lang3.ObjectUtils;
import java.math.BigDecimal;
/**
* 请求参数加密处理
*/
@ -17,6 +19,13 @@ public class AesWxHelper extends AesHelper {
return encryptHex(data, KEY, IV);
}
public static String encode(BigDecimal data) {
if (data == null) {
return null;
}
return encryptHex(data.toString(), KEY, IV);
}
/**
* 加密
*/
@ -36,7 +45,6 @@ public class AesWxHelper extends AesHelper {
}
public static void main(String[] args) {
// System.out.println(decode("E6835E243069406F53EC8464898B37C0"));
}
}

@ -1,19 +1,21 @@
package com.ynxbd.wx.wxfactory;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class WxMiniHelper {
public static String auth(String jsCode) {
public static JSONObject auth(String miniAppId, String miniAppSecret, String jsCode) {
String respJson = OkHttpHelper.get("https://api.weixin.qq.com/sns/jscode2session", params -> {
params.put("appid", "appid");
params.put("secret", "secret");
params.put("appid", miniAppId);
params.put("secret", miniAppSecret);
params.put("js_code", jsCode);
params.put("grant_type", "authorization_code");
});
log.info("respJson:{}", respJson);
return null;
log.info("[微信-小程序]认证响应: {}", respJson);
return JsonHelper.parseObject(respJson);
}
}

@ -144,29 +144,28 @@ public class WxPayHelper {
* @param outTradeNo 订单号
* @param notifyType 回调类型
* @param ip ip地址
* @param openid openid
* @param patientId 患者id
* @param payOpenId 用于下单的openId
* @param msgOpenId 用于推送的openId
* @return 成功返回 json, 否则返回null
*/
public static JSONObject createOrder(MerchantEnum merchantEnum, String title, String totalFee, String outTradeNo, String notifyType, String ip, String openid, String patientId) {
public static JSONObject createOrder(MerchantEnum merchantEnum, String title, String totalFee, String outTradeNo, String notifyType, String ip, String payOpenId, String msgOpenId) {
try {
if (ObjectUtils.isEmpty(openid) || ObjectUtils.isEmpty(outTradeNo)
if (ObjectUtils.isEmpty(payOpenId) || ObjectUtils.isEmpty(outTradeNo)
|| merchantEnum == null || totalFee == null || notifyType == null) {
log.info("【微信】下单参数缺失");
return null;
}
// 金额转换
String cents;
try {
cents = new BigDecimal(totalFee).movePointRight(2).toString(); // 单位分
cents = new BigDecimal(totalFee).movePointRight(2).toString(); // 金额转换=>单位分
} catch (Exception e) {
ErrorHelper.println(e);
log.info("【微信】统一下单金额转换异常");
return null;
}
String appId = WeChatConfig.APP_ID;
String appId = merchantEnum.APP_ID;
String mchId = WeChatConfig.MCH_ID;
String mchKey = WeChatConfig.MCH_KEY;
String nonce = UUID.randomUUID().toString().replace("-", "");
@ -175,7 +174,7 @@ public class WxPayHelper {
unifiedorder.setAppid(appId);
unifiedorder.setMch_id(mchId);
unifiedorder.setNonce_str(nonce);
unifiedorder.setOpenid(openid);
unifiedorder.setOpenid(payOpenId);
unifiedorder.setOut_trade_no(outTradeNo);
unifiedorder.setBody(title);
@ -208,7 +207,7 @@ public class WxPayHelper {
return JsonHelper.parseObject(json);
}
} catch (Exception e) {
log.error("【微信】统一下单异常信息:" + e.getMessage());
log.error("【微信】统一下单异常信息:{}", e.getMessage());
ErrorHelper.println(e);
}
return null;
@ -225,7 +224,7 @@ public class WxPayHelper {
* @param desc 退款描述
* @return 退款信息
*/
public static Order refund(String outTradeNo, String outRefundNo, BigDecimal refundMoney, BigDecimal totalFee, String desc) {
public static Order refund(MerchantEnum merchantEnum, String outTradeNo, String outRefundNo, BigDecimal refundMoney, BigDecimal totalFee, String desc) {
Order order = new Order();
try {
int feeCents;
@ -239,10 +238,14 @@ public class WxPayHelper {
return order;
}
if (merchantEnum == null) {
merchantEnum = MerchantEnum.WX;
}
log.info("【微信】退款开始 outTradeNo={}, refundMoney={}, totalFee={}", outTradeNo, feeCents, totalFeeCents);
SecapiPayRefund refund = new SecapiPayRefund();
refund.setAppid(WeChatConfig.APP_ID);
refund.setAppid(merchantEnum.APP_ID);
refund.setMch_id(WeChatConfig.MCH_ID);
refund.setNonce_str(UUID.randomUUID().toString().replace("-", ""));
refund.setSign_type("MD5");

@ -1 +1 @@
# \u5F00\u542F\u5904\u65B9\u9884\u7ED3\u7B97\uFF08\u7B2C2\u5F00\u5173\uFF09\uFF08\u6CE8\u610F\u8BE5\u914D\u7F6E\u9700\u8054\u7CFBhis\u5F00\u53D1\u8005\u786E\u8BA4\u652F\u6301\u624D\u80FD\u5F00\u542F\uFF0C\u5426\u5219\u5B58\u5728\u98CE\u9669\uFF01\uFF09 his.is_recipe_prepay=false # \u672C\u5730 #his.url=127.0.0.1:8888 # HIS\u662F\u5426\u5F00\u542F\u652F\u4ED8\u5B9D\u5206\u5F00\u5BF9\u8D26 his.is_ali_mer=false # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=true # \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 # \u5FAE\u4FE1\u533B\u4FDD his.wx_med_url=10.20.10.7:7885 # \u652F\u4ED8\u5B9D\u533B\u4FDD his.ali_med_url=10.20.10.7:7885 # \u516C\u53F8\u6D4B\u8BD5 his.url=192.168.12.10:8888 # \u77F3\u6797\u6D4B\u8BD5 #his.url=200.200.200.105:8888 # \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 # \u672C\u5730 #his.url=127.0.0.1:8888 # HIS\u662F\u5426\u5F00\u542F\u652F\u4ED8\u5B9D\u5206\u5F00\u5BF9\u8D26 his.is_ali_mer=false # \u662F\u5426\u5F3A\u5236\u6253\u5370webservice\u7684xml\u8FD4\u56DE\u6570\u636E his.is_log_resp=true # \u662F\u5426\u4F20\u9012openid\u7ED9his\u63A8\u9001\u6D88\u606F his.is_push_msg=false #------------------------------- # \u6D4B\u8BD5\u73AF\u5883 his.dev_url=200.200.200.105:8888 # \u533B\u4FDD=========================== # \u65E7\u914D\u7F6E his.md_url=127.0.0.1:7777 # \u5FAE\u4FE1\u533B\u4FDD his.wx_med_url=10.20.10.7:7885 # \u652F\u4ED8\u5B9D\u533B\u4FDD his.ali_med_url=10.20.10.7:7885 # \u516C\u53F8\u6D4B\u8BD5 #his.url=192.168.12.10:8888 # \u77F3\u6797\u6D4B\u8BD5 his.url=200.200.200.105:8888 # \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

@ -20,4 +20,7 @@ wx.is_dev=true
# \u7528\u4E8E\u6388\u6743\u7684\u533B\u5171\u4F53\u516C\u4F17\u53F7\u914D\u7F6E=======================
wx.gmc.is_enable=
wx.gmc.auth_domain=
wx.gmc.app_id=
wx.gmc.app_id=
# \u5C0F\u7A0B\u5E8F\u4E3B\u4F53AppId
wx.gmc.mini.app_id=
wx.gmc.mini.app_secret=
Loading…
Cancel
Save