package com.yeejoin.amos.boot.module.cylinder.flc.api.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderFillingRecordStatisticsDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.dto.CylinderInfoDto;
import com.yeejoin.amos.boot.module.cylinder.flc.api.entity.CylinderInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 气瓶基本信息 Mapper 接口
 *
 * @author system_generator
 * @date 2021-12-14
 */
public interface CylinderInfoMapper extends BaseMapper<CylinderInfo> {

    /**
     * 查询根据公司查询气瓶数量以及过期气瓶数
     *
     * @param sequenceNbr
     * @return
     */
    Map<String, String> queryNumAndOutOfDateNum(@Param("unitCode") String unitCode);


    Integer getMonthInfoTotal(@Param("regionCode") String regionCode);

    /**
     * 获取上个月气瓶总量
     *
     * @return
     */
    Integer getLastMonthInfoTotal(@Param("regionCode") String regionCode);

    /**
     * 获取上上个月气瓶总量
     *
     * @return
     */
    Integer getMonthBeforeLastInfoTotal(@Param("regionCode") String regionCode);

    /**
     * 根据regionCode 获取气瓶数量
     *
     * @param regionCode
     * @return
     */
    Integer getInfoTotalByRegionCode(@Param("regionCode") String regionCode);

    Double queryIntegirtyByAppId(@Param("appId") String appId);

    Integer getWarnNum(String code);

    /**
     * 查询超期数量
     * @author LiuLin
     * @param code 区域code
     * @return
     */
    Integer getOutOfDateNum(String code);


    Integer getMonthInfoTotalUnit(@Param("appId") String appId);

    /**
     * 获取上个月气瓶总量-APPID
     *
     * @return
     */
    Integer getLastMonthInfoTotalUnit(@Param("appId") String appId);

    /**
     * 获取上上个月气瓶总量-APPID
     *
     * @return
     */
    Integer getMonthBeforeLastInfoTotalUnit(@Param("appId") String appId);

    Integer countOverDateNumber(@Param("earlyWarningLevel") String earlyWarningLevel);


    Page<CylinderInfoDto> queryPageListByEarlyWarningLevel(Page<CylinderInfoDto> page, @Param("earlyWarningLevel") String earlyWarningLevel);


    /**
     * 查询行政区划下的所有气瓶
     *
     * @param regionCode
     * @return
     */
    List<CylinderInfoDto> listWithRegionCode(Integer regionCode);

    Page<CylinderInfoDto> cyinderInfoList(Page<CylinderInfoDto> page, CylinderInfoDto cylinderInfoDto, String sort, List<String> appids);

    Page<CylinderInfoDto> getCyinderInfoList(Page<CylinderInfoDto> page);

    Page<CylinderInfoDto> cyinderOutInfoList(Page<CylinderInfoDto> page, CylinderInfoDto cylinderInfoDto, String sort, List<String> appids);


    Integer getInfoTotal();

    void updateEsCylinderInfoStatus(@Param("ids") List<String> ids);

    Integer saveOrUpdateBatch(@Param("list") List<CylinderInfo> list);

    Page<Map<String, Object>> timeOutList(@Param("page") Page<Map<String, Object>> page, @Param("companyId") String companyId, @Param("regionCode") String regionCode);

    Page<Map<String, Object>> licenceList(@Param("page") Page<Map<String, Object>> page, @Param("companyId") String companyId);

    int countNumber(@Param("status") String status, @Param("companyId") String companyId, @Param("regionCode") String regionCode);

    List<CylinderInfoDto> queryCylinderOfInspectionOverdue(@Param("questionType") String questionType);

    List<CylinderInfoDto> queryCylinderOfUnqualifiedQuestion(@Param("questionType") String questionType);

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

    String getAttachmentByUnitCode (@Param("appId") String appId);

    void updateCylinderInfoEsStatusBySeqCodes(String appId, List<String> seqCodeList);

    List<CylinderFillingRecordStatisticsDto> queryFillingRecordByOrgCode(@Param("orgCode") String orgCode, @Param("startTime") String startTime);

    List<CylinderFillingRecordStatisticsDto> queryoffloadingByOrgCode(@Param("orgCode") String orgCode, @Param("startTime") String startTime);

    List<Map<String, String>> queryTzsCylinderInfo(@Param("produceUnitCreditCodes") Set<String> produceUnitCreditCodes, @Param("factoryNums") Set<String> factoryNums);
}

