package com.dhcc.finance.main.dao;

import com.dhcc.finance.main.domain.CwBdVouchtempB;
import com.dhcc.finance.main.domain.CwGlDetail;
import com.dhcc.finance.main.domain.CwGlDetailExample;
import com.dhcc.finance.main.domain.CwGlVoucher;
import com.dhcc.finance.main.model.CwGlDetailAndVoucher;
import com.dhcc.finance.main.model.CwGlDetailLike;
import com.dhcc.finance.main.model.CwGlVoucherAndDetailWeb;
import com.dhcc.finance.main.model.CwGlVoucherTempRequest;
import org.apache.ibatis.annotations.Param;

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

public interface CwGlDetailMapper {
    long countByExample(CwGlDetailExample example);

    int deleteByExample(CwGlDetailExample example);

    int deleteByPrimaryKey(String pkDetail);

    int insert(CwGlDetail record);

    int insertSelective(CwGlDetail record);

    List<CwGlDetail> selectByExample(CwGlDetailExample example);

    CwGlDetail selectByPrimaryKey(String pkDetail);

    int updateByExampleSelective(@Param("record") CwGlDetail record, @Param("example") CwGlDetailExample example);

    int updateByExample(@Param("record") CwGlDetail record, @Param("example") CwGlDetailExample example);

    int updateByPrimaryKeySelective(CwGlDetail record);

    int updateByPrimaryKey(CwGlDetail record);

    /**
     * 功能描述：批量新增数据
     *
     * @param cwGlDetailList
     * @return int
     * @author dml
     * @date 2019年4月13日 下午4:19:34
     * @修改日志：
     */
    int insertCwGlDetailBatch(List<CwGlDetail> cwGlDetailList);

    /**
     * 功能描述：删某凭证下所有分录信息
     *
     * @param pkVoucher
     * @return int
     * @author dml
     * @date 2019年4月15日 下午8:20:16
     * @修改日志：
     */
    int updateByPkVoucher(@Param("pkVoucher") String pkVoucher, @Param("updateUser") String updateUser);

    /**
     * 功能描述：查询某凭证下下所有分录信息
     *
     * @param pkVoucher
     * @return List<CwGlDetail>
     * @author dml
     * @date 2019年4月19日 上午10:53:30
     * @修改日志：
     */
    List<CwGlDetail> selectByPkVoucher(@Param("pkVoucher") String pkVoucher, @Param("useState") String useState);

    /**
     * 查询某凭证下下所有分录信息
     *
     * @param pkGlorgbook
     * @param period
     * @param pkVoucher
     * @return List<CwGlDetailAndVoucher>
     * @author huangpeng
     * @date 2019年4月19日 下午4:22:33
     * @修改日志：
     */
    List<CwGlDetailAndVoucher> selectCwGlDetailandCwGlVoucher(@Param("pkGlorgbook") String pkGlorgbook,
                                                              @Param("period") String period,
                                                              @Param("pkVoucher") String pkVoucher);

    /**
     * 功能描述：期初新增凭证分录信息
     *
     * @param map
     * @return int
     * @author dml
     * @date 2019年4月29日 下午3:10:24
     * @修改日志：
     */
    int insertForInitbuild(Map<String, Object> map);

    /**
     * 功能描述：逻辑删某凭证下所有分录信息
     *
     * @param pkVoucher
     * @return int
     * @author dml
     * @date 2019年5月23日 下午5:26:26
     * @修改日志：
     */
    int deleteByPkVoucherLogic(CwGlDetail cwGlDetail);

    /**
     * 功能描述
     *
     * @param cwGlVoucherList
     * @return List<String>
     * @author huangpeng
     * @date 2019年8月10日 下午4:53:01
     * 修改日志:
     */
	List<String> selectAssidList(@Param("list")List<CwGlVoucher> cwGlVoucherList);
	/**
	 * 功能描述：查询资金流水结息开始日期、结束日期
	 * @param map
	 * @return Map<String,Date>
	 * @author likai
	 * @date 2020年6月4日 上午11:19:01
	 * @修改日志：
	 */
	Map<String, Date> searchJxksr(Map<String, Object> map);
	/**
     * 功能描述：查询费用流水结息开始日期、结束日期
     * @param map
     * @return Map<String,Date>
     * @author likai
     * @date 2020年6月4日 上午11:19:01
     * @修改日志：
     */
	Map<String, Date> searchLastTransTime(Map<String, Object> map);
	
	/**
	 * 功能描述  获取恢复分录查询
	 *@param cwGlVoucherAndDetailWeb
	 *@return List<CwGlVoucherAndDetailWeb>
	 *@author huangpeng
	 *@date 2019年12月13日 上午11:22:23
	 *修改日志:
	 */
	List<CwGlVoucherAndDetailWeb> searchCwGlVoucherAndDetailWeb(CwGlDetailLike cwGlDetailLike);
	
	/**
	 * 功能描述  反结转删除
	 *@param cwGlVoucherList
	 *@return int
	 *@author huangpeng
	 *@date 2019年8月10日 下午5:04:23
	 *修改日志:
	 */
	int updateUserStateForTwo(@Param("list")List<CwGlVoucher> cwGlVoucherList);
	
	/**
	 * 功能描述：批量更新分录
	 * @param oldDetailList
	 * @return int
	 * @author dml
	 * @date 2019年12月5日 下午3:34:52
	 * @修改日志：
	 */
	int updateDetailBatch(@Param("list")List<CwGlDetail> oldDetailList);
    /**
     * 功能描述：统计指定科目余额
     *
     * @param pkGlorgbook
     * @param subList
     * @return Map<String, BigDecimal>
     * @author dml
     * @date 2019年9月17日 下午3:23:44
     * @修改日志：
     */
    Map<String, BigDecimal> subBalanceCount(Map<String, Object> map);

    /**
     * 功能描述：查询科目借方总额、贷方总额
     *
     * @param map
     * @return Map<String, BigDecimal>
     * @author likai
     * @date 2020年5月25日 下午2:29:48
     * @修改日志：
     */
    Map<String, BigDecimal> searchBalanceCount(Map<String, Object> map);

    /**
     * 功能描述：查询期间内凭证最小、最大日期
     *
     * @param map
     * @return Map<String, BigDecimal>
     * @author likai
     * @date 2020年5月25日 下午3:12:14
     * @修改日志：
     */
    Map<String, Date> searchPrepareDate(Map<String, Object> map);
    /**
     * @description: 联查凭证明细
     * @param [cwBdVouchtempB, cwGlVoucherTempRequest]
     * @return java.util.List<com.dhcc.finance.main.domain.CwGlDetail>
     * @author lxj
     * @date 2020-06-19 14:52
     * @modify
     */
    List<CwGlDetail> searchCwGlDetailByBatchNo(@Param("cwBdVouchtempB") CwBdVouchtempB cwBdVouchtempB, @Param("cwGlVoucherTempRequest") CwGlVoucherTempRequest cwGlVoucherTempRequest);
}