package com.bonus.material.device.mapper;


import com.bonus.common.biz.domain.*;
import com.bonus.material.book.domain.BookCarInfoDto;
import com.bonus.material.devchange.domain.MapBean;
import com.bonus.material.device.domain.DevInfo;
import com.bonus.material.device.domain.MaDevQc;
import com.bonus.material.device.domain.SafeBookInfo;
import com.bonus.material.device.domain.dto.InfoMotionDto;
import com.bonus.material.device.domain.vo.DevInfoPropertyVo;
import com.bonus.material.device.domain.vo.DevInfoVo;
import com.bonus.material.device.domain.vo.LeaseVo;
import com.bonus.material.largeScreen.entity.DevInfoReq;
import com.bonus.material.largeScreen.entity.LeaseInfo;
import com.bonus.material.largeScreen.entity.RentInfo;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;

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

/**
 * 设备信息Mapper接口
 *
 * @author syruan
 */
public interface DevInfoMapper {
    /**
     * 查询设备信息
     *
     * @param maId 设备信息主键
     * @return 设备信息
     */
    DevInfoVo selectDevInfoByMaId(Long maId);

    DevInfo getMaStatusByMaId(Long maId);

    int getHotSearchCountByMaId(Long maId);

    /**
     * 判断设备名称是否重复
     *
     * @param deviceName 物资名称
     * @return 条数
     */
    DevInfo getDeviceNameCount(String deviceName);

    int insertHotSearch(Long maId);

    int updateHotSearchByMaId(Long maId);

    /**
     * 查询设备图片集
     *
     * @param maId 设备信息主键
     * @return 设备图片集
     */
    List<SysFileInfo> getFilesByMaId(Long maId);

    /**
     * 获取企业设备浏览量
     *
     * @param companyId
     * @return
     */
    int getCompanyUpNum(String companyId);

    /**
     * 查询设备信息列表
     *
     * @param devInfo 设备信息
     * @return 设备信息集合
     */
    List<DevInfoVo> selectDevInfoList(DevInfoVo devInfo);

    List<UserCollect> selectUserCollectByUserId(Long userId);

    List<DevInfoVo> selectDevInfoHotList(DevInfo devInfo);

    /**
     * 新增设备信息
     *
     * @param devInfo 设备信息
     * @return 结果
     */
    int insertDevInfo(DevInfo devInfo);

    /**
     * 保存草稿
     *
     * @param devInfo 设备信息
     */
    int insertDraft(DevInfo devInfo);

    /**
     * 修改设备信息
     *
     * @param devInfo 设备信息
     * @return 结果
     */
    int updateDevInfo(DevInfo devInfo);

    /**
     * 删除设备信息 -- 逻辑删除 -- 限制状态删除
     *
     * @param maId       设备信息主键
     * @param statusCode 状态码
     * @return 结果
     */
    int deleteDevInfoByMaId(@Param("maId") Long maId, @Param("statusCode") Integer statusCode);

    /**
     * 批量删除设备信息
     *
     * @param maIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteDevInfoByMaIds(@Param("maIds") Long[] maIds);

    /**
     * 添加经纬度信息
     */
    int insertLon(InfoMotionDto infoMotionDto);

    // TODO
    List<SysDic> getSysDic();

    // todo
    SysDic getSysDicById(Integer id);

    List<BaseAddress> getBaseAddress();

    String getBaseAddressById(Integer id);

    List<DevInfoVo> selectDevInfoLists(DevInfoVo devInfo);

    List<DevInfoPropertyVo> selectDevInfoProperties(@Param("maId") Long maId);

    int deleteDevInfoProperties(@Param("maId") Long maId);

    int batchDeleteDevInfoProperties(@Param("maIds") Long[] maIds);

    int insertDevInfoProperties(@Param("maId") Long maId, @Param("list") List<DevInfoPropertyVo> list);

    /**
     * 查询企业信息
     *
     * @param obj
     * @return
     */
    List<BmCompanyInfo> selectCompanyList(BmCompanyInfo obj);

    List<BmCompanyInfo> getMaCountByCompany(BmCompanyInfo obj);

    int updateUpDown(@Param("maIds") List<Long> maIds, @Param("maStatus") Object maStatus);

    /**
     * 查询预约车详情
     *
     * @param maId
     * @param userId
     * @return
     */
    BookCarInfoDto getBookCar(@Param("maId") Long maId, @Param("userId") Long userId);

