Просмотр исходного кода

Merge branch 'release' into 'develop'

Release

See merge request o2oa/o2oa!1662
o2null 5 лет назад
Родитель
Сommit
85b7becdba

+ 1 - 0
o2server/configSample/centerServer.json

@@ -12,6 +12,7 @@
   "statEnable": true,
   "statExclusions": "*.js,*.gif,*.jpg,*.png,*.css,*.ico",
   "maxFormContent": 20.0,
+  "exposeJest": true,
   "###enable": "是否启用###",
   "###order": "center节点顺序,顺序排列0,1,2...###",
   "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###",

+ 3 - 1
o2server/configSample/dumpRestoreData.json

@@ -6,6 +6,7 @@
   "parallel": true,
   "redistribute": true,
   "exceptionInvalidStorage": true,
+  "itemCategory": "",
   "###enable": "是否启用.###",
   "###includes": "导出导入包含对象,可以使用通配符*.###",
   "###excludes": "导出导入排除对象,可以使用通配符*.###",
@@ -13,5 +14,6 @@
   "###parallel": "使用并行导出,默认true###",
   "###redistribute": "是否进行重新分布.###",
   "###exceptionInvalidStorage": "无法获取storage是否升起错误.###",
-  "###restoreOverride": "数据导入方式,clean:清空重新导入,skipExisted:如果有相同id的数据跳过.默认方式为clean.###"
+  "###restoreOverride": "数据导入方式,clean:清空重新导入,skipExisted:如果有相同id的数据跳过.默认方式为clean.###",
+  "###itemCategory": "对于com.x.query.core.entity.Item的itemCategory进行单独过滤,可选值pp, cms, bbs, pp_dict.###"
 }

+ 4 - 1
o2server/configSample/node_127.0.0.1.json

@@ -15,6 +15,7 @@
     "statEnable": true,
     "statExclusions": "*.js,*.gif,*.jpg,*.png,*.css,*.ico",
     "maxFormContent": 20.0,
+    "exposeJest": true,
     "###enable": "是否启用###",
     "###order": "center节点顺序,顺序排列0,1,2...###",
     "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###",
@@ -46,6 +47,7 @@
     "statEnable": true,
     "statExclusions": "*.js,*.gif,*.jpg,*.png,*.css,*.ico",
     "maxFormContent": 20.0,
+    "exposeJest": true,
     "###enable": "是否启用###",
     "###port": "http/https端口,负责向前端提供数据访问接口.默认为20020端口.###",
     "###sslEnable": "是否启用ssl传输加密,如果启用将使用config/keystore文件作为密钥文件.使用config/token.json文件中的sslKeyStorePassword字段为密钥密码,sslKeyManagerPassword为管理密码.###",
@@ -59,7 +61,8 @@
     "###scheduleWeights": "设置应用的定时任务权重,在集群环境中,一个应用可以部署多个实例提供负载均衡.通过合计占比来分配应用占比.###",
     "###statEnable": "启用统计,默认启用统计.###",
     "###statExclusions": "统计忽略路径,默认忽略*.js,*.gif,*.jpg,*.png,*.css,*.ico###",
