package com.ssm.manage.service;

import com.github.pagehelper.PageInfo;
import com.ssm.core.service.BaseService;
import com.ssm.manage.entity.*;
import com.ssm.manage.query.*;
import com.ssm.manage.response.CourseAccountResponse;

import java.math.BigDecimal;
import java.util.List;

public interface SsmCourseAccountService extends BaseService<CourseAccount> {

    CourseAccount setCourseAccount(CourseList courseList, CourseAccount courseAccount, StoreParament storeParament);
    CourseAccount setCourseAccountS(CourseList courseList, CourseAccount courseAccount, StoreParament storeParament) throws SmsException;
    int addCourseAccount(CourseAccount courseAccount) throws SmsException;
    int updateStore(CourseAccount courseAccount);
    int repayCourseAccount(RepayAccountListRequest rechargeAccount, RepayTradeRequest repayTradeRequest, RepayList repayList) throws SmsException;
    int cancelRepayCourseAccount(RepayAccountListRequest rechargeAccount, RepayTradeRequest repayTradeRequest, RepayList repayList) throws SmsException;
    CourseAccount subCount(CourseAccount courseAccount, Integer subCount, Integer type) throws SmsException;
    CourseAccount subCountNew(CourseAccount courseAccount, Integer subCount, Integer type) throws SmsException;
    CourseAccount subCount1(CardChangeList cardChangeList,CourseAccount courseAccount, Integer subCount, Integer type,BigDecimal outMoney) throws SmsException;
    CourseAccount subCount(CourseAccount courseAccount, Integer subCount, BigDecimal money) throws SmsException;
    CourseAccount subCount(CourseAccount courseAccount, Integer subCount, Integer type,Integer subCountcoun) throws SmsException;
    CourseAccount subCount(CourseAccount courseAccount, Integer subCount, Integer type,BigDecimal rechargeMoney) throws SmsException;
    CourseAccount subCount(CourseAccount courseAccount, Integer subCount, Integer type,CourseList courseList) throws SmsException;
    CourseAccount addCount(CourseAccount courseAccount, Integer addCount) throws SmsException;
    CourseAccount addCountNew(CourseAccount courseAccount, CashList cashList) throws SmsException;
    CourseAccount addCount(CourseAccount courseAccount, Integer addCount,BigDecimal rechargeMoney) throws SmsException;
    CourseAccount subCount(CourseAccount courseAccount) throws SmsException;
    List<CourseAccount> selectList(CourseAccountRequest courseAccountRequest);
    List<CourseAccount> selectListdeal(CourseAccountRequest courseAccountRequest);
    List<CourseAccount> selectListdeals(CourseAccountRequest courseAccountRequest);
    List<CourseAccount> selectListdealsalls(CourseAccountRequest courseAccountRequest);

    List<CourseAccount> selectListdelay(CourseAccountRequest courseAccountRequest);

    List<CourseAccount> selectListdealsall(CourseAccountRequest courseAccountRequest);
    List<CourseAccount> selectListDisable(CourseAccountRequest courseAccountRequest);
    List<CourseAccount> selectRefundList(CourseAccountRequest courseAccountRequest);
    List<CourseAccount> selectRefundListone(CourseAccountRequest courseAccountRequest);

    int repay(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;
    int repayNew(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;
    int repayPromotion(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;
    int repayPromotionNew(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;
    int repayPromotionNewByRecharge(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;
    int repayCancel(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;
    int repayCancelNew(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;
    int repayCancelPromotion(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;
    int repayCancelPromotionNew(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;
    int cancelPromotionRecharge(RepayTradeList repayTradeList, RepayList repayList, DebtList debtList) throws SmsException;

    int updateState(Long id, int state);

    CourseAccount subCount(RefundCourse refundCourse) throws SmsException;
    CourseAccount addCount(RefundCourse refundCourse) throws SmsException;

    CourseAccount addCourseAccount( CourseAccount courseAccount, PromotionProject promotionProject, Integer limitCount) throws SmsException;
    CourseAccount addCourseAccountByPromotionRecharge( CourseAccount courseAccount, PromotionProject promotionProject, Integer limitCount) throws SmsException;
    CourseAccount addCourseAccount(CourseAccount courseAccount, PromotionProject promotionProject, Integer limitCount, DocPromotion docPromotion , BigDecimal TotalMoney) throws SmsException;
    CourseAccount subCourseAccount( DocPromotion promotion, PromotionProject promotionProject) throws SmsException;

    int update(CourseAccountRequest courseAccountRequest, String phone);

    int insertBatch(List<CourseAccount> list, Long storeId, String storeName);

    //会员排行榜查询会员总疗程金额
    List<CourseAccountResponse> memberCourse(CourseAccountRequest courseAccountRequest);

    CourseAccount addCourseAccount( CourseAccount courseAccount, CardChangeList cardChangeList, CardChangeInProject cardChangeInProject) throws SmsException;

    List<CourseAccount> selectListByJZ(CourseAccountRequest courseAccountRequest);

    List<CourseAccount> selectListByMemberList(CourseAccountRequest courseAccountRequest);

    List<CourseAccount> exportachi(CourseAccountRequest courseAccountRequest);

    PageInfo<CourseAccount> exportachiByPage(CourseAccountRequest courseAccountRequest);
}
