package com.yuchen.saas.park.service.service;


import com.yuchen.saas.park.api.dto.park.AddSubSiteNumReqDTO;
import com.yuchen.saas.park.api.dto.park.ParkInfoPageQueryDTO;
import com.yuchen.saas.park.api.dto.park.ParkInfoStatusUpdateDTO;
import com.yuchen.saas.park.api.dto.park.VerifyParkReqDTO;
import com.yuchen.saas.park.api.entity.park.PmgBatParkInfo;
import com.yuchen.saas.park.api.response.ParkInfoResponse;
import com.yuchen.saas.park.api.vo.park.ParkSpaceStatisticsVO;
import com.yuchen.saas.park.api.vo.park.PmgBatParkTreeVo;
import com.yuchen.saas.park.api.vo.park.PmgParkBuildingInfoVo;
import org.nest.springwrap.core.mp.base.BaseService;
import org.nest.springwrap.core.mp.support.NestPage;

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

/**
 * @author 刘通
 * @date 2020/12/25 17:55
 */
public interface PmgBatParkInfoService extends BaseService<PmgBatParkInfo> {

    /**
     * 添加园区
     * @param parkInfo 园区信息
     * @return
     */
    Boolean addPark(PmgBatParkInfo parkInfo);

    /**
     * 园区销控报表
     *
     * @param id
     * @return map
     */
    Map<String, Object> statement(Long id);


    /**
     * 查询园区基本详情信息
     *
     * @param pmgBatParkInfo
     * @return
     */
    PmgBatParkInfo parkDetail(PmgBatParkInfo pmgBatParkInfo);


    /**
     * 楼栋销售报表
     *
     * @param id
     * @return
     */
    List<PmgParkBuildingInfoVo> buildingCount(Long id);


    Object listFileUrl(String parkId);

    List<PmgBatParkInfo> getAllPark();


    List<PmgBatParkInfo> getAllPark(String roleId, Integer isAdmin, String deptId, String tenantId);

    List<PmgBatParkInfo> getAllParkV1(String roleId, Integer isAdmin, String deptId, String tenantId,Long orgUserId);
    List<PmgBatParkInfo> getCanInvoiceList(Long customerId, String parkIds);
    /**
     * 首页所有信息统一接口
     * baseInfo    //园区基本信息
     *
     * environmentInfo  //环境信息
     * alarmInfo    //告警信息
     * energyInfo  //能耗信息
     * personInfo  //人员信息
     * parkingInfo  //停车场信息
     * deviceInfo    //设备信息
     *
     * alarmList    //告警列表
     * abnormalList  //人员异常行为列表
     * @param parkId
     * @return
     */
    Map<String,Object> getParkAll(Long parkId,Long buildingId, Long floorId);

    /****************************** 3d/bi start *****************************/

    /**
     * 根据园区id获取楼栋、楼层、房间树形结构
     * @param parkId
     * @return
     */
    PmgBatParkTreeVo getParkTree(String parkId);

    List<ParkInfoResponse> getParkListByScopeValue(String tenantId, String scopeValue);

    List<ParkInfoResponse> getParkList(Long tenantId, Long parkId,String parkName);

    List<ParkInfoResponse> pageJt();

    /**
     * 获取所有的租户下的园区
     * @return
     */
    List<PmgBatParkInfo> listAll(String cityName);

    List<PmgBatParkInfo> findListByDeptId(Long deptId);


    String getParkNamesByIds(String parkIds);

    Map<Long, String> getParkMap(List<Long> parrkIds);

    Map<Long, String> getParkNameMap(List<Long> projectIdList);

    Map<Long, PmgBatParkInfo> getParkInfoMap(List<Long> projectIdList);

    List<PmgBatParkInfo> listByApplyId(Long applyId);

    List<PmgBatParkInfo> getAllByOperator(Long operator);

    NestPage<PmgBatParkInfo> getPage(ParkInfoPageQueryDTO queryDTO);

    NestPage<PmgBatParkInfo> operatePage(ParkInfoPageQueryDTO queryDTO);

    Boolean updateStatus(ParkInfoStatusUpdateDTO dto);

    Boolean verifyProject(VerifyParkReqDTO reqDTO);

    Boolean addSubSiteNum(AddSubSiteNumReqDTO reqDTO);

    Boolean deleteIds(String ids);

    PmgBatParkInfo getSpaceTree(Long parkId);

    ParkSpaceStatisticsVO getSpaceStatistics(Long parkId);


}
