1、医共体患者信息同步调整,在没有证件类型返回时,设置默认类型。

2、患者绑定更新信息时,医共体状态值为空会导致异常的问题修复。
3、支付相关所有接口调整支持小程序下单和退费。
4、短信发送新增接口支持直接使用模板code和json数据进行推送,使用RSA加密参数,用于其他系统维护如:随访。
5、挂号下单接口的订单金额和证件号码进行加密处理。
6、支付相关日志新增医共体类型打印。
debug
王绍全 10 hours ago
parent e0f05ffd2f
commit 77dc7f700a
  1. 2
      src/main/java/com/ynxbd/ali/helper/AliHelper.java
  2. 10
      src/main/java/com/ynxbd/common/action/AccountsAction.java
  3. 33
      src/main/java/com/ynxbd/common/action/SmsAction.java
  4. 19
      src/main/java/com/ynxbd/common/action/pay/PayAction.java
  5. 41
      src/main/java/com/ynxbd/common/bean/Patient.java
  6. 6
      src/main/java/com/ynxbd/common/bean/pay/Register.java
  7. 4
      src/main/java/com/ynxbd/common/dao/PatientDao.java
  8. 24
      src/main/java/com/ynxbd/common/helper/common/RSAHelper.java
  9. 30
      src/main/java/com/ynxbd/common/helper/common/SmsHelper.java
  10. 20
      src/main/java/com/ynxbd/common/service/GMCService.java
  11. 49
      src/main/java/com/ynxbd/common/service/PayService.java
  12. 6
      src/main/java/com/ynxbd/common/service/RegService.java
  13. 2
      src/main/java/com/ynxbd/common/service/SmsService.java
  14. 13
      src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java
  15. 2
      src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java
  16. 24
      src/main/java/com/ynxbd/wx/wxfactory/WxPayHelper.java

