Browse Source

简化单据搜索的接口调用方式

sunyj 9 years ago
parent
commit
049980b60e

+ 1 - 1
search-api/src/main/java/com/uas/search/exception/SearchException.java

@@ -54,7 +54,7 @@ public class SearchException extends RuntimeException {
 			sb.append("\n\t").append(stackTraceElement.toString());
 		}
 		if (e.getCause() != null) {
-			sb.append("\nCaused by: ").append(getMessage(e.getCause()));
+			sb.append("\nCaused by: ").append(getDetailedMessage(e.getCause()));
 		}
 		return sb.toString();
 	}

+ 10 - 67
search-api/src/main/java/com/uas/search/utils/OrderSearchConstants.java

@@ -7,87 +7,30 @@ package com.uas.search.utils;
  * @since 2016年10月18日 下午8:33:05
  */
 public class OrderSearchConstants {
-	/**
-	 * 单据搜索时,若限定时间范围,可以键值对的形式传递参数,该键代表最小(远)时间
-	 */
-	public static final String MIN_TIME_KEY = "mintime";
 
 	/**
-	 * 单据搜索时,若限定时间范围,可以键值对的形式传递参数,该键代表最大(近)时间
+	 * 买方个人uu号
 	 */
-	public static final String MAX_TIME_KEY = "maxtime";
+	public static final String BUYER_UU_KEY = "buyeruu";
 
-	// 商城销售订单索引字段的key
 	/**
-	 * 对应销售单号(数据库or_id字段),因易与id命名混淆,其他类、lucenne建索引时该字段难以区分,特以此命名
+	 * 买方企业UU号
 	 */
-	public static final String ORDER_CODE_FIELD = "or_code";
-	public static final String ORDER_BUYERUU_FIELD = "or_buyeruu";
-	public static final String ORDER_BUYERNAME_FIELD = "or_buyername";
-	public static final String ORDER_BUYERENUU_FIELD = "or_buyerenuu";
-	public static final String ORDER_BUYERENNAME_FIELD = "or_buyerenname";
-	public static final String ORDER_SELLERENUU_FIELD = "or_sellerenuu";
-	public static final String ORDER_SELLERENNAME_FIELD = "or_sellerenname";
+	public static final String BUYER_EN_UU_KEY = "buyerenuu";
 
-	// 商城销售订单明细索引字段的key
 	/**
-	 * 对应商城销售订单明细编号(数据库detail_id字段),因易与id命名混淆,其他类、lucenne建索引时该字段难以区分,特以此命名
+	 * 卖方企业UU号
 	 */
-	public static final String ORDER_DETAIL_CODE_FIELD = "od_code";
-	public static final String ORDER_DETAIL_COMPONENTCODE_FIELD = "od_cmpcode";
-	public static final String ORDER_DETAIL_KINDNAME_FIELD = "od_kiname";
-	public static final String ORDER_DETAIL_BRANDNAME_FIELD = "od_brname";
+	public static final String SELLER_EN_UU_KEY = "sellerenuu";
 
-	// 商城销售订单的发货单索引字段的key
 	/**
-	 * 对应销售单发货单号(数据库in_id字段),因易与id命名混淆,其他类、lucenne建索引时该字段难以区分,特以此命名
-	 */
-	public static final String ORDER_INVOICE_CODE_FIELD = "oi_code";
-	public static final String ORDER_INVOICE_BUYERUU_FIELD = "oi_buyeruu";
-	public static final String ORDER_INVOICE_BUYERNAME_FIELD = "oi_buyername";
-	public static final String ORDER_INVOICE_BUYERENUU_FIELD = "oi_buyerenuu";
-	public static final String ORDER_INVOICE_BUYERENNAME_FIELD = "oi_buyerenname";
-
-	// 商城销售订单的发货单明细索引字段的key
-	/**
-	 * 对应商城销售订单的发货单明细编号(数据库detail_id字段),因易与id命名混淆,其他类、lucenne建索引时该字段难以区分,特以此命名
-	 */
-	public static final String ORDER_INVOICE_DETAIL_CODE_FIELD = "oid_code";
-	public static final String ORDER_INVOICE_DETAIL_COMPONENTCODE_FIELD = "oid_cmpcode";
-	public static final String ORDER_INVOICE_DETAIL_KINDNAME_FIELD = "oid_kiname";
-	public static final String ORDER_INVOICE_DETAIL_BRANDNAME_FIELD = "oid_brname";
-
-	// 商城采购订单索引字段的key
-	/**
-	 * 对应采购单号(数据库pu_id字段),因易与id命名混淆,其他类、lucenne建索引时该字段难以区分,特以此命名
-	 */
-	public static final String PURCHASE_CODE_FIELD = "pu_code";
-	public static final String PURCHASE_SELLERENUU_FIELD = "pu_sellerenuu";
-	public static final String PURCHASE_SELLERENNAME_FIELD = "pu_sellerenname";
-
-	// 商城采购订单明细索引字段的key
-	/**
-	 * 对应商城采购订单明细编号(数据库detail_id字段),因易与id命名混淆,其他类、lucenne建索引时该字段难以区分,特以此命名
+	 * 单据搜索时,若限定时间范围,可以键值对的形式传递参数,该键代表最小(远)时间
 	 */
-	public static final String PURCHASE_DETAIL_CODE_FIELD = "pd_code";
-	public static final String PURCHASE_DETAIL_COMPONENTCODE_FIELD = "pd_cmpcode";
-	public static final String PURCHASE_DETAIL_KINDNAME_FIELD = "pd_kiname";
-	public static final String PURCHASE_DETAIL_BRANDNAME_FIELD = "pd_brname";
+	public static final String MIN_TIME_KEY = "mintime";
 
-	// 商城采购订单的发货单索引字段的key
 	/**
-	 * 对应采购单发货单号(数据库in_id字段),因易与id命名混淆,其他类、lucenne建索引时该字段难以区分,特以此命名
+	 * 单据搜索时,若限定时间范围,可以键值对的形式传递参数,该键代表最大(近)时间
 	 */
-	public static final String PURCHASE_INVOICE_CODE_FIELD = "pi_code";
-	public static final String PURCHASE_INVOICE_SELLERENUU_FIELD = "pi_sellerenuu";
-	public static final String PURCHASE_INVOICE_SELLERENNAME_FIELD = "pi_sellerenname";
+	public static final String MAX_TIME_KEY = "maxtime";
 
-	// 商城采购订单的发货单明细索引字段的key
-	/**
-	 * 对应商城采购订单的发货单明细编号(数据库detail_id字段),因易与id命名混淆,其他类、lucenne建索引时该字段难以区分,特以此命名
-	 */
-	public static final String PURCHASE_INVOICE_DETAIL_CODE_FIELD = "pid_code";
-	public static final String PURCHASE_INVOICE_DETAIL_COMPONENTCODE_FIELD = "pid_cmpcode";
-	public static final String PURCHASE_INVOICE_DETAIL_KINDNAME_FIELD = "pid_kiname";
-	public static final String PURCHASE_INVOICE_DETAIL_BRANDNAME_FIELD = "pid_brname";
 }

