Ver Fonte

销售单搜索支持分页、空格(与)、时间范围

sunyj há 9 anos atrás
pai
commit
f1150f66ac

+ 56 - 2
search-console/src/main/java/com/uas/search/console/controller/OrderSearchController.java

@@ -1,6 +1,9 @@
 package com.uas.search.console.controller;
 
+import java.util.Calendar;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -25,6 +28,7 @@ import com.uas.search.console.model.PurchaseInvoiceDetailSimpleInfo;
 import com.uas.search.console.model.PurchaseInvoiceSimpleInfo;
 import com.uas.search.console.model.PurchaseSimpleInfo;
 import com.uas.search.console.service.impl.OrderSearchServiceImpl;
+import com.uas.search.exception.SearchException;
 import com.uas.search.model.BaseOrder;
 import com.uas.search.model.PageParams;
 import com.uas.search.model.SPage;
@@ -79,12 +83,62 @@ public class OrderSearchController {
 
 	@RequestMapping("orders")
 	@ResponseBody
-	public SPage<BaseOrder> searchOrderIds(String keyword) {
+	public SPage<BaseOrder> searchOrderIds(String keyword, Integer page, Integer size, Long buyeruu, Long buyerenuu,
+			Long sellerenuu, String mintime, String maxtime) {
 		PageParams params = new PageParams();
-		params.setSize(200);
+		if (page != null) {
+			params.setPage(page);
+		}
+		if (size != null) {
+			params.setSize(size);
+		}
+		Map<String, Object> filters = new HashMap<>();
+		if (buyeruu != null) {
+			filters.put("or_buyeruu", buyeruu);
+		}
+		if (buyerenuu != null) {
+			filters.put("or_buyerenuu", buyerenuu);
+		}
+		if (sellerenuu != null) {
+			filters.put("or_sellerenuu", sellerenuu);
+		}
+		if (mintime != null) {
+			filters.put("or_mintime", parseTime(mintime));
+		}
+		if (maxtime != null) {
+			filters.put("or_maxtime", parseTime(maxtime));
+		}
+		params.setFilters(filters);
 		return orderSearchService.searchOrderIds(keyword, params);
 	}
 
+	/**
+	 * 2016-10-10 1:12:20
+	 * 
+	 * @param str
+	 * @return
+	 */
+	private Long parseTime(String str) {
+		try {
+			String[] strs = str.split("-");
+			int year = Integer.parseInt(strs[0]);
+			int month = Integer.parseInt(strs[1]) - 1;
+			String[] strs2 = strs[2].split(" ");
+			int date = Integer.parseInt(strs2[0]);
+			String[] strs3 = strs2[1].split(":");
+			int hour = Integer.parseInt(strs3[0]);
+			int minute = Integer.parseInt(strs3[1]);
+			int second = Integer.parseInt(strs3[2]);
+			Calendar calendar = Calendar.getInstance();
+			// 月份减1
+			calendar.set(year, month, date, hour, minute, second);
+			System.out.println(calendar.getTime().toString());
+			return calendar.getTimeInMillis();
+		} catch (Exception e) {
+			throw new SearchException("时间格式错误,示例:'2016-10-10 1:12:20'," + e);
+		}
+	}
+
 	@RequestMapping("findAllOrders")
 	@ResponseBody
 	public List<OrderSimpleInfo> orders() {

+ 1 - 1
search-console/src/main/java/com/uas/search/console/core/advice/ExceptionHandlerAdvice.java

@@ -94,7 +94,7 @@ public class ExceptionHandlerAdvice {
 	 */
 	@ExceptionHandler(SearchException.class)
 	public ResponseEntity<ModelMap> handleSystemError(SearchException ex) {
-		logger.error(ex.getMessage());
+		logger.error(ex.getDetailedMessage());
 		HttpHeaders headers = new HttpHeaders();
 		headers.add("Content-Type", "application/json; charset=utf-8");
 		ModelMap map = new ModelMap();

+ 20 - 15
search-console/src/main/java/com/uas/search/console/service/impl/IndexServiceImpl.java

@@ -138,21 +138,24 @@ public class IndexServiceImpl implements IndexService {
 			indexWriter = indexWriterManager.get();
 			Long startTime = new Date().getTime();
 
-			Long kindSize = createKindIndexs();
-			Long kindTime = new Date().getTime();
-			logger.info("创建类目索引: " + kindSize + "条,耗时 " + (kindTime - startTime) + " ms\n");
-
-			Long brandSize = createBrandIndexs();
-			Long brandTime = new Date().getTime();
-			logger.info("创建品牌索引: " + brandSize + "条,耗时 " + (brandTime - kindTime) + " ms\n");
-
-			Long componentSize = createComponentIndexesWithFiles();
-			Long componentTime = new Date().getTime();
-			logger.info("创建器件索引: " + componentSize + "条,耗时 " + (componentTime - brandTime) + " ms\n");
+			// Long kindSize = createKindIndexs();
+			// Long kindTime = new Date().getTime();
+			// logger.info("创建类目索引: " + kindSize + "条,耗时 " + (kindTime -
+			// startTime) + " ms\n");
+			//
+			// Long brandSize = createBrandIndexs();
+			// Long brandTime = new Date().getTime();
+			// logger.info("创建品牌索引: " + brandSize + "条,耗时 " + (brandTime -
+			// kindTime) + " ms\n");
+			//
+			// Long componentSize = createComponentIndexesWithFiles();
+			// Long componentTime = new Date().getTime();
+			// logger.info("创建器件索引: " + componentSize + "条,耗时 " + (componentTime
+			// - brandTime) + " ms\n");
 
 			Long orderSize = createOrderIndexes();
 			Long orderTime = new Date().getTime();
-			logger.info("创建销售单索引: " + orderSize + "条,耗时 " + (orderTime - componentTime) + " ms\n");
+			logger.info("创建销售单索引: " + orderSize + "条,耗时 " + (orderTime - startTime) + " ms\n");
 
 			Long orderDetailSize = createOrderDetailIndexes();
 			Long orderDetailTime = new Date().getTime();
@@ -185,9 +188,9 @@ public class IndexServiceImpl implements IndexService {
 			logger.info("创建采购单发货单明细索引: " + purchaseInvoiceDetailSize + "条,耗时 "
 					+ (purchaseInvoiceDetailTime - purchaseInvoiceTime) + " ms\n");
 
-			logger.info("索引创建成功, 共用时间 " + (componentTime - startTime) + " ms");
+			logger.info("索引创建成功, 共用时间 " + (purchaseInvoiceDetailTime - startTime) + " ms");
 
-			return componentTime - startTime;
+			return purchaseInvoiceDetailTime - startTime;
 		} catch (IOException e) {
 			e.printStackTrace();
 		} catch (InterruptedException e) {
@@ -355,7 +358,9 @@ public class IndexServiceImpl implements IndexService {
 				}
 			}
 			indexWriter.commit();
-		} catch (IOException | InterruptedException e) {
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (InterruptedException e) {
 			e.printStackTrace();
 		} finally {
 			indexWriterManager.release();

+ 27 - 12
search-console/src/main/java/com/uas/search/console/service/impl/OrderSearchServiceImpl.java

@@ -103,11 +103,11 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 				sPage.setPage(page);
 			} else {
 				sPage.setPage(PAGE_INDEX);
+				sPage.setFirst(true);
 			}
 			int size = params.getSize();
 			if (size > 0) {
 				sPage.setSize(size);
-				sPage.setFirst(true);
 			} else {
 				sPage.setSize(PAGE_SIZE);
 			}
@@ -136,7 +136,7 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 					Calendar calendar = Calendar.getInstance();
 					calendar.set(2016, 0, 1);
 					// 最大日期初始化为现在
-					long minTime = calendar.getTime().getTime();
+					long minTime = calendar.getTimeInMillis();
 					long maxTime = new Date().getTime();
 					if (!StringUtils.isEmpty(filters.get("or_mintime"))) {
 						minTime = Long.parseLong(filters.get("or_mintime").toString());
@@ -146,6 +146,10 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 					}
 					booleanQuery.add(NumericRangeQuery.newLongRange(SearchConstants.ORDER_CREATETIME_FIELD, minTime,
 							maxTime, true, true), BooleanClause.Occur.MUST);
+					logger.info(minTime);
+					logger.info(maxTime);
+					logger.info(new Date(minTime));
+					logger.info(new Date(maxTime));
 				}
 			}
 		}
@@ -156,31 +160,42 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 			// 如果页码不为1
 			if (sPage.getPage() > 1) {
 				TopDocs previousTopDocs = indexSearcher.search(booleanQuery, (sPage.getPage() - 1) * sPage.getSize());
+				int totalHits = previousTopDocs.totalHits;
 				ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
-				if (previousScoreDocs == null || previousScoreDocs.length == 0) {
+				logger.info(previousScoreDocs == null || previousScoreDocs.length == 0);
+				if (totalHits == 0) {
 					return searchOrderDetailIds(keyword, params);
 				} else {
+					if ((sPage.getPage() - 1) * sPage.getSize() > totalHits) {
+						throw new SearchException("页码过大");
+					}
 					topDocs = indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], booleanQuery,
-							sPage.getPage());
+							sPage.getSize());
 				}
 			} else {
 				sPage.setFirst(true);
 				topDocs = indexSearcher.search(booleanQuery, sPage.getSize());
 			}
 			// 如果主表中未匹配到结果,再搜索其明细表
-			if (topDocs.totalHits < 1) {
+			int totalHits = topDocs.totalHits;
+			if (totalHits < 1) {
 				return searchOrderDetailIds(keyword, params);
 			}
 
-			sPage.setTotalElement(topDocs.totalHits);
-			logger.info(sPage);
-			logger.info(topDocs.totalHits);
+			sPage.setTotalElement(totalHits);
+			int totalPage = (int) Math.ceil(totalHits / (1.0 * sPage.getSize()));
+			sPage.setTotalPage(totalPage);
+			if (totalPage == sPage.getPage()) {
+				sPage.setLast(true);
+			}
+
 			ScoreDoc[] scoreDocs = topDocs.scoreDocs;
 			List<BaseOrder> baseOrders = new ArrayList<>();
 			for (ScoreDoc scoreDoc : scoreDocs) {
 				Document document = indexSearcher.doc(scoreDoc.doc);
 				Long id = Long.valueOf(document.get(SearchConstants.ORDER_ID_FIELD));
 				String code = document.get(SearchConstants.ORDER_CODE_FIELD);
+				logger.info(id + " " + document.get(SearchConstants.ORDER_CREATETIME_FIELD) + " " + new Date(Long.parseLong(document.get(SearchConstants.ORDER_CREATETIME_FIELD))));
 				BaseOrder baseOrder = new BaseOrder(id, code);
 				baseOrder.setDetails(getOrderDetails(id));
 				baseOrders.add(baseOrder);
@@ -205,13 +220,14 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 		if (orderid == null) {
 			return null;
 		}
-		List<Document> documents = getDocuments(SearchConstants.ORDER_DETAIL_DETNO_FIELD, orderid.toString());
+		List<Document> documents = getDocuments(SearchConstants.ORDER_DETAIL_ORDERID_FIELD, orderid.toString());
 		List<BaseOrderDetail> baseOrderDetails = new ArrayList<>();
 		for (Document document : documents) {
 			Long id = Long.valueOf(document.get(SearchConstants.ORDER_DETAIL_ID_FIELD));
 			String code = document.get(SearchConstants.ORDER_DETAIL_CODE_FIELD);
-			Short detno = Short.valueOf(document.get(SearchConstants.ORDER_DETAIL_DETNO_FIELD));
-			baseOrderDetails.add(new BaseOrderDetail(id, detno, code));
+			// Short detno =
+			// Short.valueOf(document.get(SearchConstants.ORDER_DETAIL_DETNO_FIELD));
+			baseOrderDetails.add(new BaseOrderDetail(id, null, code));
 		}
 		return baseOrderDetails;
 	}
@@ -272,7 +288,6 @@ public class OrderSearchServiceImpl implements OrderSearchService, InnerOrderSea
 		try {
 			TopDocs topDocs = indexSearcher.search(termQuery, TOP_NUM);
 			ScoreDoc[] scoreDocs = topDocs.scoreDocs;
-			logger.info(termQuery + " " + topDocs.totalHits);
 			for (ScoreDoc scoreDoc : scoreDocs) {
 				documents.add(indexSearcher.doc(scoreDoc.doc));
 			}

+ 1 - 0
search-console/src/main/java/com/uas/search/console/util/ObjectToDocumentUtils.java

@@ -105,6 +105,7 @@ public class ObjectToDocumentUtils {
 	 * @return 转换的Document
 	 */
 	public static Document toDocument(OrderDetailSimpleInfo orderDetail) {
+		logger.info("idnex " + orderDetail);
 		if (orderDetail == null || orderDetail.getId() == null || StringUtils.isEmpty(orderDetail.getCode())
 				|| orderDetail.getOrderid() == null || StringUtils.isEmpty(orderDetail.getCmpCode())
 				|| StringUtils.isEmpty(orderDetail.getKiName()) || StringUtils.isEmpty(orderDetail.getBrName())) {