diff --git a/src/main/java/com/ynxbd/ali/helper/AliHelper.java b/src/main/java/com/ynxbd/ali/helper/AliHelper.java index ca675be..4601e8d 100644 --- a/src/main/java/com/ynxbd/ali/helper/AliHelper.java +++ b/src/main/java/com/ynxbd/ali/helper/AliHelper.java @@ -656,7 +656,7 @@ public class AliHelper { } - public static List queryBill(String billType, String billDate, boolean isCompose) throws ServiceException { + public static List queryBill(MerchantEnum mchEnum, String billType, String billDate, boolean isCompose) throws ServiceException { List bilList = new ArrayList<>(); String data = downAliBillData(billType, billDate); String[] dataArr = data.split("\\n"); diff --git a/src/main/java/com/ynxbd/common/action/AccountsAction.java b/src/main/java/com/ynxbd/common/action/AccountsAction.java index 5c55fa3..003a482 100644 --- a/src/main/java/com/ynxbd/common/action/AccountsAction.java +++ b/src/main/java/com/ynxbd/common/action/AccountsAction.java @@ -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); diff --git a/src/main/java/com/ynxbd/common/action/SmsAction.java b/src/main/java/com/ynxbd/common/action/SmsAction.java index 94e0608..ea64c6b 100644 --- a/src/main/java/com/ynxbd/common/action/SmsAction.java +++ b/src/main/java/com/ynxbd/common/action/SmsAction.java @@ -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); + } + /** * 德宏州中医院每日候诊推送 * diff --git a/src/main/java/com/ynxbd/common/action/pay/PayAction.java b/src/main/java/com/ynxbd/common/action/pay/PayAction.java index 502fc77..106eb3f 100644 --- a/src/main/java/com/ynxbd/common/action/pay/PayAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/PayAction.java @@ -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); } diff --git a/src/main/java/com/ynxbd/common/bean/Patient.java b/src/main/java/com/ynxbd/common/bean/Patient.java index e2c0038..e96a513 100644 --- a/src/main/java/com/ynxbd/common/bean/Patient.java +++ b/src/main/java/com/ynxbd/common/bean/Patient.java @@ -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; diff --git a/src/main/java/com/ynxbd/common/bean/pay/Register.java b/src/main/java/com/ynxbd/common/bean/pay/Register.java index 925f059..901ecf4 100644 --- a/src/main/java/com/ynxbd/common/bean/pay/Register.java +++ b/src/main/java/com/ynxbd/common/bean/pay/Register.java @@ -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"); diff --git a/src/main/java/com/ynxbd/common/dao/PatientDao.java b/src/main/java/com/ynxbd/common/dao/PatientDao.java index 5f2db8f..07f5f04 100644 --- a/src/main/java/com/ynxbd/common/dao/PatientDao.java +++ b/src/main/java/com/ynxbd/common/dao/PatientDao.java @@ -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(); diff --git a/src/main/java/com/ynxbd/common/helper/common/RSAHelper.java b/src/main/java/com/ynxbd/common/helper/common/RSAHelper.java index d37a5b6..ab0b493 100644 --- a/src/main/java/com/ynxbd/common/helper/common/RSAHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/RSAHelper.java @@ -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 { diff --git a/src/main/java/com/ynxbd/common/helper/common/SmsHelper.java b/src/main/java/com/ynxbd/common/helper/common/SmsHelper.java index 24f95d8..9bceee1 100644 --- a/src/main/java/com/ynxbd/common/helper/common/SmsHelper.java +++ b/src/main/java/com/ynxbd/common/helper/common/SmsHelper.java @@ -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 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 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 sms = new HashMap<>(); diff --git a/src/main/java/com/ynxbd/common/service/GMCService.java b/src/main/java/com/ynxbd/common/service/GMCService.java index 05d2b8b..00adf0d 100644 --- a/src/main/java/com/ynxbd/common/service/GMCService.java +++ b/src/main/java/com/ynxbd/common/service/GMCService.java @@ -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); diff --git a/src/main/java/com/ynxbd/common/service/PayService.java b/src/main/java/com/ynxbd/common/service/PayService.java index f4bcd7b..cfbdcbd 100644 --- a/src/main/java/com/ynxbd/common/service/PayService.java +++ b/src/main/java/com/ynxbd/common/service/PayService.java @@ -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 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)) { // 支付宝下单 diff --git a/src/main/java/com/ynxbd/common/service/RegService.java b/src/main/java/com/ynxbd/common/service/RegService.java index 42819c3..cbd2c23 100644 --- a/src/main/java/com/ynxbd/common/service/RegService.java +++ b/src/main/java/com/ynxbd/common/service/RegService.java @@ -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; diff --git a/src/main/java/com/ynxbd/common/service/SmsService.java b/src/main/java/com/ynxbd/common/service/SmsService.java index fa559ad..4e4244a 100644 --- a/src/main/java/com/ynxbd/common/service/SmsService.java +++ b/src/main/java/com/ynxbd/common/service/SmsService.java @@ -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()); diff --git a/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java index 7813368..fa732d0 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/AesWxHelper.java @@ -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")); } } diff --git a/src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java index 89fdf12..f2d29df 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/WxAuthHelper.java @@ -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 + diff --git a/src/main/java/com/ynxbd/wx/wxfactory/WxPayHelper.java b/src/main/java/com/ynxbd/wx/wxfactory/WxPayHelper.java index 63e70e9..03d109b 100644 --- a/src/main/java/com/ynxbd/wx/wxfactory/WxPayHelper.java +++ b/src/main/java/com/ynxbd/wx/wxfactory/WxPayHelper.java @@ -534,7 +534,9 @@ public class WxPayHelper { public static List 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 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 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 queryBill(String billType, String billDate, boolean isCompose) throws ServiceException { + public static List queryBill(MerchantEnum mchEnum, String billType, String billDate, boolean isCompose) throws ServiceException { List 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);