package com.hehenian.biz.dal.trade;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.hehenian.biz.common.trade.dataobject.RepaymentDo;
/**
* @author zhangyunhua
* @version 1.0
* @since 1.0
*/
public interface IRepaymentDao {
/**
* 根据ID 查询
*
* @parameter id
*/
public RepaymentDo getById(Long id);
/**
* 根据条件查询列表
*/
public List<RepaymentDo> selectRepayment(Map<String, Object> parameterMap);
/**
* 根据条件查询列表,用于翻页
*/
public List<Map> selectRepaymentPage(Map<String, Object> parameterMap);
/**
* 更新
*/
public int updateRepaymentById(RepaymentDo newRepaymentDo);
/**
* 新增
*/
public int addRepayment(RepaymentDo newRepaymentDo);
/**
* 删除
*/
public int deleteById(Long id);
/**
* upRepaymentVersionById 根据id和新状态更新版本
*
* @param oldVersion
* 更新之前的版本
* @param newVersion
* 更新之后的版本
* @param status
* 状态
* @param repaymentId
* 还款ID
* @return
* @author: zhangyunhmf
* @date: 2014年9月26日下午5:42:18
*/
public int upRepaymentVersionById(@Param(value = "oldVersion") int oldVersion,
@Param(value = "newVersion") int newVersion, @Param(value = "status") int status,
@Param(value = "repaymentId") long repaymentId);
/**
* 如果还款过程中失败, 还款状态可能会被处理成 还款中的, 营运将操作不了,所以要解锁,需要将状态为3的数据更新成状态 1
*
* @param repayVersion
* 版本
* @param status
* 状态
* @param id
* 还款id
*/
public int unLockById(@Param(value = "oldVersion") int oldVersion, @Param(value = "newVersion") int newVersion,
@Param(value = "repaymentId") long repaymentId);
/**
* 还款后更新已经还款本金,罚金,状态
*
* @param needPI
* 已还本金
* @param lateFI
* 已还罚金
* @param repayId
* 还款ID
* @param version
* 记录版本号
* @return
* @author: zhangyunhmf
* @date: 2014年9月26日下午5:43:52
*/
public int updateRepaymentStatusAndAmount(@Param(value = "needPI") double needPI,
@Param(value = "lateFI") double lateFI, @Param(value = "repayStatus") int repayStatus,
@Param(value = "repayId") long repayId, @Param(value = "version") int version);
/**
* 提前还款时更新还款状态根据标的ID
*
* @param currentRepayId
* 当前期数的还款记录ID
* @param lateFI
* 罚金
* @param borrowId
* 标的ID
* @return
* @author: zhangyunhmf
* @date: 2014年9月28日下午2:30:10
*/
public int updateRepaymentStatusByPreRepay(@Param(value = "currentRepayId") long currentRepayId,
@Param(value = "borrowId") long borrowId);
/**
* 根据当前日期取当期还款记录
*
* @param borrowId
* 标的ID
* @return
* @author: zhangyunhmf
* @date: 2014年9月26日下午5:48:58
*/
public RepaymentDo selectCurrentPeriod(long borrowId);
/**
* 提前还款借款人应还金额汇总
*
* @param borrowId
* 标的id
* @param currentRepayId
* 当前期数还款id,如果当前期数小于第三期,则第三期为当前期数
* @return
* @author: zhangyunhmf
* @date: 2014年9月29日下午3:29:42
*/
public RepaymentDo selectPreRepayTotalAmountByBorrowId(@Param(value = "borrowId") long borrowId,
@Param(value = "currentRepayId") long currentRepayId);
/**
* 取第三期的还款记录
*
* @param borrowId
* 标的ID
* @return
* @author: zhangyunhmf
* @date: 2014年9月29日下午3:30:15
*/
public RepaymentDo selectThirdPeriod(@Param(value = "borrowId") long borrowId);
/**
* 更新还款为代偿
*
* @param repaymentId
* 还款ID
* @param version
* 版本
* @return
* @author: zhangyunhmf
* @date: 2014年9月28日下午6:45:19
*/
public int updateIsWebRepayById(@Param(value = "repaymentId") long repaymentId,
@Param(value = "version") int version);
/**
* 提前代偿时,不满三期用最后一期
*
* @param borrowId
* @author: zhangyunhmf
* @date: 2014年10月13日上午10:30:13
*/
public RepaymentDo selectLastPeriod(long borrowId);
/**
* 查询逾期未还款的记录, 定时任务计算罚息会调用
*
* @param currentDate
* @return
* @author: zhangyunhmf
* @date: 2014年10月15日上午10:23:31
*/
public List<RepaymentDo> selectOverDueRepayList(Date currentDate);
/**
* 根据ID累加已收本息和罚息
*
* @param newRepaymentDo
* @author: zhangyunhmf
* @date: 2014年11月21日下午5:15:03
*/
public void updateRepaymentHasAmountById(RepaymentDo newRepaymentDo);
/**
* 根据条件查询用户还款记录
*
* @param userIdList
* @return
* @author: liuzgmf
* @date: 2014年12月1日下午4:58:02
*/
public List<Map<String, Object>> queryUserRepayments(@Param("userIdList") List<Long> userIdList);
/**
* 根据借款标的ID,还款期限查询还款记录
*
* @param borrowId
* @param repayPeriod
* @return
* @author: liuzgmf
* @date: 2015年4月24日上午11:02:33
*/
public RepaymentDo getByBorrowIdAndRepayPeriod(@Param("borrowId") Long borrowId,
@Param("repayPeriod") String repayPeriod);
}