package com.ynxbd.common.dao; import com.ynxbd.common.bean.pay.PayInHosp; import com.ynxbd.common.config.db.DataBase; import lombok.extern.slf4j.Slf4j; import java.util.List; /** * @Author wsq * @Date 2021/3/18 17:14 * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. */ @Slf4j public class InHospPayDao { /** * 预存住院预交金信息 * * @param payInHosp 信息 * @return 是否成功 */ public boolean insertPrepay(PayInHosp payInHosp) { payInHosp.setHisStatus(-1); payInHosp.setPayStatus(-1); return insert(payInHosp); } /** * 新增住院预交金信息 * * @param payInHosp 信息 * @return 是否成功 */ public boolean insert(PayInHosp payInHosp) { String sql = "insert into pay_in_hosp(updateTime, hisStatus, payStatus, openid, patientId, patientName, outTradeNo, bankTransNo, tradeNo, treatNum, payWay, payMoney, authCode, invoiceTransNo, hisTransNo, operateUser, totalFee, payOrdId, AcctFee, HifpFee, ChrgBchno, MdTrtId, MdUserId) values (now(),?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?)"; return DataBase.insert(sql, ps -> { ps.setInt(1, payInHosp.getHisStatus()); ps.setInt(2, payInHosp.getPayStatus()); ps.setString(3, payInHosp.getOpenid()); ps.setString(4, payInHosp.getPatientId()); ps.setString(5, payInHosp.getPatientName()); ps.setString(6, payInHosp.getOutTradeNo()); ps.setString(7, payInHosp.getBankTransNo()); ps.setString(8, payInHosp.getTradeNo()); ps.setString(9, payInHosp.getTreatNum()); ps.setString(10, payInHosp.getPayWay()); ps.setBigDecimal(11, payInHosp.getPayMoney()); ps.setString(12, payInHosp.getAuthCode()); ps.setString(13, payInHosp.getInvoiceTransNo()); ps.setString(14, payInHosp.getHisTransNo()); ps.setString(15, payInHosp.getOperateUser()); ps.setBigDecimal(16, payInHosp.getTotalFee()); // ps.setString(17, payInHosp.getPayOrdId()); ps.setBigDecimal(18, payInHosp.getAcctFee()); ps.setBigDecimal(19, payInHosp.getHifpFee()); ps.setString(20, payInHosp.getChrgBchno()); ps.setString(21, payInHosp.getMdTrtId()); ps.setString(22, payInHosp.getMdUserId()); }) > 0; } /** * 记录HIS缴费失败的错误信息 * * @param outTradeNo 订单号 * @param message 信息 * @return 是否成功 */ public boolean updatePayFail(String openid, String outTradeNo, String message) { String sql = "update pay_in_hosp set hisResult= ? where outTradeNo= ? and openid= ?"; return DataBase.update(sql, ps -> { ps.setString(1, message); ps.setString(2, outTradeNo); ps.setString(3, openid); }) > 0; } /** * [微信支付]成功,更新信息 * * @param outTradeNo 订单号 * @return 是否成功 */ public boolean updateWxPaid(String outTradeNo, String bankTransNo) { String sql = "update pay_in_hosp set payStatus=0, bankTransNo=? where outTradeNo=?"; return DataBase.update(sql, ps -> { ps.setString(1, bankTransNo); ps.setString(2, outTradeNo); }) > 0; } /** * [HIS调用]成功,更新信息 * * @param openid openid * @param outTradeNo 订单号 * @param prepayNum 预交金号 * @return 是否成功 */ public boolean updateHisPaid(String openid, String outTradeNo, String prepayNum) { String sql = "update pay_in_hosp set hisStatus=0, prepayNum=? where outTradeNo=? and openid=?"; return DataBase.update(sql, ps -> { ps.setString(1, prepayNum); ps.setString(2, outTradeNo); ps.setString(3, openid); }) > 0; } /** * 判断是否已经发起支付 * * @param outTradeNo 订单号 * @return 是否已经发起支付 */ public boolean hasPayed(String outTradeNo) { String sql = "select * from pay_in_hosp where hisStatus= 0 and outTradeNo= ?"; return DataBase.select(sql, PayInHosp.class, ps -> { ps.setString(1, outTradeNo); }).size() > 0; } /** * 判断是否已经发起支付 * * @param outTradeNo 订单号 * @return 是否已经发起支付 */ public PayInHosp selectByTradeNo(String outTradeNo) { String sql = "select * from pay_in_hosp where hisStatus= -1 and outTradeNo= ?"; List list = DataBase.select(sql, PayInHosp.class, ps -> { ps.setString(1, outTradeNo); }); return list.size() == 1 ? list.get(0) : null; } /** * 根据HIS交易流水号查询微信支付成功,His执行失败的并且未退款的记录 * * @param invoiceTransNo HIS交易流水号 */ public PayInHosp selectRefundByInvoiceTransNo(String invoiceTransNo, String patientId) { String sql = "select * from pay_in_hosp where invoiceTransNo= ? and patientId= ? and hisStatus= 0 and payStatus= 0 and authCode is not null and tradeNo is null and (refundResult is null or refundResult != 'OK')"; List resultList = DataBase.select(sql, PayInHosp.class, ps -> { ps.setString(1, invoiceTransNo); ps.setString(2, patientId); }); if (resultList.size() == 1) { return resultList.get(0); } if (resultList.size() > 1) { log.info("[处方]数据库存在多条相同的支付记录 invoiceTransNo={}", invoiceTransNo); return null; } return null; } /** * 根据发票流水号号修改退费信息 * * @param outTradeNo 订单号 * @param invoiceTransNo 发票号 * @param refundResult 退款信息 * @return 是否成功 */ public boolean updateRefundByInvoiceTransNo(String outTradeNo, String outRefundNo, String invoiceTransNo, String refundResult) { String sql = "update pay_in_hosp set refundResult=?, tradeNo=? where outTradeNo=? and invoiceTransNo=? and (refundResult is null or refundResult != 'OK')"; return DataBase.update(sql, ps -> { ps.setString(1, refundResult); ps.setString(2, outRefundNo); ps.setString(3, outTradeNo); ps.setString(4, invoiceTransNo); }) > 0; } public boolean updateMicroOrderState(String outTradeNo, String bankTransNo, String openid) { String sql = "update pay_in_hosp set payStatus = 0, bankTransNo=?, openid=? where outTradeNo=? and authCode is not null"; return DataBase.update(sql, ps -> { ps.setString(1, bankTransNo); ps.setString(2, openid); ps.setString(3, outTradeNo); }) > 0; } }