+ 12 - 1
search-console/src/main/java/com/uas/search/console/controller/OrderSearchController.java

@@ -34,6 +34,7 @@ import com.uas.search.model.BaseOrder;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.SPage;
 import com.uas.search.service.OrderSearchService.Table_name;
+import com.uas.search.utils.OrderSearchConstants;
 
 /**
  * 订单搜索请求
@@ -74,7 +75,8 @@ public class OrderSearchController {
 
 	@RequestMapping("orderIds")
 	@ResponseBody
-	public SPage<BaseOrder> getOrderIdsWithDetail(String keyword, String tableName, Integer page, Integer size, String mintime, String maxtime) {
+	public SPage<BaseOrder> getOrderIdsWithDetail(String keyword, String tableName, Integer page, Integer size,
+			Long buyeruu, Long buyerenuu, Long sellerenuu, String mintime, String maxtime) {
 		Table_name tbName = null;
 		if (!StringUtils.isEmpty(tableName)) {
 			tbName = Table_name.valueOf(tableName);
@@ -88,6 +90,15 @@ public class OrderSearchController {
 			params.setSize(size);
 		}
 		Map<String, Object> filters = new HashMap<>();
+		if (buyeruu != null) {
+			filters.put(OrderSearchConstants.BUYER_UU_KEY, buyeruu);
+		}
+		if (buyerenuu != null) {
+			filters.put(OrderSearchConstants.BUYER_EN_UU_KEY, buyerenuu);
+		}
+		if (sellerenuu != null) {
+			filters.put(OrderSearchConstants.SELLER_EN_UU_KEY, sellerenuu);
+		}
 		if (mintime != null) {
 			filters.put(SearchConstants.MIN_TIME_KEY, parseTime(mintime));
 		}

+ 24 - 11
search-console/src/main/java/com/uas/search/console/service/impl/OrderSearchServiceImpl.java

@@ -34,6 +34,7 @@ import com.uas.search.model.BaseOrderDetail;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.SPage;
 import com.uas.search.service.OrderSearchService;
+import com.uas.search.utils.OrderSearchConstants;
 
 /**
  * 单据搜索实现
@@ -115,8 +116,6 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 		IndexSearcher indexSearcher = getIndexSearcher();
 		// 获取该表keyword可以搜索的域
 		List<String> keywordFields = OrderSearchUtils.getKeywordFields(tableName);
-		// 获取filter可以过滤的域
-		List<String> filterFields = OrderSearchUtils.getFilterFields(tableName);
 
 		SPage<BaseOrder> sPage = new SPage<>();
 		BooleanQuery booleanQuery = new BooleanQuery();
@@ -154,14 +153,27 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 
 			Map<String, Object> filters = params.getFilters();
 			if (!CollectionUtils.isEmpty(filters)) {
-				// filter中可能会有哪些域
-				for (String filterField : filterFields) {
-					if (!StringUtils.isEmpty(filters.get(filterField))) {
-						booleanQuery.add(new TermQuery(new Term(filterField, filters.get(filterField).toString())),
-								BooleanClause.Occur.MUST);
-					}
+				// 如果filter中有买方个人uu
+				if (!StringUtils.isEmpty(filters.get(OrderSearchConstants.BUYER_UU_KEY))) {
+					booleanQuery.add(
+							new TermQuery(new Term(OrderSearchUtils.getBuyeruuField(tableName),
+									filters.get(OrderSearchConstants.BUYER_UU_KEY).toString())),
+							BooleanClause.Occur.MUST);
+				}
+				// 如果filter中有买方企业uu
+				if (!StringUtils.isEmpty(filters.get(OrderSearchConstants.BUYER_EN_UU_KEY))) {
+					booleanQuery.add(
+							new TermQuery(new Term(OrderSearchUtils.getBuyerenuuField(tableName),
+									filters.get(OrderSearchConstants.BUYER_EN_UU_KEY).toString())),
+							BooleanClause.Occur.MUST);
+				}
+				// 如果filter中有卖方企业uu
+				if (!StringUtils.isEmpty(filters.get(OrderSearchConstants.SELLER_EN_UU_KEY))) {
+					booleanQuery.add(
+							new TermQuery(new Term(OrderSearchUtils.getSellerenuuField(tableName),
+									filters.get(OrderSearchConstants.SELLER_EN_UU_KEY).toString())),
+							BooleanClause.Occur.MUST);
 				}
-
 				// 如果最小时间和最大时间至少传了一个参数,说明需要对时间范围进行限定
 				if (!StringUtils.isEmpty(filters.get(SearchConstants.MIN_TIME_KEY))
 						|| !StringUtils.isEmpty(filters.get(SearchConstants.MAX_TIME_KEY))) {
@@ -333,7 +345,7 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 			Map<Long, List<BaseOrderDetail>> map = new HashMap<>();
 			for (ScoreDoc scoreDoc : scoreDocs) {
 				Document document = indexSearcher.doc(scoreDoc.doc);
-				Long orderId = Long.valueOf(document.get(OrderSearchUtils.getMainTableIdField(tableName)));
+				Long orderId = Long.valueOf(document.get(OrderSearchUtils.getDetailTableForeignIdField(tableName)));
 				List<BaseOrderDetail> baseOrderDetails = map.get(orderId);
 				if (CollectionUtils.isEmpty(baseOrderDetails)) {
 					baseOrderDetails = new ArrayList<>();
@@ -372,7 +384,8 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 		if (id == null) {
 			return null;
 		}
-		List<Document> documents = getDocuments(OrderSearchUtils.getMainTableIdField(tableName), id.toString());
+		List<Document> documents = getDocuments(OrderSearchUtils.getDetailTableForeignIdField(tableName),
+				id.toString());
 		List<BaseOrderDetail> baseOrderDetails = new ArrayList<>();
 		for (Document document : documents) {
 			Long detailId = Long.valueOf(document.get(OrderSearchUtils.getIdField(tableName)));

+ 53 - 1
search-console/src/main/java/com/uas/search/console/util/OrderSearchUtils.java

@@ -112,6 +112,7 @@ public class OrderSearchUtils {
 	 *            表名
 	 * @return 域的列表
 	 */
