package com.dhcc.finance.main.dao;

import com.dhcc.finance.main.domain.CwGlBalance;
import com.dhcc.finance.main.domain.CwGlBalanceExample;
import com.dhcc.finance.main.model.CwGlTransferExecDetail;

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

import org.apache.ibatis.annotations.Param;

public interface CwGlBalanceMapper {

	long countByExample(CwGlBalanceExample example);

	int deleteByExample(CwGlBalanceExample example);

	int deleteByPrimaryKey(String pkBalance);

	int insert(CwGlBalance record);

	int insertSelective(CwGlBalance record);

	List<CwGlBalance> selectByExample(CwGlBalanceExample example);

	CwGlBalance selectByPrimaryKey(String pkBalance);

	int updateByExampleSelective(@Param("record") CwGlBalance record, @Param("example") CwGlBalanceExample example);

	int updateByExample(@Param("record") CwGlBalance record, @Param("example") CwGlBalanceExample example);

	int updateByPrimaryKeySelective(CwGlBalance record);

	int updateByPrimaryKey(CwGlBalance record);

	/**
	 * 功能描述：查询科目辅助余额
	 * 
	 * @param cwGlBalance
	 * @return CwGlBalance
	 * @author dml
	 * @date 2019年4月19日 上午11:09:36 @修改日志：
	 */
	CwGlBalance selectCwGlBalance(CwGlBalance cwGlBalance);

//	/**
//	 * 更新反记账信息
//	 * 
//	 * @param pkGlorgbook
//	 * @param period
//	 * @param pkAccsubj
//	 * @param assid
//	 * @return int
//	 * @author huangpeng
//	 * @date 2019年4月19日 下午4:23:10 @修改日志：
//	 */
//	int updateForReveseBybooking(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period,
//			@Param("pkAccsubj") String pkAccsubj, @Param("assid") String assid);

	/**
	 * 功能描述：记账时修改余额
	 * 
	 * @param cwGlBalance
	 * @return int
	 * @author dml
	 * @date 2019年4月19日 上午11:45:26 @修改日志：
	 */
	int updateBalanceCount(CwGlBalance cwGlBalance);

	/**
	 * 功能描述：插入年初重算
	 * 
	 * @param Map<String,
	 *            Object> map
	 * @return int
	 * @author dml
	 * @date 2019年4月22日 下午2:06:22 @修改日志：
	 */
	int insertEarlyYearRecalculation(Map<String, Object> map);

	/**
	 * 功能描述：删除某期间辅助余额信息
	 * 
	 * @param pkGlorgbook
	 * @param period
	 * @return int
	 * @author dml
	 * @date 2019年4月22日 下午3:04:43 @修改日志：
	 */
	int deleteEarlyYearRecalculation(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period);

	/**
	 * 结转期间重算科目余额
	 * 
	 * @param pkSrcaccsubj
	 * @return List<CwGlBalance>
	 * @author huangpeng
	 * @param pkSrcaccsubj2
	 * @param period
	 * @date 2019年4月23日 上午9:21:11 @修改日志：
	 */
	CwGlBalance selectCwGlBalanceBytransfer(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period
			,@Param("minPeriod") String minPeriod ,@Param("fqmjbh") String fqmjbh,@Param("list") List<String> subjectList);

	/**
	 * 功能描述   删除科目余额表
	 * @param pkGlorgbook
	 * @param period
	 * @param pkSubjscheme
	 * @param pkSrcaccsubj
	 * @param maxPeriod
	 * @param fqmjList
	 * @return int
	 * @author huangpeng
	 * @param fqmjbh 
	 * @date 2019年6月27日 上午10:18:17
	 * 修改日志
	 */
	int deleteBalanceforTransfer(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period,
			@Param("fqmjbh")String fqmjbh,@Param("list") List<String> subjectList);

	/**
	 * 功能描述 插入科目余额表
	 * @param pkGlorgbook
	 * @param period
	 * @param pkSubjscheme
	 * @param pkSrcaccsubj
	 * @param maxPeriod
	 * @param fqmjList
	 * @return int
	 * @author huangpeng
	 * @date 2019年6月27日 上午10:18:10
	 * 修改日志
	 */
	int insertBalanceforTransfer(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period,
			@Param("fqmjbh") String fqmjbh,@Param("list") List<String> subjectList);

	/**
	 * 查询重建科目余额表信息
	 * 
	 * @param pkGlorgbook
	 * @param period
	 * @param pkSubjscheme
	 * @param pkSrcaccsubj
	 * @return List<CwGlBalance>
	 * @author huangpeng
	 * @date 2019年4月26日 上午9:16:51 @修改日志：
	 */
	List<CwGlBalance> selectByForTransfer(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period,
			@Param("minPeriod") String minPeriod,@Param("fqmjbh") String fqmjbh,@Param("list") List<String> subjectList);

	/**
	 * 功能描述：借贷平衡计算
	 * 
	 * @param pkGlorgbook
	 * @param period
	 * @return Map<String,BigDecimal>
	 * @author dml
	 * @date 2019年4月26日 上午9:53:28 @修改日志：
	 */
	Map<String, BigDecimal> balanceCount(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period);

	/**
	 * 功能描述：结账时重算辅助余额信息
	 * 
	 * @param map
	 * @return int
	 * @author dml
	 * @date 2019年4月28日 下午4:21:02 @修改日志：
	 */
	int insertRecalculatedBalance(Map<String, Object> map);

