package com.kcim.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kcim.dao.model.dto.ResponsibilityEditDTO;
import com.kcim.dao.model.dto.ResponsibilitySaveDTO;
import com.kcim.dao.model.Responsibility;
import com.kcim.vo.CenterDepartmentVO;
import com.kcim.vo.CommonVO;
import com.kcim.vo.CostResponsibilityLevelVO;
import com.kcim.vo.CostResponsibilityVO;

import java.util.List;

/**
 * 责任中心表
 *
 * @author huangrui
 * @email
 * @date 2021-07-27 10:41:59
 */
public interface ResponsibilityService extends IService<Responsibility> {

    /**
     * 责任中心列表不分页
     *
     * @return
     */
    List<CostResponsibilityVO> getList();

    /**
     * 新增责任中心
     *
     * @param responsibilitySaveDTO {@link ResponsibilitySaveDTO }
     */
    void addResponsibilityCenter(ResponsibilitySaveDTO responsibilitySaveDTO);

    /**
     * 编辑责任中心
     *
     * @param responsibilityEditDTO {@link ResponsibilityEditDTO}
     */
    void editResponsibility(ResponsibilityEditDTO responsibilityEditDTO);

    /**
     * 删除责任中心
     *
     * @param id
     */
    void deleteCenter(Integer id);

    /**
     * 获取部门树列表
     *
     * @return
     */
    List<CenterDepartmentVO> getParentSon();

    List<CommonVO> getParentList();

    /**
     * 获取可不是汇总中心列表
     *
     * @param hospId
     * @return
     */
    List<CostResponsibilityLevelVO> getLevelTwo(Long hospId);

    /**
     * 责任中心在收入归集设置里面显示的列表
     *
     * @return
     */
    List<CostResponsibilityVO> responsibilityList();

    /**
     * 通过分摊级别id列表得到所有的责任中心
     * @param levelId 分摊级别id
     * @param hospId 医院id
     * @return 责任中心
     */
    List<Responsibility> getByLevelIds(List<Long> levelId, Long hospId);

    /**
     * 通过分摊层级列表得到对应的责任中心
     * @param levelId 分摊层级id
     * @param hospId 医院id
     * @return 责任中心 可能存在null
     */
    List<Responsibility> getLevelIdByCode(Long levelId, Long hospId);

    /**
     * 通过code得到名字
     * @param valueResponsibilityCode
     * @param hospId
     * @return
     */
    String getByCode(String valueResponsibilityCode, Long hospId);

    Long getLevelIdByCode(String responsibilityCode, Long hospId);

    /**
     * 获取某个医院所有叶子节点的收益中心的责任中心
     * @param hospId 医院id
     * @return List
     */
    List<Responsibility> getLeafResp(Long hospId);

    List<CostResponsibilityVO> getList(String filter);

    Object getStandardShareLevel();

    Object getResponsibilityType();

    List<CostResponsibilityVO> getSharelevelRespList(Integer shareId, String filter);
}

