You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
300 lines
12 KiB
300 lines
12 KiB
2 years ago
|
package com.ynxbd.common.action.pay;
|
||
|
|
||
|
import com.ynxbd.ali.helper.AliHelper;
|
||
|
import com.ynxbd.common.action.base.BaseAction;
|
||
|
import com.ynxbd.common.bean.enums.MerchantEnum;
|
||
|
import com.ynxbd.common.bean.pay.Order;
|
||
|
import com.ynxbd.common.helper.common.DateHelper;
|
||
|
import com.ynxbd.common.result.Result;
|
||
|
import com.ynxbd.common.result.ServiceException;
|
||
|
import com.ynxbd.common.service.InHospService;
|
||
|
import com.ynxbd.common.service.RecipeService;
|
||
|
import com.ynxbd.common.service.RegService;
|
||
|
import lombok.extern.slf4j.Slf4j;
|
||
|
import org.apache.struts2.convention.annotation.Action;
|
||
|
import org.apache.struts2.convention.annotation.Namespace;
|
||
|
|
||
|
import java.math.BigDecimal;
|
||
|
import java.util.Date;
|
||
|
|
||
|
/**
|
||
|
* @Author wsq
|
||
|
* @Date 2021/2/26 12:50
|
||
|
* @Copyright @ 2020 云南新八达科技有限公司 All rights reserved.
|
||
|
*/
|
||
|
|
||
|
@Slf4j
|
||
|
@Namespace("/ali_pay")
|
||
|
public class AliPayAction extends BaseAction {
|
||
|
|
||
|
/**
|
||
|
* [支付宝]处方支付通知
|
||
|
*
|
||
|
* @return 是否成功
|
||
|
*/
|
||
|
@Action("notify")
|
||
|
public Result notify(String outTradeNo, String notifyType) {
|
||
|
log.info("【支付宝】[收到通知] outTradeNo={}, notifyType={}", outTradeNo, notifyType);
|
||
|
if (outTradeNo == null || notifyType == null) {
|
||
|
return Result.respStr();
|
||
|
}
|
||
|
|
||
|
Order order = AliHelper.payNotify(outTradeNo);
|
||
|
if (!order.isSuccess()) {
|
||
|
log.info(order.getErrorMsg());
|
||
|
return Result.error(order.getErrorMsg());
|
||
|
}
|
||
|
|
||
|
String openid = order.getOpenid();
|
||
|
String bankTransNo = order.getBankTransNo();
|
||
|
String payInfo = order.getInfo();
|
||
|
BigDecimal totalFee = order.getTotalFee();
|
||
|
String payDate = DateHelper.getCurDate();
|
||
|
String payTime = DateHelper.getCurTime();
|
||
|
|
||
|
switch (PEnum.toEnum(notifyType)) {
|
||
|
case RECIPE:
|
||
|
new RecipeService().recipeListPay(MerchantEnum.ALI, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
|
||
|
break;
|
||
|
|
||
|
case REG: // 挂号
|
||
|
try {
|
||
|
new RegService().regPaidNotify(MerchantEnum.ALI, totalFee, openid, bankTransNo, outTradeNo, null, payDate, payTime, payInfo, new Date());
|
||
|
} catch (ServiceException e) {
|
||
|
log.info("【支付宝]挂号通知错误 outTradeNo={}, bankTransNo={}, message={}", outTradeNo, bankTransNo, e.getMessage());
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case IN_HOSP:
|
||
|
boolean isInsert = new InHospService().inHospNotify(MerchantEnum.WX, openid, totalFee, outTradeNo, bankTransNo, payDate, payTime, payInfo);
|
||
|
log.info("【微信】[住院预交金] 预存{}", (isInsert ? "成功" : "失败"));
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
log.info("【支付宝】通知类型错误,结束请求");
|
||
|
break;
|
||
|
}
|
||
|
return Result.respStr();
|
||
|
}
|
||
|
|
||
|
// /**
|
||
|
// * [支付宝]分时段挂号支付通知
|
||
|
// *
|
||
|
// * @return 是否成功
|
||
|
// */
|
||
|
// @Action("regPayNotify")
|
||
|
// public Result regPayNotify() {
|
||
|
// String outTradeNo = getString("outTradeNo");
|
||
|
// log.info("【支付宝】[挂号通知] outTradeNo={}", outTradeNo);
|
||
|
// if (outTradeNo == null) {
|
||
|
// return Result.respStr();
|
||
|
// }
|
||
|
//
|
||
|
// Order order = AliHelper.payNotify(outTradeNo);
|
||
|
// if (!order.isSuccess()) {
|
||
|
// log.info(order.getErrorMsg());
|
||
|
// return Result.error(order.getErrorMsg());
|
||
|
// }
|
||
|
//
|
||
|
// String openid = order.getOpenid();
|
||
|
// String bankTransNo = order.getBankTransNo();
|
||
|
// String payInfo = order.getInfo();
|
||
|
// BigDecimal totalFee = order.getTotalFee();
|
||
|
//
|
||
|
// String payDate = DateHelper.getCurDate();
|
||
|
// String payTime = DateHelper.getCurTime();
|
||
|
// try {
|
||
|
// new RegService().regPaidNotify(MerchantEnum.ALI, totalFee, openid, bankTransNo, outTradeNo, null, payDate, payTime, payInfo, new Date());
|
||
|
// return Result.respStr();
|
||
|
// } catch (ServiceException e) {
|
||
|
// return Result.error(e);
|
||
|
// }
|
||
|
// }
|
||
|
//
|
||
|
//
|
||
|
// /**
|
||
|
// * [支付宝]处方支付通知
|
||
|
// *
|
||
|
// * @return 是否成功
|
||
|
// */
|
||
|
// @Action("recipePayNotify")
|
||
|
// public Result recipePayNotify() {
|
||
|
// String outTradeNo = getString("outTradeNo");
|
||
|
// log.info("【支付宝】[处方通知] outTradeNo={}", outTradeNo);
|
||
|
//
|
||
|
// if (outTradeNo == null) {
|
||
|
// return Result.respStr();
|
||
|
// }
|
||
|
//
|
||
|
// Order order = AliHelper.payNotify(outTradeNo);
|
||
|
// if (!order.isSuccess()) {
|
||
|
// log.info(order.getErrorMsg());
|
||
|
// return Result.error(order.getErrorMsg());
|
||
|
// }
|
||
|
//
|
||
|
// String openid = order.getOpenid();
|
||
|
// String bankTransNo = order.getBankTransNo();
|
||
|
// String payInfo = order.getInfo();
|
||
|
// BigDecimal totalFee = order.getTotalFee();
|
||
|
//
|
||
|
// String payDate = DateHelper.getCurDate();
|
||
|
// String payTime = DateHelper.getCurTime();
|
||
|
//
|
||
|
// // 和HIS交互
|
||
|
// new RecipeService().recipeListPay(MerchantEnum.ALI, totalFee.toString(), openid, outTradeNo, bankTransNo, null, payDate, payTime, payInfo);
|
||
|
// return Result.respStr();
|
||
|
// }
|
||
|
|
||
|
|
||
|
//
|
||
|
// /**
|
||
|
// * [支付宝]处方支付
|
||
|
// *
|
||
|
// * @return 订单数据
|
||
|
// */
|
||
|
// @Action("recipeNewPay")
|
||
|
// public String recipeNewPay() {
|
||
|
// // payPackage 的商品信息
|
||
|
// String openid = getString("openid");
|
||
|
// String patientId = getString("patientId");
|
||
|
// String treatNum = getString("treatNum");
|
||
|
// String totalFee = getString("totalFee");
|
||
|
// String recipeJson = getString("recipeJson");
|
||
|
// String payWay = getString("payWay");
|
||
|
// Integer awaitSecond = getInteger("awaitSecond"); // 等待秒数,0继续执行不等待
|
||
|
//
|
||
|
// log.info("【支付宝】openid={}, patientId={}, treatNum={}, totalFee={}, recipeJson={},payWay={}", openid, patientId, treatNum, totalFee, recipeJson, payWay);
|
||
|
// if (openid == null || patientId == null || treatNum == null || totalFee == null) {
|
||
|
// return Result.error(ResultEnum.PARAM_NOT_COMPLETE); // 参数缺失
|
||
|
// }
|
||
|
//
|
||
|
// RecipeService recipeService = new RecipeService();
|
||
|
// if (awaitSecond == null) awaitSecond = 0;
|
||
|
// if (awaitSecond != 0) {
|
||
|
// Long second = recipeService.isRepeatPay(treatNum, awaitSecond);
|
||
|
// if (second != null) { // 是否 awaitSecond s内重复支付
|
||
|
// log.info("[处方] 下单等待 {} s 确定", second);
|
||
|
// return Result.error(ResultEnum.PAY_AWAIT, second);
|
||
|
// }
|
||
|
// }
|
||
|
//
|
||
|
// String outTradeNo =PayTypeEnum.createOutTradeNo(PayTypeEnum.ALI); // 创建订单号
|
||
|
//
|
||
|
// // 金额为0的处方不进行调用通知
|
||
|
// if ("0".equals(totalFee)) {
|
||
|
// Date date = new Date();
|
||
|
// String payDate = DateHelper.getCurDate(date);
|
||
|
// String payTime = DateHelper.getCurTime(date);
|
||
|
//
|
||
|
// recipeService.saveRecipePrepay(recipeJson, payWay, openid, patientId, treatNum, outTradeNo, totalFee);
|
||
|
// recipeService.recipeListPay(PayTypeEnum.ALI, totalFee, openid, outTradeNo, outTradeNo, payDate, payTime, null);
|
||
|
//
|
||
|
// Map<String, Object> map = new HashMap<>();
|
||
|
// map.put("totalFee", 0);
|
||
|
// return Result.success(map);
|
||
|
// }
|
||
|
//
|
||
|
//
|
||
|
// String title = "诊间支付 门诊号:" + treatNum;
|
||
|
//
|
||
|
// // 下单
|
||
|
// JSONObject respJson = AliConfig.createTransaction(title, outTradeNo, totalFee, openid, "aliPay/recipePayNotify.do");
|
||
|
// log.info("【支付宝】下单:treatNum={}, respJson={}", treatNum, respJson);
|
||
|
// if (respJson == null) {
|
||
|
// return Result.error(ResultEnum.PAY_ERROR_ORDER); // 微信支付调用错误
|
||
|
// }
|
||
|
//
|
||
|
// // 订单信息预存
|
||
|
// recipeService.saveRecipePrepay(recipeJson, payWay, openid, patientId, treatNum, outTradeNo, totalFee);
|
||
|
// return Result.success(JSONObject.toJSONString(respJson));
|
||
|
// }
|
||
|
|
||
|
|
||
|
// /**
|
||
|
// * [支付宝]分时段挂号支付
|
||
|
// *
|
||
|
// * @return 订单数据
|
||
|
// */
|
||
|
// @Action("timeRegNewPay")
|
||
|
// public String timeRegNewPay() {
|
||
|
// // 金额
|
||
|
// BigDecimal regFee = getBigDecimal("regFee");
|
||
|
// BigDecimal clinicFee = getBigDecimal("clinicFee");
|
||
|
// BigDecimal payMoney = getBigDecimal("payMoney");
|
||
|
// // 信息
|
||
|
// String tel = getString("tel");
|
||
|
// String openid = getString("openid");
|
||
|
// String idCardNo = getString("idCardNo");
|
||
|
// String patientId = getString("patientId");
|
||
|
// // 号源
|
||
|
// String tid = getString("tid");
|
||
|
// String tName = getString("tName");
|
||
|
// String deptCode = getString("deptCode");
|
||
|
// String deptName = getString("deptName");
|
||
|
// String doctCode = getString("doctCode");
|
||
|
// String doctName = getString("doctName");
|
||
|
// String begTime = getString("begTime");
|
||
|
// String endTime = getString("endTime");
|
||
|
// String regCode = getString("regCode");
|
||
|
// String regDate = getString("regDate");
|
||
|
// String sourceId = getString("sourceId");
|
||
|
// String queueNum = getString("queueNum");
|
||
|
// String address = getString("address");
|
||
|
//
|
||
|
// if (regFee == null || clinicFee == null || payMoney == null
|
||
|
// || openid == null || patientId == null || tid == null || tName == null
|
||
|
// || deptCode == null || deptName == null || doctCode == null || doctName == null
|
||
|
// || regCode == null || regDate == null || begTime == null || endTime == null
|
||
|
// || queueNum == null || sourceId == null) {
|
||
|
// return outResp(Result.error(ResultEnum.PARAM_NOT_COMPLETE));
|
||
|
// }
|
||
|
//
|
||
|
//
|
||
|
// Register reg = new Register();
|
||
|
// reg.setRegFee(regFee);
|
||
|
// reg.setClinicFee(clinicFee);
|
||
|
// reg.setPayMoney(payMoney);
|
||
|
// // 信息
|
||
|
// reg.setPatientId(patientId);
|
||
|
// reg.setOpenid(openid);
|
||
|
// reg.setIdCardNo(idCardNo);
|
||
|
// reg.setTel(tel);
|
||
|
//
|
||
|
// reg.setTid(tid);
|
||
|
// reg.settName(tName);
|
||
|
// reg.setDeptCode(deptCode);
|
||
|
// reg.setDeptName(deptName);
|
||
|
// reg.setDoctCode(doctCode);
|
||
|
// reg.setDoctName(doctName);
|
||
|
// reg.setBegTime(begTime);
|
||
|
// reg.setEndTime(endTime);
|
||
|
// reg.setRegDate(regDate);
|
||
|
// reg.setSourceId(sourceId);
|
||
|
// reg.setQueueNum(queueNum);
|
||
|
// reg.setAddress(address);
|
||
|
// reg.setRegCode(regCode);
|
||
|
// reg.setPayDeviceId("mobile");
|
||
|
// reg.setPayWay(PayTypeEnum.ALI.getPayWay_in());
|
||
|
//
|
||
|
// String outTradeNo = PayTypeEnum.createOutTradeNo(PayTypeEnum.ALI);
|
||
|
// reg.setoutTradeNo(outTradeNo);
|
||
|
//
|
||
|
// log.info("【支付宝】[分时段挂号]生成的outTradeNo:" + outTradeNo);
|
||
|
// String title = deptName + " 挂号(" + regDate + ")";
|
||
|
//
|
||
|
// // 预存挂号信息
|
||
|
// if (!new RegService().saveRegPrepay(reg, true)) {
|
||
|
// return Result.error(ResultEnum.PAY_PREPAY_SAVE_ERROR);
|
||
|
// }
|
||
|
//
|
||
|
// // 下单
|
||
|
// JSONObject respJson = AliConfig.createTransaction(title, outTradeNo, payMoney.toString(), openid, "aliPay/regPayNotify.do");
|
||
|
// if (respJson == null) {
|
||
|
// return Result.error(ResultEnum.PAY_ERROR_ORDER); // 微信支付调用错误
|
||
|
// }
|
||
|
// return Result.success(JSONObject.toJSONString(respJson));
|
||
|
// }
|
||
|
|
||
|
|
||
|
}
|