package org.springblade.modules.investment.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.modules.investment.pojo.entity.IbaProject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.modules.investment.pojo.entity.IbaProjectVolume;
import org.springblade.modules.investment.pojo.query.IbaProjectIncomeQuery;
import org.springblade.modules.investment.pojo.query.IbaProjectQuery;
import org.springblade.modules.investment.pojo.query.IbaProjectVolumeQuery;
import org.springblade.modules.investment.pojo.vo.IbaProjectCompanyTotalVo;
import org.springblade.modules.investment.pojo.vo.IbaProjectTotalVo;
import org.springblade.modules.investment.pojo.vo.IbaProjectTypeTotalVo;
import org.springblade.modules.investment.pojo.vo.incomeTotalVo;

import java.util.List;

/**
* @author LHB
* @description 针对表【iba_project(投资效益分析-项目表)】的数据库操作Service
* @createDate 2025-05-06 09:59:53
*/
public interface IbaProjectService extends IService<IbaProject> {
    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    IbaProject queryById(Long id);

    /**
     * 分页查询
     *
     * @param query      分页对象
     * @return 查询结果
     */
    IPage<IbaProject> queryByPage(IbaProjectQuery query);

    /**
     * 新增数据
     *
     * @param ibaProject 实例对象
     * @return 实例对象
     */
    boolean insert(IbaProject ibaProject);

    /**
     * 修改数据
     *
     * @param ibaProject 实例对象
     * @return 实例对象
     */
    boolean update(IbaProject ibaProject);

    /**
     * 通过主键删除数据
     *
     * @param ids 主键
     * @return 是否成功
     */
    boolean deleteById(String ids);

    /**
     * 查询项目数和公司数
     * @return
     */
    IbaProjectTotalVo total();

    /**
     * 按照类型统计
     * @return
     */
    List<IbaProjectTypeTotalVo> typeTotal();

    /**
     * 按照公司统计
     * @return
     */
    List<IbaProjectCompanyTotalVo> companyTotal();

    /**
     * 收益统计
     * @param query
     * @return
     */
    List<incomeTotalVo> incomeTotalList(IbaProjectIncomeQuery query);

    /**
     * 车流量统计
     * @param query
     * @return
     */
    List<IbaProjectVolume> companyList(IbaProjectVolumeQuery query);

    /**
     * 根据类型获取项目或公司列表
     * @param type
     * @return
     */
    List<IbaProject> selectProjectOrCompanyList(Integer type);
}
