/*
 * Copyright (c) 2024 codvision.com All Rights Reserved.
 */

package com.codvision.basic.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.codvision.basic.entity.Address;
import com.codvision.basic.entity.vo.AddressVO;
import org.apache.ibatis.annotations.Param;

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

/**
 * @author KX
 */
public interface AddressMapper extends BaseMapper<Address> {

    /**
     * 分页通用查询
     * @param page 分页对象
     * @param paraMap 查询条件
     * @return 列表
     */
    IPage<AddressVO> getPageResult(IPage<Map<String, Object>> page, @Param("query") Map<String, Object> paraMap);

    /**
     * 获取组织下最大地址编码
     * @param address 地址信息
     * @return String 地址编码
     */
    String getMaxAddressCode(Address address);

    /**
     * 统计楼幢地址
     * @param address 地址信息
     * @return int
     */
    int countBuilding(Address address);

    /**
     * 统计房屋数
     * @param address 地址信息
     * @return int
     */
    int countHouse(Address address);

    /**
     * 获取楼幢编码
     * @param parkCode 园区编码
     * @param buildingNumber 楼幢编号
     * @return 楼幢编码
     */
    String getBuildingCode(@Param("parkCode") String parkCode, @Param("buildingNumber") String buildingNumber);

    /**
     * 根据人员id查询关联房屋信息
     * @param personId 人员id
     * @return 地址信息
     */
    List<AddressVO> getRelationAddress(Integer personId);


    AddressVO getAddressAndTag(int id);

    /**
     * 详情
     * @param id 地址id
     * @return 地址信息
     */
    AddressVO details(int id);

    /**
     * 根据楼幢编码查询房屋信息
     * @param buildingCode 楼幢编码
     * @return 房屋信息
     */
    List<AddressVO> getAddressHouseListByBuildingCode(String buildingCode);

    /**
     * 根据楼幢编码查询房屋地址列表
     * @param page 分页对象
     * @param paraMap 查询条件
     * @return 列表
     */
    IPage<AddressVO> getAddressHouseListByCode(IPage<Map<String, Object>> page, @Param("query") Map<String, Object> paraMap);

    /**
     * 获取楼幢下所有房屋列表
     * @param page 分页对象
     * @param paraMap 查询条件
     * @return 列表
     */
    IPage<AddressVO> getAddressBuildingListByCode(IPage<Map<String, Object>> page, @Param("query") Map<String, Object> paraMap);

    /**
     * 通过楼幢或小区编码查询房屋地址id
     * @param buildingCode 楼幢编码
     * @param parkCode 小区编码
     * @return 地址id列表
     */
    List<Integer> getAddressIdList(@Param("buildingCode") String buildingCode, @Param("parkCode") String parkCode);

    /**
     * 根据标签查询符合地址信息
     * @param oid 组织id
     * @param tagIdList 标签ids
     * @return List<Address>
     */
    List<Address> getAddressInspectionTarget(@Param("oid") Integer oid, @Param("tagIdList") String tagIdList);

}
