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

Merge branch 'feature/java11' into 'develop'

Feature/java11

See merge request o2oa/o2oa!1614
o2null 5 лет назад
Родитель
Сommit
04f0bfc69b
28 измененных файлов с 403 добавлено и 159 удалено
  1. 28 0
      o2server/configSample/cache.json
  2. 9 0
      o2server/pom.xml
  3. 7 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CreateConfigSample.java
  4. 43 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/CompressTools.java
  5. 37 4
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/PathTools.java
  6. 35 31
      o2server/x_console/src/main/java/com/x/server/console/action/UpdateFile.java
  7. 5 4
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrCenterWorkInfoFactory.java
  8. 3 2
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrConfigSecretaryFactory.java
  9. 3 2
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrConfigSystemFactory.java
  10. 5 4
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrStatisticReportContentFactory.java
  11. 3 2
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrStatisticReportStatusFactory.java
  12. 5 4
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrTaskFactory.java
  13. 3 2
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrTaskHandledFactory.java
  14. 5 4
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkAuthorizeRecordFactory.java
  15. 7 6
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkBaseInfoFactory.java
  16. 5 4
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkChatFactory.java
  17. 3 2
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkDynamicsFactory.java
  18. 39 38
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkPersonFactory.java
  19. 7 6
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkReportBaseInfoFactory.java
  20. 3 2
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkReportPersonLinkFactory.java
  21. 3 2
      o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkReportProcessLogFactory.java
  22. 45 0
      o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/test/ActionGroup1.java
  23. 21 17
      o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/test/ActionGroup2.java
  24. 17 0
      o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/test/TestAction.java
  25. 23 0
      o2server/x_query_service_processing/src/main/webapp/describe/describe.json
  26. 1 1
      o2server/x_query_service_processing/src/main/webapp/describe/sources/com/x/query/service/processing/jaxrs/neural/Learn.java
  27. 21 17
      o2server/x_query_service_processing/src/main/webapp/describe/sources/com/x/query/service/processing/jaxrs/test/ActionGroup2.java
  28. 17 0
      o2server/x_query_service_processing/src/main/webapp/describe/sources/com/x/query/service/processing/jaxrs/test/TestAction.java

+ 28 - 0
o2server/configSample/cache.json

@@ -0,0 +1,28 @@
+{
+  "type": "ehcache",
+  "redis": {
+    "host": "127.0.0.1",
+    "port": 6379.0,
+    "user": "",
+    "password": "",
+    "connectionTimeout": 3000.0,
+    "socketTimeout": 3000.0,
+    "sslEnable": false,
+    "index": 0.0,
+    "###host": "redis服务器地址###",
+    "###port": "redis服务器端口###",
+    "###user": "认证用户###",
+    "###password": "认证口令###",
+    "###connectionTimeout": "连接等待时间###",
+    "###socketTimeout": "response返回等待时间###",
+    "###sslEnable": "是否启用ssl###",
+    "###index": "数据库编号###"
+  },
+  "ehcache": {
+    "jmxEnable": false,
+    "###jmxEnable": "是否启用jmx###"
+  },
+  "###type": "缓存类型:ehcache,type###",
+  "###redis": "redis配置###",
+  "###ehcache": "ehcache配置###"
+}

+ 9 - 0
o2server/pom.xml

@@ -128,6 +128,10 @@
 			<groupId>org.apache.commons</groupId>
 			<artifactId>commons-text</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-compress</artifactId>
+		</dependency>
 		<dependency>
 			<groupId>org.eclipse.jetty</groupId>
 			<artifactId>jetty-server</artifactId>
@@ -529,6 +533,11 @@
 				<artifactId>maven-model</artifactId>
 				<version>3.0</version>
 			</dependency>
+			<dependency>
+				<groupId>org.apache.commons</groupId>
+				<artifactId>commons-compress</artifactId>
+				<version>1.20</version>
+			</dependency>
 			<dependency>
 				<groupId>org.eclipse.jetty</groupId>
 				<artifactId>jetty-server</artifactId>

+ 7 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CreateConfigSample.java

@@ -11,8 +11,14 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.reflect.FieldUtils;
+import org.apache.commons.lang3.reflect.MethodUtils;
+
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.config.AppStyle;
+import com.x.base.core.project.config.Cache;
 import com.x.base.core.project.config.CenterServer;
 import com.x.base.core.project.config.ClientInit;
 import com.x.base.core.project.config.Collect;
