package com.kcim.dao.mapper;

import com.kcim.dao.model.CostCostingGroup;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kcim.vo.AllocationVO;
import com.kcim.vo.CommonDepartVo;
import com.kcim.vo.CostingGroupStartVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 成本归集
 * 
 * @author KCYG
 * @date 2021-08-12 11:00:23
 */
@Mapper
public interface CostCostingGroupMapper extends BaseMapper<CostCostingGroup> {


    /**
     * 成本分摊前查询列表
     *
     * @param startIndex         开始索引
     * @param pageSize           limit
     * @param responsibilityCode 责任中心代码
     * @param accountCode        会计中心代码
     * @param year               年
     * @param month              月
     * @param hospId             医院
     * @param departmentCode
     * @param filter
     * @return {@link CostingGroupStartVO}
     */
    List<CostingGroupStartVO> queryStartAllocation(@Param("startIndex") Integer startIndex,
                                                   @Param("pageSize") Integer pageSize,
                                                   @Param("responsibilityCode") String responsibilityCode,
                                                   @Param("accountCode") String accountCode,
                                                   @Param("year") Integer year,
                                                   @Param("month") Integer month,
                                                   @Param("hospId") Long hospId,
                                                   @Param("departmentCode")String departmentCode,
                                                   @Param("filter")String filter);

    /**
     * 成本分摊前查询列表 总数
     *
     * @param responsibilityCode 责任中心代码
     * @param accountCode        会计中心代码
     * @param year               年
     * @param month              月
     * @param hospId             医院
     * @param departmentCode
     * @param filter
     * @return 总数
     */
    int queryStartAllocationCount(@Param("responsibilityCode") String responsibilityCode,
                                  @Param("accountCode") String accountCode,
                                  @Param("year") Integer year,
                                  @Param("month") Integer month,
                                  @Param("hospId") Long hospId, @Param("departmentCode") String departmentCode, @Param("filter") String filter);

    /**
     * 成本分摊年月总金额
     *
     * @param responsibilityCode 责任中心代码
     * @param accountCode        会计中心代码
     * @param year               年
     * @param month              月
     * @param hospId             医院
     * @param departmentCode
     * @param filter
     * @return 总金额
     */
    BigDecimal queryStartAllocationTotalAmount(@Param("responsibilityCode") String responsibilityCode,
                                               @Param("accountCode") String accountCode,
                                               @Param("year") Integer year,
                                               @Param("month") Integer month,
                                               @Param("hospId") Long hospId);

    /**
     * 陈本分摊列表
     * @param startIndex 开始索引
     * @param pageSize 每页数据大小
     * @param year 年
     *
     * @param month 月
     * @param hospId 医院id
     * @return 列表
     */
    List<AllocationVO> queryAllocation(@Param("startIndex") Integer startIndex,
                                       @Param("pageSize") Integer pageSize,
                                       @Param("year") Integer year,
                                       @Param("month") Integer month,
                                       @Param("hospId") Long hospId);

    /**
     * 同上
     * @param year 年
     * @param month 月
     * @param hospId 医院id
     * @return 总数
     */
    int queryAllocationCount(@Param("year") Integer year, @Param("month") Integer month, @Param("hospId") Long hospId);

    List<CostCostingGroup> getRealData(@Param("maxId") List<Long> maxId, @Param("hospId") Long hospId, @Param("month") Integer month, @Param("year") Integer year);

    List<CostCostingGroup> getAllRealData( @Param("hospId") Long hospId, @Param("month") Integer month, @Param("year") Integer year);

    List<CommonDepartVo> getDepartment(@Param("year") Integer year, @Param("month") Integer month, @Param("hospId") Long hospId, @Param("departmentName")  String departmentName);

    List<CostCostingGroup> selectHistoryList(@Param("hospId") Long hospId,@Param("id") Long id);

    void reducingHistory(@Param("id") Long id, @Param("hospId") Long hospId,@Param("list") List<Long> list);

    BigDecimal queryStartAllocationDepartmentAmount(@Param("responsibilityCode") String responsibilityCode,
                                                    @Param("accountCode") String accountCode,
                                                    @Param("year") Integer year,
                                                    @Param("month") Integer month,
                                                    @Param("hospId") Long hospId,@Param("departmentCode") String departmentCode, @Param("filter")String filter);
}
