package com.hzya.frame.basedao.service;

import com.github.pagehelper.PageInfo;
import com.hzya.frame.basedao.entity.ModifyCriterion;
import com.hzya.frame.basedao.entity.OrderCriterion;
import com.hzya.frame.basedao.entity.RequestDisposeEntity;
import com.hzya.frame.basedao.entity.ReturnCriterion;
import com.hzya.frame.basedao.entity.WhereCriterion;

import java.util.HashMap;
import java.util.List;

/**
 * @Author lvleigang
 * @Description 连接对外提供的查询类
 * @Date 1:45 下午 2022/12/3
 **/
public interface BaseDaoUtil {

    /**
     * @param tablename 表名称
     * @return java.lang.Integer
     * @Author lvleigang
     * @Description 查询数量
     * @Date 8:46 上午 2022/12/7
     **/
    Integer selectCount(String tablename);

    /**
     * @param tablename 表名称
     * @param list      条件
     * @return java.lang.Integer
     * @Author lvleigang
     * @Description 根据条件查询数量
     * @Date 9:06 上午 2022/12/7
     **/
    Integer selectCount(String tablename, List<WhereCriterion> list);

    /**
     * 查询一个对象
     * @param tablename 表名
     * @param whereList 条件列表
     * @return
     */
    HashMap<String,Object> selectOne(String tablename, List<WhereCriterion> whereList);

    /**
     * 查询一个对象
     * @param tablename 表名
     * @param returnCriterionList 返回字段列表
     * @param whereList 查询条件列表
     * @return
     */
    HashMap<String,Object> selectOne(String tablename, List<ReturnCriterion> returnCriterionList,List<WhereCriterion> whereList);
    /**
     * 根据id查询
     * @param tablename
     * @param id
     * @return
     */
    HashMap<String,Object> selectById(String tablename,String id);

    /**
     * 根据id查询
     * @param tablename 表名
     * @param id
     * @param returnCriterionList 返回字段列表
     * @return
     */
    HashMap<String,Object> selectById(String tablename,String id,List<ReturnCriterion> returnCriterionList);

    /**
     * @param tablename
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名查询数据
     * @Date 9:08 上午 2022/12/7
     **/
    List<HashMap<String, Object>> selectList(String tablename);
    /**
     * @param tablename
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名查询数据
     * @Date 9:08 上午 2022/12/7
     **/
    List<HashMap<String, Object>> selectList(String tablename,List<ReturnCriterion> returnCriterionList, List<WhereCriterion> whereList);

    /**
     * @param tablename 表名称
     * @param whereList 查询条件
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名和条件查询数据
     * @Date 9:15 上午 2022/12/7
     **/
    List<HashMap<String, Object>> selectWhereList(String tablename, List<WhereCriterion> whereList);

    /**
     * @param tablename               表名称
     * @param returnCriterionList 返回字段
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名查询数据，且设置返回字段
     * @Date 9:15 上午 2022/12/7
     **/
    List<HashMap<String, Object>> selectReturnList(String tablename, List<ReturnCriterion> returnCriterionList);

    /**
     * @param tablename 表名称
     * @param order     排序
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名排序查询数据
     * @Date 9:16 上午 2022/12/7
     **/
    List<HashMap<String, Object>> selectList(String tablename, List<OrderCriterion> order);

    /**
     * @param tablename 表名称
     * @param order     排序
     * @param whereList 条件
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名和条件，排序查询数据
     * @Date 9:17 上午 2022/12/7
     **/
    List<HashMap<String, Object>> selectWhereList(String tablename, List<OrderCriterion> order, List<WhereCriterion> whereList);

    /**
     * @param tablename               表名称
     * @param order                   排序
     * @param returnCriterionList 返回字段
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名和返回字段，排序查询数据
     * @Date 9:17 上午 2022/12/7
     **/
    List<HashMap<String, Object>> selectReturnList(String tablename, List<OrderCriterion> order, List<ReturnCriterion> returnCriterionList);

    /**
     * @param tablename               表名称
     * @param order                   排序
     * @param returnCriterionListList 返回
     * @param whereList               条件
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名称和条件，设置返回字段排序查询时间
     * @Date 9:18 上午 2022/12/7
     **/
    List<HashMap<String, Object>> selectList(String tablename, List<OrderCriterion> order, List<ReturnCriterion> returnCriterionListList, List<WhereCriterion> whereList);


    /**
     * @param tablename
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名分页查询数据，使用默认分页
     * @Date 9:08 上午 2022/12/7
     **/
    PageInfo selectPage(String tablename);

    /**
     * @param tablename
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名分页查询数据
     * @Date 9:08 上午 2022/12/7
     **/
    PageInfo selectPage(String tablename, Integer pageNum, Integer pageSize);

    /**
     * @param tablename 表名称
     * @param whereList 查询条件
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名和条件分页查询数据
     * @Date 9:15 上午 2022/12/7
     **/
    PageInfo selectWherePage(String tablename, List<WhereCriterion> whereList);

    /**
     * @param tablename 表名称
     * @param whereList 查询条件
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名和条件分页查询数据
     * @Date 9:15 上午 2022/12/7
     **/
    PageInfo selectWherePage(String tablename, List<WhereCriterion> whereList, Integer pageNum, Integer pageSize);

    /**
     * @param tablename               表名称
     * @param returnCriterionListList 返回字段
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名分页查询数据，且设置返回字段
     * @Date 9:15 上午 2022/12/7
     **/
    PageInfo selectReturnPage(String tablename, List<ReturnCriterion> returnCriterionListList);