-    "###maxFormContent": "最大提交数据限制(M),限制有所上传的内容大小,包括附件.###"
+    "###maxFormContent": "最大提交数据限制(M),限制有所上传的内容大小,包括附件.###",
+    "###exposeJest": "暴露jest接口.###"
   },
   "web": {
     "enable": true,

+ 9 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DumpRestoreData.java

@@ -26,6 +26,7 @@ public class DumpRestoreData extends ConfigObject {
 	public static final Boolean DEFAULT_PARALLEL = true;
 	public static final Boolean DEFAULT_REDISTRIBUTE = true;
 	public static final Boolean DEFAULT_EXCEPTIONINVALIDSTORAGE = true;
+	public static final String DEFAULT_ITEMCATEGORY = "";
 
 	public DumpRestoreData() {
 		this.enable = false;
@@ -35,6 +36,7 @@ public class DumpRestoreData extends ConfigObject {
 		this.parallel = DEFAULT_PARALLEL;
 		this.redistribute = DEFAULT_REDISTRIBUTE;
 		this.exceptionInvalidStorage = DEFAULT_EXCEPTIONINVALIDSTORAGE;
+		this.itemCategory = DEFAULT_ITEMCATEGORY;
 	}
 
 	@FieldDescribe("是否启用.")
@@ -61,6 +63,13 @@ public class DumpRestoreData extends ConfigObject {
 	@FieldDescribe("数据导入方式,clean:清空重新导入,skipExisted:如果有相同id的数据跳过.默认方式为clean.")
 	private String restoreOverride;
 
+	@FieldDescribe("对于com.x.query.core.entity.Item的itemCategory进行单独过滤,可选值pp, cms, bbs, pp_dict.")
+	private String itemCategory;
+
+	public String getItemCategory() {
+		return this.itemCategory;
+	}
+
 	public Boolean getRedistribute() {
 		return BooleanUtils.isNotFalse(redistribute);
 	}

+ 8 - 1
o2server/x_console/src/main/java/com/x/server/console/action/DumpData.java

@@ -32,6 +32,8 @@ import com.x.base.core.entity.JpaObject;
 import com.x.base.core.entity.StorageObject;
 import com.x.base.core.entity.annotation.ContainerEntity;
 import com.x.base.core.entity.annotation.ContainerEntity.Reference;
+import com.x.base.core.entity.dataitem.DataItem;
+import com.x.base.core.entity.dataitem.ItemCategory;
 import com.x.base.core.project.config.Config;
 import com.x.base.core.project.config.DumpRestoreData;
 import com.x.base.core.project.config.StorageMapping;
@@ -42,6 +44,7 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ClassLoaderTools;
 import com.x.base.core.project.tools.DateTools;
 import com.x.base.core.project.tools.ListTools;
+import com.x.query.core.entity.Item;
 
 public class DumpData {
 
@@ -160,7 +163,7 @@ public class DumpData {
 			return catalog.values().stream().mapToInt(Integer::intValue).sum();
 		}
 
-		private <T> List<T> list(EntityManager em, Class<T> cls, String id, Integer size) {
+		private <T> List<T> list(EntityManager em, Class<T> cls, String id, Integer size) throws Exception {
 			CriteriaBuilder cb = em.getCriteriaBuilder();
 			CriteriaQuery<T> cq = cb.createQuery(cls);
 			Root<T> root = cq.from(cls);
@@ -168,6 +171,10 @@ public class DumpData {
 			if (StringUtils.isNotEmpty(id)) {
 				p = cb.greaterThan(root.get(JpaObject.id_FIELDNAME), id);
 			}
+			if ((Item.class == cls) && (StringUtils.isNotBlank(Config.dumpRestoreData().getItemCategory()))) {
+				p = cb.and(p, cb.equal(root.get(DataItem.itemCategory_FIELDNAME),
+						ItemCategory.valueOf(Config.dumpRestoreData().getItemCategory())));
+			}
 			cq.select(root).where(p).orderBy(cb.asc(root.get(JpaObject.id_FIELDNAME)));
 			return em.createQuery(cq).setMaxResults(size).getResultList();
 		}

+ 11 - 2
o2server/x_console/src/main/java/com/x/server/console/action/RestoreData.java

@@ -19,6 +19,7 @@ import javax.persistence.EntityManagerFactory;
 import javax.persistence.FlushModeType;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
 import org.apache.commons.io.FilenameUtils;
@@ -33,6 +34,8 @@ import com.x.base.core.container.factory.PersistenceXmlHelper;
 import com.x.base.core.entity.JpaObject;
 import com.x.base.core.entity.StorageObject;
 import com.x.base.core.entity.annotation.ContainerEntity;
+import com.x.base.core.entity.dataitem.DataItem;
+import com.x.base.core.entity.dataitem.ItemCategory;
 import com.x.base.core.project.config.Config;
 import com.x.base.core.project.config.DumpRestoreData;
 import com.x.base.core.project.config.StorageMapping;
@@ -43,7 +46,7 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ClassLoaderTools;
 import com.x.base.core.project.tools.DateTools;
 import com.x.base.core.project.tools.ListTools;
-import com.x.base.core.project.tools.StringTools;
+import com.x.query.core.entity.Item;
 
 import net.sf.ehcache.hibernate.management.impl.BeanUtils;
 
@@ -259,7 +262,13 @@ public class RestoreData {
 				CriteriaBuilder cb = em.getCriteriaBuilder();
 				CriteriaQuery<T> cq = cb.createQuery(cls);
 				Root<T> root = cq.from(cls);
-				list = em.createQuery(cq.select(root)).setMaxResults(containerEntity.dumpSize()).getResultList();
+				Predicate p = cb.conjunction();
+				if ((Item.class == cls) && (StringUtils.isNotBlank(Config.dumpRestoreData().getItemCategory()))) {
+					p = cb.and(p, cb.equal(root.get(DataItem.itemCategory_FIELDNAME),
+							ItemCategory.valueOf(Config.dumpRestoreData().getItemCategory())));
+				}
+				list = em.createQuery(cq.select(root).where(p)).setMaxResults(containerEntity.dumpSize())
+						.getResultList();
 			} while (ListTools.isNotEmpty(list));
 		}
 	}