package com.dhcc.finance.main.service;

import com.dhcc.common.model.CurrencyMeta;
import com.dhcc.common.model.response.RestfulResponse;
import com.dhcc.finance.main.domain.CwGlDetail;
import com.dhcc.finance.main.domain.CwGlVoucher;
import com.dhcc.finance.main.model.CwGlVoucherAndLike;
import com.dhcc.finance.main.model.CwGlVoucherAndName;
import com.dhcc.finance.main.model.CwGlVoucherRequest;
import com.dhcc.finance.main.model.CwGlVoucherWeb;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * 功能描述：凭证信息接口
 *
 * @author dml
 * @date 2019年3月28日 下午4:16:48 @修改日志：
 */
public interface CwGlVoucherService {
    /**
     * 功能描述  查询全部凭证信息-制单
     *
     * @param pageNum
     * @param pageSize
     * @param navigatePages
     * @param cwGlVoucherAndLike
     * @return RestfulResponse<PageInfo < CwGlVoucherAndName>,CurrencyMeta>
     * @author huangpeng
     * @date 2019年10月15日 下午4:24:37
     * 修改日志:
     */
    RestfulResponse<PageInfo<CwGlVoucherAndName>, CurrencyMeta> searchCwGlVoucherAllData(int pageNum, int pageSize, int navigatePages,
                                                                                         CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述：新增凭证信息
     *
     * @param cwGlVoucher
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author dml
     * @date 2019年3月28日 下午4:34:50
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> addCwGlVoucher(CwGlVoucherWeb cwGlVoucherWeb);

    /**
     * 功能描述：修改凭证信息
     *
     * @param cwGlVoucher
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author dml
     * @date 2019年3月28日 下午4:35:03
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> updateCwGlVoucherByPk(CwGlVoucher cwGlVoucher);

    /**
     * 功能描述：逻辑删除凭证信息
     *
     * @param pkVoucher
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author dml
     * @date 2019年3月28日 下午4:35:11
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> deleteCwGlVoucherByPk(String pkVoucher);

    /**
     * @param cwGlVouchers
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author huangpeng
     * @date 2019年4月1日 下午3:38:38
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> updateCwGlVoucherByPkForBatch(List<CwGlVoucher> cwGlVouchers);

    /**
     * 功能描述  获取审核列表信息
     *
     * @param pageNum
     * @param pageSize
     * @param navigatePages
     * @param cwGlVoucherAndLike
     * @return RestfulResponse<PageInfo < CwGlVoucherAndName>,CurrencyMeta>
     * @author huangpeng
     * @date 2019年10月15日 下午3:07:07
     * 修改日志:
     */
    RestfulResponse<PageInfo<CwGlVoucherAndName>, CurrencyMeta> searchCwGlVoucherForAudit(int pageNum,
                                                                                          int pageSize, int navigatePages, CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述  获取记账(反审核)信息
     *
     * @param pageNum
     * @param pageSize
     * @param navigatePages
     * @param cwGlVoucherAndLike
     * @return RestfulResponse<PageInfo < CwGlVoucherAndName>,CurrencyMeta>
     * @author huangpeng
     * @date 2019年10月15日 下午4:25:24
     * 修改日志:
     */
    RestfulResponse<PageInfo<CwGlVoucherAndName>, CurrencyMeta> searchCwGlVoucherForBooking(int pageNum,
                                                                                            int pageSize, int navigatePages, CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * @param cwGlVouchers
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author huangpeng
     * @date 2019年4月1日 下午5:39:09
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> updateCwGlVoucherForBookingBatch(List<CwGlVoucher> cwGlVouchers);

    /**
     * @param cwGlVouchers
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author huangpeng
     * @date 2019年4月5日 上午9:32:47
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> updateCwGlVoucherForReverse(List<CwGlVoucher> cwGlVouchers);

    /**
     * @param cwGlVouchers
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author huangpeng
     * @date 2019年4月5日 上午9:49:03
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> updateCwGlVoucherForReverseBooking(List<CwGlVoucher> cwGlVouchers);

    /**
     * 功能描述：批量删除凭证信息（制单）
     *
     * @param cwGlVoucherList
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author dml
     * @date 2019年4月8日 上午11:06:17
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> deleteOrderMakingBatch(List<CwGlVoucher> cwGlVoucherList);

    /**
     * 功能描述 获取反记账信息
     *
     * @param pageNum
     * @param pageSize
     * @param navigatePages
     * @param cwGlVoucherAndLike
     * @return RestfulResponse<PageInfo < CwGlVoucherAndName>,CurrencyMeta>
     * @author huangpeng
     * @date 2019年10月15日 下午4:24:16
     * 修改日志:
     */
    RestfulResponse<PageInfo<CwGlVoucherAndName>, CurrencyMeta> searchCwGlVoucherForRerverseBooking(int pageNum, int pageSize,
                                                                                                    int navigatePages, CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述：查询制单详情
     *
     * @param pkVoucher
     * @return RestfulResponse<CwGlVoucherAndName, CurrencyMeta>
     * @author dml
     * @date 2019年4月15日 上午11:27:02
     * @修改日志：
     */
    RestfulResponse<CwGlVoucherWeb, CurrencyMeta> selectOrderMakingDetil(String pkVoucher, String useState);

    /**
     * 功能描述：查询制单详情
     *
     * @param pkVoucher
     * @return RestfulResponse<CwGlVoucherAndName, CurrencyMeta>
     * @author dml
     * @date 2019年4月15日 上午11:27:02
     * @修改日志：
     */
    RestfulResponse<CwGlVoucherWeb, CurrencyMeta> selectOrderMakingPrint(String pkVoucher, String useState);

    /**
     * 功能描述：修改制单详情
     *
     * @param cwGlVoucherWeb
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author dml
     * @date 2019年4月15日 下午8:22:55
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> updateOrderMakingDetil(CwGlVoucherWeb cwGlVoucherWeb);

    /**
     * 功能描述：结账时刷新辅助余额
     *
     * @param cwGlVouchers void
     * @author dml
     * @date 2019年4月25日 下午3:53:49
     * @修改日志：
     */
    void updateBalance(List<CwGlVoucher> cwGlVouchers);

    /**
     * @param nameLike
     * @param pkAccperiodLike
     * @return RestfulResponse<PageInfo < CwGlVoucherAndName>,CurrencyMeta>
     * @author huangpeng
     * @date 2019年6月5日 下午3:13:40
     * @修改日志：
     */
    RestfulResponse<List<CwGlVoucherWeb>, CurrencyMeta> searchCwGlVoucherForTransfer(String pkGlorgbook,
                                                                                     String period);

    /**
     * 功能描述：恢复已删除的凭证信息
     *
     * @param cwGlVoucherList
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author dml
     * @date 2019年6月14日 下午1:55:35
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> reverseVoucher(List<CwGlVoucher> cwGlVoucherList);

    /**
     * 功能描述   查询凭证数量
     *
     * @param useState
     * @param vouchertype
     * @param fqmc
     * @param period
     * @param pkGlorgbook
     * @param sf
     * @return RestfulResponse<String, CurrencyMeta>
     * @author huangpeng
     * @date 2019年7月5日 上午9:54:56
     * 修改日志
     */
    RestfulResponse<Object, CurrencyMeta> searchCwGlVoucherCount(String useState, String vouchertype, String falg, String pkGlorgbook, String period, String fqmc);

    /**
     * 功能描述    根据流水号查询凭证信息
     *
     * @param serialNoList
     * @param tradeCode
     * @return RestfulResponse<List < CwGlVoucherAndName>,CurrencyMeta>
     * @author huangpeng
     * @date 2019年7月18日 下午2:25:05
     * 修改日志
     */
    RestfulResponse<Object, CurrencyMeta> searchVoucherDetailForSerialNo(List<String> serialNoList, String tradeCode);

    /**
     * 功能描述   制单下查询贷方合计总和和借放方合计综合
     *
     * @param cwGlVoucherAndLike
     * @author lipeng
     * @date 2019年7月25日 下午1:25:05
     * 修改日志
     */
    RestfulResponse<Object, CurrencyMeta> searchDebitANdCredit(CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述  审核下查询贷方合计总和和借放方合计综合
     *
     * @author xxx
     * @date 2019年7月29日 下午1:25:05
     * 修改日志
     */
    RestfulResponse<Object, CurrencyMeta> sumDebitANdCredit(CwGlVoucherAndLike cwGlVoucherAndLike);

    /**
     * 功能描述  记账下查询贷方合计总和和借放方合计综合
     *
     * @author xxx
     * @date 2019年7月29日 下午1:25:05
     * 修改日志
     */
    RestfulResponse<Object, CurrencyMeta> sumDebitANdCreditByLike(CwGlVoucherAndLike cwGlVoucherAndLike);

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

    /**
     * 功能描述：批量删除凭证
     *
     * @param pkVoucher
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author dml
     * @date 2019年3月28日 下午4:35:11
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> deleteCwGlVoucherForBatch(List<CwGlVoucher> cwGlVoucherList);

    /**
     * 功能描述  查询凭证号的接口，费用报销使用
     *
     * @param batchNo
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author huangpeng
     * @date 2019年12月17日 上午9:14:02
     * 修改日志:
     */
    RestfulResponse<Object, CurrencyMeta> searchVoucherNoByBatchno(String batchNo);

    /**
     * 功能描述 批量审核凭证信息
     *
     * @param cwGlVouchers
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author huangpeng
     * @date 2019年12月25日 上午9:51:02
     * 修改日志:
     */
    RestfulResponse<Object, CurrencyMeta> updateCwGlVoucherByAuditForBatch(List<CwGlVoucher> cwGlVouchers);

    /**
     * 功能描述  批量记账凭证信息
     *
     * @param cwGlVouchers
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author huangpeng
     * @date 2019年12月25日 上午9:52:48
     * 修改日志:
     */
    RestfulResponse<Object, CurrencyMeta> updateCwGlVoucherByChargeForBatch(List<CwGlVoucher> cwGlVouchers);

    /**
     * 功能描述：刷新余额表
     *
     * @param cwGlVouchers
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author dml
     * @date 2019年12月26日 下午2:01:51
     * @修改日志：
     */
    RestfulResponse<Object, CurrencyMeta> refreshBalance(List<CwGlVoucher> cwGlVouchers);

    /**
     * 功能描述  批量反审核
     *
     * @param cwGlVouchers
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author huangpeng
     * @date 2019年12月27日 上午9:33:11
     * 修改日志:
     */
    RestfulResponse<Object, CurrencyMeta> updateCwGlVoucherForReverseByAudit(List<CwGlVoucher> cwGlVouchers);

    /**
     * 功能描述  批量反记账凭证信息
     *
     * @param cwGlVouchers
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author huangpeng
     * @date 2019年12月27日 上午9:34:58
     * 修改日志:
     */
    RestfulResponse<Object, CurrencyMeta> updateCwGlVoucherForReverseBookingToBatch(List<CwGlVoucher> cwGlVouchers);


    /**
     * @param [cwGlVoucherRequests]
     * @return com.dhcc.common.model.response.RestfulResponse<java.lang.Object, com.dhcc.common.model.CurrencyMeta>
     * @description: 费用报销代垫凭证推送NC系统
     * @author liuxianjv
     * @date 2020-05-20 14:24
     */
    RestfulResponse<Object, CurrencyMeta> pushVoucherToNC(List<CwGlVoucherRequest> cwGlVoucherRequests);
    
    /**
     * 功能描述：根据子项目编号和制单日期查询凭证详情
     * @param xtzxmbh
     * @param dateTime
     * @return RestfulResponse<Object, CurrencyMeta>
     * @author leiyu
     * @date 2020年6月18日 下午2:26:34
     */
    RestfulResponse<Object, CurrencyMeta> searchVoucherDetailForXtzxmbh(String xtzxmbh, String dateTime);
}
