package com.kcim.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kcim.common.util.PageUtils;
import com.kcim.dao.model.CostAccountShare;
import com.kcim.dao.model.Responsibility;
import com.kcim.dao.model.dto.AccountShareCopyDto;
import com.kcim.dao.model.dto.CostAccountShareEditDto;
import com.kcim.dao.model.dto.CostAccountShareSaveDto;
import com.kcim.dao.model.dto.ShareParamEditDto;
import com.kcim.vo.CostShareParamStatusVO;
import com.kcim.vo.ShareParamProportionVO;
import com.kcim.vo.ShareTargetMapVo;

import java.util.List;

/**
 * 责任中心成本对照表
 *
 * @author KCYG
 * @email KCYG@xinxicom
 * @date 2021-07-28 18:34:52
 */
public interface CostAccountShareService extends IService<CostAccountShare> {
    /**
     * 分页查询责任中心成本对照相关数据
     * @param current
     * @param pageSize
     * @param name
     * @return
     */
    PageUtils queryList(Integer current, Integer pageSize, String name, Long hospId);

    /**
     * 保存责任中心成本对照表
     * @param costAccountShareSaveDto
     */
    void addCostAccountShare(CostAccountShareSaveDto costAccountShareSaveDto);

    /**
     * 修改成本中心责任对照表
     * @param costAccountShareEditDto
     */
    void updateByCostAccountShare(CostAccountShareEditDto costAccountShareEditDto);

    /**
     * 修改成本分摊参数的设置
     * @param shareParamEditDto
     */
    void updateShareParam(ShareParamEditDto shareParamEditDto);

    /**
     * 获取责任中心成本表的分摊参数的集合
     * @param id
     * @param hospId
     * @return
     */
    List<ShareParamProportionVO> selectShareParamById(Integer id, Long hospId);

    /**
     * 成本分摊参数中被分摊参数对应选中的状态
     * @param id
     * @param hospId
     * @return
     */
    List<CostShareParamStatusVO> getAllShareParamStatusById(Integer id, Long hospId);

    /**
     * 拷贝
     * @param accountShareCopyDto
     * @param hospId
     */
    void copyAccountShareData(AccountShareCopyDto accountShareCopyDto, Long hospId);

    /**
     * 获取指定类型的责任中心集合 分开计算还是合并计算
     *
     * @param accountShareId 分摊参数设置对应的Id
     * @param hospId 医院的Id
     * @return
     */
    List<Responsibility> getResponsibilityCalType(Long accountShareId, Long hospId);

    /**
     * 通过责任中心得到对应的成本分摊参数对应
     * @param responsibilityCode 责任中心code
     * @param hospId 医院id
     * @return 成本分摊参数对应列表
     */
    List<CostAccountShare> getByResponsibility(String responsibilityCode, Long hospId);

    List<CostAccountShare> getByShareLevelSort(List<Integer> levelSorts, Long hospId);

    /**
     * 删除成本分摊参数对应数据
     * @param asList id集合
     */
    void deleteByIds(List<Long> asList);
    List<CostAccountShare> getAll();

    /**
     * 同步分摊参数设置
     * @param direction 1主表向明细表同步 2明细表向主表同步
     * @param accountShareId
     * @return
     */
    void synCostAccountShare(Integer direction, Long accountShareId);


    /**
     * 添加分摊设置对应的目标责任中心
     * @param shareTargetMapVo
     */
    void applyAccountShareTarget(ShareTargetMapVo shareTargetMapVo);
}

