package org.klose.payment.dao;

import org.klose.payment.po.TransactionPO;
import org.springframework.data.jpa.repository.Lock;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;

import javax.persistence.LockModeType;
import java.util.List;

public interface TransactionDao extends CrudRepository<TransactionPO, Long> {
	
	TransactionPO findByTransactionNo(String orderNo);

	@Lock(LockModeType.PESSIMISTIC_WRITE)
	@Query("SELECT m FROM #{#entityName} m WHERE m.id=:transactionId")
	TransactionPO findOneOnLock(@Param("transactionId") Long transactionId);
	
	@Lock(LockModeType.PESSIMISTIC_WRITE)
	@Query("SELECT m FROM #{#entityName} m WHERE m.transactionNo=:orderNo")
	List<TransactionPO> findByOrderNoOnLock(@Param("orderNo") String orderNo);
	
	@Query("SELECT trans.returnURL FROM #{#entityName} trans" +
				 " WHERE trans.id=:transactionId")
	String findReturnURLById(@Param("transactionId") Long transactionId);
	
	@Query("SELECT m FROM #{#entityName} m" +
			 " WHERE m.bizNo=:bizNo and (m.status=1 or m.status=-1)")

    TransactionPO findPaidTransactionByBizNo(@Param("bizNo") String bizNo);
	
}