支付调整

master
王绍全 4 weeks ago
parent 63df648c9c
commit dad1dcfbf2
  1. 6
      src/main/java/com/ynxbd/common/action/RecipeAction.java
  2. 4
      src/main/java/com/ynxbd/common/action/pay/AliPayAction.java
  3. 7
      src/main/java/com/ynxbd/common/action/pay/BcmPayAction.java
  4. 4
      src/main/java/com/ynxbd/common/action/pay/MedicalTestAction.java
  5. 20
      src/main/java/com/ynxbd/common/action/pay/PayAction.java
  6. 39
      src/main/java/com/ynxbd/common/bean/pay/PrepayResp.java
  7. 4
      src/main/java/com/ynxbd/common/healthcard/HealthCardHelper.java
  8. 4
      src/main/java/com/ynxbd/common/service/MedicalService.java
  9. 4
      src/main/java/com/ynxbd/common/service/PayService.java
  10. 14
      src/main/java/com/ynxbd/common/service/RxService.java
  11. 6
      src/main/java/com/ynxbd/common/service/cache/PayCache.java
  12. 2
      src/main/java/com/ynxbd/jy/bean/JYResult.java
  13. 4
      src/main/java/com/ynxbd/jy/helper/JYPayHelper.java
  14. 4
      src/main/java/com/ynxbd/wx/servlet/oldpay/PayNotifyServlet.java
  15. 5
      src/main/java/com/ynxbd/wx/servlet/oldpay/QRPayServlet.java

@ -17,7 +17,7 @@ import com.ynxbd.common.his.HisFactory;
import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.service.RecipeService;
import com.ynxbd.common.service.RxService;
import com.ynxbd.wx.config.WeChatConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@ -73,7 +73,7 @@ public class RecipeAction extends BaseAction {
for (HisRecipe item : hisRxList) {
item.filterSetEnBillNo();
}
return Result.success(new RecipeService().filterPaidList(hisRxList));
return Result.success(new RxService().filterPaidList(hisRxList));
}
/**
@ -240,7 +240,7 @@ public class RecipeAction extends BaseAction {
*/
@Action("getStandardPrice")
public Result getStandardPrice(Integer pageNum, Integer pageSize, String pyCode, String type, String groupFlag) {
return new RecipeService().getStandardPrice(pageNum, pageSize, pyCode, type, groupFlag);
return new RxService().getStandardPrice(pageNum, pageSize, pyCode, type, groupFlag);
}

