package com.ym.mec.biz.service;

import com.ym.mec.biz.dal.entity.SysUserCashAccount;
import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
import com.ym.mec.common.service.BaseService;

import java.math.BigDecimal;

public interface SysUserCashAccountService extends BaseService<Integer, SysUserCashAccount> {

	/**
	 * 更新指定用户的账户余额
	 * @param userId 用户编号
	 * @param decimal 交易金额（支持负数）
	 * @return
	 */
	boolean updateBalance(Integer userId, BigDecimal decimal);

	/**
	 * 更新指定用户的账户余额
	 * @param userId 用户编号
	 * @param decimal 交易金额（支持负数）
	 * @param type 交易类型
	 * @param memo 备注
	 * @return
	 */
	boolean updateBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String memo);

	/**
	 * 更新指定用户的账户余额
	 * @param userId 用户编号
	 * @param decimal 交易金额（支持负数）
	 * @param type 交易类型
	 * @param memo 备注
	 * @param transNo 订单流水编号
	 * @return
	 */
	boolean updateBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String memo,String transNo);

	/**
	 * 更新指定用户的账户课程余额
	 * @param userId 用户编号
	 * @param decimal 交易金额（支持负数）
	 * @return
	 */
	boolean updateCourseBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, BigDecimal amount, String description);

	/**
	 * 更新指定用户的账户课程余额
	 * @param userId 用户编号
	 * @param decimal 交易金额（支持负数）
	 * @return
	 */
	boolean appendCourseBalance(Integer userId, BigDecimal decimal, PlatformCashAccountDetailTypeEnum type, String description);

	/**
	 * 将课程余额转入到可用余额
	 * @param userId
	 * @return
	 */
	boolean transferCourseBalanceToBalance(Integer userId,BigDecimal money);

	/**
	 * 获取行级锁
	 * @param userId
	 * @return
	 */
	SysUserCashAccount getLocked(Integer userId);
}
