sunyj 8 лет назад
Родитель
Сommit
3904eb9829

+ 44 - 9
kanban-common/src/main/java/com/uas/kanban/base/BaseDao.java

@@ -72,17 +72,50 @@ public class BaseDao<T extends BaseEntity> {
 	 */
 	public Query<T> createQuery() {
 		Query<T> query = datastore.createQuery(entityClass);
-		globalFilter(query);
+		filter(query, globalFilter());
 		return query;
 	}
 
 	/**
 	 * 全局过滤,如有需要,可重写该方法
 	 * 
-	 * @param query
-	 */
-	protected void globalFilter(Query<T> query) {
-		// Default do nothing
+	 * @return 过滤条件,key-value的形式
+	 *         <p>
+	 *         <b>Note</b>: Property is in the form of "name op" ("age >").
+	 *         <p/>
+	 *         <p>
+	 *         Valid operators are ["=", "==","!=", "<>", ">", "<", ">=", "<=",
+	 *         "in", "nin", "all", "size", "exists"]
+	 *         </p>
+	 *         <p/>
+	 *         <p>
+	 *         Examples:
+	 *         </p>
+	 *         <p/>
+	 *         <ul>
+	 *         <li>{@code filter("yearsOfOperation >", 5)}</li>
+	 *         <li>{@code filter("rooms.maxBeds >=", 2)}</li>
+	 *         <li>{@code filter("rooms.bathrooms exists", 1)}</li>
+	 *         <li>{@code filter("stars in", new Long[]{3, 4}) //3 and 4 stars
+	 *         (midrange?)}</li>
+	 *         <li>{@code filter("quantity mod", new Long[]{4, 0}) // customers
+	 *         ordered in packs of 4)}</li>
+	 *         <li>{@code filter("age >=", age)}</li>
+	 *         <li>{@code filter("age =", age)}</li>
+	 *         <li>{@code filter("age", age)} (if no operator, = is assumed)
+	 *         </li>
+	 *         <li>{@code filter("age !=", age)}</li>
+	 *         <li>{@code filter("age in", ageList)}</li>
+	 *         <li>{@code filter("customers.loyaltyYears in", yearsList)}</li>
+	 *         </ul>
+	 *         <p/>
+	 *         <p>
+	 *         You can filter on id properties <strong>if</strong> this query is
+	 *         restricted to a Class<T>.
+	 */
+	protected Map<String, Object> globalFilter() {
+		// Default no filter
+		return null;
 	}
 
 	/**
@@ -704,10 +737,12 @@ public class BaseDao<T extends BaseEntity> {
 	 *            is restricted to a Class<T>.
 	 * @return the query used to match the documents to update
 	 */
-	protected Query<T> filter(@NotEmpty("query") Query<T> query, @NotEmpty("filters") Map<String, Object> filters) {
-		Set<Entry<String, Object>> entrySet = filters.entrySet();
-		for (Entry<String, Object> entry : entrySet) {
-			query.filter(entry.getKey(), entry.getValue());
+	protected Query<T> filter(@NotEmpty("query") Query<T> query, Map<String, Object> filters) {
+		if (!CollectionUtils.isEmpty(filters)) {
+			Set<Entry<String, Object>> entrySet = filters.entrySet();
+			for (Entry<String, Object> entry : entrySet) {
+				query.filter(entry.getKey(), entry.getValue());
+			}
 		}
 		return query;
 	}

+ 7 - 3
kanban-console/src/main/java/com/uas/kanban/dao/KanbanDao.java

@@ -1,6 +1,8 @@
 package com.uas.kanban.dao;
 
-import org.mongodb.morphia.query.Query;
+import java.util.HashMap;
+import java.util.Map;
+
 import org.springframework.stereotype.Component;
 
 import com.uas.kanban.base.BaseDao;
@@ -18,10 +20,12 @@ import com.uas.kanban.support.SystemSession;
 public class KanbanDao extends BaseDao<Kanban> {
 
 	@Override
-	protected void globalFilter(Query<Kanban> query) {
+	protected Map<String, Object> globalFilter() {
 		ResourcePoint resourcePoint = SystemSession.checkResourcePoint();
+		Map<String, Object> filters = new HashMap<>();
 		// 根据资源点过滤
-		query.field("resourcePointCode").equal(resourcePoint.getCode());
+		filters.put("resourcePointCode", resourcePoint.getCode());
+		return filters;
 	}
 
 }