Browse Source

定时更新采购询价单明细虚拟列索引

sunyj 9 years ago
parent
commit
1ead3b2dc0

+ 14 - 5
search-console-b2b/src/main/java/com/uas/search/console/b2b/Application.java

@@ -7,7 +7,9 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 
 import com.uas.search.console.b2b.core.util.ContextUtils;
-import com.uas.search.console.b2b.service.PurchaseInquiryMouldSimpleInfoService;
+import com.uas.search.console.b2b.model.PurchaseInquiryItemSimpleInfo;
+import com.uas.search.console.b2b.model.PurchaseInquiryMouldSimpleInfo;
+import com.uas.search.console.b2b.service.UpdateVirtualColumnService;
 
 @EnableTransactionManagement
 @EnableWebMvc
@@ -27,10 +29,17 @@ public class Application {
 	public static void startUpdateOverdueDailyTask() {
 		SystemProperties systemProperties = ContextUtils.getBean(SystemProperties.class);
 		if (systemProperties.isDailyTaskAutoStart()) {
-			PurchaseInquiryMouldSimpleInfoService purchaseInquiryMouldService = ContextUtils
-					.getBean(PurchaseInquiryMouldSimpleInfoService.class);
-			purchaseInquiryMouldService.startUpdateOverdueDailyTask(systemProperties.getDailyTaskHour(),
-					systemProperties.getDailyTaskMinute(), systemProperties.getDailyTaskSecond());
+			UpdateVirtualColumnService updateVirtualColumnService = ContextUtils
+					.getBean(UpdateVirtualColumnService.class);
+			// 模具询价单
+			updateVirtualColumnService.createUpdateOverdueDailyTask(PurchaseInquiryMouldSimpleInfo.class,
+					systemProperties.getDailyTaskHour(), systemProperties.getDailyTaskMinute(),
+					systemProperties.getDailyTaskSecond());
+			// 采购询价单明细
+			updateVirtualColumnService.createUpdateOverdueDailyTask(PurchaseInquiryItemSimpleInfo.class,
+					systemProperties.getDailyTaskHour(), systemProperties.getDailyTaskMinute(),
+					systemProperties.getDailyTaskSecond());
+			updateVirtualColumnService.start();
 		}
 	}
 }

+ 13 - 5
search-console-b2b/src/main/java/com/uas/search/console/b2b/controller/ScheduleController.java

@@ -8,25 +8,33 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import com.uas.search.b2b.service.SearchService.Table_name;
 import com.uas.search.console.b2b.schedule.model.DailyTaskInformation;
 import com.uas.search.console.b2b.schedule.service.DailyTaskService;
-import com.uas.search.console.b2b.service.PurchaseInquiryMouldSimpleInfoService;
+import com.uas.search.console.b2b.service.UpdateVirtualColumnService;
+import com.uas.search.console.b2b.util.ClassAndTableNameUtils;
 
 @Controller
 @RequestMapping("/schedule")
 public class ScheduleController {
 
 	@Autowired
-	private PurchaseInquiryMouldSimpleInfoService purchaseInquiryMouldService;
+	private UpdateVirtualColumnService updateVirtualColumnService;
 
 	@Autowired
 	private DailyTaskService dailyTaskService;
 
 	@RequestMapping("/updateOverdue")
 	@ResponseBody
-	public String updateOverdue(@RequestParam(required = true) Integer hour,
-			@RequestParam(required = true) Integer minute, @RequestParam(required = true) Integer second) {
-		return "已开启:" + purchaseInquiryMouldService.startUpdateOverdueDailyTask(hour, minute, second);
+	public String updateOverdue(@RequestParam(required = true) String tableName,
+			@RequestParam(required = true) Integer hour, @RequestParam(required = true) Integer minute,
+			@RequestParam(required = true) Integer second) {
+		Table_name table = Table_name.valueOf(tableName.toUpperCase());
+		if (table != Table_name.PURC$INQUIRYMOULD && table != Table_name.PURC$INQUIRYITEMS) {
+			return "不支持更新虚拟列overdue索引:" + tableName;
+		}
+		return "已开启:" + updateVirtualColumnService.createUpdateOverdueDailyTask(ClassAndTableNameUtils.toClass(table),
+				hour, minute, second);
 	}
 
 	@RequestMapping("/tasks")

+ 7 - 9
search-console-b2b/src/main/java/com/uas/search/console/b2b/schedule/service/impl/DailyTaskServiceImpl.java

@@ -49,12 +49,10 @@ public class DailyTaskServiceImpl implements DailyTaskService {
 				|| dailyTaskInformation.getCommand() == null) {
 			throw new NullPointerException();
 		}
-		if(containsDailyTask(dailyTaskInformation)){
-			throw new SearchException("任务已存在:"+dailyTaskInformation);
+		if (containsDailyTask(dailyTaskInformation)) {
+			throw new SearchException("任务已存在:" + dailyTaskInformation);
 		}
 		dailyTaskInformations.add(dailyTaskInformation);
-		stop();
-		start();
 	}
 
 	/**
@@ -88,17 +86,17 @@ public class DailyTaskServiceImpl implements DailyTaskService {
 	 *            执行时间中的秒
 	 */
 	private void newDailyTask(Runnable command, int hour, int minute, int second) {
-		Calendar now = Calendar.getInstance();
-		now.setTime(new Date());
-		Calendar initialDelayCalendar = (Calendar) now.clone();
+		Calendar nowCalendar = Calendar.getInstance();
+		nowCalendar.setTime(new Date());
+		Calendar initialDelayCalendar = (Calendar) nowCalendar.clone();
 		initialDelayCalendar.set(Calendar.HOUR_OF_DAY, hour);
 		initialDelayCalendar.set(Calendar.MINUTE, minute);
 		initialDelayCalendar.set(Calendar.SECOND, second);
-		if (initialDelayCalendar.before(now)) {
+		if (initialDelayCalendar.before(nowCalendar)) {
 			initialDelayCalendar.add(Calendar.DAY_OF_MONTH, 1);
 		}
 		scheduledExecutorService.scheduleAtFixedRate(command,
-				initialDelayCalendar.getTimeInMillis() - now.getTimeInMillis(), MILLISECONDS_OF_ONE_DAY,
+				initialDelayCalendar.getTimeInMillis() - nowCalendar.getTimeInMillis(), MILLISECONDS_OF_ONE_DAY,
 				TimeUnit.MILLISECONDS);
 
 	}

+ 0 - 28
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/PurchaseInquiryMouldSimpleInfoService.java

@@ -1,28 +0,0 @@
-package com.uas.search.console.b2b.service;
-
-import com.uas.search.console.b2b.schedule.model.DailyTaskInformation;
-
-/**
- * @author sunyj
- * @since 2016年12月12日 下午4:25:54
- */
-public interface PurchaseInquiryMouldSimpleInfoService {
-
-	/**
-	 * 更新虚拟列的索引
-	 */
-	public void updateOverdue();
-
-	/**
-	 * 开启更新虚拟列的索引的定时任务
-	 * 
-	 * @param hour
-	 *            任务时间:小时
-	 * @param minute
-	 *            任务时间:分钟
-	 * @param second
-	 *            任务时间:秒
-	 * @return
-	 */
-	public DailyTaskInformation startUpdateOverdueDailyTask(Integer hour, Integer minute, Integer second);
-}

+ 35 - 0
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/UpdateVirtualColumnService.java

@@ -0,0 +1,35 @@
+package com.uas.search.console.b2b.service;
+
+import com.uas.search.console.b2b.schedule.model.DailyTaskInformation;
+
+/**
+ * @author sunyj
+ * @since 2016年12月16日 上午11:42:25
+ */
+public interface UpdateVirtualColumnService {
+
+	/**
+	 * 创建每天定时任务:更新指定实体类的overdue虚拟列的索引
+	 * 
+	 * @param <T>
+	 * 
+	 * @param clazz
+	 *            实体类
+	 * @param hour
+	 *            任务时间:小时
+	 * @param minute
+	 *            任务时间:分钟
+	 * @param second
+	 *            任务时间:秒
+	 * @return
+	 */
+	public <T> DailyTaskInformation createUpdateOverdueDailyTask(Class<T> clazz, Integer hour, Integer minute,
+			Integer second);
+
+	/**
+	 * 开启定时任务
+	 * 
+	 * @return 返回的结果
+	 */
+	public String start();
+}

+ 0 - 1
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/impl/IndexServiceImpl.java

@@ -108,7 +108,6 @@ public class IndexServiceImpl implements IndexService {
 			}
 		} finally {
 			creatingIndex = false;
-			aqListener.start(null);
 		}
 		Long endTime = new Date().getTime();
 		logger.info(String.format("索引创建成功, 共用时间%.2fs\n", (endTime - startTime) / 1000.0));

+ 40 - 18
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/impl/PurchaseInquiryMouldSimpleInfoServiceImpl.java → search-console-b2b/src/main/java/com/uas/search/console/b2b/service/impl/UpdateVirtualColumnServiceImpl.java

@@ -3,6 +3,8 @@ package com.uas.search.console.b2b.service.impl;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.PrintWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
@@ -16,13 +18,13 @@ import com.alibaba.fastjson.JSONObject;
 import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.service.SearchService.Table_name;
 import com.uas.search.console.b2b.core.util.ContextUtils;
-import com.uas.search.console.b2b.model.PurchaseInquiryMouldSimpleInfo;
+import com.uas.search.console.b2b.jms.AQListener;
 import com.uas.search.console.b2b.schedule.model.DailyTaskInformation;
 import com.uas.search.console.b2b.schedule.model.DailyTaskLog;
 import com.uas.search.console.b2b.schedule.service.DailyTaskService;
 import com.uas.search.console.b2b.service.IndexService;
 import com.uas.search.console.b2b.service.InnerSearchService;
-import com.uas.search.console.b2b.service.PurchaseInquiryMouldSimpleInfoService;
+import com.uas.search.console.b2b.service.UpdateVirtualColumnService;
 import com.uas.search.console.b2b.util.ClassAndTableNameUtils;
 import com.uas.search.console.b2b.util.SearchUtils;
 
@@ -31,7 +33,7 @@ import com.uas.search.console.b2b.util.SearchUtils;
  * @since 2016年12月12日 下午5:40:42
  */
 @Service
-public class PurchaseInquiryMouldSimpleInfoServiceImpl implements PurchaseInquiryMouldSimpleInfoService {
+public class UpdateVirtualColumnServiceImpl implements UpdateVirtualColumnService {
 
 	/**
 	 * 默认的页码
@@ -49,21 +51,30 @@ public class PurchaseInquiryMouldSimpleInfoServiceImpl implements PurchaseInquir
 	@Autowired
 	private IndexService indexService;
 
+	@Autowired
+	private AQListener aqListener;
+
 	private InnerSearchService innerSearchService = ContextUtils.getApplicationContext().getBean("searchServiceImpl",
 			InnerSearchService.class);
 
-	private Logger logger = LoggerFactory.getLogger(PurchaseInquiryMouldSimpleInfoServiceImpl.class);
+	private Logger logger = LoggerFactory.getLogger(UpdateVirtualColumnServiceImpl.class);
 
-	@Override
-	public void updateOverdue() {
+	/**
+	 * 更新指定实体类的overdue虚拟列的索引
+	 * 
+	 * @param <T>
+	 * 
+	 * @param clazz
+	 *            实体类
+	 */
+	private <T> void updateOverdue(Class<T> clazz) {
 		// 不能边更新索引边分页获取索引中的数据,因为索引更新后,分页顺序可能也会变化,
 		// 所以要先把数据保存到本地,等待全部获取之后重建索引
 		Long startTime = new Date().getTime();
-		Table_name tableName = ClassAndTableNameUtils.toTableName(PurchaseInquiryMouldSimpleInfo.class);
+		Table_name tableName = ClassAndTableNameUtils.toTableName(clazz);
 
 		int page = PAGE_INDEX;
-		SPage<PurchaseInquiryMouldSimpleInfo> sPage = innerSearchService
-				.getAllObjects(PurchaseInquiryMouldSimpleInfo.class, page, PAGE_SIZE);
+		SPage<T> sPage = innerSearchService.getAllObjects(clazz, page, PAGE_SIZE);
 
 		// 数据库中数据的总数目
 		long totalElements = sPage.getTotalElement();
@@ -86,10 +97,12 @@ public class PurchaseInquiryMouldSimpleInfoServiceImpl implements PurchaseInquir
 					fileIndex++;
 					printWriter = new PrintWriter(SearchUtils.getDataPath(tableName) + "/" + fileIndex + ".txt");
 				}
-				List<PurchaseInquiryMouldSimpleInfo> content = sPage.getContent();
-				for (PurchaseInquiryMouldSimpleInfo purchaseInquiryMould : content) {
-					purchaseInquiryMould.setOverdue(purchaseInquiryMould.getOverdue());
-					printWriter.println(JSONObject.toJSONString(purchaseInquiryMould));
+				List<T> content = sPage.getContent();
+				for (T element : content) {
+					Method getOverdueMethod = clazz.getMethod("getOverdue");
+					Method setOverdueMethod = clazz.getMethod("setOverdue", Short.class);
+					setOverdueMethod.invoke(element, getOverdueMethod.invoke(element));
+					printWriter.println(JSONObject.toJSONString(element));
 					count++;
 				}
 				logger.info(String.format(tableName.value() + "...................%.2f%%",
@@ -98,25 +111,29 @@ public class PurchaseInquiryMouldSimpleInfoServiceImpl implements PurchaseInquir
 				if (++page > sPage.getTotalPage()) {
 					break;
 				}
-				sPage = innerSearchService.getAllObjects(PurchaseInquiryMouldSimpleInfo.class, page, PAGE_SIZE);
+				sPage = innerSearchService.getAllObjects(clazz, page, PAGE_SIZE);
 			}
 			printWriter.flush();
 			printWriter.close();
-		} catch (FileNotFoundException e) {
+		} catch (FileNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException
+				| IllegalArgumentException | InvocationTargetException e) {
 			e.printStackTrace();
 		}
 		Long endTime = new Date().getTime();
 		logger.info(String.format("修改数据%s条,耗时%.2fs\n ", totalElements, (endTime - startTime) / 1000.0));
 		indexService.createIndexs(Arrays.asList(tableName), true);
+		aqListener.start(null);
 	}
 
 	@Override
-	public DailyTaskInformation startUpdateOverdueDailyTask(Integer hour, Integer minute, Integer second) {
+	public <T> DailyTaskInformation createUpdateOverdueDailyTask(final Class<T> clazz, Integer hour, Integer minute,
+			Integer second) {
 		if (hour == null || minute == null || second == null) {
 			throw new NullPointerException();
 		}
 		final DailyTaskInformation dailyTaskInformation = new DailyTaskInformation();
-		dailyTaskInformation.setTitle("更新虚拟列索引:模具询价单");
+		dailyTaskInformation
+				.setTitle("更新虚拟列索引overdue:" + ClassAndTableNameUtils.toTableName(clazz).value().toLowerCase());
 		dailyTaskInformation.setHour(hour);
 		dailyTaskInformation.setMinute(minute);
 		dailyTaskInformation.setSecond(second);
@@ -124,7 +141,7 @@ public class PurchaseInquiryMouldSimpleInfoServiceImpl implements PurchaseInquir
 			@Override
 			public void run() {
 				logger.info("Daily Task run...");
-				updateOverdue();
+				updateOverdue(clazz);
 				DailyTaskLog dailyTaskLog = new DailyTaskLog(dailyTaskInformation, new Date(), "success");
 				dailyTaskService.saveLog(dailyTaskLog);
 			}
@@ -133,4 +150,9 @@ public class PurchaseInquiryMouldSimpleInfoServiceImpl implements PurchaseInquir
 		return dailyTaskInformation;
 	}
 
+	@Override
+	public String start() {
+		return dailyTaskService.start();
+	}
+
 }

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

@@ -46,7 +46,7 @@
 
 			<strong><li class="title">定时任务</li></strong>
 			<ol>
-				<li><a target="_blank">schedule/updateOverdue?hour=20&minute=16&second=0</a></li>
+				<li><a target="_blank">schedule/updateOverdue?tableName=purc$inquirymould&hour=20&minute=16&second=0</a></li>
 				<li><a target="_blank">schedule/tasks</a></li>
 				<li><a target="_blank">schedule/start</a></li>
 				<li><a target="_blank">schedule/stop</a></li>