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 insertInHospOrder ( 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 tradeNo ) {
String sql = "update pay_in_hosp set payStatus=0, bankTransNo=?, tradeNo=? where outTradeNo=?" ;
return DataBase . update ( sql , ps - > {
ps . setString ( 1 , bankTransNo ) ;
ps . setString ( 2 , tradeNo ) ;
ps . setString ( 3 , 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 ;
}
}