@ -14,7 +14,7 @@ import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.InHospService;
import com.ynxbd.common.service.MedicalService;
import com.ynxbd.common.service.RecipeService;
import com.ynxbd.common.service.RxService;
import com.ynxbd.common.service.RegService;
import lombok.extern.slf4j.Slf4j;
import org.apache.struts2.convention.annotation.Action;
@ -60,7 +60,7 @@ public class AliPayAction extends BaseAction {
switch (PEnum.toEnum(notifyType)) {
case RECIPE:
new RecipeService().recipeListPay(MerchantEnum.ALI, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
new RxService().recipeListPay(MerchantEnum.ALI, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
break;
case REG: // 挂号

@ -6,10 +6,9 @@ import com.ynxbd.common.action.base.BaseAction;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.PayResult;
import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.RecipeService;
import com.ynxbd.common.service.RxService;
import com.ynxbd.common.service.RegService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@ -52,8 +51,8 @@ public class BcmPayAction extends BaseAction {
switch (PEnum.toEnum(notifyType)) {
case RECIPE:
openid = new RecipeService().queryOpenIdByOutTradeNo(outTradeNo);
new RecipeService().recipeListPay(MerchantEnum.BCM, totalFee.toString(), openid, outTradeNo, bankTransNo, bankMerchantNo, payDate, payTime, payInfo);
openid = new RxService().queryOpenIdByOutTradeNo(outTradeNo);
new RxService().recipeListPay(MerchantEnum.BCM, totalFee.toString(), openid, outTradeNo, bankTransNo, bankMerchantNo, payDate, payTime, payInfo);
break;
case REG: // 挂号

@ -18,7 +18,7 @@ import com.ynxbd.common.result.JsonResult;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ResultEnum;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.RecipeService;
import com.ynxbd.common.service.RxService;
import com.ynxbd.wx.wxfactory.WxCacheHelper;
import com.ynxbd.wx.wxfactory.WxMedHelper;
import com.ynxbd.wx.wxfactory.medical.models.WxMedOrder;
@ -91,7 +91,7 @@ public class MedicalTestAction extends BaseAction {
}
List<HisRecipe> hisRecipeList = HisMedTestDao.devPaidRecipeList(merchantEnum, patientId, begDate, endDate);
return Result.success(new RecipeService().filterPaidList(hisRecipeList));
return Result.success(new RxService().filterPaidList(hisRecipeList));
}
//

@ -99,18 +99,18 @@ public class PayAction extends BaseAction {
if (merchantEnum == null) { // 支付方式异常
return Result.error(ResultEnum.PAY_TYPE_ERROR);
}
RecipeService recipeService = new RecipeService();
RxService rxService = new RxService();
SelfHelp selfHelp = new SelfHelpDao().selectByTreatNum(treatNum);
if (selfHelp != null) { // 是核酸
try {
recipeService.selfHelpPrepay(selfHelp.getCode(), treatNum);
rxService.selfHelpPrepay(selfHelp.getCode(), treatNum);
} catch (ServiceException e) {
return Result.error(e);
}
}
Result result = recipeService.recipeHand(merchantEnum, payOpenId, openid, patientId, treatNum, totalFee, recipeJson, payWay, awaitSecond, isHttpsWithProxy());
Result result = rxService.rxHand(merchantEnum, payOpenId, openid, patientId, treatNum, totalFee, recipeJson, payWay, awaitSecond, isHttpsWithProxy());
if (!result.isOK() || result.getData() != null) { // 业务错误 || 存在返回数据-需提前返回
return result;
}
@ -122,14 +122,14 @@ public class PayAction extends BaseAction {
log.info("{} [处方]预结算开始... patientId={}", merchantEnum.NAME, patientId);
// 调用预结算!!!!注意如果HIS不支持开启改功能后,会存在直接入库的风险
List<Recipe> respList = recipeService.hisRxPrepay(recipeJson, patientId, treatNum);
List<Recipe> respList = rxService.hisRxPrepay(recipeJson, patientId, treatNum);
return Result.success(respList);
}
String outTradeNo = merchantEnum.createOutTradeNo();
// 订单信息预存
if (!recipeService.saveRecipeInfo(merchantEnum, payOpenId, openid, recipeJson, payWay, patientId, treatNum, outTradeNo, totalFee)) {
if (!rxService.saveRxData(merchantEnum, payOpenId, openid, recipeJson, payWay, patientId, treatNum, outTradeNo, totalFee)) {
log.info("{} [处方支付]预存支付信息失败 patientId={}", merchantEnum.NAME, patientId);
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
}
@ -298,7 +298,7 @@ public class PayAction extends BaseAction {
switch (PEnum.toEnum(callNo)) {
case RECIPE:
return new RecipeService().mdCashRefund(payOrdId, refundDesc);
return new RxService().mdCashRefund(payOrdId, refundDesc);
case REG: // 挂号
return new RegService().mdCashRefund(payOrdId, refundDesc);
@ -349,7 +349,7 @@ public class PayAction extends BaseAction {
try {
switch (pEnum) {
case RECIPE: // 处方
new RecipeService().hisRefund(invoiceTransNo, patientId, refundUser, refundDesc, refundMoney, pEnum);
new RxService().hisRefund(invoiceTransNo, patientId, refundUser, refundDesc, refundMoney, pEnum);
break;
case REG: // 挂号
@ -519,7 +519,7 @@ public class PayAction extends BaseAction {
}
switch (orderType) {
case RECIPE: // 处方
isResult = new RecipeService().isHandRefund(tradeNo, refundUser, refundDesc, orderType, callNo);
isResult = new RxService().isHandRefund(tradeNo, refundUser, refundDesc, orderType, callNo);
break;
case REG: // 挂号
@ -589,7 +589,7 @@ public class PayAction extends BaseAction {
}
switch (orderType) {
case RECIPE: // 处方
isResult = new RecipeService().isHandRefund(tradeNo, username, refundDesc, orderType, "MICRO");
isResult = new RxService().isHandRefund(tradeNo, username, refundDesc, orderType, "MICRO");
break;
case REG: // 挂号
@ -709,7 +709,7 @@ public class PayAction extends BaseAction {
}
try {
new RecipeService().selfHelpMaxNum(code);
new RxService().selfHelpMaxNum(code);
} catch (ServiceException e) {
return Result.error(e);
}

@ -0,0 +1,39 @@
package com.ynxbd.common.bean.pay;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@ToString
@NoArgsConstructor
public class PrepayResp {
// 时间戳 10位字符串 "1790063260"
private String timeStamp;
// 预支付数据包 prepay_id=xxx
private String packageVal;
// 支付签名 paySign
private String paySign;
// 公众号appId
private String appId;
// 签名类型 MD5
private String signType;
// 随机字符串 nonceStr
private String nonceStr;
// 商户订单号
private String outTradeNo;
// 订单流水号
private String transId;
// 订单流水号
private String tradeNo;
// 混合订单号
private String mixTradeNo;
}

@ -595,7 +595,7 @@ public class HealthCardHelper {
log.info("[电子健康卡]用卡数据监测接口-[scene:{}]", scene);
if (ObjectUtils.isEmpty(openid) || ObjectUtils.isEmpty(healthCardId) || ObjectUtils.isEmpty(idCardNo) || ObjectUtils.isEmpty(scene)) {
log.warn("[电子健康卡]用卡数据监测,参数为空");
System.out.println("[电子健康卡]用卡数据监测,参数为空");
return null;
}
@ -605,7 +605,7 @@ public class HealthCardHelper {
}
if (ObjectUtils.isEmpty(qrCodeText)) {
log.error("[电子健康卡]用卡数据监测,qrCodeText为空");
log.warn("[电子健康卡]用卡数据监测,qrCodeText为空");
return null;
}

@ -416,7 +416,7 @@ public class MedicalService {
// 0:公众号内支付,1:扫码支付
payWay = payWay == null ? "0" : payWay;
Recipe rxInfo = new RecipeService().recipeJsonToInfo(treatNum, recipeJson);
Recipe rxInfo = new RxService().recipeJsonToInfo(treatNum, recipeJson);
log.info("[医保][处方]JSON解析 RxInfo={}", rxInfo);
if (rxInfo == null) {
return Result.error(ResultEnum.PAY_PREPAY_SAVE_ERROR);
@ -1072,7 +1072,7 @@ public class MedicalService {
break;
case RECIPE:
order = new RecipeService().queryRxByOrderNo(outTradeNo, tradeNo);
order = new RxService().queryRxByOrderNo(outTradeNo, tradeNo);
break;
default:

@ -65,7 +65,7 @@ public class PayService {
switch (PEnum.toEnum(notifyType)) {
case RECIPE:
new RecipeService().recipeListPay(mchEnum, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
new RxService().recipeListPay(mchEnum, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
break;
case REG: // 挂号
@ -589,7 +589,7 @@ public class PayService {
}
switch (pEnum) {
case RECIPE: // 处方
return new RecipeService().updateMicroOrderState(outTradeNo, bankTransNo, openid);
return new RxService().updateMicroOrderState(outTradeNo, bankTransNo, openid);
case REG: // 挂号
return new RegService().updateMicroOrderState(outTradeNo, bankTransNo, openid);

@ -45,7 +45,7 @@ import java.util.*;
* @Copyright @ 2020 云南新八达科技有限公司 All rights reserved.
*/
@Slf4j
public class RecipeService {
public class RxService {
/**
* 是否在指定时间内重复支付
@ -95,7 +95,7 @@ public class RecipeService {
* @param treatNum 门诊号
* @return 是否完成操作
*/
public Result recipeHand(MerchantEnum merchantEnum, String payOpenId, String openid, String patientId, String treatNum, String totalFee, String recipeJson, String payWay, Integer awaitSecond, boolean isHttps) {
public Result rxHand(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;
@ -109,13 +109,13 @@ public class RecipeService {
return Result.error(ResultEnum.PARAM_IS_DEFECT);
}
RecipeService recipeService = new RecipeService();
RxService rxService = new RxService();
if (awaitSecond == null) {
awaitSecond = 0;
}
if (awaitSecond != 0) {
Long second = recipeService.isRepeatPay(treatNum, awaitSecond);
Long second = rxService.isRepeatPay(treatNum, awaitSecond);
if (second != null) {
// 是否 awaitSecond s内重复支付
log.info("[处方] 下单等待 {} s 确定", second);
@ -127,7 +127,7 @@ public class RecipeService {
if ("0".equals(totalFee)) {
String outTradeNo = merchantEnum.createOutTradeNo();
// 订单信息预存
if (!recipeService.saveRecipeInfo(merchantEnum, payOpenId, openid, recipeJson, payWay, patientId, treatNum, outTradeNo, totalFee)) {
if (!rxService.saveRxData(merchantEnum, payOpenId, openid, recipeJson, payWay, patientId, treatNum, outTradeNo, totalFee)) {
log.info("{} [处方支付]预存支付信息失败 patientId={}", merchantEnum.NAME, patientId);
return Result.error(ResultEnum.SPECIFIED_QUESTIONED_USER_NOT_EXIST);
}
@ -135,7 +135,7 @@ public class RecipeService {
String payDate = DateHelper.getCurDate();
String payTime = DateHelper.getCurTime();
String bankTransNo = outTradeNo.substring(merchantEnum.CODE.length());
recipeService.recipeListPay(merchantEnum, totalFee, openid, outTradeNo, bankTransNo, null, payDate, payTime, null);
rxService.recipeListPay(merchantEnum, totalFee, openid, outTradeNo, bankTransNo, null, payDate, payTime, null);
Map<String, Object> map = new HashMap<>();
map.put("totalFee", 0);
@ -224,7 +224,7 @@ public class RecipeService {
* @param outTradeNo 订单号
* @return 是否完成操作
*/
public boolean saveRecipeInfo(MerchantEnum merchantEnum, String payOpenId, String openid, String recipeJson, String payWay, String patientId, String treatNum, String outTradeNo, String totalFee) {
public boolean saveRxData(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()) {

@ -7,7 +7,7 @@ import com.ynxbd.common.config.EhCacheConfig;
import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.timer.TimerManager;
import com.ynxbd.common.service.PayService;
import com.ynxbd.common.service.RecipeService;
import com.ynxbd.common.service.RxService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.ehcache.Cache;
@ -76,7 +76,7 @@ public class PayCache {
RECIPE_ORDER_CACHE.clear();
}
RecipeService recipeService = new RecipeService();
RxService rxService = new RxService();
Recipe errorRecipe;
String outTradeNo, tradeNo;
Recipe resp;
@ -113,7 +113,7 @@ public class PayCache {
}
log.info("[处方][定时器]HIS请求开始 outTradeNo={}, tradeNo={}", outTradeNo, tradeNo);
resp = recipeService.recipeSinglePay(errorRecipe,
resp = rxService.recipeSinglePay(errorRecipe,
DateHelper.getCurDate(), DateHelper.getCurTime(), merchantEnum);
if (resp.isSuccess()) {

@ -39,7 +39,7 @@ public class JYResult {
return null;
}
public JSONObject toWxPrepay() {
public JSONObject toWxPrepayJson() {
if (this.data == null) {
return null;
}

@ -3,10 +3,8 @@ package com.ynxbd.jy.helper;
import com.alibaba.fastjson.JSONObject;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.bean.pay.ReqOrder;
import com.ynxbd.common.helper.common.Base64Helper;
import com.ynxbd.common.helper.common.DateHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.helper.common.URLHelper;
import com.ynxbd.common.helper.http.OkHttpHelper;
import com.ynxbd.common.helper.rsa.RSAHelper;
import com.ynxbd.jy.bean.JYOrder;
@ -132,7 +130,7 @@ public class JYPayHelper {
log.error("【京硕】预下单-失败:{}", result.getMessage());
return null;
}
return result.toWxPrepay();
return result.toWxPrepayJson();
} catch (Exception e) {
log.error("【京硕】预下单-异常:", e);
}

@ -4,7 +4,7 @@ import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.helper.common.HttpHelper;
import com.ynxbd.common.result.Result;
import com.ynxbd.common.result.ServiceException;
import com.ynxbd.common.service.RecipeService;
import com.ynxbd.common.service.RxService;
import com.ynxbd.wx.wxfactory.WxPayHelper;
import com.ynxbd.wx.wxfactory.payment.jsapi.models.WxPayNotify;
import com.ynxbd.wx.wxfactory.utils.WxRespHelper;
@ -51,7 +51,7 @@ public class PayNotifyServlet extends HttpServlet {
String payTime = notifyInfo.getPayTime();
// 和HIS交互
new RecipeService().recipeListPay(MerchantEnum.WX, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
new RxService().recipeListPay(MerchantEnum.WX, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
} catch (ServiceException e) {
Result.respXml(response, WxRespHelper.resp(e)); // 收到请求-解析成功

@ -2,10 +2,9 @@ package com.ynxbd.wx.servlet.oldpay;
import com.ynxbd.common.bean.enums.MerchantEnum;
import com.ynxbd.common.dao.RecipeDao;
import com.ynxbd.common.helper.common.CodeHelper;
import com.ynxbd.common.helper.common.HttpHelper;
import com.ynxbd.common.helper.common.JsonHelper;
import com.ynxbd.common.service.RecipeService;
import com.ynxbd.common.service.RxService;
import com.ynxbd.wx.config.WeChatConfig;
import com.ynxbd.wx.wxfactory.WxPayHelper;
import com.ynxbd.wx.wxfactory.payment.jsapi.models.WxNativePayResult;
@ -130,7 +129,7 @@ public class QRPayServlet extends HttpServlet {
HttpHelper.outRespAlert(response, "已缴费成功,无需支付!");
return;
}
boolean isOk = new RecipeService().addOldPEISOrder(outTradeNo, payMoney, openid, patientId, treatNum, recipeId);
boolean isOk = new RxService().addOldPEISOrder(outTradeNo, payMoney, openid, patientId, treatNum, recipeId);
if (!isOk) {
log.info("[Native]扫码支付 存储数据失败 product_id={}", productId);
}

Loading…
Cancel
Save