@@ -42,11 +48,6 @@ import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.DefaultCharset;
 
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.reflect.FieldUtils;
-import org.apache.commons.lang3.reflect.MethodUtils;
-
 public class CreateConfigSample {
 
 	private static Logger logger = LoggerFactory.getLogger(CreateConfigSample.class);
@@ -79,6 +80,7 @@ public class CreateConfigSample {
 		classes.add(Vfs.class);
 		classes.add(WorkTime.class);
 		classes.add(ZhengwuDingding.class);
+		classes.add(Cache.class);
 
 		Collections.sort(classes, new Comparator<Class<?>>() {
 			public int compare(Class<?> c1, Class<?> c2) {

+ 43 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/CompressTools.java

@@ -0,0 +1,43 @@
+package com.x.base.core.project.tools;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
+import org.apache.commons.io.IOUtils;
+
+public class CompressTools {
+
+	private CompressTools() {
+	}
+
+	public static void unzip(Path zip, Path dir) throws IOException {
+		try (ZipArchiveInputStream inputStream = new ZipArchiveInputStream(
+				new BufferedInputStream(Files.newInputStream(zip)))) {
+			if (!Files.exists(dir)) {
+				Files.createDirectories(dir);
+			}
+			ZipArchiveEntry entry = null;
+			while ((entry = inputStream.getNextZipEntry()) != null) {
+				Path p = dir.resolve(Paths.get(entry.getName()));
+				if (entry.isDirectory()) {
+					if (!Files.exists(p)) {
+						Files.createDirectories(p);
+					}
+				} else {
+					if (!Files.exists(p)) {
+						Files.createFile(p);
+					}
+					try (OutputStream os = Files.newOutputStream(p)) {
+						IOUtils.copy(inputStream, os);
+					}
+				}
+			}
+		}
+	}
+}

+ 37 - 4
o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/PathTools.java

@@ -1,10 +1,11 @@
 package com.x.base.core.project.tools;
 
-public class PathTools {
+import java.nio.file.Files;
+import java.nio.file.Path;
 
-	private PathTools() {
-		// nothing
-	}
+import org.apache.commons.lang3.StringUtils;
+
+public class PathTools {
 
 	public static final String WEB_INF = "WEB-INF";
 	public static final String WEB_INF_WEB_XML = "WEB-INF/web.xml";
@@ -12,5 +13,37 @@ public class PathTools {
 	public static final String WEB_INF_LASTMODIFIED = "WEB-INF/lastModified";
 	public static final String META_INF = "META";
 	public static final String DOT_WAR = ".war";
+	public static final String DOT_JAR = ".jar";
+	public static final String DOT_ZIP = ".zip";
+	public static final String DOT_BAT = ".bat";
+	public static final String DOT_SH = ".sh";
+
+	public static boolean shOrBat(Path path) {
+		if (Files.exists(path) && (!Files.isDirectory(path))) {
+			return StringUtils.endsWithAny(path.getFileName().toString().toLowerCase(), DOT_BAT, DOT_SH);
+		}
+		return false;
+	}
+
+	public static boolean jarOrZip(Path path) {
+		if (Files.exists(path) && (!Files.isDirectory(path))) {
+			return StringUtils.endsWithAny(path.getFileName().toString().toLowerCase(), DOT_JAR, DOT_ZIP);
+		}
+		return false;
+	}
+
+	public static boolean jar(Path path) {
+		if (Files.exists(path) && (!Files.isDirectory(path))) {
+			return StringUtils.endsWith(path.getFileName().toString().toLowerCase(), DOT_JAR);
+		}
+		return false;
+	}
+
+	public static boolean war(Path path) {
+		if (Files.exists(path) && (!Files.isDirectory(path))) {
+			return StringUtils.endsWith(path.getFileName().toString().toLowerCase(), DOT_WAR);
+		}
+		return false;
+	}
 
 }

+ 35 - 31
o2server/x_console/src/main/java/com/x/server/console/action/UpdateFile.java

@@ -1,15 +1,22 @@
 package com.x.server.console.action;
 
 import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Date;
+import java.util.stream.Stream;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.filefilter.FileFilterUtils;
+import org.apache.commons.io.filefilter.IOFileFilter;
+import org.apache.commons.io.filefilter.WildcardFileFilter;
 
 import com.x.base.core.project.config.Config;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.JarTools;
 
-import org.apache.commons.io.FileUtils;
-
 /**
  * @author Zhou Rui
  */
@@ -31,11 +38,9 @@ public class UpdateFile extends ActionBase {
 				logger.print("zip file not exist, path:{}.", path);
 				return false;
 			}
-			// if (backup) {
-			// 	this.backup();
-			// }
 			logger.print("update from file:{}.", file.getAbsolutePath());
 			this.unzip(file);
+			this.updateShell();
 			logger.print("update completed in {} seconds, restart server to continue update.",
 					((new Date()).getTime() - start.getTime()) / 1000);
 			return true;
@@ -45,32 +50,31 @@ public class UpdateFile extends ActionBase {
 		}
 	}
 
-	// private void backup() throws Exception {
-	// 	File dir = Config.dir_local_backup(true);
-	// 	String tag = DateTools.compact(new Date());
-	// 	File dest = new File(dir, tag + ".zip");
-	// 	logger.print("backup current version to {}.", dest.getAbsolutePath());
-	// 	List<File> files = new ArrayList<>();
-	// 	files.add(Config.dir_commons());
-	// 	files.add(Config.dir_config());
-	// 	files.add(Config.dir_configSample());
-	// 	files.add(Config.dir_localSample());
-	// 	files.add(Config.dir_jvm());
-	// 	files.add(Config.dir_servers());
-	// 	files.add(Config.dir_store());
-	// 	files.add(Config.dir_dynamic());
-	// 	files.add(Config.dir_custom());
-	// 	files.add(new File(Config.base(), "console.jar"));
-	// 	files.add(new File(Config.base(), "index.html"));
-	// 	files.add(new File(Config.base(), "version.o2"));
-	// 	FileFilter fileFilter = new RegexFileFilter(
-	// 			"^(start_|stop_|console_|service_)(aix|windows|linux|macos).(sh|bat)$");
-	// 	for (File _f : new File(Config.base()).listFiles(fileFilter)) {
-	// 		files.add(_f);
-	// 	}
-	// 	JarTools.jar(files, dest);
-	// 	logger.print("backup current version completed.");
-	// }
+	private void updateShell() throws Exception {
+		IOFileFilter filter = FileFilterUtils.or(new WildcardFileFilter("start_*.sh"),
+				new WildcardFileFilter("start_*.bat"), new WildcardFileFilter("stop_*.sh"),
+				new WildcardFileFilter("stop_*.bat"), new WildcardFileFilter("console_*.sh"),
+				new WildcardFileFilter("console_*.bat"), new WildcardFileFilter("service_*.bat"));
+		try (Stream<Path> stream = Files.list(Config.dir_local_update().toPath().resolve(Paths.get("o2server")))) {
+			stream.filter(o -> filter.accept(o.toFile())).forEach(o -> {
+				try {
+					copy(o);
+					Files.delete(o);
+				} catch (Exception e) {
+					logger.error(e);
+				}
+			});
+		}
+	}
+
+	private void copy(Path source) throws Exception {
+		Path target = Paths.get(Config.base(), source.getFileName().toString());
+		if (Files.exists(target)) {
+			Files.write(target, Files.readAllLines(source));
+		} else {
+			Files.copy(source, target);
+		}
+	}
 
 	private void unzip(File file) throws Exception {
 		File dir = Config.dir_local_update(true);

+ 5 - 4
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrCenterWorkInfoFactory.java

@@ -3,6 +3,7 @@ package com.x.okr.assemble.control.factory;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
@@ -333,8 +334,8 @@ public class OkrCenterWorkInfoFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrCenterWorkInfo_.creatorIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrCenterWorkInfo_.creatorIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrCenterWorkInfo_.creatorIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 查询中心工作部署者身份列表(去重复)
@@ -356,8 +357,8 @@ public class OkrCenterWorkInfoFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrCenterWorkInfo_.deployerIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrCenterWorkInfo_.deployerIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrCenterWorkInfo_.deployerIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 查询中心工作汇报审核领导身份列表(去重复)

+ 3 - 2
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrConfigSecretaryFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -123,8 +124,8 @@ public class OkrConfigSecretaryFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrConfigSecretary_.leaderIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrConfigSecretary_.leaderIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrConfigSecretary_.leaderIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 根据身份名称,从领导秘书配置信息中查询与该身份有关的所有信息列表

+ 3 - 2
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrConfigSystemFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -112,8 +113,8 @@ public class OkrConfigSystemFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrConfigSystem_.configValue ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrConfigSystem_.configValue ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrConfigSystem_.configValue ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 根据身份名称,从系统参数配置信息中查询与该身份有关的所有信息列表

+ 5 - 4
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrStatisticReportContentFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -328,8 +329,8 @@ public class OkrStatisticReportContentFactory extends AbstractFactory {
 		if( endDate != null ){
 			p = cb.and( p, cb.lessThan( root.get(OkrStatisticReportContent_.statisticTime ), endDate));
 		}
-		cq.distinct(true).select( root.get(OkrStatisticReportContent_.statisticTimeFlag ));
-		return em.createQuery( cq.where(p) ).getResultList();
+		cq.select( root.get(OkrStatisticReportContent_.statisticTimeFlag ));
+		return em.createQuery( cq.where(p) ).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 查询统计数据中工作责任者身份列表(去重复)
@@ -351,8 +352,8 @@ public class OkrStatisticReportContentFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrStatisticReportContent_.responsibilityIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrStatisticReportContent_.responsibilityIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrStatisticReportContent_.responsibilityIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 根据身份名称,从工作最新汇报内容统计信息中查询与该身份有关的所有信息列表

+ 3 - 2
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrStatisticReportStatusFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -154,8 +155,8 @@ public class OkrStatisticReportStatusFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrStatisticReportStatus_.responsibilityIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrStatisticReportStatus_.responsibilityIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrStatisticReportStatus_.responsibilityIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**

+ 5 - 4
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrTaskFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -198,9 +199,9 @@ public class OkrTaskFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrTask> root = cq.from( OkrTask.class);
-		cq.distinct(true).select( root.get( OkrTask_.targetIdentity ));
+		cq.select( root.get( OkrTask_.targetIdentity ));
 		Predicate p = root.get( OkrTask_.dynamicObjectType ).in( taskTypeList );
-		return em.createQuery(cq.where(p)).getResultList();
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**
@@ -349,8 +350,8 @@ public class OkrTaskFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrTask_.targetIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrTask_.targetIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrTask_.targetIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 根据身份名称,从具体工作待办待阅信息中查询与该身份有关的所有信息列表

+ 3 - 2
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrTaskHandledFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -126,8 +127,8 @@ public class OkrTaskHandledFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrTaskHandled_.targetIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrTaskHandled_.targetIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrTaskHandled_.targetIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 根据身份名称,从具体工作已办已阅信息中查询与该身份有关的所有信息列表

+ 5 - 4
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkAuthorizeRecordFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -219,8 +220,8 @@ public class OkrWorkAuthorizeRecordFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkAuthorizeRecord_.delegatorIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkAuthorizeRecord_.delegatorIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkAuthorizeRecord_.delegatorIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 查询工作承接者身份列表(去重复)
@@ -242,8 +243,8 @@ public class OkrWorkAuthorizeRecordFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkAuthorizeRecord_.targetIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkAuthorizeRecord_.targetIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkAuthorizeRecord_.targetIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 根据身份名称,从工作授权信息中查询与该身份有关的所有信息列表

+ 7 - 6
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkBaseInfoFactory.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
@@ -699,8 +700,8 @@ public class OkrWorkBaseInfoFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkBaseInfo_.creatorIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkBaseInfo_.creatorIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkBaseInfo_.creatorIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 查询具体工作部署者身份列表(去重复)
@@ -722,8 +723,8 @@ public class OkrWorkBaseInfoFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkBaseInfo_.deployerIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkBaseInfo_.deployerIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkBaseInfo_.deployerIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 查询具体工作阅知领导身份列表(去重复)
@@ -791,8 +792,8 @@ public class OkrWorkBaseInfoFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkBaseInfo_.responsibilityIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkBaseInfo_.responsibilityIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkBaseInfo_.responsibilityIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**

+ 5 - 4
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkChatFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
@@ -235,8 +236,8 @@ public class OkrWorkChatFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkChat_.senderIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkChat_.senderIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkChat_.senderIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 查询工作交流信息接收者身份列表(去重复)
@@ -258,8 +259,8 @@ public class OkrWorkChatFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkChat_.targetIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkChat_.targetIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkChat_.targetIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 根据身份名称,从具体工作交流信息中查询与该身份有关的所有信息列表

+ 3 - 2
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkDynamicsFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
@@ -320,8 +321,8 @@ public class OkrWorkDynamicsFactory extends AbstractFactory {
 		if (identities_error != null && identities_error.size() > 0) {
 			p = cb.and(p, cb.not(root.get(OkrWorkDynamics_.targetIdentity).in(identities_error)));
 		}
-		cq.distinct(true).select(root.get(OkrWorkDynamics_.targetIdentity));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get(OkrWorkDynamics_.targetIdentity));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**

+ 39 - 38
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkPersonFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
@@ -78,7 +79,7 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.workId));
+		cq.select(root.get(OkrWorkPerson_.workId));
 
 		/**
 		 * 获取的时候过滤条件: 1、如果当前身份是创建者或者部署者的,那么,草稿也要取,如果当前身份不是创建者或者部署者,那么草稿不要去
@@ -114,7 +115,7 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 
 		p = cb.and(p, cb.or(p_creator_or_depoloyer, p_watcher));
 
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**
@@ -136,12 +137,12 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.workId));
+		cq.select(root.get(OkrWorkPerson_.workId));
 		Predicate p = cb.equal(root.get(OkrWorkPerson_.employeeIdentity), userIdentity);
 		if (centerId != null && !centerId.isEmpty()) {
 			p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.centerId), centerId));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	// @MethodDescribe( "根据用户姓名和处理者身份,列示有权限访问的所有具体工作Id列表" )
@@ -158,11 +159,11 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.workId));
+		cq.select(root.get(OkrWorkPerson_.workId));
 		Predicate p = cb.isNotNull(root.get(OkrWorkPerson_.workId));
 		p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.employeeName), name));
 		p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.processIdentity), processIdentity));
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	// @MethodDescribe( "根据用户姓名和处理者身份,列示有权限访问的所有具体工作Id列表" )
@@ -180,7 +181,7 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.workId));
+		cq.select(root.get(OkrWorkPerson_.workId));
 
 		Predicate p = cb.isNotNull(root.get(OkrWorkPerson_.workId));
 
@@ -194,7 +195,7 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.processIdentity), processIdentity));
 		p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.status), "正常"));
 
-		return em.createQuery(cq.where(p)).setMaxResults(200).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(200).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	// @MethodDescribe( "根据用户姓名,列示有权限访问的所有中心工作Id列表" )
@@ -207,12 +208,12 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.centerId));
+		cq.select(root.get(OkrWorkPerson_.centerId));
 		Predicate p = cb.equal(root.get(OkrWorkPerson_.employeeName), name);
 		if (statuses != null && statuses.size() > 0) {
 			p = cb.and(p, root.get(OkrWorkPerson_.status).in(statuses));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	// @MethodDescribe( "根据用户姓名和处理者身份,列示有权限访问的所有中心工作Id列表" )
@@ -230,13 +231,13 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.centerId));
+		cq.select(root.get(OkrWorkPerson_.centerId));
 		Predicate p = cb.equal(root.get(OkrWorkPerson_.employeeName), name);
 		p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.processIdentity), processIdentity));
 		if (statuses != null && statuses.size() > 0) {
 			p = cb.and(p, root.get(OkrWorkPerson_.status).in(statuses));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	// @MethodDescribe( "根据用户身份和处理者身份,列示有权限访问的所有中心工作Id列表" )
@@ -254,13 +255,13 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.centerId));
+		cq.select(root.get(OkrWorkPerson_.centerId));
 		Predicate p = cb.equal(root.get(OkrWorkPerson_.employeeIdentity), identity);
 		p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.processIdentity), processIdentity));
 		if (statuses != null && statuses.size() > 0) {
 			p = cb.and(p, root.get(OkrWorkPerson_.status).in(statuses));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	// @MethodDescribe( "根据组织名称,列示有权限访问的所有中心工作Id列表" )
@@ -273,12 +274,12 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.centerId));
+		cq.select(root.get(OkrWorkPerson_.centerId));
 		Predicate p = cb.equal(root.get(OkrWorkPerson_.unitName), name);
 		if (statuses != null && statuses.size() > 0) {
 			p = cb.and(p, root.get(OkrWorkPerson_.status).in(statuses));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	// @MethodDescribe( "根据组织列表,列示有权限访问的所有中心工作Id列表" )
@@ -291,12 +292,12 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.centerId));
+		cq.select(root.get(OkrWorkPerson_.centerId));
 		Predicate p = root.get(OkrWorkPerson_.unitName).in(names);
 		if (statuses != null && statuses.size() > 0) {
 			p = cb.and(p, root.get(OkrWorkPerson_.status).in(statuses));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	// @MethodDescribe( "根据顶层组织名称,列示有权限访问的所有中心工作Id列表" )
@@ -309,12 +310,12 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.centerId));
+		cq.select(root.get(OkrWorkPerson_.centerId));
 		Predicate p = cb.equal(root.get(OkrWorkPerson_.topUnitName), name);
 		if (statuses != null && statuses.size() > 0) {
 			p = cb.and(p, root.get(OkrWorkPerson_.status).in(statuses));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**
@@ -336,12 +337,12 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.employeeIdentity));
+		cq.select(root.get(OkrWorkPerson_.employeeIdentity));
 		Predicate p = cb.equal(root.get(OkrWorkPerson_.centerId), centerId);
 		if (identity != null && !identity.isEmpty()) {
 			p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.processIdentity), identity));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(2000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(2000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	// @MethodDescribe( "根据顶层组织列表,列示有权限访问的所有中心工作Id列表" )
@@ -355,12 +356,12 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.centerId));
+		cq.select(root.get(OkrWorkPerson_.centerId));
 		Predicate p = root.get(OkrWorkPerson_.topUnitName).in(names);
 		if (statuses != null && statuses.size() > 0) {
 			p = cb.and(p, root.get(OkrWorkPerson_.status).in(statuses));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**
@@ -380,7 +381,7 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.employeeName));
+		cq.select(root.get(OkrWorkPerson_.employeeName));
 		Predicate p = cb.equal(root.get(OkrWorkPerson_.workId), workId);
 		if (identity != null && !identity.isEmpty()) {
 			p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.processIdentity), identity));
@@ -388,7 +389,7 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		if (statuses != null && statuses.size() > 0) {
 			p = cb.and(p, root.get(OkrWorkPerson_.status).in(statuses));
 		}
-		return em.createQuery(cq.where(p)).setMaxResults(100).getResultList();
+		return em.createQuery(cq.where(p)).setMaxResults(100).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**
@@ -480,7 +481,7 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.workId));
+		cq.select(root.get(OkrWorkPerson_.workId));
 		Predicate p = cb.equal(root.get(OkrWorkPerson_.employeeIdentity), employeeIdentity);
 		p = cb.and(p, cb.isNotNull(root.get(OkrWorkPerson_.workId)));
 		if (centerId != null && !centerId.isEmpty()) {
@@ -495,7 +496,7 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		if (statuses != null && statuses.size() > 0) {
 			p = cb.and(p, root.get(OkrWorkPerson_.status).in(statuses));
 		}
-		return em.createQuery(cq.where(p)).getResultList();
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**
@@ -1059,15 +1060,15 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.employeeIdentity));
-		return em.createQuery(cq).setMaxResults(10000).getResultList();
+		cq.select(root.get(OkrWorkPerson_.employeeIdentity));
+		return em.createQuery(cq).setMaxResults(10000).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**
 	 * 根据工作类别和登录身份来查询用户可以访问到的所有中心工作数量
-	 * 
-	 * @param workTypeName
+	 * @param workTypeNames
 	 * @param loginIdentity
+	 * @param processIdentity
 	 * @return
 	 * @throws Exception
 	 */
@@ -1087,8 +1088,8 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		if (processIdentity != null && !processIdentity.isEmpty()) {
 			p = cb.and(p, cb.equal(root.get(OkrWorkPerson_.processIdentity), processIdentity));
 		}
-		cq.distinct(true).select(root.get(OkrWorkPerson_.centerId));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get(OkrWorkPerson_.centerId));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	public List<String> listByAuthorizeRecordIds(List<String> authorizeRecordIds, List<String> statuses)
@@ -1388,8 +1389,8 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		if (identities_error != null && identities_error.size() > 0) {
 			p = cb.and(p, cb.not(root.get(OkrWorkPerson_.employeeIdentity).in(identities_error)));
 		}
-		cq.distinct(true).select(root.get(OkrWorkPerson_.employeeIdentity));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get(OkrWorkPerson_.employeeIdentity));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**
@@ -1425,7 +1426,7 @@ public class OkrWorkPersonFactory extends AbstractFactory {
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<OkrWorkPerson> root = cq.from(OkrWorkPerson.class);
 		Predicate p = cb.equal( root.get(OkrWorkPerson_.workId), workId);
-		cq.distinct(true).select(root.get(OkrWorkPerson_.employeeIdentity));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get(OkrWorkPerson_.employeeIdentity));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 }

+ 7 - 6
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkReportBaseInfoFactory.java

@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -480,8 +481,8 @@ public class OkrWorkReportBaseInfoFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkReportBaseInfo_.creatorIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkReportBaseInfo_.creatorIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkReportBaseInfo_.creatorIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 查询工作汇报当前处理者身份列表(去重复)
@@ -596,8 +597,8 @@ public class OkrWorkReportBaseInfoFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkReportBaseInfo_.reporterIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkReportBaseInfo_.reporterIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkReportBaseInfo_.reporterIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 查询工作管理者,督办员身份列表(去重复)
@@ -619,8 +620,8 @@ public class OkrWorkReportBaseInfoFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkReportBaseInfo_.workAdminIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkReportBaseInfo_.workAdminIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkReportBaseInfo_.workAdminIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 
 	/**

+ 3 - 2
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkReportPersonLinkFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
@@ -336,8 +337,8 @@ public class OkrWorkReportPersonLinkFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkReportPersonLink_.processorIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkReportPersonLink_.processorIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkReportPersonLink_.processorIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 根据身份名称,从工作汇报处理者信息中查询与该身份有关的所有信息列表

+ 3 - 2
o2server/x_okr_assemble_control/src/main/webapp/describe/sources/com/x/okr/assemble/control/factory/OkrWorkReportProcessLogFactory.java

@@ -2,6 +2,7 @@ package com.x.okr.assemble.control.factory;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.persistence.EntityManager;
 import javax.persistence.Query;
@@ -317,8 +318,8 @@ public class OkrWorkReportProcessLogFactory extends AbstractFactory {
 		if( identities_error != null && identities_error.size() > 0 ){
 			p = cb.and( p, cb.not(root.get( OkrWorkReportProcessLog_.processorIdentity ).in( identities_error )) );
 		}
-		cq.distinct(true).select(root.get( OkrWorkReportProcessLog_.processorIdentity ));
-		return em.createQuery(cq.where(p)).getResultList();
+		cq.select(root.get( OkrWorkReportProcessLog_.processorIdentity ));
+		return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList());
 	}
 	/**
 	 * 根据身份名称,从工作汇报处理日志信息中查询与该身份有关的所有信息列表

+ 45 - 0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/test/ActionGroup1.java

@@ -0,0 +1,45 @@
+package com.x.query.service.processing.jaxrs.test;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WrapBoolean;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.utils.time.ClockStamp;
+import com.x.processplatform.core.entity.content.Work;
+import com.x.processplatform.core.entity.content.Work_;
+
+class ActionGroup1 extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionGroup1.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ClockStamp.INIT("创建测试distinct代码.", "");
+
+			return new ActionResult<>();
+		}
+	}
+
+	private void id(EntityManagerContainer emc) throws Exception {
+		ClockStamp.STAMP("执行work的id distinct{}.", "开始");
+		EntityManager em = emc.get(Work.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<Work> root = cq.from(Work.class);
+		cq.select(root.get(Work_.id)).distinct(true);
+		em.createQuery(cq).getResultList();
+		ClockStamp.STAMP("执行work的id distinct{}.", "结束");
+	}
+
+	public static class Wo extends WrapBoolean {
+	}
+
+}

+ 21 - 17
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/test/ActionGroup2.java

@@ -1,11 +1,9 @@
 package com.x.query.service.processing.jaxrs.test;
 
-import java.util.ArrayList;
-
-import javax.script.Bindings;
-import javax.script.ScriptContext;
-import javax.script.ScriptEngine;
-import javax.script.SimpleScriptContext;
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
 
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
@@ -14,7 +12,9 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WrapBoolean;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
-import com.x.base.core.project.script.ScriptFactory;
+import com.x.base.core.project.utils.time.ClockStamp;
+import com.x.processplatform.core.entity.content.Work;
+import com.x.processplatform.core.entity.content.Work_;
 
 class ActionGroup2 extends BaseAction {
 
@@ -22,19 +22,23 @@ class ActionGroup2 extends BaseAction {
 
 	ActionResult<Wo> execute(EffectivePerson effectivePerson) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			ActionResult<Wo> result = new ActionResult<>();
-			ScriptEngine engine = ScriptFactory.newScriptEngine();
-			ScriptContext scriptContext = new SimpleScriptContext();
-			Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
-			bindings.put("data", new ArrayList<>());
-			engine.setContext(scriptContext);
-			engine.eval("var o = this.data && this.data.length;");
-			Object o = engine.eval("o;");
-			System.out.println(o.getClass());
-			return result;
+			ClockStamp.INIT("创建测试distinct代码.", "");
+			job(emc);
+			return new ActionResult<>();
 		}
 	}
 
+	private void job(EntityManagerContainer emc) throws Exception {
+		ClockStamp.STAMP("执行work的job distinct{}.", "开始");
+		EntityManager em = emc.get(Work.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<Work> root = cq.from(Work.class);
+		cq.select(root.get(Work_.id)).distinct(true);
+		em.createQuery(cq).getResultList();
+		ClockStamp.STAMP("执行work的job distinct{}.", "结束");
+	}
+
 	public static class Wo extends WrapBoolean {
 	}
 

+ 17 - 0
o2server/x_query_service_processing/src/main/java/com/x/query/service/processing/jaxrs/test/TestAction.java

@@ -81,6 +81,23 @@ public class TestAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "执行group.", action = ActionGroup2.class)
+	@GET
+	@Path("group1")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void group1(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
+		ActionResult<ActionGroup1.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionGroup1().execute(effectivePerson);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
 	@JaxrsMethodDescribe(value = "执行group.", action = ActionGroup2.class)
 	@GET
 	@Path("group2")

+ 23 - 0
o2server/x_query_service_processing/src/main/webapp/describe/describe.json

@@ -727,6 +727,29 @@
             }
           ]
         },
+        {
+          "name": "group1",
+          "className": "com.x.query.service.processing.jaxrs.test.ActionGroup2",
+          "description": "执行group.",
+          "type": "GET",
+          "path": "jaxrs/test/group1",
+          "contentType": "application/json",
+          "resultContentType": "application/json; charset\u003dUTF-8",
+          "useJsonElementParameter": false,
+          "useStringParameter": false,
+          "pathParameters": [],
+          "formParameters": [],
+          "queryParameters": [],
+          "ins": [],
+          "outs": [
+            {
+              "name": "value",
+              "type": "Boolean",
+              "isCollection": false,
+              "description": "布尔值."
+            }
+          ]
+        },
         {
           "name": "group2",
           "className": "com.x.query.service.processing.jaxrs.test.ActionGroup2",

+ 1 - 1
o2server/x_query_service_processing/src/main/webapp/describe/sources/com/x/query/service/processing/jaxrs/neural/Learn.java

@@ -283,7 +283,7 @@ public class Learn {
 		cq.select(root).where(p).orderBy(cb.desc(root.get(InText_.count)));
 		Integer cutoff = MapTools.getInteger(model.getPropertyMap(), Model.PROPERTY_MLP_LEARNINTEXTCUTOFFSIZE,
 				Model.DEFAULT_MLP_LEARNINTEXTCUTOFFSIZE);
-		List<InText> os = em.createQuery(cq.distinct(true)).setMaxResults(cutoff).getResultList();
+		List<InText> os = em.createQuery(cq).setMaxResults(cutoff).getResultList();
 		InTextBag inTextBag = new InTextBag(os);
 		return inTextBag;
 	}

+ 21 - 17
o2server/x_query_service_processing/src/main/webapp/describe/sources/com/x/query/service/processing/jaxrs/test/ActionGroup2.java

@@ -1,11 +1,9 @@
 package com.x.query.service.processing.jaxrs.test;
 
-import java.util.ArrayList;
-
-import javax.script.Bindings;
-import javax.script.ScriptContext;
-import javax.script.ScriptEngine;
-import javax.script.SimpleScriptContext;
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
 
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
@@ -14,7 +12,9 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WrapBoolean;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
-import com.x.base.core.project.script.ScriptFactory;
+import com.x.base.core.project.utils.time.ClockStamp;
+import com.x.processplatform.core.entity.content.Work;
+import com.x.processplatform.core.entity.content.Work_;
 
 class ActionGroup2 extends BaseAction {
 
@@ -22,19 +22,23 @@ class ActionGroup2 extends BaseAction {
 
 	ActionResult<Wo> execute(EffectivePerson effectivePerson) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			ActionResult<Wo> result = new ActionResult<>();
-			ScriptEngine engine = ScriptFactory.newScriptEngine();
-			ScriptContext scriptContext = new SimpleScriptContext();
-			Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
-			bindings.put("data", new ArrayList<>());
-			engine.setContext(scriptContext);
-			engine.eval("var o = this.data && this.data.length;");
-			Object o = engine.eval("o;");
-			System.out.println(o.getClass());
-			return result;
+			ClockStamp.INIT("创建测试distinct代码.", "");
+			job(emc);
+			return new ActionResult<>();
 		}
 	}
 
+	private void job(EntityManagerContainer emc) throws Exception {
+		ClockStamp.STAMP("执行work的job distinct{}.", "开始");
+		EntityManager em = emc.get(Work.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<Work> root = cq.from(Work.class);
+		cq.select(root.get(Work_.id)).distinct(true);
+		em.createQuery(cq).getResultList();
+		ClockStamp.STAMP("执行work的job distinct{}.", "结束");
+	}
+
 	public static class Wo extends WrapBoolean {
 	}
 

+ 17 - 0
o2server/x_query_service_processing/src/main/webapp/describe/sources/com/x/query/service/processing/jaxrs/test/TestAction.java

@@ -81,6 +81,23 @@ public class TestAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "执行group.", action = ActionGroup2.class)
+	@GET
+	@Path("group1")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void group1(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
+		ActionResult<ActionGroup1.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionGroup1().execute(effectivePerson);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
 	@JaxrsMethodDescribe(value = "执行group.", action = ActionGroup2.class)
 	@GET
 	@Path("group2")