package com.kcim.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kcim.dao.model.ReportForm;
import com.kcim.dao.model.dto.CopyReportDTO;
import com.kcim.dao.model.dto.ReportFormEditDTO;
import com.kcim.dao.model.dto.ReportFormSaveDTO;
import com.kcim.vo.ReportFormVO;
import com.kcim.vo.SessionUserVO;

import java.util.List;

/**
 * 报表项目
 *
 * @author huangrui
 * @email 
 * @date 2021-08-03 13:53:52
 */
public interface ReportFormService extends IService<ReportForm> {

    /**
     * 报表项目列表（必定只有两层）
     * @param reportType
     * @param user
     * @return
     */
    List<ReportFormVO> selectList(Integer reportType, SessionUserVO user);

    /**
     * 新增一个报表项目
     * @param reportFormDTO {@link ReportFormSaveDTO}
     * @param hospId 医院id
     */
    void saveReport(ReportFormSaveDTO reportFormDTO, Long hospId);

    /**
     * 更新某个报表项目
     * @param formEditDTO
     */
    void updateReport(ReportFormEditDTO formEditDTO);

    /**
     * 辅助数据
     * @param copyReportDTO {@link CopyReportDTO}
     * @param hospId 医院id
     */
    void copyReport(CopyReportDTO copyReportDTO, Long hospId);

    /**
     * 通过报表类型获取该医院报表列表
     * @param hospId 医院id
     * @param type 报表类型 0.损益表、1.完全成本法表、2.变动成本表、3.全院损益表、4.全成本报表
     * @return ReportFrom List
     */
    List<ReportForm> getListByReportType(Long hospId, Integer type);

    /**
     * 通过parentId 得到下面所有的分类
     * @param hospId 医院id
     * @param parentId 父级id
     * @return List
     */
    List<ReportForm> getByParentId(Long hospId, Long parentId);

    /**
     * 全院损益的树状结构
     * @param hospId 医院id
     */
    List<ReportFormVO> getAllHospList( Long hospId);

    /**
     * 校验这个医院全院损益计算的时候是否存在默认损益
     * @param hospId
     */
    public void checkExistLoss(Long hospId);

    /**
     * 校验指定类型的全院损益报表是否存在默认损益
     * @param hospId
     * @param reportType
     */
    public void checkExistLoss(Long hospId, Integer reportType);

    Object getResponsibilities(String reportType, Long reportId);

    ReportForm getByReportId(Long hospId, String reportType, Long reportId);
    List<ReportForm> getByReportType(Long hospId, String reportType);
}

