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