package cn.iocoder.yudao.module.pay.service.divide;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pay.controller.admin.divide.vo.DividePageReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.divide.vo.DivideSaveReqVO;
import cn.iocoder.yudao.module.pay.controller.app.divide.vo.DrawMoneyVO;
import cn.iocoder.yudao.module.pay.dal.dataobject.divide.DivideDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 分账单 Service 接口
 *
 * @author 管理员
 */
public interface DivideService {

    /**
     * 创建分账单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDivide(@Valid DivideSaveReqVO createReqVO);

    /**
     * 更新分账单
     *
     * @param updateReqVO 更新信息
     */
    void updateDivide(@Valid DivideSaveReqVO updateReqVO);

    /**
     * 删除分账单
     *
     * @param id 编号
     */
    void deleteDivide(Long id);

    /**
     * 获得分账单
     *
     * @param id 编号
     * @return 分账单
     */
    DivideDO getDivide(Long id);

    /**
     * 获得分账单分页
     *
     * @param pageReqVO 分页查询
     * @return 分账单分页
     */
    PageResult<DivideDO> getDividePage(DividePageReqVO pageReqVO);

    /**
     * 开始分账
     */
    int startDivide();

    /**
     * 同步分账结果
     */
    int getDivideResult();

    /**
     * 解冻剩余资金
     */
    int getDivideFreeze();


    /**
     * 提现（退款）
     */
    Boolean drawMoney( DrawMoneyVO drawMoneyVO);

    /**
     * 扣除wx充值
     */
    void subtractWx(Integer amount,Long userId);


    /**
     * 分账回退
     */
    void returnMoney(List<DivideDO> backList);

    void updateDivideById(DivideDO divideDO);
}