/*
 *
 * Copyright (c) 2001-2017 泛微软件.
 * 泛微协同商务系统,版权所有.
 * 
 */
package com.cloudstore.dev.api.dao;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cloudstore.dev.api.bean.OrgType;
import com.cloudstore.dev.api.bean.TimeMarker;
import com.cloudstore.dev.api.bean.UserDefCol;
import com.engine.common.entity.BizLogContext;
import weaver.hrm.User;

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

/**
 * @version 1.0
 * @author wangkai &　Andyzhang 扩展
 * TODO 
 */
public interface Dao_Table {
	/**
	 * TODO 
	 * @param sqlObj
	 * @param columns
	 * @param min
	 * @param max
	 * @return 
	 */
	List<Map<String, String>> getTableDatas(JSONObject sqlObj, JSONArray columns, String min, String max);
	
	
	/**
	 * TODO 获取总数量
	 * 
	 * @param sqlObj
	 * @return
	 */
	int getTableCount(JSONObject sqlObj);
	
	/**
	 * TODO 获取sql
	 * 
	 * @param sqlObj
	 * @param sql
	 * @param columns
	 * @return
	 */
	List<Map<String, String>> setDevTableDatas(JSONObject sqlObj, String sql,
                                               JSONArray columns, List getBroList, TimeMarker timeMarker);
	
	/**
	 * TODO
	 * 
	 * @param sqlObj
	 * @param columns
	 * @param min
	 * @param max
	 * @param sortParams
	 * @param getBroList
	 * @return
	 */
	List<Map<String, String>> getDevTableDatas(JSONObject sqlObj,
                                               JSONArray columns, String min, String max, String sortParams,
                                               List getBroList, TimeMarker timeMarker);
	
	/**
	 * TODO 获取总数量
	 * 
	 * @param sqlObj
	 * @return
	 */
	int getDevTableCount(JSONObject sqlObj);

	/**
	 * TODO 
	 * @param customid
	 * @return 
	 */
	boolean checkModeSkip(int customid);

	/**
	 * TODO 
	 * @param user
	 * @param pageUid
	 * @param i
	 * @return 
	 */
	@Deprecated
	JSONObject getDestTable(User user, String pageUid, int i);

	/**
	 * TODO 
	 * @param user
	 * @param pageUid
	 * @param i
	 * @return 
	 */
	@Deprecated
	JSONArray getSrcTable(User user, String pageUid, int i);

	/**
	 * TODO 
	 * @param systemIdArr
	 * @param systemOrderArr
	 * @param user

	 * @return 
	 */
    @Deprecated
	boolean updateShowCol(String[] systemIdArr, String[] systemOrderArr, User user, String pageUid);

	/**
	 * 插入tableString中的待选列，已废弃，改为直接从tableString中读取。
	 * @param heads
	 * @param rootheads
	 * @return 
	 */
	@Deprecated
	boolean insertShowCol(JSONArray heads, String rootheads);

	/**
	 * 插入tableString中一列待选列，已废弃，改为直接从tableString中读取。
	 * @param heads
	 * @param pageUid
	 * @param i
	 * @return 
	 */
	@Deprecated
	boolean insertShowCol4Obj(JSONObject heads, String pageUid, int i);

	/**
	 * 更新待选列的列名，已废弃，现在直接从tableString中读取。
	 * @param title
	 * @param dataIndex
	 * @param pageUid
	 * @param i
	 * @return 
	 */
	@Deprecated
	boolean updateShowCol4Obj(String title, String dataIndex, String pageUid,
                              int i);

	/**
	 * TODO 
	 * @param uid
	 * @param isload 
	 */
	void insertUserSetting(int uid, String isload);

	/**
	 * TODO 
	 * @param uid
	 * @param pageId
	 * @return 
	 */
	String getPageSize(int uid, String pageId);

	/**
	 * TODO 
	 * @param uid
	 * @param pageId
	 * @param usedPageSize
	 * @return 
	 */
	boolean insertPageSize(int uid, String pageId, int usedPageSize);

	/**
	 * TODO 
	 * @param uid
	 * @param pageId
	 * @param usedPageSize
	 * @return 
	 */
	boolean updatePageSize(int uid, String pageId, int usedPageSize);

	Map<String, String> getSqlSum(JSONObject sp, String[] sumlist,
                                  Map<String, String> allSumMap);

    /**
     * 清除待办列
     * @param pageUid
     * @return
     */
    boolean clearShowCol(String pageUid);

    /**
     * 清除待办列
     * @param pageUid
     * @return
     */
    boolean clearShowCol(String pageUid, int uid);
    /**
     * 获得该人在该表的用户定制列
     * @param pageUid
     * @param uid
     * @return
     */
    List<UserDefCol> getUserDefColumns(String pageUid, int uid);

    /**
     * 插入已选列与待选列
     * @param choosedDefCols
     * @param unchoosedDefCols
     */
    void insertShowCol(List<UserDefCol> choosedDefCols, List<UserDefCol> unchoosedDefCols);

	/**
	 * 同步字段数据
	 * @param choosedDefCols
	 * @param unchoosedDefCols
	 * @param orgType
	 * @param orgId
	 * @param def
	 * @return
	 */
	boolean synCols(BizLogContext bizLogContext,List<UserDefCol> choosedDefCols, List<UserDefCol> unchoosedDefCols, OrgType orgType, String orgId, int def);

	List<String> getDepList(String departmentIds) throws Exception;
	/**
	 * 设置操作显示数据
	 * @param uid
	 * @param pageId
	 * @param value
	 * @return
	 */
	//void setExpandOperate(int uid, String pageId,String value);

	/**
	 * 获取操作显示数据
	 * @param uid
	 * @param pageId
	 * @return
	 */
	//String getExpandOperate(int uid, String pageId);
}
