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.
		
		
		
		
			
				
					189 lines
				
				7.0 KiB
			
		
		
			
		
	
	
					189 lines
				
				7.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								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;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    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;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |