package com.yonge.mongodb.service.impl;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ym.mec.util.collection.MapUtil;
import com.yonge.mongodb.PageInfo;
import com.yonge.mongodb.QueryInfo;
import com.yonge.mongodb.dao.BaseDaoWithMongo;
import com.yonge.mongodb.service.BaseServiceWithMongo;

public abstract class BaseServiceImplWithMongo<PK, T extends Serializable> implements BaseServiceWithMongo<PK, T> {

	public abstract BaseDaoWithMongo<PK, T> getDAO();

	public T get(PK id) {
		return getDAO().get(id);
	}

	/**
	 * 更新实体对象
	 * @param bean
	 */
	public long update(PK id, T bean) {
		return getDAO().update(id, bean);
	}

	/**
	 * 通过主键id删除对象
	 * @param id
	 */
	public long delete(final PK id) {
		return getDAO().delete(id);
	}

	/**
	 * 写入实体对象
	 * @param bean
	 */
	public void insert(T bean) {
		getDAO().insert(bean);
	}

	/**
	 * 通过参数查找所有结果集
	 * @param params
	 * @return
	 */
	public List<T> findAll(Map<String, Object> params) {
		return getDAO().findAll(params);
	}

	/**
	 * 通过参数查找结果集，适合分页场景
	 * @param params
	 * @return
	 */
	public PageInfo<T> queryPage(QueryInfo queryInfo) {
		Map<String, Object> params = new HashMap<String, Object>();
		MapUtil.populateMap(params, queryInfo, "page", "rows", "sort", "order");
		return getDAO().queryPage(queryInfo.getPage(), queryInfo.getRows(), params);
	}

	/**
	 * 通过参数查找结果集数目
	 * @param params
	 * @return
	 */
	public long queryCount(Map<String, Object> params) {
		return getDAO().queryCount(params);
	}

}
