package com.starry.admin.modules.personnel.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.personnel.module.entity.PlayBalanceDetailsInfoEntity;
import com.starry.admin.modules.personnel.module.vo.PlayBalanceDetailsQueryVo;
import com.starry.admin.modules.personnel.module.vo.PlayBalanceDetailsReturnVo;
import java.math.BigDecimal;

/**
 * 余额明细Service接口
 *
 * @author admin
 * @since 2024-04-30
 */
public interface IPlayBalanceDetailsInfoService extends IService<PlayBalanceDetailsInfoEntity> {

    /**
     * 查询余额明细
     *
     * @param id
     *            余额明细主键
     * @return 余额明细
     */
    PlayBalanceDetailsInfoEntity selectPlayBalanceDetailsInfoById(String id);

    /**
     * 查询余额明细列表
     *
     * @param vo
     *            余额明细查询对象
     * @return 余额明细集合
     */
    IPage<PlayBalanceDetailsReturnVo> selectByPage(PlayBalanceDetailsQueryVo vo);

    /**
     * 查询余额明细列表
     *
     * @param playBalanceDetailsInfo
     *            余额明细
     * @return 余额明细集合
     */
    IPage<PlayBalanceDetailsInfoEntity> selectPlayBalanceDetailsInfoByPage(
            PlayBalanceDetailsInfoEntity playBalanceDetailsInfo);

    /**
     * 新增余额明细信息
     *
     * @param userType
     *            用户类型[0:陪聊;1:顾客]
     * @param userId
     *            用户ID
     * @param balanceBeforeOperation
     *            操作前余额
     * @param balanceAfterOperation
     *            操作后余额
     * @param operationType
     *            操作类型（0:充值;1:消费,2:服务;3:退款）
     * @param operationAction
     *            操作动作
     * @param balanceMoney
     *            操作金额
     * @param giftAmount
     *            赠送金额
     * @param orderId
     *            订单ID
     */
    void insertBalanceDetailsInfo(String userType, String userId, BigDecimal balanceBeforeOperation,
            BigDecimal balanceAfterOperation, String operationType, String operationAction, BigDecimal balanceMoney,
            BigDecimal giftAmount, String orderId);

    /**
     * 判断顾客是否对指定订单发生过余额扣款。
     *
     * @param userId
     *            顾客ID
     * @param orderId
     *            订单ID
     * @return 存在消费流水返回true
     */
    boolean existsCustomerConsumeRecord(String userId, String orderId);

    /**
     * 新增余额明细
     *
     * @param playBalanceDetailsInfo
     *            余额明细
     * @return 结果
     */
    boolean create(PlayBalanceDetailsInfoEntity playBalanceDetailsInfo);

    /**
     * 修改余额明细
     *
     * @param playBalanceDetailsInfo
     *            余额明细
     * @return 结果
     */
    boolean update(PlayBalanceDetailsInfoEntity playBalanceDetailsInfo);

    /**
     * 批量删除余额明细
     *
     * @param ids
     *            需要删除的余额明细主键集合
     * @return 结果
     */
    int deletePlayBalanceDetailsInfoByIds(String[] ids);

    /**
     * 删除余额明细信息
     *
     * @param id
     *            余额明细主键
     * @return 结果
     */
    int deletePlayBalanceDetailsInfoById(String id);
}
