微信后端代码
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.

188 lines
7.0 KiB

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<PayInHosp> 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<PayInHosp> 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=?, refundTime=now() 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;
}
}