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.
		
		
		
		
			
				
					
					
						
							179 lines
						
					
					
						
							6.6 KiB
						
					
					
				
			
		
		
	
	
							179 lines
						
					
					
						
							6.6 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=? 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;
 | |
|     }
 | |
| }
 | |
| 
 |