+	// TODO delete
 	public static List<String> getFilterFields(String tableName) {
 		List<String> filterFields = new ArrayList<>();
 		if (tableName.equals(SearchConstants.ORDER_TABLE_NAME)) {
@@ -189,6 +190,57 @@ public class OrderSearchUtils {
 		}
 	}
 
+	/**
+	 * 获取主表在索引中的buyeruu域
+	 * 
+	 * @param tableName
+	 *            表名
+	 * @return buyeruu域
+	 */
+	public static String getBuyeruuField(String tableName) {
+		if (tableName.equals(SearchConstants.ORDER_TABLE_NAME)) {
+			return SearchConstants.ORDER_BUYERUU_FIELD;
+		} else {
+			throw new SearchException("表中不存在买方个人uu:" + tableName);
+		}
+	}
+
+	/**
+	 * 获取主表在索引中的buyerenuu域
+	 * 
+	 * @param tableName
+	 *            表名
+	 * @return buyerenuu域
+	 */
+	public static String getBuyerenuuField(String tableName) {
+		if (tableName.equals(SearchConstants.ORDER_TABLE_NAME)) {
+			return SearchConstants.ORDER_BUYERENUU_FIELD;
+		} else if (tableName.equals(SearchConstants.ORDER_INVOICE_TABLE_NAME)) {
+			return SearchConstants.ORDER_INVOICE_BUYERENUU_FIELD;
+		} else {
+			throw new SearchException("表中不存在买方企业uu:" + tableName);
+		}
+	}
+
+	/**
+	 * 获取主表在索引中的sellerenuu域
+	 * 
+	 * @param tableName
+	 *            表名
+	 * @return sellerenuu域
+	 */
+	public static String getSellerenuuField(String tableName) {
+		if (tableName.equals(SearchConstants.ORDER_TABLE_NAME)) {
+			return SearchConstants.ORDER_SELLERENUU_FIELD;
+		} else if (tableName.equals(SearchConstants.PURCHASE_TABLE_NAME)) {
+			return SearchConstants.PURCHASE_SELLERENUU_FIELD;
+		} else if (tableName.equals(SearchConstants.PURCHASE_INVOICE_TABLE_NAME)) {
+			return SearchConstants.PURCHASE_INVOICE_SELLERENUU_FIELD;
+		} else {
+			throw new SearchException("表中不存在卖方企业uu:" + tableName);
+		}
+	}
+
 	/**
 	 * 获取明细表在索引中的detno域
 	 * 
@@ -217,7 +269,7 @@ public class OrderSearchUtils {
 	 *            表名
 	 * @return 主表id(外键)在索引中的域
 	 */
-	public static String getMainTableIdField(String tableName) {
+	public static String getDetailTableForeignIdField(String tableName) {
 		if (tableName.equals(SearchConstants.ORDER_DETAIL_TABLE_NAME)) {
 			return SearchConstants.ORDER_DETAIL_ORDERID_FIELD;
 		} else if (tableName.equals(SearchConstants.ORDER_INVOICE_DETAIL_TABLE_NAME)) {