package com.boman.web.core.service.select;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.boman.domain.GenTableColumn;
import com.boman.domain.dto.FormDataDto;

import java.util.List;

/**
 * @author shiqian
 * @date 2021年03月29日 10:22
 **/
public interface IBaseSelectService {

    /**
     * 功能描述: 根据tableName和map(属性名和属性值)进行查查
     *
     * @param tableName tableName
     * @param param     属性名和属性值
     * @return java.util.List<com.alibaba.fastjson.JSONObject>
     */
    List<JSONObject> getByMap(String tableName, JSONObject param);

    /**
     * 功能描述: 根据tableName和map(属性名和属性值)进行查查
     *
     * @param tableName tableName
     * @param param     属性名和属性值
     * @return jcom.alibaba.fastjson.JSONObject
     */
    JSONObject getOneByMap(String tableName, JSONObject param);

    /**
     * 功能描述: 根据条件查询
     *
     * @param tableName     tableName
     * @param condition     原始查询条件
     * @param packCondition 封装的查询条件
     * @param showData      前台需要查询的列
     * @param dto       dto.orderBy dto.limit dto.offset
     * @return java.util.List<com.alibaba.fastjson.JSONObject>
     */
    List<JSONObject> selectByCondition(String tableName, JSONObject condition, JSONObject packCondition, List<String> showData, FormDataDto dto);

    /**
     * 功能描述: 根据条件查询
     *
     * @param tableName     tableName
     * @param condition     原始查询条件
     * @param packCondition 封装的查询条件
     * @return int
     */
    int countByCondition(String tableName, JSONObject condition, JSONObject packCondition);

    /**
     * 功能描述: 根据id查所有，不支持自定义查询列
     *
     * @param tableName 表名
     * @param pkName    主键名称
     * @param id        主键值
     * @param other     查询表单数据，添加表类型
     * @return com.alibaba.fastjson.JSONObject
     */
    JSONObject selectById(String tableName, String pkName, Long id, String other);

    /**
     * 功能描述: 根据id查所有，不支持自定义查询列
     *
     * @param tableName 表名
     * @param pkName    主键名称
     * @param idList    主键值
     * @param showData  需要展示的列,若为空，查所有
     * @return com.alibaba.fastjson.JSONObject
     */
    List<JSONObject> selectByIdList(String tableName, String pkName, List<Long> idList, List<String> showData);


    JSONObject packColCondition(List<GenTableColumn> columns, JSONObject condition);

    /**
     * 功能描述: 获取最新的一条数据 create desc
     *
     * @param tableName tableName
     * @return jcom.alibaba.fastjson.JSONObject
     */
    JSONObject getNewest(String tableName);
}
