Explorar el Código

可指定实时更新虚拟列的名称、类型

sunyj hace 9 años
padre
commit
6d48c5c6ed

+ 8 - 2
search-console-b2b/src/main/java/com/uas/search/console/b2b/Application.java

@@ -1,5 +1,8 @@
 package com.uas.search.console.b2b;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.annotation.ImportResource;
@@ -34,12 +37,15 @@ public class Application {
 		if (systemProperties.isTaskAutoStart()) {
 			UpdateVirtualColumnService updateVirtualColumnService = ContextUtils
 					.getBean(UpdateVirtualColumnService.class);
+			// 需更新的虚拟列
+			Map<String, Class<?>> fields = new HashMap<>();
+			fields.put("overdue", Short.class);
 			// 定时更新模具询价单虚拟列索引
-			updateVirtualColumnService.newUpdateOverdueDailyTask(PurchaseInquiryMouldSimpleInfo.class,
+			updateVirtualColumnService.newDailyTask(PurchaseInquiryMouldSimpleInfo.class, fields,
 					systemProperties.getDailyTaskHour(), systemProperties.getDailyTaskMinute(),
 					systemProperties.getDailyTaskSecond());
 			// 定时更新采购询价单明细虚拟列索引
-			updateVirtualColumnService.newUpdateOverdueDailyTask(PurchaseInquiryItemSimpleInfo.class,
+			updateVirtualColumnService.newDailyTask(PurchaseInquiryItemSimpleInfo.class, fields,
 					systemProperties.getDailyTaskHour(), systemProperties.getDailyTaskMinute(),
 					systemProperties.getDailyTaskSecond());
 

+ 17 - 6
search-console-b2b/src/main/java/com/uas/search/console/b2b/controller/ScheduleController.java

@@ -1,6 +1,10 @@
 package com.uas.search.console.b2b.controller;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -8,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
+import com.alibaba.fastjson.JSONObject;
 import com.uas.search.b2b.service.SearchService.Table_name;
 import com.uas.search.console.b2b.schedule.model.TaskInformation;
 import com.uas.search.console.b2b.schedule.service.TaskService;
@@ -24,17 +29,23 @@ public class ScheduleController {
 	@Autowired
 	private TaskService taskService;
 
-	@RequestMapping("/updateOverdue")
+	@RequestMapping("/updateVirtualColumns")
 	@ResponseBody
-	public String updateOverdue(@RequestParam(required = true) String tableName,
-			@RequestParam(required = true) Integer hour, @RequestParam(required = true) Integer minute,
-			@RequestParam(required = true) Integer second) {
+	public String updateVirtualColumns(@RequestParam(required = true) String tableName,
+			@RequestParam(required = true) String fields, @RequestParam(required = true) Integer hour,
+			@RequestParam(required = true) Integer minute, @RequestParam(required = true) Integer second) throws ClassNotFoundException {
 		Table_name table = Table_name.valueOf(tableName.toUpperCase());
 		if (table != Table_name.PURC$INQUIRYMOULD && table != Table_name.PURC$INQUIRYITEMS) {
 			return "不支持更新虚拟列overdue索引:" + tableName;
 		}
-		String message = "已开启:" + updateVirtualColumnService
-				.newUpdateOverdueDailyTask(ClassAndTableNameUtils.toClass(table), hour, minute, second);
+		Map<String, Class<?>> map = new HashMap<>();
+		JSONObject jsonObject = JSONObject.parseObject(fields);
+		Set<Entry<String, Object>> entrySet = jsonObject.entrySet();
+		for (Entry<String, Object> entry : entrySet) {
+			map.put(entry.getKey(), Class.forName((String) entry.getValue()));
+		}
+		String message = "已开启:" + updateVirtualColumnService.newDailyTask(ClassAndTableNameUtils.toClass(table), map,
+				hour, minute, second);
 		restart();
 		return message;
 	}

+ 7 - 3
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/UpdateVirtualColumnService.java

@@ -1,5 +1,7 @@
 package com.uas.search.console.b2b.service;
 
+import java.util.Map;
+
 import com.uas.search.console.b2b.schedule.model.DailyTaskInformation;
 
 /**
@@ -11,12 +13,14 @@ import com.uas.search.console.b2b.schedule.model.DailyTaskInformation;
 public interface UpdateVirtualColumnService {
 
 	/**
-	 * 创建每天定时任务:更新指定实体类的overdue虚拟列的索引
+	 * 创建每天定时任务:更新指定实体类的虚拟列的索引
 	 * 
 	 * @param <T>
 	 * 
 	 * @param clazz
 	 *            实体类
+	 * @param fields
+	 *            需更新的虚拟列,键值对(虚拟列名称:类型,实体中必须存在对应的get/set方法)
 	 * @param hour
 	 *            任务时间:小时
 	 * @param minute
@@ -25,7 +29,7 @@ public interface UpdateVirtualColumnService {
 	 *            任务时间:秒
 	 * @return
 	 */
-	public <T> DailyTaskInformation newUpdateOverdueDailyTask(Class<T> clazz, Integer hour, Integer minute,
-			Integer second);
+	public <T> DailyTaskInformation newDailyTask(Class<T> clazz, Map<String, Class<?>> fields, Integer hour,
+			Integer minute, Integer second);
 
 }

+ 25 - 9
search-console-b2b/src/main/java/com/uas/search/console/b2b/service/impl/UpdateVirtualColumnServiceImpl.java

@@ -8,11 +8,15 @@ import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.search.b2b.model.SPage;
@@ -60,14 +64,16 @@ public class UpdateVirtualColumnServiceImpl implements UpdateVirtualColumnServic
 	private Logger logger = LoggerFactory.getLogger(UpdateVirtualColumnServiceImpl.class);
 
 	/**
-	 * 更新指定实体类的overdue虚拟列的索引
+	 * 更新指定实体类的虚拟列的索引
 	 * 
 	 * @param <T>
 	 * 
 	 * @param clazz
 	 *            实体类
+	 * @param fields
+	 *            需更新的虚拟列,键值对(虚拟列名称:类型,实体中必须存在对应的get/set方法)
 	 */
-	private <T> void updateOverdue(Class<T> clazz) {
+	private <T> void updateVirtualColumn(Class<T> clazz, Map<String, Class<?>> fields) {
 		// 不能边更新索引边分页获取索引中的数据,因为索引更新后,分页顺序可能也会变化,
 		// 所以要先把数据保存到本地,等待全部获取之后重建索引
 		Long startTime = new Date().getTime();
@@ -99,9 +105,16 @@ public class UpdateVirtualColumnServiceImpl implements UpdateVirtualColumnServic
 				}
 				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));
+					Set<Entry<String, Class<?>>> entrySet = fields.entrySet();
+					for (Entry<String, Class<?>> entry : entrySet) {
+						String key = entry.getKey();
+						Class<?> type = entry.getValue();
+						// 首字母大写
+						key = key.substring(0, 1).toUpperCase() + key.substring(1);
+						Method getMethod = clazz.getMethod("get" + key);
+						Method setMethod = clazz.getMethod("set" + key, type);
+						setMethod.invoke(element, getMethod.invoke(element));
+					}
 					printWriter.println(JSONObject.toJSONString(element));
 					count++;
 				}
@@ -128,17 +141,20 @@ public class UpdateVirtualColumnServiceImpl implements UpdateVirtualColumnServic
 	}
 
 	@Override
-	public <T> DailyTaskInformation newUpdateOverdueDailyTask(final Class<T> clazz, Integer hour, Integer minute,
-			Integer second) {
+	public <T> DailyTaskInformation newDailyTask(final Class<T> clazz, final Map<String, Class<?>> fields, Integer hour,
+			Integer minute, Integer second) {
 		if (hour == null || minute == null || second == null) {
 			throw new NullPointerException();
 		}
+		if (CollectionUtils.isEmpty(fields)) {
+			throw new IllegalArgumentException("fields");
+		}
 
-		String title = "更新虚拟列索引overdue:" + ClassAndTableNameUtils.toTableName(clazz).value().toLowerCase();
+		String title = "更新虚拟列索引" + fields + ":" + ClassAndTableNameUtils.toTableName(clazz).value().toLowerCase();
 		Executable command = new Executable() {
 			@Override
 			public String execute() {
-				updateOverdue(clazz);
+				updateVirtualColumn(clazz, fields);
 				return "success";
 			}
 		};

+ 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?tableName=purc$inquirymould&hour=20&minute=16&second=0</a></li>
+				<li><a target="_blank">schedule/updateVirtualColumns?tableName=purc$inquirymould&fields={"overdue":"java.lang.Short"}&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>