    /**
     * 查询企业上架装备数
     *
     * @param companyId
     * @return
     */
    int selectCompany(String companyId);

    /**
     * 查询该设备的出租记录
     *
     * @param maId
     * @return
     */
    List<LeaseVo> getLeaseList(Long maId);

    String selectTaskNumByMonth(@Param("date") Date nowDate);

    Integer upMaStatus(DevInfoVo devInfoVo);

    /**
     * 查询企业信息
     *
     * @param companyId
     * @return
     */
    DevInfoVo selectCompanyById(String companyId);

    String getCodeByMaId(Long maId);

    Integer updateDevInfoIsQc(MaDevQc maDevQc);

    Integer updateDevInfoIsSafeBook(SafeBookInfo safeBookInfo);

    List<DevInfoVo> selectAssociationList(DevInfoVo devInfo);

    List<DevInfoVo> getTagDevList(DevInfoVo devInfoVo);

    List<DevInfoVo> getDevList(DevInfoVo devInfo);

    DevInfo getDevStatus(DevInfoVo devInfoVo);

    Integer getTodayDevCount();

    Integer getDevNum();

    Integer getDevUpNum();

    List<DevInfo> getDevUpCountByType();

    Integer getDevLeasingNum();

    Integer getMaTypeLeasingNum();

    Integer getRepairingDevNum();

    Integer getDevTypeNum();

    Integer getDevQcWarningNum();

    DevInfo getDevUsageRatio();

    int updateTotalDevUpDay();

    int updateTotalDevLeaseDay();

    List<DevInfo> getIdleDevRatio();

    List<DevInfo> getLeaseCountByTypeName();

    List<DevInfo> getDeviceShareRanking();

    /**
     * 在租装备信息查询
     *
     * @param devInfo
     * @return
     */
    List<DevInfoVo> getLeaseDevList(DevInfoVo devInfo);


    /**
     * 查询装备对应所属公司
     *
     * @return
     */
    List<DevInfoVo> getCompanyNum();

    List<DevInfoVo> selectDevInfoHotListRatio(DevInfoVo devInfoVo);

    List<DevInfoVo> getOrderByCompanyId(String companyId);

    DevInfoVo getBuyCompanyList(DevInfoVo infoVo);

    DevInfoVo selectDeptList(String companyId);

    /**
     * 根据装备类型名称查询
     *
     * @param typeName
     * @return
     */
    List<DevInfoVo> selectDevTypeByName(String typeName);

    List<DevInfoVo> getDevNumList(DevInfoVo devInfoVo);

    List<DevInfoVo> getDevUpNumList(DevInfoVo devInfoVo);

    List<DevInfoVo> getDevTypeNumList(DevInfoVo devInfoVo);

    List<DevInfoVo> getDevQcWarningNumList(DevInfoVo devInfoVo);

    List<DevInfoVo> getMaTypeLeasingNumList(DevInfoVo devInfoVo);

    List<DevInfoVo> getDevLeasingNumList(DevInfoVo devInfoVo);

    Integer getRentToalNum();

    List<LeaseInfo> getDevLeaseCount();

    List<RentInfo> getDevRentCount();

    List<DevInfoVo> getMaTypeLeasingDetail(DevInfoVo devInfoVo);

    List<SysDept> getDemandUnit(DevInfoVo devInfoVo);

    Integer getTotalEquipment(DevInfoReq devInfoReq);

    BigDecimal getTotalValue(DevInfoReq devInfoReq);

    int getLineNum(DevInfoReq devInfoReq);

    BigDecimal getLinePrice(DevInfoReq devInfoReq);

    List<String> getLineProductionDateList(DevInfoReq devInfoReq);

    List<Map<String, Object>> getUnitEquipmentConfiguration(Long deptId);

    BigDecimal getPrice(Long deptId);

    int getEquipmentStatus(@Param("changeStatus") String changeStatus, @Param("deptId") Long deptId);

    Integer getChangeNum(Long deptId);

    int getTurnoverRate();

    List<DevInfoVo> selectCheckDevInfoList(DevInfoVo devInfo);

    Integer updateCheckStatus(List<MapBean> list);

    Integer getTotalEquipmentByLevel(DevInfoReq devInfoReq);

    int getTurnoverRateByLevel(DevInfoReq devInfoReq);

    int getProjectNUm();

    DevInfoVo selectToolByMaId(Long maId);

    DevInfo getMaStatusByToolId(@Param("id") Long id, @Param("num") Integer num);
}

