package com.dhcc.finance.main.dao;

import com.dhcc.finance.main.domain.CwBdVouchtemp;
import com.dhcc.finance.main.domain.CwGlDetail;
import com.dhcc.finance.main.domain.CwGlVoucher;
import com.dhcc.finance.main.domain.CwGlVoucherExample;
import com.dhcc.finance.main.model.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface CwGlVoucherMapper {

    long countByExample(CwGlVoucherExample example);

    int deleteByExample(CwGlVoucherExample example);

    int deleteByPrimaryKey(String pkVoucher);

    int insert(CwGlVoucher record);

    int insertSelective(CwGlVoucher record);

    List<CwGlVoucher> selectByExample(CwGlVoucherExample example);

    CwGlVoucher selectByPrimaryKey(String pkVoucher);

    int updateByExampleSelective(@Param("record") CwGlVoucher record, @Param("example") CwGlVoucherExample example);

    int updateByExample(@Param("record") CwGlVoucher record, @Param("example") CwGlVoucherExample example);

    int updateByPrimaryKeySelective(CwGlVoucher record);

    int updateByPrimaryKey(CwGlVoucher record);

    /**
     * 功能描述 查询审核信息 列表
     *
     * @param cwGlVoucherAndLike
     * @return List<CwGlVoucherAndName>
     * @author huangpeng
     * @date 2019年10月15日 下午4:15:26
     * 修改日志:
     */
    List<CwGlVoucherAndName> selectForAuditByLike(CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述  查询记账 （反审核）信息列表
     *
     * @param cwGlVoucherAndLike
     * @return List<CwGlVoucherAndName>
     * @author huangpeng
     * @date 2019年10月15日 下午4:15:17
     * 修改日志:
     */
    List<CwGlVoucherAndName> selectForBookingByLike(CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述  查询制单信息列表
     *
     * @param cwGlVoucherAndLike
     * @return List<CwGlVoucherAndName>
     * @author huangpeng
     * @date 2019年10月15日 下午4:15:35
     * 修改日志:
     */
    List<CwGlVoucherAndName> selectOrderMaking(CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述：批量删除凭证信息（制单）
     *
     * @param cwGlVoucherList
     * @return int
     * @author dml
     * @date 2019年4月8日 上午11:03:50
     * @修改日志：
     */
    int deleteOrderMakingBatch(Map<String, Object> map);

    /**
     * 功能描述  反记账信息列表
     *
     * @param cwGlVoucherAndLike
     * @return List<CwGlVoucherAndName>
     * @author huangpeng
     * @date 2019年10月15日 下午4:27:16
     * 修改日志:
     */
    List<CwGlVoucherAndName> selectForReverseBooking(CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 更新反审核
     *
     * @param record
     * @return int
     * @author huangpeng
     * @date 2019年4月9日 下午4:45:38
     * @修改日志：
     */
    int updateByRerverseAudit(CwGlVoucherForReverse record);

    /**
     * 更新反记账
     *
     * @param record
     * @return int
     * @author huangpeng
     * @date 2019年4月9日 下午4:45:53
     * @修改日志：
     */
    int updateByRerverseBooking(CwGlVoucherForReverse record);

    /**
     * 功能描述：查询制单详情
     *
     * @param pkVoucher
     * @return CwGlVoucher
     * @author dml
     * @date 2019年4月15日 上午11:22:51
     * @修改日志：
     */
    CwGlVoucherWeb selectOrderMakingDetil(@Param("pkVoucher") String pkVoucher, @Param("useState") String useState);

    /**
     * 功能描述：统计某账套下未记账凭证记录数
     *
     * @param pkGlorgbook
     * @return long
     * @author dml
     * @date 2019年4月22日 上午11:34:29
     * @修改日志：
     */
    long countNotBooking(@Param("pkGlorgbook") String pkGlorgbook, @Param("lastPeriod") String lastPeriod);

    List<CwGlVoucher> selectByKey(String pkVoucher);

    /**
     * 功能描述：查询某账套某个期间所有凭证信息
     *
     * @param pkGlorgbook
     * @param lastPeriod
     * @return List<CwGlVoucher>
     * @author dml
     * @date 2019年4月25日 下午4:17:01
     * @修改日志：
     */
    List<CwGlVoucher> selectForSettle(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String lastPeriod);

    /**
     * 功能描述：查询凭证号是否连续
     *
     * @param pkGlorgbook
     * @param lastPeriod
     * @return List<CwGlVoucher>
     * @author dml
     * @date 2019年4月25日 下午7:45:00
     * @修改日志：
     */
    List<CwGlVoucher> selectIsSeries(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String lastPeriod);

    /**
     * 功能描述：期初余额生成凭证信息
     *
     * @param cwGlVoucher
     * @return int
     * @author dml
     * @date 2019年4月29日 下午2:21:27
     * @修改日志：
     */
    int insertForInitbuild(CwGlVoucher cwGlVoucher);

    /**
     * 查询结转凭证信息
     *
     * @param pkGlorgbook
     * @param lastPeriod
     * @param pkVoucherty
     * @return
     */
    List<CwGlVoucherWeb> selectVoucherForTransfer(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String lastPeriod, @Param("pkVoucherty") String pkVoucherty);

    /**
     * 功能描述：查询分期募集编号
     *
     * @param pkGlorgbook
     * @param lastPeriod
     * @return List<String>
     * @author dml
     * @date 2019年6月20日 上午10:07:18
     * @修改日志：
     */
    List<String> selectFqmjbh(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String lastPeriod);

    /**
     * 功能描述    查询凭证数量
     *
     * @param useState
     * @param vouchertype
     * @param addPeriod
     * @param addPeriod2
     * @return Integer
     * @author huangpeng
     * @date 2019年7月5日 上午10:10:12
     * 修改日志
     */
    Map<String, Integer> searchCwGlVoucherCount(@Param("useState") String useState, @Param("vouchertype") String vouchertype,
                                                @Param("falg") String falg, @Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period, @Param("fqmc") String fqmc);

    /**
     * 功能描述     查询今日新增凭证接口
     *
     * @return List<CwGlVoucher>
     * @author huangpeng
     * @date 2019年7月13日 上午11:58:53
     * 修改日志
     */
    List<CwGlVoucherAndName> searchCwGlVoucherTodayAdd();

    /**
     * 功能描述   根据流水号查询凭证信息
     *
     * @param serialNo
     * @param jizpz
     * @return List<CwGlVoucherAndName>
     * @author huangpeng
     * @date 2019年7月18日 下午2:26:20
     * 修改日志
     */
    List<CwGlVoucherWeb> searchVoucherDetailForSerialNo(@Param("list") List<String> serialNoList, @Param("pkVoucherty") String jizpz);

    /**
     * 功能描述   制单下查询制单详情的贷方总计的和和借方总计的和
     *
     * @return List<String>
     * @author lipeng
     * @date 2019年7月18日 下午2:26:20
     * 修改日志
     */
    Map<String, Long> searchDebitANdCredit(CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述 审核下查询制单详情的贷方总计的和和借方总计的和
     *
     * @return List<String>
     * @author xxx
     * @date 2019年7月29日 下午2:26:20
     * 修改日志
     */
    Map<String, Long> sumDebitANdCredit(CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述   记账下查询制单详情的贷方总计的和和借方总计的和
     *
     * @return List<String>
     * @author xxx
     * @date 2019年7月29日 下午2:26:20
     * 修改日志
     */
    Map<String, Long> sumDebitANdCreditByLike(CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * Title: selectVouchtempBInfoByPkVoucher <br/>
     * Description: TODO 根据凭证主键查询凭证分录信息<br/>
     *
     * @param PkVoucher
     * @return List<CwBdVouchtempB>
     * @author lipeng
     * @date 2019年8月1日 下午3:25:19
     */
    List<CwGlDetail> selectCwGlDetailInfoByPkVoucher(String PkVoucher);

    /**
     * 功能描述 反结转删除
     *
     * @param cwGlVoucherList
     * @return int
     * @author huangpeng
     * @date 2019年8月10日 下午5:03:58
     * 修改日志:
     */
    int updateUserStateForTwo(@Param("list") List<CwGlVoucher> cwGlVoucherList);

    /**
     * 功能描述  查询账套下凭证的数量
     *
     * @param pkGlorgbook
     * @return Long
     * @author huangpeng
     * @date 2019年8月16日 下午2:02:12
     * 修改日志:
     */
    Long selectIsExistsVoucherForGlorgbook(@Param("pkGlorgbook") String pkGlorgbook);

    /**
     * 功能描述  查询凭证信息
     *
     * @param voucherList
     * @return List<CwGlVoucher>
     * @author huangpeng
     * @date 2019年12月17日 上午9:25:27
     * 修改日志:
     */
    List<CwGlVoucher> selectVoucherForBatch(@Param("list") List<String> voucherList);

    /**
     * 功能描述
     *
     * @param map
     * @return int
     * @author huangpeng
     * @date 2019年12月25日 下午1:51:18
     * 修改日志:
     */
    int updateCwGlVoucherForBatch(Map<String, Object> map);


    /**
     * @param [lcslywbh, bxlx]
     * @return java.util.List<java.lang.String>
     * @description: 用流程业务编号获取凭证号
     * @author liuxianjv
     * @date 2020-05-21 14:24
     */
    List<String> searchVoucherPkByFlowId(@Param("lcslywbh") String lcslywbh, @Param("bxlx") String bxlx);

    /**
     * @param [cwBdVouchtemp, batchNo]
     * @return java.util.List<com.dhcc.finance.main.domain.CwGlVoucher>
     * @description: 联查凭证主体信息
     * @author lxj
     * @date 2020-06-19 14:53
     * @modify
     */
    List<CwGlVoucher> searchVoucherByBatchNo(@Param("cwBdVouchtemp") CwBdVouchtemp cwBdVouchtemp, @Param("cwGlVoucherTempRequest") CwGlVoucherTempRequest cwGlVoucherTempRequest);

    /**
     * @param [cwGlVouchers]
     * @return int
     * @description: 批量插入凭证
     * @author lxj
     * @date 2020-06-19 14:53
     * @modify
     */
    int insertVoucherBatch(@Param("list") List<CwGlVoucher> cwGlVouchers);

    /**
     * 功能描述：根据子项目编号和制单日期查询凭证详情
     *
     * @param xtzxmbh
     * @param dateTime
     * @return List<CwGlVoucherWeb>
     * @author leiyu
     * @date 2020年6月18日 下午2:31:52
     */
    List<CwGlVoucherWeb> searchVoucherDetailForXtzxmbh(@Param("xtzxmbh") String xtzxmbh, @Param("dateTime") String dateTime);

    /**
     * @param [voucherKeys]
     * @return java.util.List<java.lang.String>
     * @description: 筛选已推送凭证
     * @author lxj
     * @date 2020-07-10 17:57
     * @modify
     */
    List<String> searchFinVoucherPk(@Param("list") List<String> voucherKeys);
}