package com.bonus.material.lease.mapper;

import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.material.device.domain.DevInfo;
import com.bonus.material.device.domain.DevInfoDt;
import com.bonus.material.largeScreen.entity.MaDevRateInfo;
import com.bonus.material.largeScreen.entity.MaLeaseAnswerInfo;
import com.bonus.material.largeScreen.entity.MaLeaseOnlyInfo;
import com.bonus.material.lease.domain.MaLease;
import com.bonus.material.lease.domain.MaLeaseDetails;
import com.bonus.material.lease.domain.MaLeaseDto;
import com.bonus.material.lease.domain.MaLeaseInfo;
import com.bonus.material.lease.domain.vo.MaLeaseVo;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Author ma_sh
 * @create 2024/11/26 10:49
 */
@Mapper
public interface MaLeaseInfoMapper {

    /**
     * 根据设备名称查询设备信息
     *
     * @param maLeaseInfo
     * @return
     */
    MaLeaseVo selectByName(MaLeaseInfo maLeaseInfo);

    /**
     * 添加设备信息
     *
     * @param maLeaseInfo
     * @return
     */
    int insert(MaLeaseInfo maLeaseInfo);

    /**
     * 根据月份查询任务数量
     *
     * @param nowDate
     * @return
     */
    String selectTaskNumByMonth(@Param("date") Date nowDate);

    /**
     * 更新设备信息
     *
     * @param maLeaseInfo
     * @return
     */
    int updateDevInfo(MaLeaseInfo maLeaseInfo);

    /**
     * 查询租赁需求列表
     *
     * @param dto
     * @return
     */
    List<MaLeaseVo> list(MaLeaseDto dto);

    /**
     * 根据租赁需求id查询搜索次数
     *
     * @param id
     * @return
     */
    int getHotSearchCountByLeaseId(Integer id);

    /**
     * 添加搜索次数
     *
     * @param id
     */
    void insertHotSearch(Integer id);

    /**
     * 更新搜索次数
     *
     * @param id
     */
    void updateHotSearchByLeaseId(Integer id);

    /**
     * 根据id删除设备信息
     *
     * @param maLeaseInfo
     * @return
     */
    int deleteById(MaLeaseInfo maLeaseInfo);

    /**
     * 查询租赁需求列表首页
     *
     * @param maLease
     * @return
     */
    List<MaLeaseVo> leaseList(MaLease maLease);

    /**
     * 查询出租方需求列表
     *
     * @param dto
     * @return
     */
    List<MaLeaseVo> rentList(MaLeaseDto dto);

    /**
     * 添加租赁需求详情
     *
     * @param maLeaseDetails
     * @return
     */
    int insertDetails(MaLeaseDetails maLeaseDetails);

    /**
     * 根据租赁需求id查询租赁需求详情
     *
     * @param maLeaseInfo
     * @return
     */
    List<MaLeaseDetails> selectDetailsById(MaLeaseInfo maLeaseInfo);

    /**
     * 根据租赁需求id删除租赁需求详情
     *
     * @param maLeaseInfo
     * @return
     */
    int deleteDetailsById(MaLeaseInfo maLeaseInfo);

    Integer getTodayLeaseCount();

    Integer getLeaseCount();

    Integer getLeaseOrderCount();

    Integer getMaTypeCountFromLease();

    String getTopPopularTypeName();

    Integer getTodayLeaseOrderCount();

    MaLeaseInfo getDevInfoById(Integer id);

    List<MaLeaseInfo> getLeaseStatusCount(MaLeaseInfo info);

    List<MaLeaseInfo> getLeaseCountByPublishCompany();

    /**
     * 驳回时修改信息
     *
     * @param maLeaseInfo
     * @return
     */
    int updateRejectDevInfo(MaLeaseInfo maLeaseInfo);

    /**
     * 应答率二级页面
     *
     * @param dto
     * @return
     */
    List<MaLeaseAnswerInfo> getLeaseAnswerRate(MaLeaseAnswerInfo dto);

    /**
     * 查询类型名称
     *
     * @param typeIds
     * @return
     */
    String selectMaTypeList(@Param("list") List<String> typeIds);

    /**
     * 最需装备二级页面
     *
     * @param dto
     * @return
     */
    List<MaLeaseOnlyInfo> getLeaseOnlyInfo(MaLeaseOnlyInfo dto);

    /**
     * 需求装备种类
     *
     * @param dto
     * @return
     */
    List<MaLeaseOnlyInfo> getLeaseTypeList(MaLeaseOnlyInfo dto);

    /**
     * 装备利用率
     *
     * @param dto
     * @return
     */
    List<MaDevRateInfo> getDevRate(MaDevRateInfo dto);

    /**
     * 退租装备
     *
     * @param dto
     * @return
     */
    List<MaDevRateInfo> getReturnDev(MaDevRateInfo dto);

    Integer getDemandUnit();

    /**
     * 获取设备入驻数
     *
     * @param dto
     * @return
     */
    List<DevInfo> getDevNumList(DevInfo dto);

    /**
     * 入驻设备明细
     *
     * @param dto
     * @return
     */
    List<DevInfoDt> getDevNumDetailsList(DevInfo dto);

    @MapKey("code")
    List<Map<String, Object>> getAddress();

    @MapKey("deptId")
    List<Map<String, Object>> getDept(String code);

    @MapKey("value")
    List<Map<String, Object>> getMaType(Long firstLevelId);

    @MapKey("targetType")
    List<Map<String, Object>> statByTypeAndAge(Long deptId);

    List<Map<String, Object>> statByTypeAndAgeDetails(String type);

    List<Map<String, Object>> statByTypeAndAgeByEquipment(String type);

    List<Map<String, Object>> statByTypeAndAgeByCity(String type);

    List<Map<String, Object>> statByTypeAndAgeByConfiguration();

    List<Map<String, Object>> statByTypeAndAgeByTurnoverRate();

    List<Map<String, Object>> statByTypeAndAgeByUsageRate();
}
