package com.palmnest.dao;

import com.palmnest.application.bean.Page;
import com.palmnest.model.Element;
import com.palmnest.model.ElementGroup;
import com.palmnest.model.OrgElement;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 数据字典管理DAO
 *
 * @author ldb
 */
public interface ElementGroupDao extends GenericDao<ElementGroup, Long> {


	ElementGroup getElementGroupId(Long id);

	Map<Long, String> getElementIds(final Collection<Long> ids);

	Element getElementId(Long id);

	Element saveElement(Element element);

	void removeElementGroups(Long... ids);

	void removeElement(Long... ids);

	/**
	 * 获取需该表需要同步的数据
	 *
	 * @param tablename
	 * @param optversion
	 * @return
	 */
	List<ElementGroup> getSyncDataList(long minVersion, long maxVersion);

	List getSyncElementDataList(long minVersion, long maxVersion);

	List<ElementGroup> getAllDataList();

	ElementGroup getElementGroupByCode(String code);

	//通过区域编码获取区域信息
	Map<String, Object> getOrderAreaInfo(String areaCode);

	Element getByItemCode(String itemcode);

	/**
	 * @param groupcode 组编码
	 * @param itemcode  成员编码
	 * @return
	 */
	Element getByItemCode(String groupcode, String itemcode);

	/**
	 * @param groupcode 组编码
	 * @param itemname  成员名称
	 * @return
	 */
	Element getByItemname(String groupcode, String itemname);

	OrgElement getByItemname(String orgId, String groupcode, String itemname);

	OrgElement getByItemCode(String orgId, String groupcode, String itemname);

	List<Element> getItemCode(String groupcode, String itemcode);


	Page orgSettingList(int pageNo, int pageSize, HashMap<String, String> map);

	/**
	 * 获取指定项目,指定数据字典组的自定义配置项列表
	 *
	 * @param groupId
	 * @param orgId
	 * @return
	 */
	List<OrgElement> getElementListByOrgAndGroup(Long groupId,Integer orgId);

	List<OrgElement> getElementListByOrgAndGroup(String groupCode, String orgIds);
	/**
	 * 获取指定项目,指定数据字典组的自定义配置项列表
	 *
	 * @param groupCode
	 * @param orgId
	 * @return
	 */
	List<OrgElement> getElementListByOrgAndGroup(String groupCode, Integer orgId);

	/**
	 * 根据数据字典组id查询配置项列表
	 *
	 * @param groupId
	 * @return
	 */
	List<Element> getElementListByGroup(Long groupId);

	/**
	 * 根据id获取项目配置
	 *
	 * @param id
	 * @return
	 */
	OrgElement getOrgElementId(Long id);

	/**
	 * 删除项目常用配置项
	 *
	 * @param notDelIds 不删除的id
	 * @param orgId     项目id
	 * @param groupId   数据字典组id
	 */
	void delOrgSettingByOrgAndGroup(String notDelIds, Integer orgId, Long groupId);

	List<OrgElement> getElementListByAllOrgAndGroup(String groupCode);

	List<OrgElement> getElementListByAllOrgAndGroupAsPage(int pageNo, int pageSize,Map<String,String> map);

	OrgElement getOrgElementByCode(String code,Integer orgId);
}