	/**
	 * 计算科目余额(余额控制方向)
	 * 
	 * @param pkGlorgbook
	 * @param period
	 * @param pkSubjscheme
	 * @param pkAccsubj
	 * @return String
	 * @author huangpeng
	 * @date 2019年4月28日 下午7:09:24 @修改日志：
	 */
	String seachCwGlBalanceSum(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period,
			@Param("pkAccsubj") String pkAccsubj, @Param("balanorient") String balanorient, @Param("year") String year);
//	/**
//	 * 功能描述：结账时重算分期余额信息
//	 * @param map
//	 * @return int
//	 * @author dml
//	 * @date 2019年6月20日 上午10:24:29
//	 * @修改日志：
//	 */
//	@Deprecated
//	int insertFqBalance(Map<String, Object> map);
//	/**
//	 * 功能描述  插入科目余额表(分期重算)
//	 * @param pkGlorgbook
//	 * @param fqmjbh
//	 * @param period
//	 * @param pkSubjscheme
//	 * @param pkSrcaccsubj
//	 * @return int
//	 * @author huangpeng
//	 * @date 2019年6月20日 上午11:01:42
//	 * 修改日志
//	 */
//	int insertBalanceforTransferByFqmjbh(@Param("pkGlorgbook") String pkGlorgbook, @Param("fqmjbh") String fqmjbh,@Param("period") String period,
//			@Param("pkSubjscheme") String pkSubjscheme, @Param("pkSrcaccsubj") String pkSrcaccsubj);
//	/**
//	 * 功能描述：年初重算删除分期上的年初余额
//	 * @param pkGlorgbook
//	 * @param period
//	 * @return int
//	 * @author dml
//	 * @date 2019年6月21日 上午10:58:05
//	 * @修改日志：
//	 */
//	@Deprecated
//	int deleteByFqmjbh(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period);
//	/**
//	 * 功能描述：插入年初重算分期上的余额
//	 * @param map
//	 * @return int
//	 * @author dml
//	 * @date 2019年6月21日 上午11:06:19
//	 * @修改日志：
//	 */
//	@Deprecated
//	int insertFqmjbhYearRecalculation(Map<String, Object> map);
	/**
	 * 功能描述 	查询分期募集编号
	 * @param pkGlorgbook
	 * @param maxPeriod
	 * @param period
	 * @param pkSubjscheme
	 * @param pkSrcaccsubj
	 * @return List<String>
	 * @author huangpeng
	 * @date 2019年6月27日 上午11:39:59
	 * 修改日志
	 */
    List<String> selectFqmjbhForTransfer(@Param("pkGlorgbook") String pkGlorgbook, @Param("minPeriod") String minPeriod,@Param("period") String period,
    		@Param("list") List<String> subjectList);
    /**
     * 功能描述：获取损益平准金比例
     * 【（4002、4103、4104）已实现利得+收入-费用】：【（4002、4103、4104）未实现利得+6101科目余额】
     * @param pkGlorgbook
     * @param period
     * @return BigDecimal
     * @author dml
     * @date 2019年7月22日 下午2:40:18
     * @修改日志：
     */
    BigDecimal selectProportion(@Param("pkGlorgbook") String pkGlorgbook, @Param("period") String period);
    /**
     * 功能描述  查询结转收入费用余额
     *@param pkGlorgbook
     *@param period
     *@param pkSubjscheme
     *@param pkSrcaccsubj
     *@param maxPeriod
     *@return CwGlTransferExecDetail
     *@author huangpeng
     *@date 2019年10月9日 下午3:12:42
     *修改日志:
     */
	List<CwGlTransferExecDetail> searchBalanceForIncome(@Param("pkGlorgbook") String pkGlorgbook,@Param("period") String period,
			@Param("orientation") String orientation,@Param("list") List<String> subjectList);
	/**
	 * 功能描述：新增余额表数据
	 * @param record
	 * @return int
	 * @author dml
	 * @date 2019年11月12日 上午11:04:35
	 * @修改日志：
	 */
	int insertBalance(CwGlBalance record);
	/**
	 * 功能描述：删除改账套下所有余额
	 * @param pkGlorgbook
	 * @return int
	 * @author dml
	 * @date 2019年12月16日 下午2:46:22
	 * @修改日志：
	 */
	int deleteBypkGlorgbook(@Param("pkGlorgbook") String pkGlorgbook);
	/**
	 * 功能描述：科目转换是刷新余额表
	 * @param map
	 * @return int
	 * @author dml
	 * @date 2019年12月16日 下午2:47:44
	 * @修改日志：
	 */
	int insertBalanceKmzh(@Param("pkGlorgbook") String pkGlorgbook,@Param("createUser") String createUser);
	/**
	 * 功能描述：删除某期间余额表信息
	 * @param period
	 * @return int
	 * @author dml
	 * @date 2019年12月26日 下午2:05:08
	 * @修改日志：
	 */
	int deleteBypkPeriod(@Param("list") List<String> list);
	/**
	 * 功能描述：重跑某期间余额表
	 * @param list
	 * @return int
	 * @author dml
	 * @date 2019年12月26日 下午2:06:28
	 * @修改日志：
	 */
	int insertBypkPeriod(Map<String, Object> map);
	/**
	 * 功能描述
	 *@param pkGlorgbook
	 *@param pk_accsubj
	 *@param subjcodeN
	 *@param subjname
	 *@param subjcodeO
	 *@return int
	 *@author huangpeng
	 * @param userId 
	 *@date 2020年3月4日 下午6:15:27
	 *修改日志:
	 */
	int updateBalanceforSubjcode(@Param("pkGlorgbook")String pkGlorgbook, @Param("pkAccsubj")String pk_accsubj, 
			@Param("subjcodeN")String subjcodeN,@Param("subjname") String subjname,
			@Param("subjcodeO") String subjcodeO, @Param("userId") String userId);
	
}