    /**
     * @param tablename               表名称
     * @param returnCriterionListList 返回字段
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名分页查询数据，且设置返回字段
     * @Date 9:15 上午 2022/12/7
     **/
    PageInfo selectReturnPage(String tablename, List<ReturnCriterion> returnCriterionListList, Integer pageNum, Integer pageSize);

    /**
     * @param tablename 表名称
     * @param order     排序
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名排序查询数据
     * @Date 9:16 上午 2022/12/7
     **/
    PageInfo selectPage(String tablename, List<OrderCriterion> order);

    /**
     * @param tablename 表名称
     * @param order     排序
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名排序查询数据
     * @Date 9:16 上午 2022/12/7
     **/
    PageInfo selectPage(String tablename,List<OrderCriterion> order, Integer pageNum, Integer pageSize);

    /**
     * @param tablename 表名称
     * @param order     排序
     * @param whereList 条件
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名和条件，排序查询数据
     * @Date 9:17 上午 2022/12/7
     **/
    PageInfo selectWherePage(String tablename,List<OrderCriterion> order, List<WhereCriterion> whereList);

    /**
     * @param tablename 表名称
     * @param order     排序
     * @param whereList 条件
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名和条件，排序查询数据
     * @Date 9:17 上午 2022/12/7
     **/
    PageInfo selectWherePage(String tablename, List<OrderCriterion> order, List<WhereCriterion> whereList, Integer pageNum, Integer pageSize);

    /**
     * @param tablename               表名称
     * @param order                   排序
     * @param returnCriterionListList 返回字段
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名和返回字段，排序查询数据
     * @Date 9:17 上午 2022/12/7
     **/
    PageInfo selectReturnPage(String tablename,List<OrderCriterion> order, List<ReturnCriterion> returnCriterionListList);

    /**
     * @param tablename               表名称
     * @param order                   排序
     * @param returnCriterionListList 返回字段
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名和返回字段，排序查询数据
     * @Date 9:17 上午 2022/12/7
     **/
    PageInfo selectReturnPage(String tablename,List<OrderCriterion> order, List<ReturnCriterion> returnCriterionListList, Integer pageNum, Integer pageSize);

    /**
     * @param tablename               表名称
     * @param order                   排序
     * @param returnCriterionListList 返回
     * @param whereList               条件
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名称和条件，设置返回字段排序查询时间
     * @Date 9:18 上午 2022/12/7
     **/
    PageInfo selectPage(String tablename,List<OrderCriterion> order, List<ReturnCriterion> returnCriterionListList, List<WhereCriterion> whereList);

    /**
     * @param tablename               表名称
     * @param order                   排序
     * @param returnCriterionListList 返回
     * @param whereList               条件
     * @return java.util.List<java.util.HashMap < java.lang.String, java.lang.Object>>
     * @Author lvleigang
     * @Description 根据表名称和条件，设置返回字段排序查询时间
     * @Date 9:18 上午 2022/12/7
     **/
    PageInfo selectPage(String tablename, List<OrderCriterion> order, List<ReturnCriterion> returnCriterionListList, List<WhereCriterion> whereList, Integer pageNum, Integer pageSize);

    /**
     * @param tablename      表名称
     * @param modifyExamples 单个对象值
     * @return java.lang.Integer
     * @Author lvleigang
     * @Description 添加单条记录
     * @Date 9:27 上午 2022/12/7
     **/
    Integer insterOne(String tablename, List<ModifyCriterion> modifyExamples);

    /**
     * @param tablename               表名称
     * @param filedExamples           字段名称
     * @param selectiveModifyExamples 多个对象值
     * @return java.lang.Integer
     * @Author lvleigang
     * @Description 添加多条记录
     * @Date 9:27 上午 2022/12/7
     **/
    Integer insterList(String tablename, List<String> filedExamples, List<List<ModifyCriterion>> selectiveModifyExamples);

    /**
     * @param tablename      表名称
     * @param modifyExamples 需要修改后的数据
     * @param whereList      条件
     * @return java.lang.Integer
     * @Author lvleigang
     * @Description 修改数据
     * @Date 9:27 上午 2022/12/7
     **/
    Integer update(String tablename, List<ModifyCriterion> modifyExamples, List<WhereCriterion> whereList);


    /**
     * @param tablename 表名称
     * @param whereList 条件
     * @return java.lang.Integer
     * @Author lvleigang
     * @Description 逻辑删除数据
     * @Date 9:27 上午 2022/12/7
     **/
    Integer deleteLogic(String tablename, List<ModifyCriterion> modifyExamples, List<WhereCriterion> whereList);

    /**
     * @param tablename 表名称
     * @param id        id
     * @return java.lang.Integer
     * @Author lvleigang
     * @Description 删除数据
     * @Date 9:27 上午 2022/12/7
     **/
    Integer deleteLogic(String tablename, String id);

    /**
     * @param tablename 表名称
     * @param whereList 条件
     * @return java.lang.Integer
     * @Author lvleigang
     * @Description 删除数据
     * @Date 9:27 上午 2022/12/7
     **/
    Integer delete(String tablename, List<WhereCriterion> whereList);

    /**
     * @param tablename 表名称
     * @param id        条件
     * @return java.lang.Integer
     * @Author lvleigang
     * @Description 删除数据
     * @Date 9:27 上午 2022/12/7
     **/
    Integer delete(String tablename, String id);
    RequestDisposeEntity setJdbcExample(String tablename, List<OrderCriterion> order, List<ReturnCriterion> returnCriterionListList, List<WhereCriterion> whereList, Integer pageNum, Integer pageSize);

}
