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 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)); // } }