Selaa lähdekoodia

各单据数据下载支持从指定的文件开始

sunyj 9 vuotta sitten
vanhempi
commit
adf390119f

+ 3 - 2
search-console-b2b/src/main/java/com/uas/search/console/b2b/controller/IndexController.java

@@ -49,7 +49,7 @@ public class IndexController {
 
 	@RequestMapping("/downloadData")
 	@ResponseBody
-	public String downloadData(String tableNames) {
+	public String downloadData(String tableNames, Integer startFileIndex) {
 		List<Table_name> tableNameList = null;
 		if (!StringUtils.isEmpty(tableNames)) {
 			String[] strs = tableNames.split(",");
@@ -58,7 +58,8 @@ public class IndexController {
 				tableNameList.add(Table_name.valueOf(str.toUpperCase()));
 			}
 		}
-		return "Data downloaded success in " + indexService.downloadDataFromDatabase(tableNameList) + " ms.";
+		return "Data downloaded success in " + indexService.downloadDataFromDatabase(tableNameList, startFileIndex)
+				+ " ms.";
 	}
 
 	@RequestMapping("/listen/start")

+ 9 - 7
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/IndexService.java

@@ -19,9 +19,9 @@ public interface IndexService {
 	 * 创建指定表的索引
 	 * 
 	 * @param tableNames
-	 *            指定的表,默认创建所有表的索引
+	 *            可为空,指定的表,默认创建所有表的索引
 	 * @param fromFiles
-	 *            索引数据是否来自文件,默认来自文件
+	 *            可为空,索引数据是否来自文件,默认来自文件
 	 * @return 创建的索引花费总时间 ms
 	 */
 	public Long createIndexes(List<Table_name> tableNames, Boolean fromFiles);
@@ -30,10 +30,12 @@ public interface IndexService {
 	 * 下载指定表的数据至本地文件中,以供建索引用
 	 * 
 	 * @param tableNames
-	 *            指定的表,默认下载所有表的数据
+	 *            可为空,指定的表,默认下载所有表的数据
+	 * @param startFileIndex
+	 *            可为空,从第startFileIndex个文件开始下载(只指定一个表时才起作用)
 	 * @return 花费总时间 ms
 	 */
-	public Long downloadDataFromDatabase(List<Table_name> tableNames);
+	public Long downloadDataFromDatabase(List<Table_name> tableNames, Integer startFileIndex);
 
 	/**
 	 * 将新对象添加在lucene索引中
@@ -88,11 +90,11 @@ public interface IndexService {
 	 * 获取关于实时更新情况的详细信息
 	 * 
 	 * @param page
-	 *            页码
+	 *            可为空,页码
 	 * @param size
-	 *            页大小
+	 *            可为空,页大小
 	 * @param searchContent
-	 *            对消息内容进行搜索
+	 *            可为空,对消息内容进行搜索
 	 * @return 等待更新的数据的信息
 	 */
 	public SPage<LuceneQueueMessage> getListenDetails(Integer page, Integer size, String searchContent);

+ 23 - 9
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/impl/IndexServiceImpl.java

@@ -66,9 +66,14 @@ public class IndexServiceImpl implements IndexService {
 
 	private Logger logger = LoggerFactory.getLogger(IndexServiceImpl.class);
 
+	/**
+	 * 从数据库获取数据时的分页大小
+	 */
 	private static final int PAGE_SIZE = 1000;
 
-	// 单个文件存储的最大数据数目
+	/**
+	 * 单个文件存储的最大数据数目,需是PAGE_SIZE的整数倍
+	 */
 	public static final int SINGLE_FILE_MAX_SIZE = 100000;
 
 	/**
@@ -257,7 +262,7 @@ public class IndexServiceImpl implements IndexService {
 	}
 
 	@Override
-	public Long downloadDataFromDatabase(List<Table_name> tableNames) {
+	public Long downloadDataFromDatabase(List<Table_name> tableNames, Integer startFileIndex) {
 		Long startTime = new Date().getTime();
 		// 参数为空,则下载所有需要建立索引的表的数据
 		if (CollectionUtils.isEmpty(tableNames)) {
@@ -266,7 +271,9 @@ public class IndexServiceImpl implements IndexService {
 		}
 		Long size = 0L;
 		for (Table_name tableName : tableNames) {
-			size += downloadDataFromDatabase(ClassAndTableNameUtils.toClass(tableName));
+			// 指定的表数目为1时才起作用
+			size += downloadDataFromDatabase(ClassAndTableNameUtils.toClass(tableName),
+					tableNames.size() == 1 ? startFileIndex : null);
 		}
 		Long endTime = new Date().getTime();
 		logger.info(size + "条,耗时 " + (endTime - startTime) + " ms\n");
@@ -279,7 +286,15 @@ public class IndexServiceImpl implements IndexService {
 	 * @param clazz
 	 * @return 下载的数据的数目
 	 */
-	private <T> Long downloadDataFromDatabase(Class<T> clazz) {
+	private <T> Long downloadDataFromDatabase(Class<T> clazz, Integer startFileIndex) {
+		int fileIndex = 1;
+		if (startFileIndex != null) {
+			if (startFileIndex < 1) {
+				throw new SearchException("startFileIndex需大于1");
+			} else {
+				fileIndex = startFileIndex;
+			}
+		}
 		Long startTime = new Date().getTime();
 		Table_name tableName = ClassAndTableNameUtils.toTableName(clazz);
 		logger.info("Download... " + tableName.value());
@@ -287,17 +302,16 @@ public class IndexServiceImpl implements IndexService {
 
 		// 分页获取数据
 		PageParams pageParams = new PageParams();
-		pageParams.setPage(1);
+		pageParams.setPage((fileIndex - 1) * SINGLE_FILE_MAX_SIZE / PAGE_SIZE + 1);
 		pageParams.setCount(PAGE_SIZE);
 		PageInfo pageInfo = new PageInfo(pageParams);
 		Page<T> pageResult = dao.findAll(pageInfo);
 
 		// 数据库中数据的总数目
-		long totalElements = pageResult.getTotalElements();
+		long totalElements = pageResult.getTotalElements() - (fileIndex - 1) * SINGLE_FILE_MAX_SIZE;
 		logger.info("发现数据:" + totalElements + "条");
 		// 已翻页的数据数目
 		Long size = 0L;
-		int fileIndex = 1;
 		PrintWriter printWriter = null;
 		int count = 0;
 		try {
@@ -308,8 +322,8 @@ public class IndexServiceImpl implements IndexService {
 			printWriter = new PrintWriter(SearchUtils.getDataPath(tableName) + "/" + fileIndex + ".txt");
 			while (totalElements > size) {
 				// 一个文件存放SINGLE_FILE_MAX_SIZE条数据,一旦超过,写入新的文件
-				if (count > SINGLE_FILE_MAX_SIZE) {
-					count = 1;
+				if (count == SINGLE_FILE_MAX_SIZE) {
+					count = 0;
 					printWriter.flush();
 					printWriter.close();
 					fileIndex++;

+ 1 - 1
search-console-b2b/src/main/webapp/WEB-INF/views/console.html

@@ -34,7 +34,7 @@
 				<li><a target="_blank">index/listen/details?page=1&size=10</a></li>
 				<li><a target="_blank">listenDetails</a></li>
 				<li><a target="_blank">index/downloadData</a></li>
-				<li><a target="_blank">index/downloadData?tableNames=PURC$ORDERS</a></li>
+				<li><a target="_blank">index/downloadData?tableNames=PURC$ORDERS&startFileIndex=2</a></li>
 				<li><a target="_blank">index/maintain?tableName=PURC$ORDERS&method=update&ids=1,2,3</a></li>
 				<li><a target="_blank">index/dequeue?messageId=42A34BADEF8A2EBDE050007F01001E6A</a></li>
 			</ol>