@ -656,7 +656,7 @@ public class AliHelper {
}
public static List<Bill> queryBill(String billType, String billDate, boolean isCompose) throws ServiceException {
public static List<Bill> queryBill(MerchantEnum mchEnum, String billType, String billDate, boolean isCompose) throws ServiceException {
List<Bill> bilList = new ArrayList<>();
String data = downAliBillData(billType, billDate);
String[] dataArr = data.split("\\n");

@ -314,11 +314,11 @@ public class AccountsAction extends BaseAction {
try {
switch (merchantEnum) {
case WX:
billList = WxPayHelper.queryBill(billType, billDate, isCompose);
billList = WxPayHelper.queryBill(merchantEnum, billType, billDate, isCompose);
break;
case ALI:
billList = AliHelper.queryBill(billType, billDate, isCompose);
billList = AliHelper.queryBill(merchantEnum, billType, billDate, isCompose);
break;
default:
@ -433,8 +433,12 @@ public class AccountsAction extends BaseAction {
try {
switch (merchantEnum) {
case WX:
data = WxPayHelper.downWxBillData(billType, billDate);
data = WxPayHelper.downWxBillData(merchantEnum, billType, billDate);
break;
case WX_GMC:
data = WxPayHelper.downWxBillData(merchantEnum, billType, billDate);
break;
case ALI:
data = AliHelper.downAliBillData(billType, billDate);

@ -171,6 +171,39 @@ public class SmsAction extends BaseAction {
}
/**
* [短信]模板推送
*
* @param sys 系统编码[CRM]
* @param tel 电话号码
* @param templateCode 模板编码
* @param temParamsJson 模板参数
*/
@Action("smsTemplate")
public Result smsTemplate(String sys, String tel, String templateCode, String temParamsJson) {
tel = SmsHelper.decodeRSA(tel);
templateCode = SmsHelper.decodeRSA(templateCode);
log.info("[{}][模板短信]发送 tel={}, templateCode={}, temParamsJson={}", sys, tel, templateCode, temParamsJson);
if (sys == null || tel == null || templateCode == null || temParamsJson == null) {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
JSONObject smsJson = SmsHelper.parseJson(temParamsJson);
if (smsJson == null) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
// 判断是否60s内重复请求
SmsTemplate sms = SmsHelper.isRepeat(tel);
if (sms != null) {
String message = sms.getCountDown() == null ? "" : sms.getCountDown() + "s";
return Result.error(ResultEnum.SMS_SEND_REPEAT, sms, ResultEnum.SMS_SEND_REPEAT.makeMessage(message));
}
boolean isResult = SmsHelper.send(templateCode, tel, smsJson);
return Result.isOK(isResult);
}
/**
* 德宏州中医院每日候诊推送
*

@ -20,6 +20,7 @@ import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.*;
import com.ynxbd.common.service.params.RequestParams;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.AesWxHelper;
import com.ynxbd.wx.wxfactory.WxPayHelper;
import com.ynxbd.wx.wxfactory.payment.jsapi.models.WxNativePayResult;
import lombok.extern.slf4j.Slf4j;
@ -53,10 +54,20 @@ public class PayAction extends BaseAction {
public Result regPay(String payCode, Boolean isOccupySource, Boolean isZeroPay) {
log.info("[挂号]下单 payCode={}, isOccupySource={}, isZeroPay={}", payCode, isOccupySource, isZeroPay);
try {
MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode);
if (merchantEnum == null) {
return Result.error(ResultEnum.PAY_TYPE_ERROR); // 支付方式异常
}
Register reg = new Register().getRegParams(new RequestParams(request), true);
String ip = HttpHelper.getIpAddress(request);
return new RegService().createRegOrder(payCode, ip, isOccupySource, isZeroPay, reg, isHttpsWithProxy());
BigDecimal payMoney = AesWxHelper.decodeBigDecimal(reg.getEnPayMoney());
if (payMoney == null) {
return Result.error(ResultEnum.PARAM_IS_INVALID);
}
reg.setPayMoney(payMoney);
return new RegService().createRegOrder(merchantEnum, ip, isOccupySource, isZeroPay, reg, isHttpsWithProxy());
} catch (ServiceException e) {
return Result.error(e);
}
@ -400,11 +411,13 @@ public class PayAction extends BaseAction {
* @param transId 流水号
*/
@Action("getMerOrderByTransId")
public Result getMerOrderByTransId(String transId) {
public Result getMerOrderByTransId(String payCode, String transId) {
if (transId == null) {
return Result.error(ResultEnum.PARAM_IS_BLANK);
}
Order order = WxPayHelper.queryOrderByTransId(transId);
MerchantEnum mchEnum = MerchantEnum.findEnumByCode(payCode, MerchantEnum.WX);
Order order = WxPayHelper.queryOrderByTransId(mchEnum, transId);
return Result.success(order);
}

@ -144,6 +144,10 @@ public class Patient implements Serializable {
this.motherTel = ParamHelper.hideTel(this.motherTel);
}
if (this.cardType == null) {
this.cardType = noneCardNo ? HCardTypeEnum.NO_CARD.WX_CODE : HCardTypeEnum._01.WX_CODE;
}
if (isClearCardNoAndTel) {
this.tel = null;
this.idCardNo = null;
@ -164,54 +168,65 @@ public class Patient implements Serializable {
return data1 != null && data1.equals(data2);
}
private boolean equalsLog(String log) {
// System.out.println("[信息变动]" + log);
return false;
}
public boolean equalsPatient(Patient copy) {
if (copy == null) {
return false;
}
if (!equalsData(this.cardType, copy.getCardType())) {
return false;
if (!equalsData(this.idCardNo, copy.getIdCardNo())) {
return equalsLog("idCardNo");
}
if (!equalsData(this.idCardNo, copy.getIdCardNo())) {
return false;
if (ObjectUtils.isEmpty(this.cardType)) {
this.cardType = (ObjectUtils.isEmpty(this.idCardNo) || this.idCardNo.length() >= 32) ? HCardTypeEnum.NO_CARD.WX_CODE : HCardTypeEnum._01.WX_CODE;
}
if (ObjectUtils.isEmpty(copy.getCardType())) {
copy.setCardType((ObjectUtils.isEmpty(copy.getIdCardNo()) || copy.getIdCardNo().length() >= 32) ? HCardTypeEnum.NO_CARD.WX_CODE : HCardTypeEnum._01.WX_CODE);
}
if (!equalsData(this.cardType, copy.getCardType())) {
return equalsLog("cardType");
}
if (!equalsData(this.name, copy.getName())) {
return false;
return equalsLog("name");
}
if (!equalsData(this.birthday, copy.getBirthday())) {
return false;
return equalsLog("birthday");
}
if (!equalsData(this.sex, copy.getSex())) {
return false;
return equalsLog("sex");
}
if (!equalsData(this.nation, copy.getNation())) {
return false;
return equalsLog("nation");
}
if (!equalsData(this.tel, copy.getTel())) {
return false;
return equalsLog("tel");
}
if (!equalsData(this.areaCode, copy.getAreaCode())) {
return false;
return equalsLog("areaCode");
}
if (!equalsData(this.address, copy.getAddress())) {
return false;
return equalsLog("address");
}
if (!equalsData(this.isMyself, copy.getIsMyself())) {
return false;
return equalsLog("isMyself");
}
if (!equalsData(this.isDefault, copy.getIsDefault())) {
return false;
return equalsLog("isDefault");
}
return true;

@ -154,12 +154,12 @@ public class Register extends Order {
String regDate = params.getString("regDate");
String tid = params.getString("tid");
System.out.println("[挂号]证件号码:" + (ObjectUtils.isEmpty(cardNo) ? "" : cardNo)); // 此处打印不存日志
if (openid == null || patientId == null || cardNo == null || deptCode == null || doctCode == null || regDate == null || tid == null) {
log.info("[挂号]参数缺失 patientId={}, deptCode={}, doctCode={}, regCode={}, regDate={}, tid={}",
patientId, deptCode, doctCode, regCode, regDate, tid);
log.info("[挂号]参数缺失 openid={}, patientId={}, deptCode={}, doctCode={}, regCode={}, regDate={}, tid={}",
openid, patientId, deptCode, doctCode, regCode, regDate, tid);
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
}
System.out.println("[挂号]证件号码:" + cardNo); // 此处打印不存日志
if (payMoney == null || totalFee == null) {
log.info("[挂号]参数缺失 payMoney");

@ -193,7 +193,7 @@ public class PatientDao {
" gmcUniqueId=if(gmcUniqueId is null or gmcUniqueId = '', ?, gmcUniqueId) " +
" where openid=? and idCardNo=?";
bindInfo.setGmcBindState(WeChatConfig.IS_ENABLE_GMC ? 1 : null);
bindInfo.setGmcBindState(WeChatConfig.IS_ENABLE_GMC ? 1 : 0);
bindInfo.setHisPatientId(WeChatConfig.IS_ENABLE_GMC ? null : bindInfo.getPatientId());
return DataBase.update(sql, ps -> {
@ -283,7 +283,7 @@ public class PatientDao {
// 设置插入的占位符
private void setInsertPs(PreparedStatement ps, Patient item) throws SQLException {
item.setGmcBindState(WeChatConfig.IS_ENABLE_GMC ? 1 : item.getGmcBindState());
item.setGmcBindState(WeChatConfig.IS_ENABLE_GMC ? 1 : item.getGmcBindState() == null ? 0 : item.getGmcBindState());
item.setHisPatientId(WeChatConfig.IS_ENABLE_GMC ? null : item.getPatientId());
HCardTypeEnum cardTypeEnum = item.getCardTypeEnum();

@ -88,6 +88,9 @@ public class RSAHelper {
* @return 密文
*/
public static String encrypt(String encryptData, String publicKey) {
if (ObjectUtils.isEmpty(encryptData)) {
return null;
}
try {
// Base64编码的公钥
byte[] decoded = Base64.decodeBase64(publicKey);
@ -121,7 +124,7 @@ public class RSAHelper {
* @return 明文
*/
public static String decrypt(String decryptData, String privateKey) {
if (decryptData == null || "".equals(decryptData)) {
if (ObjectUtils.isEmpty(decryptData)) {
return null;
}
try {
@ -135,7 +138,6 @@ public class RSAHelper {
cipher.init(Cipher.DECRYPT_MODE, priKey);
return new String(cipher.doFinal(inputByte));
} catch (Exception e) {
e.printStackTrace();
log.error("[RSA]解密失败:[{}]", e.getMessage());
}
return null;
@ -176,22 +178,8 @@ public class RSAHelper {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 100; i++) {
String message = "111223311";
System.out.println("随机生成的公钥为:" + KEY_MAP.get(0));
System.out.println("随机生成的私钥为:" + KEY_MAP.get(1));
long beg = System.currentTimeMillis();
String messageEn = encrypt(message);
System.out.println(message + "\t加密后的字符串为:" + messageEn);
// String messageDe = decrypt(messageEn);
long end = System.currentTimeMillis();
System.out.println(end - beg);
}
//加密字符串
// System.out.println("还原后的字符串为:" + messageDe);
// System.out.println("随机生成的公钥为:" + KEY_MAP.get(0));
// System.out.println("随机生成的私钥为:" + KEY_MAP.get(1));
}
// public static void main(String[] args) throws Exception {

@ -1,5 +1,6 @@
package com.ynxbd.common.helper.common;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.ynxbd.common.bean.UsageCountEnum;
@ -8,11 +9,14 @@ import com.ynxbd.common.bean.sms.SmsTemplate;
import com.ynxbd.common.config.EhCacheConfig;
import com.ynxbd.common.helper.ProperHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.service.UsageCountService;
import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody;
import okhttp3.RequestBody;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.ehcache.Cache;
@ -28,6 +32,10 @@ public class SmsHelper {
public static final String ACCESS_KEY_SECRET;
public static final String SIGN_NAME;
// 公私钥
public static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCSOdXfNEpwP5AVJuDFqYObO73LH92cymsgiRlcSEvz2UDkYpn38qL1mRSCYoZ0O4CK/r1RJexPBE2lK6WF3+jgaOc5uV59OSwfOwqbLtOyjJi/V16fPTf5JCO/FbkM63d/mI7gnjR46P7rxbq60woCnRXAf1Nb/kAK+hQLrnX1swIDAQAB";
public static final String PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAJI51d80SnA/kBUm4MWpg5s7vcsf3ZzKayCJGVxIS/PZQORimffyovWZFIJihnQ7gIr+vVEl7E8ETaUrpYXf6OBo5zm5Xn05LB87Cpsu07KMmL9XXp89N/kkI78VuQzrd3+YjuCeNHjo/uvFurrTCgKdFcB/U1v+QAr6FAuudfWzAgMBAAECgYEAgm3WKE8DKtZ3lXZlPcpzWo7SPxHAYe9n2NCRb3AJV4vsxwpwXeruknUmBxsM5TaB9Pk+MtjJzL2A6Jhi/2P22oMtv3z+4Uza4t9mUuJS/2JgQm9VtBPzf7Xd75AhrYqOa3cTMkcni4yesvEyea68QaUm6jMyp2q2pNhMOML6tukCQQDJEx4LQND6wKmpEaxN3K4DPWUx4of/tjFTAoi713CTcFr7pdJkVd8fslkm+VvKLVFjMOq6ak4AuGBN+ENQYRffAkEAuis3zheDpiRyKFEc+ydQU8YAcn+Or9SBuqye44aO2anqqf4nR0Z6jXJBCNMB1E54CQXhLT4/IhMoXeqC1RGsrQJBAIX4D89tmw9G6IN1+/hQrTwJXvASv4wXRtvI13NYAnCprmT2QayKLkQ/HvlBsO+OrChLgkk75MbEEZ5BaBAY8L8CQHwiYyR9k1/N/3yYkV16WlpxtUyjd04QwavqfEu0Jj5GyV0uRZyGByOXonuyzw50gB9sFzhmwAwFgC4XN8PA9EUCQQCryDJYpqBHH6aU49wl8hPmGQqmwN6aERWA6SS82ZKuARWQX6TpAxHRaU9LDL6ANEVSWXKS4oncIOz8Iha/02Zz";
// 缓存
public static Cache<String, SmsTemplate> CACHE;
@ -310,7 +318,27 @@ public class SmsHelper {
return false;
}
public static JSONObject parseJson(String dataJson) {
try {
if (ObjectUtils.isEmpty(dataJson)) {
return null;
}
return JSONObject.parseObject(dataJson);
} catch (Exception e) {
return null;
}
}
public static String encodeRSA(String data) {
return RSAHelper.encrypt(data, PUBLIC_KEY);
}
public static String decodeRSA(String data) {
return RSAHelper.decrypt(data, PRIVATE_KEY);
}
public static void main(String[] args) {
// Map<String,String> sms = new HashMap<>();
// sms.put("name","李进才");
// sms.put("item_name","血常规");
@ -333,7 +361,7 @@ public class SmsHelper {
// sms.put("time", "2024-12-05 10:00:00-10:03:00");
// 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<>();

@ -58,19 +58,21 @@ public class GMCService {
for (Patient item : gmcPatients) {
item.setId(null);
item.setOpenid(wxOpenId);
if (HCardTypeEnum.NO_CARD.WX_CODE.equals(item.getCardType()) || ObjectUtils.isEmpty(item.getIdCardNo())) { // 无证绑定->不做处理
continue;
}
Patient findDBItem = dbPatients.isEmpty() ? null : dbPatients.stream().filter(o -> (
!ObjectUtils.isEmpty(o.getPatientId()) && o.getPatientId().equals(item.getPatientId())
)).findFirst().orElse(null);
Patient findDBItem = dbPatients.isEmpty() ? null : dbPatients.stream().filter(o -> (!ObjectUtils.isEmpty(o.getPatientId()) && o.getPatientId().equals(item.getPatientId()))).findFirst().orElse(null);
if (findDBItem == null) { // 需新增
addList.add(item);
} else { // 比对数据
item.setId(findDBItem.getId());
if (HCardTypeEnum.NO_CARD.WX_CODE.equals(item.getCardType())) { // 无证绑定->不做处理
if (!findDBItem.equalsPatient(item)) { // 数据不同->需修改本地数据
item.setId(findDBItem.getId());
removeIds.add(findDBItem.getId());
} else {
if (!findDBItem.equalsPatient(item)) { // 数据不同->需修改本地数据
removeIds.add(findDBItem.getId());
addList.add(item);
}
addList.add(item);
}
}
}
@ -82,6 +84,8 @@ public class GMCService {
}
}
// log.info("[医共体-数据同步 本地{}条 移除[{}], add:{}", dbPatients.size(), removeIds, JsonHelper.toJsonString(addList));
int delRows = 0, addRows = 0;
if (!removeIds.isEmpty()) {
delRows = new PatientDao().delByIds(wxOpenId, removeIds);

@ -55,28 +55,33 @@ public class PayService {
String notifyType = notifyInfo.getAttach();
log.info("【微信】[{}]收到通知 outTradeNo={}, bankTransNo={}", notifyType, outTradeNo, bankTransNo);
MerchantEnum mchEnum = MerchantEnum.findEnumByOutTradeNo(outTradeNo);
if (mchEnum == null) {
mchEnum = MerchantEnum.WX;
}
log.info("{}[{}]收到通知 outTradeNo={}, bankTransNo={}", mchEnum.NAME, notifyType, outTradeNo, bankTransNo);
switch (PEnum.toEnum(notifyType)) {
case RECIPE:
new RecipeService().recipeListPay(MerchantEnum.WX, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
new RecipeService().recipeListPay(mchEnum, 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());
new RegService().regPaidNotify(mchEnum, totalFee, openid, bankTransNo, outTradeNo, null, payDate, payTime, payInfo, new Date());
} catch (ServiceException e) {
log.info("【微信】[挂号]通知异常 outTradeNo={}, bankTransNo={}, message={}", outTradeNo, bankTransNo, e.getMessage());
log.info("{}[挂号]通知异常 outTradeNo={}, bankTransNo={}, message={}", mchEnum.NAME, 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 ? "成功" : "失败"));
boolean isInsert = new InHospService().inHospNotify(mchEnum, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
log.info("{}[住院预交金] 预存{}", mchEnum.NAME, (isInsert ? "成功" : "失败"));
break;
case CASEBOOK:
new CasebookService().paidNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
new CasebookService().paidNotify(mchEnum, openid, totalFee, outTradeNo, bankTransNo, payInfo);
break;
case OL_REG:
@ -84,19 +89,19 @@ public class PayService {
break;
case PEIS_RESERVE:
new PEISService().payNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
new PEISService().payNotify(mchEnum, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
break;
case OUT_COLLECT:
new OutCollectService().ocPaidNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payInfo);
new OutCollectService().ocPaidNotify(mchEnum, openid, totalFee, outTradeNo, bankTransNo, payInfo);
break;
case TPP_QR_REG:
new ThirdPartyPayService().tppQRRegNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
new ThirdPartyPayService().tppQRRegNotify(mchEnum, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
break;
default:
log.info("【微信】通知类型错误,结束请求");
log.info("{}通知类型错误,结束请求", mchEnum.NAME);
break;
}
}
@ -167,7 +172,7 @@ public class PayService {
throw new ServiceException(ResultEnum.PAY_ORDER_NOT_FOUND);
}
if (MerchantEnum.WX.equals(merchantEnum)) {
if (MerchantEnum.WX.equals(merchantEnum) || MerchantEnum.WX_GMC.equals(merchantEnum)) {
if (order.isRefund()) { // 发生过退费(全额 | 部分)
Bill bill = null;
List<Bill> billList = WxPayHelper.queryRefundList(outTradeNo);
@ -269,12 +274,13 @@ public class PayService {
switch (merchantEnum) {
case WX:
order = WxPayHelper.refund(merchantEnum, outTradeNo, outRefundNo, refundMoney, totalFee, refundDesc);
break;
return WxPayHelper.refund(merchantEnum, outTradeNo, outRefundNo, refundMoney, totalFee, refundDesc);
case WX_GMC:
return WxPayHelper.refund(merchantEnum, outTradeNo, outRefundNo, refundMoney, totalFee, refundDesc);
case ALI:
order = AliHelper.refund(outTradeNo, outRefundNo, refundMoney, refundDesc);
break;
return AliHelper.refund(outTradeNo, outRefundNo, refundMoney, refundDesc);
case BCM:
log.info("【交行退款】outTradeNo={}, tradeDate={}", outTradeNo, tradeDate);
@ -283,8 +289,7 @@ public class PayService {
order.setErrorMsg("退款日期错误");
return order;
}
order = BCMHelper.refund(outTradeNo, outRefundNo, tradeDateStr, refundMoney, refundDesc);
break;
return BCMHelper.refund(outTradeNo, outRefundNo, tradeDateStr, refundMoney, refundDesc);
default:
break;
@ -312,7 +317,7 @@ public class PayService {
}
}
if (MerchantEnum.WX.equals(merchantEnum)) {
if (MerchantEnum.WX.equals(merchantEnum) || MerchantEnum.WX_GMC.equals(merchantEnum)) {
return WxPayHelper.queryOrder(outTradeNo);
} else if (MerchantEnum.ALI.equals(merchantEnum)) {
@ -340,7 +345,7 @@ public class PayService {
return order;
}
if (merchantEnum.equals(MerchantEnum.WX)) {
if (merchantEnum.equals(MerchantEnum.WX)) { // 扫码盒子不加入医共体类型
order = WxPayHelper.payMicro(title, outTradeNo, totalFee, authCode, ip);
} else if (merchantEnum.equals(MerchantEnum.ALI)) {
@ -521,7 +526,7 @@ public class PayService {
* 是否退费成功
*/
public static Bill queryRefund(MerchantEnum merchantEnum, String outTradeNo, String bankTransNo, String outRefundNo) throws ServiceException {
if (MerchantEnum.WX.equals(merchantEnum)) {
if (MerchantEnum.WX.equals(merchantEnum) || MerchantEnum.WX_GMC.equals(merchantEnum)) {
return WxPayHelper.queryRefund(outTradeNo, outRefundNo);
} else if (MerchantEnum.ALI.equals(merchantEnum)) {
return AliHelper.queryRefund(outTradeNo, outRefundNo);
@ -540,7 +545,7 @@ public class PayService {
payOpenId = msgOpenId;
}
if (MerchantEnum.WX.equals(merchantEnum)) { // 微信下单
if (MerchantEnum.WX.equals(merchantEnum) || MerchantEnum.WX_GMC.equals(merchantEnum)) { // 微信下单
return WxPayHelper.createOrder(merchantEnum, title, totalFee, outTradeNo, notifyType, ip, payOpenId, msgOpenId);
} else if (MerchantEnum.ALI.equals(merchantEnum)) { // 支付宝下单

@ -679,12 +679,10 @@ public class RegService {
/**
* 挂号下单
*/
public Result createRegOrder(String payCode, String ip, Boolean isOccupySource, Boolean isZeroPay, Register reg, boolean isHttps) {
MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode);
public Result createRegOrder(MerchantEnum merchantEnum, String ip, Boolean isOccupySource, Boolean isZeroPay, Register reg, boolean isHttps) {
if (merchantEnum == null) {
return Result.error(ResultEnum.PAY_TYPE_ERROR); // 支付方式异常
return Result.error(ResultEnum.PAY_TYPE_ERROR);
}
Result noPayTime = PayService.isPaymentPermittedByTime();
if (noPayTime != null) {
return noPayTime;

@ -27,7 +27,7 @@ public class SmsService {
boolean isResult = false;
if (HospEnum.德宏州中医医院.isHosp()) {
SmsRegTem sms = new SmsRegTem();
sms.setHosp_tel("0692-2991794");
// sms.setHosp_tel("0692-2991794");
sms.setTime(date + " " + begTime + "-" + endTime);
sms.setAddress(reg.getAddress() == null ? "" : reg.getAddress().replace(" ", "").replace("(", "(").replace(")", ")"));
sms.setDeptName(reg.getDeptName());

@ -44,7 +44,20 @@ public class AesWxHelper extends AesHelper {
return decryptHex(enData, KEY, IV);
}
public static BigDecimal decodeBigDecimal(String enData) {
try {
String data = decode(enData);
if (data == null) {
return null;
}
return new BigDecimal(data);
} catch (Exception e) {
return null;
}
}
public static void main(String[] args) {
System.out.println(encode("899065"));
// System.out.println(decode("E6835E243069406F53EC8464898B37C0"));
}
}

@ -406,6 +406,8 @@ public class WxAuthHelper {
} catch (Exception e) {
log.error(e.getMessage());
}
String serverName = request.getServerName();
log.info("[微信认证]域名 serverName={}", serverName);
state = OAUTH_URL + WeChatConfig.getBaseURL(WeChatConfig.HAS_HTTPS_BY_BASE_URL || isHttpsWithProxy(request)) +
"wx_auth/" + api +
"?p=" + params +

@ -534,7 +534,9 @@ public class WxPayHelper {
public static List<Bill> queryRefundInfoList(String outTradeNo) throws ServiceException {
Refundquery refund = new Refundquery();
refund.setAppid(WeChatConfig.APP_ID);
MerchantEnum mchEnum = MerchantEnum.findEnumByOutTradeNo(outTradeNo);
refund.setAppid(mchEnum.APP_ID);
refund.setMch_id(WeChatConfig.MCH_ID);
refund.setOut_trade_no(outTradeNo);
refund.setNonce_str(CodeHelper.get32UUID());
@ -596,7 +598,8 @@ public class WxPayHelper {
public static List<Bill> queryRefundList(String outTradeNo) throws ServiceException {
Refundquery refund = new Refundquery();
refund.setAppid(WeChatConfig.APP_ID);
MerchantEnum mchEnum = MerchantEnum.findEnumByOutTradeNo(outTradeNo);
refund.setAppid(mchEnum.APP_ID);
refund.setMch_id(WeChatConfig.MCH_ID);
refund.setOut_trade_no(outTradeNo);
refund.setNonce_str(CodeHelper.get32UUID());
@ -657,7 +660,7 @@ public class WxPayHelper {
throw new ServiceException(ResultEnum.PARAM_IS_DEFECT);
}
List<Bill> billList = queryRefundList(outTradeNo);
if (billList.size() == 0) {
if (billList.isEmpty()) {
return null;
}
for (Bill bill : billList) {
@ -675,11 +678,12 @@ public class WxPayHelper {
* @return 订单信息
*/
public static Order queryOrder(String outTradeNo) {
MerchantEnum mchEnum = MerchantEnum.findEnumByOutTradeNo(outTradeNo);
Order order = new Order();
order.setOutTradeNo(outTradeNo);
try {
MchOrderquery mchOrderquery = new MchOrderquery();
String appId = WeChatConfig.APP_ID;
String appId = mchEnum.APP_ID;
String mchId = WeChatConfig.MCH_ID;
String mchKey = WeChatConfig.MCH_KEY;
@ -745,13 +749,13 @@ public class WxPayHelper {
* @param transId 支付单号
* @return 订单信息
*/
public static Order queryOrderByTransId(String transId) {
public static Order queryOrderByTransId(MerchantEnum mchEnum, String transId) {
Order order = new Order();
order.setBankTransNo(transId);
try {
MchOrderquery mchOrderquery = new MchOrderquery();
mchOrderquery.setAppid(WeChatConfig.APP_ID);
mchOrderquery.setAppid(mchEnum.APP_ID);
mchOrderquery.setMch_id(WeChatConfig.MCH_ID);
mchOrderquery.setTransaction_id(transId);
mchOrderquery.setNonce_str(CodeHelper.get32UUID());
@ -834,9 +838,9 @@ public class WxPayHelper {
*
* @return 订单信息
*/
public static List<Bill> queryBill(String billType, String billDate, boolean isCompose) throws ServiceException {
public static List<Bill> queryBill(MerchantEnum mchEnum, String billType, String billDate, boolean isCompose) throws ServiceException {
List<Bill> billList = new ArrayList<>();
String data = downWxBillData(billType, billDate);
String data = downWxBillData(mchEnum, billType, billDate);
String[] dataArr = data.split("\\n");
if (dataArr.length == 0) {
return billList;
@ -927,7 +931,7 @@ public class WxPayHelper {
}
public synchronized static String downWxBillData(String billType, String date) throws ServiceException {
public synchronized static String downWxBillData(MerchantEnum mchEnum, String billType, String date) throws ServiceException {
if (!DateHelper.isValidDate(date, DateHelper.DateEnum.yyyy_MM_dd)) {
throw new ServiceException(ResultEnum.PARAM_DATE_ERROR);
}
@ -945,7 +949,7 @@ public class WxPayHelper {
}
MchDownloadbill mchDownloadbill = new MchDownloadbill();
mchDownloadbill.setAppid(WeChatConfig.APP_ID);
mchDownloadbill.setAppid(mchEnum.APP_ID);
mchDownloadbill.setMch_id(WeChatConfig.MCH_ID);
mchDownloadbill.setNonce_str(CodeHelper.get32UUID());
mchDownloadbill.setBill_date(date);

Loading…
Cancel
Save