package com.uas.search.b2b.service;

import com.uas.search.b2b.exception.SearchException;
import com.uas.search.b2b.model.PageParams;
import com.uas.search.b2b.model.SPage;

/**
 * B2B商务平台搜索服务的接口
 * 
 * @author sunyj
 * @since 2016年11月9日 上午9:52:25
 */
public interface SearchService {
	/**
	 * 单据类型
	 * 
	 * @author sunyj
	 * @since 2016年11月9日 上午10:22:01
	 */
	public enum Table_name {
		/**
		 * 买家采购订单
		 */
		PURC$ORDERS("PURC$ORDERS"),
		/**
		 * 买家委外加工单
		 */
		MAKE$ORDERS("MAKE$ORDERS"),

		/**
		 * 客户验收单
		 */
		PURC$ACCEPT("PURC$ACCEPT"),

		/**
		 * 应付发票单
		 */
		PURC$APBILL("PURC$APBILL"),

		/**
		 * 不良品入库单
		 */
		PURC$BADIN("PURC$BADIN"),

		/**
		 * 不良品出库
		 */
		PURC$BADOUT("PURC$BADOUT"),

		/**
		 * 采购预测单
		 */
		PURC$FORECAST("PURC$FORECAST"),

		/**
		 * 采购询价单
		 */
		// PURC$INQUIRY("PURC$INQUIRY"),

		/**
		 * 采购询价单详情
		 */
		PURC$INQUIRYITEMS("PURC$INQUIRYITEMS"),

		/**
		 * 客户MRB
		 */
		PURC$MRB("PURC$MRB"),

		/**
		 * 采购变更单
		 */
		PURC$CHANGES("PURC$CHANGES"),

		/**
		 * 打样申请单
		 */
		// PURC$PROOFING("PURC$PROOFING"),

		/**
		 * 打样申请单
		 */
		PURC$PROOFINGITEMS("PURC$PROOFINGITEMS"),

		/**
		 * 主动报价单
		 * 
		 */
		SALE$QUOTATION("SALE$QUOTATION"),

		/**
		 * 采购验退单
		 */
		PURC$RETURN("PURC$RETURN"),

		/**
		 * 委外验收单
		 */
		MAKE$ACCEPT("MAKE$ACCEPT"),

		/**
		 * 委外变更单详情
		 */
		MAKE$CHANGEITEMS("MAKE$CHANGEITEMS"),

		/**
		 * 委外验退单
		 */
		MAKE$RETURN("MAKE$RETURN"),

		/**
		 * 平台发货单
		 */
		SALE$SEND("SALE$SEND"),

		/**
		 * 发货提醒单
		 */
		PURC$NOTICE("PURC$NOTICE"),

		/**
		 * 客户收到供应商的送样后的认定单
		 */
		PURC$PROOFINGAPPROVAL("PURC$PROOFINGAPPROVAL"),

		/**
		 * 针对客户的打样申请单
		 */
		PURC$PROOFINGSEND("PURC$PROOFINGSEND"),

		/**
		 * 应付对账单（买家）
		 */
		SALE$ARCHECK("SALE$ARCHECK"),

		/**
		 * 应收对账单（卖家）
		 */
		PURC$APCHECK("PURC$APCHECK"),

		/**
		 * 模具询价单
		 */
		PURC$INQUIRYMOULD("PURC$INQUIRYMOULD"),

		/**
		 * 物料信息表
		 */
		PRODUCTS("PRODUCTS"),

		/**
		 * 企业信息表
		 */
		SEC$ENTERPRISES("SEC$ENTERPRISES"),

		/**
		 * 器件信息表
		 */
		PRODUCT$COMPONENT("PRODUCT$COMPONENT");
		// TODO

		private Table_name(String phrase) {
			this.phrase = phrase;
		}

		private String phrase;

		public String value() {
			return phrase;
		}

		@Override
		public String toString() {
			return phrase;
		}
	}

	/**
	 * 根据关键词、单据类型、状态码搜索单据id
	 * 
	 * @param keyword
	 *            不为空，模糊搜索关键词，可以是：单据编号、供应商uu（采购）、供应商名称（采购）、客户uu（销售）、客户名称（销售）、
	 *            物料编号、 物料名称、物料规格
	 * @param tableName
	 *            不为空，单据类型
	 * @param pageParams
	 *            可为空，可能含有翻页信息，filters中可能有过滤信息，包括：1.状态、所属企业uu、其他状态（如已采纳、未采纳等），
	 *            该部分参数的键为数据库表中相应的字段名称，值为字段对应的值，若值有多个，则使用com.uas.search.b2b.
	 *            model.MultiValue，则；2.开始时间（Long）、截止时间（Long），
	 *            这两个参数用于对时间范围进行筛选（包含开始和截止时间），键为com.uas.search.b2b.util.
	 *            SearchConstants中的常量；3.排序方式（ArrayList(Sort)），键为com.uas.search.
	 *            b2b.util.SearchConstants中的常量，值为List(com.uas.search.b2b.model.
	 *            Sort)
	 * @return 单据id
	 * @throws SearchException
	 */
	public SPage<Long> searchIds(String keyword, Table_name tableName, PageParams pageParams) throws SearchException;
}
