Explorar o código

增加自定义表实现

roo00 %!s(int64=7) %!d(string=hai) anos
pai
achega
a14e293b51
Modificáronse 100 ficheiros con 1561 adicións e 568 borrados
  1. 0 4
      o2server/x_attendance_assemble_control/pom.xml
  2. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/ActionListNextWithFilter.java
  3. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/ActionListPrevWithFilter.java
  4. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionListNextWithFilter.java
  5. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionListPrevWithFilter.java
  6. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStdForTopUnitNextWithFilter.java
  7. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStdForTopUnitPrevWithFilter.java
  8. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStdForUnitNextWithFilter.java
  9. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStdForUnitPrevWithFilter.java
  10. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForPersonNextWithFilter.java
  11. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForPersonPrevWithFilter.java
  12. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForTopUnitNextWithFilter.java
  13. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForTopUnitPrevWithFilter.java
  14. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForUnitNextWithFilter.java
  15. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForUnitPrevWithFilter.java
  16. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionListNextWithFilter.java
  17. 1 1
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionListPrevWithFilter.java
  18. 100 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/container/EntityManagerContainer.java
  19. 20 4
      o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/EntityManagerContainerFactory.java
  20. 115 32
      o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/SliceEntityManagerContainerFactory.java
  21. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/entity/JpaObject.java
  22. 12 66
      o2server/x_base_core_project/src/main/java/com/x/base/core/entity/tools/JpaObjectTools.java
  23. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/DMDictionary.java
  24. 14 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/AbstractContext.java
  25. 1 15
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/Context.java
  26. 3 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/Dependency.java
  27. 71 7
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Config.java
  28. 13 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/exception/ExceptionEntityFieldEmpty.java
  29. 27 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/WrapLong.java
  30. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/WrapNumber.java
  31. 108 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/AbstractRuntime.java
  32. 4 4
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/Scripting.java
  33. 206 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/ScriptingEngine.java
  34. 0 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/ListTools.java
  35. 57 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/StringTools.java
  36. 18 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/webservices/WebservicesClient.java
  37. 1 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_cms_assemble_control.java
  38. 2 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_program_center.java
  39. 4 36
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_designer.java
  40. 3 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_surface.java
  41. 1 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_service_processing.java
  42. 1 219
      o2server/x_base_core_project/src/test/java/com/x/base/core/project/test/TestClient.java
  43. 0 4
      o2server/x_bbs_assemble_control/pom.xml
  44. 15 3
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/permissioninfo/ActionGetSubjectOperationPermissoin.java
  45. 0 4
      o2server/x_calendar_assemble_control/pom.xml
  46. 2 1
      o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionListWhatICanView.java
  47. 0 4
      o2server/x_cms_assemble_control/pom.xml
  48. 105 0
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/factory/ElementFactory.java
  49. 67 3
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/factory/FileFactory.java
  50. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/ActionApplication.java
  51. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionContent.java
  52. 87 0
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionContentWithApp.java
  53. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionCopy.java
  54. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionCreate.java
  55. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionDelete.java
  56. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionDownload.java
  57. 87 0
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionDownloadWithApp.java
  58. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionEdit.java
  59. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionGet.java
  60. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionListNext.java
  61. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionListPrev.java
  62. 2 2
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionListWithApp.java
  63. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionUpload.java
  64. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/BaseAction.java
  65. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ExceptionEmptyName.java
  66. 1 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ExceptionErrorName.java
  67. 46 10
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/FileAction.java
  68. 0 1
      o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/view/ActionListNextPageViewData.java
  69. 214 0
      o2server/x_cms_core_entity/src/main/java/com/x/cms/core/entity/element/File.java
  70. 18 0
      o2server/x_cms_core_entity/src/main/java/com/x/cms/core/entity/element/wrap/WrapFile.java
  71. 0 4
      o2server/x_collaboration_assemble_websocket/pom.xml
  72. 0 4
      o2server/x_collaboration_service_message/pom.xml
  73. 0 4
      o2server/x_component_assemble_control/pom.xml
  74. 8 1
      o2server/x_console/src/main/java/com/x/server/console/Main.java
  75. 6 0
      o2server/x_console/src/main/java/com/x/server/console/server/JettySeverTools.java
  76. 10 23
      o2server/x_console/src/main/java/com/x/server/console/server/application/ApplicationServerTools.java
  77. 2 28
      o2server/x_console/src/main/java/com/x/server/console/server/center/CenterServerTools.java
  78. 51 2
      o2server/x_console/src/test/java/com/x/server/console/test/TestClient.java
  79. 0 4
      o2server/x_console/更新过程.txt
  80. 0 4
      o2server/x_file_assemble_control/pom.xml
  81. 0 4
      o2server/x_general_assemble_control/pom.xml
  82. 0 4
      o2server/x_hotpic_assemble_control/pom.xml
  83. 2 1
      o2server/x_hotpic_assemble_control/src/main/java/com/x/hotpic/assemble/control/jaxrs/hotpic/HotPictureInfoAction.java
  84. 2 1
      o2server/x_hotpic_assemble_control/src/main/java/com/x/hotpic/assemble/control/jaxrs/hotpic/HotPictureInfoCipherAction.java
  85. 0 4
      o2server/x_meeting_assemble_control/pom.xml
  86. 1 1
      o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/attachment/ActionListNext.java
  87. 1 1
      o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/attachment/ActionListPrev.java
  88. 1 1
      o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionListNext.java
  89. 1 1
      o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionListPrev.java
  90. 0 4
      o2server/x_message_assemble_communicate/pom.xml
  91. 1 1
      o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/jaxrs/mass/ActionListNext.java
  92. 1 1
      o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/jaxrs/mass/ActionListPrev.java
  93. 0 4
      o2server/x_mind_assemble_control/pom.xml
  94. 3 2
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/factory/MindBaseInfoFactory.java
  95. 3 2
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/factory/MindRecycleInfoFactory.java
  96. 2 1
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMindListNextWithFilter.java
  97. 2 1
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMindViewWithId.java
  98. 2 1
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMyReciveMindNextWithFilter.java
  99. 2 1
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMyRecycleNextWithFilter.java
  100. 2 1
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMyShareMindNextWithFilter.java

+ 0 - 4
o2server/x_attendance_assemble_control/pom.xml

@@ -34,10 +34,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/ActionListNextWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListNextWithFilter extends BaseAction {
 					logger.debug(effectivePerson, ">>>>>>>>>>第一页查询,没有id传入");
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
-						sequence = PropertyUtils.getProperty(emc.find(id, AttendanceAppealInfo.class), "sequence");
+						sequence = PropertyUtils.getProperty(emc.find(id, AttendanceAppealInfo.class),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 				// 从数据库中查询符合条件的一页数据对象

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/ActionListPrevWithFilter.java

@@ -55,7 +55,7 @@ public class ActionListPrevWithFilter extends BaseAction {
 					logger.debug(effectivePerson, ">>>>>>>>>>第一页查询,没有id传入");
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
-						sequence = PropertyUtils.getProperty(emc.find(id, AttendanceAppealInfo.class), "sequence");
+						sequence = PropertyUtils.getProperty(emc.find(id, AttendanceAppealInfo.class),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 				// 从数据库中查询符合条件的一页数据对象

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionListNextWithFilter.java

@@ -60,7 +60,7 @@ public class ActionListNextWithFilter extends BaseAction {
 				if (id == null || "(0)".equals(id) || id.isEmpty()) {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
-						sequence = PropertyUtils.getProperty(emc.find(id, AttendanceDetail.class), "sequence");
+						sequence = PropertyUtils.getProperty(emc.find(id, AttendanceDetail.class),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionListPrevWithFilter.java

@@ -60,7 +60,7 @@ public class ActionListPrevWithFilter extends BaseAction {
 				if (id == null || "(0)".equals(id) || id.isEmpty()) {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
-						sequence = PropertyUtils.getProperty(emc.find(id, AttendanceDetail.class), "sequence");
+						sequence = PropertyUtils.getProperty(emc.find(id, AttendanceDetail.class),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStdForTopUnitNextWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStdForTopUnitNextWithFilter extends BaseAction {
 				if (id == null || "(0)".equals(id) || id.isEmpty()) {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
-						sequence = PropertyUtils.getProperty(emc.find(id, StatisticTopUnitForDay.class), "sequence");
+						sequence = PropertyUtils.getProperty(emc.find(id, StatisticTopUnitForDay.class),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStdForTopUnitPrevWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStdForTopUnitPrevWithFilter extends BaseAction {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
 						sequence = PropertyUtils.getProperty(
-								emc.find(id, StatisticTopUnitForDay.class ), "sequence");
+								emc.find(id, StatisticTopUnitForDay.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStdForUnitNextWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStdForUnitNextWithFilter extends BaseAction {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
 						sequence = PropertyUtils.getProperty(
-								emc.find(id, StatisticUnitForDay.class ), "sequence");
+								emc.find(id, StatisticUnitForDay.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStdForUnitPrevWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStdForUnitPrevWithFilter extends BaseAction {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
 						sequence = PropertyUtils.getProperty(
-								emc.find(id, StatisticUnitForDay.class ), "sequence");
+								emc.find(id, StatisticUnitForDay.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForPersonNextWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStmForPersonNextWithFilter extends BaseAction {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
 						sequence = PropertyUtils.getProperty(
-								emc.find(id, StatisticPersonForMonth.class ), "sequence");
+								emc.find(id, StatisticPersonForMonth.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForPersonPrevWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStmForPersonPrevWithFilter extends BaseAction {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
 						sequence = PropertyUtils.getProperty(
-								emc.find(id, StatisticPersonForMonth.class ), "sequence");
+								emc.find(id, StatisticPersonForMonth.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForTopUnitNextWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStmForTopUnitNextWithFilter extends BaseAction {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
 						sequence = PropertyUtils.getProperty(
-								emc.find(id, StatisticTopUnitForMonth.class ), "sequence");
+								emc.find(id, StatisticTopUnitForMonth.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForTopUnitPrevWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStmForTopUnitPrevWithFilter extends BaseAction {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
 						sequence = PropertyUtils.getProperty(
-								emc.find(id, StatisticTopUnitForMonth.class ), "sequence");
+								emc.find(id, StatisticTopUnitForMonth.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForUnitNextWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStmForUnitNextWithFilter extends BaseAction {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
 						sequence = PropertyUtils.getProperty(
-								emc.find(id, StatisticUnitForMonth.class ), "sequence");
+								emc.find(id, StatisticUnitForMonth.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionListStmForUnitPrevWithFilter.java

@@ -54,7 +54,7 @@ public class ActionListStmForUnitPrevWithFilter extends BaseAction {
 				} else {
 					if (!StringUtils.equalsIgnoreCase(id, StandardJaxrsAction.EMPTY_SYMBOL)) {
 						sequence = PropertyUtils.getProperty(
-								emc.find(id, StatisticUnitForMonth.class ), "sequence");
+								emc.find(id, StatisticUnitForMonth.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionListNextWithFilter.java

@@ -59,7 +59,7 @@ public class ActionListNextWithFilter extends BaseAction {
 					//logger.info( "第一页查询,没有id传入" );
 				}else{
 					if (!StringUtils.equalsIgnoreCase(id,StandardJaxrsAction.EMPTY_SYMBOL)) {
-						sequence = PropertyUtils.getProperty(emc.find( id, AttendanceSelfHoliday.class ), "sequence");
+						sequence = PropertyUtils.getProperty(emc.find( id, AttendanceSelfHoliday.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 				

+ 1 - 1
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/ActionListPrevWithFilter.java

@@ -59,7 +59,7 @@ public class ActionListPrevWithFilter extends BaseAction {
 					//logger.info( "第一页查询,没有id传入" );
 				}else{
 					if (!StringUtils.equalsIgnoreCase(id,StandardJaxrsAction.EMPTY_SYMBOL)) {
-						sequence = PropertyUtils.getProperty(emc.find( id, AttendanceSelfHoliday.class ), "sequence");
+						sequence = PropertyUtils.getProperty(emc.find( id, AttendanceSelfHoliday.class ),  JpaObject.sequence_FIELDNAME);
 					}
 				}
 				

+ 100 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/container/EntityManagerContainer.java

@@ -12,6 +12,7 @@ import java.util.Map.Entry;
 import java.util.Objects;
 
 import javax.persistence.EntityManager;
+import javax.persistence.Query;
 import javax.persistence.Tuple;
 import javax.persistence.TypedQuery;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -411,6 +412,84 @@ public class EntityManagerContainer extends EntityManagerContainerBasic {
 		return list;
 	}
 
+	public <T extends JpaObject> Long count(Class<T> cls) throws Exception {
+		EntityManager em = this.get(cls);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Long> cq = cb.createQuery(Long.class);
+		Root<T> root = cq.from(cls);
+		return em.createQuery(cq.select(cb.count(root))).getSingleResult();
+	}
+
+	public <T extends JpaObject> Long countGreaterThanDesc(Class<T> cls, String attribute, Object value)
+			throws Exception {
+		EntityManager em = this.get(cls);
+		Query query = em.createQuery("select count(o) from " + cls.getName() + " o where (o." + attribute + " > "
+				+ "?1) order by o." + attribute + " DESC");
+		query.setParameter(1, value);
+		return (Long) query.getSingleResult();
+	}
+
+	public <T extends JpaObject> Long countLessThanDesc(Class<T> cls, String attribute, Object value) throws Exception {
+		EntityManager em = this.get(cls);
+		Query query = em.createQuery("select count(o) from " + cls.getName() + " o where (o." + attribute + " < "
+				+ "?1) order by o." + attribute + " DESC");
+		query.setParameter(1, value);
+		return (Long) query.getSingleResult();
+	}
+
+	public <T extends JpaObject> Long countGreaterThanAsc(Class<T> cls, String attribute, Object value)
+			throws Exception {
+		EntityManager em = this.get(cls);
+		Query query = em.createQuery("select count(o) from " + cls.getName() + " o where (o." + attribute + " > "
+				+ "?1) order by o." + attribute + " ASC");
+		query.setParameter(1, value);
+		return (Long) query.getSingleResult();
+	}
+
+	public <T extends JpaObject> Long countLessThanAsc(Class<T> cls, String attribute, Object value) throws Exception {
+		EntityManager em = this.get(cls);
+		Query query = em.createQuery("select count(o) from " + cls.getName() + " o where (o." + attribute + " < "
+				+ "?1) order by o." + attribute + " ASC");
+		query.setParameter(1, value);
+		return (Long) query.getSingleResult();
+	}
+
+	public <T extends JpaObject> Long countGreaterThanOrEqualToDesc(Class<T> cls, String attribute, Object value)
+			throws Exception {
+		EntityManager em = this.get(cls);
+		Query query = em.createQuery("select count(o) from " + cls.getName() + " o where (o." + attribute + " >= "
+				+ "?1) order by o." + attribute + " DESC");
+		query.setParameter(1, value);
+		return (Long) query.getSingleResult();
+	}
+
+	public <T extends JpaObject> Long countLessThanOrEqualToDesc(Class<T> cls, String attribute, Object value)
+			throws Exception {
+		EntityManager em = this.get(cls);
+		Query query = em.createQuery("select count(o) from " + cls.getName() + " o where (o." + attribute + " <= "
+				+ "?1) order by o." + attribute + " DESC");
+		query.setParameter(1, value);
+		return (Long) query.getSingleResult();
+	}
+
+	public <T extends JpaObject> Long countGreaterThanOrEqualToAsc(Class<T> cls, String attribute, Object value)
+			throws Exception {
+		EntityManager em = this.get(cls);
+		Query query = em.createQuery("select count(o) from " + cls.getName() + " o where (o." + attribute + " >= "
+				+ "?1) order by o." + attribute + " ASC");
+		query.setParameter(1, value);
+		return (Long) query.getSingleResult();
+	}
+
+	public <T extends JpaObject> Long countLessThanOrEqualToAsc(Class<T> cls, String attribute, Object value)
+			throws Exception {
+		EntityManager em = this.get(cls);
+		Query query = em.createQuery("select count(o) from " + cls.getName() + " o where (o." + attribute + " <= "
+				+ "?1) order by o." + attribute + " ASC");
+		query.setParameter(1, value);
+		return (Long) query.getSingleResult();
+	}
+
 	public <T extends JpaObject> Long countEqual(Class<T> cls, String attribute, Object value) throws Exception {
 		EntityManager em = this.get(cls);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
@@ -1164,4 +1243,25 @@ public class EntityManagerContainer extends EntityManagerContainerBasic {
 		List<W> list = new ArrayList<>(os);
 		return list;
 	}
+
+	public <T extends JpaObject> String conflict(Class<T> clz, T t) throws Exception {
+		EntityManager em = this.get(clz);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		for (Field field : this.entityManagerContainerFactory.getFlagFields(clz)) {
+			Object value = t.get(field.getName());
+			if ((null != value) && StringUtils.isNotEmpty(Objects.toString(value))) {
+				CriteriaQuery<Long> cq = cb.createQuery(Long.class);
+				Root<T> root = cq.from(clz);
+				Predicate p = cb.disjunction();
+				for (Field f : this.entityManagerContainerFactory.getFlagFields(clz)) {
+					p = cb.or(p, cb.equal(root.get(f.getName()), value));
+				}
+				p = cb.and(p, cb.notEqual(root.get(JpaObject.id_FIELDNAME), t.getId()));
+				if (em.createQuery(cq.select(cb.count(root)).where(p)).getSingleResult() > 0) {
+					return field.getName() + ":" + Objects.toString(value);
+				}
+			}
+		}
+		return null;
+	}
 }

+ 20 - 4
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/EntityManagerContainerFactory.java

@@ -14,18 +14,29 @@ import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.entity.JpaObject;
 import com.x.base.core.entity.annotation.CheckPersist;
 import com.x.base.core.entity.annotation.CheckRemove;
+import com.x.base.core.project.AbstractContext;
 import com.x.base.core.project.config.DataMappings;
 
 public class EntityManagerContainerFactory extends SliceEntityManagerContainerFactory {
 
 	private volatile static EntityManagerContainerFactory instance;
 
-	public static void init(String webApplicationDirectory, DataMappings dataMappings) throws Exception {
+//	public static void init(String webApplicationDirectory, DataMappings dataMappings) throws Exception {
+//		synchronized (EntityManagerContainerFactory.class) {
+//			if (instance != null) {
+//				EntityManagerContainerFactory.close();
+//			}
+//			instance = new EntityManagerContainerFactory(webApplicationDirectory, dataMappings);
+//		}
+//	}
+
+	public static void init(String webApplicationDirectory, DataMappings dataMappings, List<String> entities)
+			throws Exception {
 		synchronized (EntityManagerContainerFactory.class) {
 			if (instance != null) {
 				EntityManagerContainerFactory.close();
 			}
-			instance = new EntityManagerContainerFactory(webApplicationDirectory, dataMappings);
+			instance = new EntityManagerContainerFactory(webApplicationDirectory, dataMappings, entities);
 		}
 	}
 
@@ -54,10 +65,15 @@ public class EntityManagerContainerFactory extends SliceEntityManagerContainerFa
 		return instance;
 	}
 
-	private EntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings) throws Exception {
-		super(webApplicationDirectory, dataMappings);
+	private EntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings,
+			List<String> entities) throws Exception {
+		super(webApplicationDirectory, dataMappings, entities);
 	}
 
+//	private EntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings) throws Exception {
+//		super(webApplicationDirectory, dataMappings);
+//	}
+
 	private EntityManagerContainerFactory(String source) throws Exception {
 		super(source);
 	}

+ 115 - 32
o2server/x_base_core_project/src/main/java/com/x/base/core/container/factory/SliceEntityManagerContainerFactory.java

@@ -5,6 +5,7 @@ import java.io.FileWriter;
 import java.lang.reflect.Field;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -20,8 +21,11 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.openjpa.persistence.OpenJPAPersistence;
 import org.apache.openjpa.persistence.PersistenceProductDerivation;
+import org.apache.openjpa.persistence.PersistenceProviderImpl;
 import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
 import org.dom4j.Element;
+import org.dom4j.QName;
 import org.dom4j.io.OutputFormat;
 import org.dom4j.io.SAXReader;
 import org.dom4j.io.XMLWriter;
@@ -31,11 +35,15 @@ import com.x.base.core.entity.annotation.CheckPersist;
 import com.x.base.core.entity.annotation.CheckRemove;
 import com.x.base.core.entity.annotation.Flag;
 import com.x.base.core.entity.annotation.RestrictFlag;
+import com.x.base.core.entity.tools.JpaObjectTools;
+import com.x.base.core.project.AbstractContext;
 import com.x.base.core.project.config.DataMappings;
+import com.x.base.core.project.tools.ListTools;
 
 public abstract class SliceEntityManagerContainerFactory {
 
-	protected static String persistence_xml_path = "META-INF/x_persistence.xml";
+	// protected static String persistence_xml_path = "META-INF/x_persistence.xml";
+	protected static String PERSISTENCE_XML_PATH = "META-INF/persistence.xml";
 
 	/* class 与 entityManagerFactory 映射表 */
 	protected Map<Class<? extends JpaObject>, EntityManagerFactory> entityManagerFactoryMap = new ConcurrentHashMap<Class<? extends JpaObject>, EntityManagerFactory>();
@@ -48,27 +56,54 @@ public abstract class SliceEntityManagerContainerFactory {
 	/* class 与 class 中需要检查 Remove 字段的对应表 */
 	protected Map<Class<? extends JpaObject>, Map<Field, CheckRemove>> checkRemoveFieldMap = new ConcurrentHashMap<Class<? extends JpaObject>, Map<Field, CheckRemove>>();
 
-	protected SliceEntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings)
-			throws Exception {
-		Set<Class<? extends JpaObject>> classes = mergePersistenceXml(webApplicationDirectory, dataMappings);
+//	protected SliceEntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings)
+//			throws Exception {
+////		Set<Class<? extends JpaObject>> classes = mergePersistenceXml(webApplicationDirectory, dataMappings);
+//		Set<Class<? extends JpaObject>> classes = persistenceXml(webApplicationDirectory, dataMappings,);
+//		for (Class<? extends JpaObject> clz : classes) {
+//			checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
+//			checkRemoveFieldMap.put(clz, this.loadCheckRemoveField(clz));
+//			entityManagerFactoryMap.put(clz,
+//					OpenJPAPersistence.createEntityManagerFactory(clz.getCanonicalName(), PERSISTENCE_XML_PATH));
+//			flagMap.put(clz, new ArrayList<Field>());
+//			restrictFlagMap.put(clz, new ArrayList<Field>());
+//			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Id.class)) {
+//				flagMap.get(clz).add(o);
+//				restrictFlagMap.get(clz).add(o);
+//			}
+//			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Flag.class)) {
+//				flagMap.get(clz).add(o);
+//				restrictFlagMap.get(clz).add(o);
+//			}
+//			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, RestrictFlag.class)) {
+//				restrictFlagMap.get(clz).add(o);
+//			}
+//		}
+//	}
+
+	protected SliceEntityManagerContainerFactory(String webApplicationDirectory, DataMappings dataMappings,
+			List<String> entities) throws Exception {
+		Set<Class<? extends JpaObject>> classes = persistenceXml(webApplicationDirectory, dataMappings, entities);
 		for (Class<? extends JpaObject> clz : classes) {
 			checkPersistFieldMap.put(clz, this.loadCheckPersistField(clz));
-			checkRemoveFieldMap.put(clz, loadCheckRemoveField(clz));
+			checkRemoveFieldMap.put(clz, this.loadCheckRemoveField(clz));
 			entityManagerFactoryMap.put(clz,
-					OpenJPAPersistence.createEntityManagerFactory(clz.getCanonicalName(), persistence_xml_path));
-			flagMap.put(clz, new ArrayList<Field>());
-			restrictFlagMap.put(clz, new ArrayList<Field>());
+					OpenJPAPersistence.createEntityManagerFactory(clz.getCanonicalName(), PERSISTENCE_XML_PATH));
+			List<Field> flagFields = new ArrayList<>();
+			List<Field> restrictFlagFields = new ArrayList<>();
 			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Id.class)) {
-				flagMap.get(clz).add(o);
-				restrictFlagMap.get(clz).add(o);
+				flagFields.add(o);
+				restrictFlagFields.add(o);
 			}
 			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, Flag.class)) {
-				flagMap.get(clz).add(o);
-				restrictFlagMap.get(clz).add(o);
+				flagFields.add(o);
+				restrictFlagFields.add(o);
 			}
 			for (Field o : FieldUtils.getFieldsListWithAnnotation(clz, RestrictFlag.class)) {
-				restrictFlagMap.get(clz).add(o);
+				restrictFlagFields.add(o);
 			}
+			flagMap.put(clz, Collections.unmodifiableList(flagFields));
+			restrictFlagMap.put(clz, Collections.unmodifiableList(restrictFlagFields));
 		}
 	}
 
@@ -84,34 +119,43 @@ public abstract class SliceEntityManagerContainerFactory {
 
 	/** 扫描受管实体,生成 x_perisitence.xml */
 	@SuppressWarnings("unchecked")
-	private Set<Class<? extends JpaObject>> mergePersistenceXml(String webApplicationDirectory,
-			DataMappings dataMappings) throws Exception {
-		String name = null;
+	private Set<Class<? extends JpaObject>> persistenceXml(String webApplicationDirectory, DataMappings dataMappings,
+			List<String> entities) throws Exception {
+		String name = "";
+		Set<Class<? extends JpaObject>> classes = new HashSet<>();
 		try {
-			Set<Class<? extends JpaObject>> classes = new HashSet<>();
-			File file = new File(webApplicationDirectory + "/WEB-INF/classes/" + persistence_xml_path);
-			SAXReader reader = new SAXReader();
-			Document document = reader.read(file);
-			for (Object o : document.getRootElement().elements("persistence-unit")) {
-				Element unit = (Element) o;
-				name = unit.attribute("name").getValue();
-				// System.out.println("try to load entity class:" + name);
-				Element properties = unit.element("properties");
-				if (null != properties) {
-					properties.clearContent();
-				} else {
-					properties = unit.addElement("properties");
+			List<String> names = new ArrayList<>();
+			names.addAll(dataMappings.keySet());
+			names = ListTools.includesExcludesWildcard(names, entities, null);
+			Document document = DocumentHelper.createDocument();
+			Element persistence = document.addElement("persistence", "http://java.sun.com/xml/ns/persistence");
+			persistence.addAttribute(QName.get("schemaLocation", "xsi", "http://www.w3.org/2001/XMLSchema-instance"),
+					"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd");
+			persistence.addAttribute("version", "2.0");
+			for (String className : names) {
+				name = className;
+				Class<? extends JpaObject> clazz = (Class<JpaObject>) Class.forName(className);
+				Element unit = persistence.addElement("persistence-unit");
+				unit.addAttribute("name", className);
+				unit.addAttribute("transaction-type", "RESOURCE_LOCAL");
+				Element provider = unit.addElement("provider");
+				provider.addText(PersistenceProviderImpl.class.getCanonicalName());
+				for (Class<?> o : JpaObjectTools.scanMappedSuperclass(clazz)) {
+					Element mapped_element = unit.addElement("class");
+					mapped_element.addText(o.getCanonicalName());
 				}
-				for (Entry<String, String> entry : SlicePropertiesBuilder.getPropertiesDBCP(dataMappings.get(name))
+				Element slice_unit_properties = unit.addElement("properties");
+				for (Entry<String, String> entry : SlicePropertiesBuilder.getPropertiesDBCP(dataMappings.get(className))
 						.entrySet()) {
-					Element property = properties.addElement("property");
+					Element property = slice_unit_properties.addElement("property");
 					property.addAttribute("name", entry.getKey());
 					property.addAttribute("value", entry.getValue());
 				}
-				classes.add((Class<JpaObject>) Class.forName(name));
+				classes.add(clazz);
 			}
 			OutputFormat format = OutputFormat.createPrettyPrint();
 			format.setEncoding("UTF-8");
+			File file = new File(webApplicationDirectory + "/WEB-INF/classes/" + PERSISTENCE_XML_PATH);
 			XMLWriter writer = new XMLWriter(new FileWriter(file), format);
 			writer.write(document);
 			writer.close();
@@ -121,6 +165,45 @@ public abstract class SliceEntityManagerContainerFactory {
 		}
 	}
 
+//	/** 扫描受管实体,生成 x_perisitence.xml */
+//	@SuppressWarnings("unchecked")
+//	private Set<Class<? extends JpaObject>> mergePersistenceXml(String webApplicationDirectory,
+//			DataMappings dataMappings) throws Exception {
+//		String name = null;
+//		try {
+//			Set<Class<? extends JpaObject>> classes = new HashSet<>();
+//			File file = new File(webApplicationDirectory + "/WEB-INF/classes/" + persistence_xml_path);
+//			SAXReader reader = new SAXReader();
+//			Document document = reader.read(file);
+//			for (Object o : document.getRootElement().elements("persistence-unit")) {
+//				Element unit = (Element) o;
+//				name = unit.attribute("name").getValue();
+//				// System.out.println("try to load entity class:" + name);
+//				Element properties = unit.element("properties");
+//				if (null != properties) {
+//					properties.clearContent();
+//				} else {
+//					properties = unit.addElement("properties");
+//				}
+//				for (Entry<String, String> entry : SlicePropertiesBuilder.getPropertiesDBCP(dataMappings.get(name))
+//						.entrySet()) {
+//					Element property = properties.addElement("property");
+//					property.addAttribute("name", entry.getKey());
+//					property.addAttribute("value", entry.getValue());
+//				}
+//				classes.add((Class<JpaObject>) Class.forName(name));
+//			}
+//			OutputFormat format = OutputFormat.createPrettyPrint();
+//			format.setEncoding("UTF-8");
+//			XMLWriter writer = new XMLWriter(new FileWriter(file), format);
+//			writer.write(document);
+//			writer.close();
+//			return classes;
+//		} catch (Exception e) {
+//			throw new Exception("registContainerEntity error.className:" + name, e);
+//		}
+//	}
+
 	@SuppressWarnings("unchecked")
 	public <T> Class<T> assignableFrom(Class<T> cls) throws Exception {
 		for (Class<?> clazz : this.entityManagerFactoryMap.keySet()) {

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/entity/JpaObject.java

@@ -68,7 +68,7 @@ public abstract class JpaObject extends GsonPropertyObject implements Serializab
 
 	public static final String updateTime_FIELDNAME = "updateTime";
 
-	public static final String sequence_FIELDNAME = "sequence";
+	public static final String sequence_FIELDNAME =  "sequence";
 
 	public static final String distributeFactor_FIELDNAME = "distributeFactor";
 

+ 12 - 66
o2server/x_base_core_project/src/main/java/com/x/base/core/entity/tools/JpaObjectTools.java

@@ -1,27 +1,20 @@
 package com.x.base.core.entity.tools;
 
 import java.lang.reflect.Field;
-import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
 
 import javax.persistence.Column;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.Expression;
+import javax.persistence.MappedSuperclass;
 import javax.persistence.criteria.Path;
 
-import org.apache.commons.collections4.ListUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
-import org.apache.commons.lang3.tuple.ImmutablePair;
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.openjpa.persistence.jdbc.ElementColumn;
 
 import com.x.base.core.entity.JpaObject;
-import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.StringTools;
 
 public class JpaObjectTools {
@@ -72,64 +65,17 @@ public class JpaObjectTools {
 		return (date == null) ? null : new Date(date.getTime());
 	}
 
-	// /*
-	// * 在使用cb.isMember的情况下,将List<String> 转化为Expression<Set<String>>
-	// */
-	// public static <T extends JpaObject> Expression<Set<String>>
-	// stringValueListToIsMemberExpression(Class<T> cls,
-	// String attribute, CriteriaBuilder cb, List<String> values) throws Exception {
-	// HashMap<String, String> map = new HashMap<String, String>();
-	// StringTools.filterLessThanOrEqualToUtf8Length(values,
-	// JpaObjectTools.definedLength(cls, attribute))
-	// .forEach(o -> {
-	// map.put(o, o);
-	// });
-	// return cb.keys(map);
-	// }
-	
-	/* 根据一组一组对齐 */
-	public static <L extends JpaObject, R extends JpaObject> List<Pair<L, R>> align(List<L> lefts, List<R> rights,
-			boolean skipNull, boolean skipEmptyString, String... fields) throws Exception {
-		List<Pair<L, R>> list = new ArrayList<>();
-		List<L> find_lefts = new ArrayList<>();
-		List<R> find_rights = new ArrayList<>();
-		loop: for (L l : ListTools.trim(lefts, true, false)) {
-			for (R r : ListTools.trim(rights, true, false)) {
-				if (StringUtils.isNotEmpty(l.getId()) && StringUtils.equals(l.getId(), r.getId())) {
-					list.add(new ImmutablePair<>(l, r));
-					find_lefts.add(l);
-					find_rights.add(r);
-					continue loop;
-				}
+	public static Set<Class<?>> scanMappedSuperclass(Class<?> clz) throws Exception {
+		Set<Class<?>> set = new HashSet<Class<?>>();
+		set.add(clz);
+		Class<?> s = clz.getSuperclass();
+		while (null != s) {
+			if (null != s.getAnnotation(MappedSuperclass.class)) {
+				set.add(s);
 			}
+			s = s.getSuperclass();
 		}
-		for (String field : fields) {
-			loop: for (L l : ListUtils.subtract(ListTools.trim(lefts, true, false), find_lefts)) {
-				Object lo = l.get(field);
-				if (skipNull && (null == lo)) {
-					continue;
-				}
-				if (skipEmptyString && CharSequence.class.isAssignableFrom(lo.getClass())
-						&& (StringUtils.isEmpty(Objects.toString(lo, "")))) {
-					continue;
-				}
-				for (R r : ListUtils.subtract(ListTools.trim(rights, true, false), find_rights)) {
-					Object ro = r.get(field);
-					if (Objects.equals(lo, ro)) {
-						list.add(new ImmutablePair<>(l, r));
-						find_lefts.add(l);
-						find_rights.add(r);
-						continue loop;
-					}
-				}
-			}
-		}
-		for (L l : ListUtils.subtract(ListTools.trim(lefts, true, false), find_lefts)) {
-			list.add(new ImmutablePair<>(l, null));
-		}
-		for (R r : ListUtils.subtract(ListTools.trim(rights, true, false), find_rights)) {
-			list.add(new ImmutablePair<>(null, r));
-		}
-		return list;
+		return set;
 	}
+
 }

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/openjpa/jdbc/sql/DMDictionary.java

@@ -73,7 +73,7 @@ public class DMDictionary extends DBDictionary {
 				"REPLICATE", "RESIZE", "RESTORE", "RESTRICT", "RETURN", "RETURNING", "REVERSE", "REVOKE", "RIGHT",
 				"ROLE", "ROLLBACK", "ROLLFILE", "ROLLUP", "ROOT", "ROW", "ROWCOUNT", "ROWID", "ROWNUM", "ROWS", "RULE",
 				"SALT", "SAVEPOINT", "SBYTE", "SCHEMA", "SCOPE", "SEALED", "SECTION", "SECOND", "SELECT", "SELSTAR",
-				"SEQUENCE", "SERERR", "SERIALIZABLE", "SERVER", "SESSION_PER_USER", "SET", "SETS", "SHARE", "SHORT",
+				  "SEQUENCE", "SERERR", "SERIALIZABLE", "SERVER", "SESSION_PER_USER", "SET", "SETS", "SHARE", "SHORT",
 				"SHUTDOWN", "SIBLINGS", "SIZE", "SIZEOF", "SMALLINT", "SNAPSHOT", "SOME", "SOUND", "SPLIT", "SQL",
 				"STANDBY", "START_WITH", "STARTUP", "STATEMENT", "STATIC", "STAT", "STDDEV", "STORAGE", "STORE",
 				"STRING", "STRUCT", "STYLE", "SUBSTRING", "SUCCESSFUL", "SUM", "SUSPEND", "SWITCH", "SYNC", "SYNONYM",

+ 14 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/AbstractContext.java

@@ -19,4 +19,18 @@ public abstract class AbstractContext {
 		return module.name();
 	}
 
+	/* 应用类 */
+	protected Class<?> clazz;
+
+	public Class<?> clazz() {
+		return this.clazz;
+	}
+
+	/* 应用类对象 */
+	protected Deployable clazzInstance;
+
+	public Deployable clazzInstance() {
+		return this.clazzInstance;
+	}
+
 }

+ 1 - 15
o2server/x_base_core_project/src/main/java/com/x/base/core/project/Context.java

@@ -88,19 +88,6 @@ public class Context extends AbstractContext {
 		return this.servletContext;
 	}
 
-	/* 应用类 */
-	private Class<?> clazz;
-
-	public Class<?> clazz() {
-		return this.clazz;
-	}
-
-	private Deployable clazzInstance;
-
-	public Deployable clazzInstance() {
-		return this.clazzInstance;
-	}
-
 	/* 随机令牌 */
 	private volatile String token;
 
@@ -293,10 +280,9 @@ public class Context extends AbstractContext {
 					dataMappings = rep.getData(DataMappings.class);
 				} catch (Exception e) {
 					e.printStackTrace();
-					Thread.sleep(5000);
 				}
 			} while (null == dataMappings);
-			EntityManagerContainerFactory.init(path, dataMappings);
+			EntityManagerContainerFactory.init(path, dataMappings, this.clazzInstance.dependency.containerEntities);
 		}
 	}
 

+ 3 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/Dependency.java

@@ -8,10 +8,13 @@ public class Dependency {
 	public Dependency() {
 		this.customJars = new ArrayList<String>();
 		this.storeJars = new ArrayList<String>();
+		this.dynamicJars = new ArrayList<String>();
 		this.containerEntities = new ArrayList<String>();
 		this.storageTypes = new ArrayList<String>();
 	}
 
+	public List<String> dynamicJars = new ArrayList<>();
+
 	public List<String> customJars = new ArrayList<>();
 
 	public List<String> storeJars = new ArrayList<>();

+ 71 - 7
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Config.java

@@ -71,9 +71,17 @@ public class Config {
 	public static final String DIR_CUSTOM_JARS = "custom/jars";
 	public static final String DIR_DYNAMIC = "dynamic";
 	public static final String DIR_DYNAMIC_JARS = "dynamic/jars";
+	public static final String DIR_JVM = "jvm";
+	public static final String DIR_JVM_AIX = "jvm/aix";
+	public static final String DIR_JVM_LINUX = "jvm/linux";
+	public static final String DIR_JVM_MACOS = "jvm/macos";
+	public static final String DIR_JVM_WINDOWS = "jvm/windows";
 	public static final String DIR_LOCAL = "local";
 	public static final String DIR_LOCAL_TEMP = "local/temp";
 	public static final String DIR_LOCAL_TEMP_CLASSES = "local/temp/classes";
+	public static final String DIR_LOCAL_TEMP_DYNAMIC = "local/temp/dynamic";
+	public static final String DIR_LOCAL_TEMP_DYNAMIC_SRC = "local/temp/dynamic/src";
+	public static final String DIR_LOCAL_TEMP_DYNAMIC_TARGET = "local/temp/dynamic/target";
 	public static final String DIR_LOGS = "logs";
 	public static final String DIR_SERVERS = "servers";
 	public static final String DIR_SERVERS_APPLICATIONSERVER = "servers/applicationServer";
@@ -102,7 +110,17 @@ public class Config {
 	}
 
 	public static File dir_custom() throws Exception {
-		return new File(base(), DIR_CUSTOM);
+		return dir_custom(true);
+	}
+
+	public static File dir_custom(Boolean force) throws Exception {
+		File dir = new File(base(), DIR_CUSTOM);
+		if (force) {
+			if ((!dir.exists()) || dir.isFile()) {
+				FileUtils.forceMkdir(dir);
+			}
+		}
+		return dir;
 	}
 
 	public static File dir_custom_jars() throws Exception {
@@ -127,6 +145,26 @@ public class Config {
 		return dir;
 	}
 
+	public static File dir_jvm() throws Exception {
+		return new File(base(), DIR_JVM);
+	}
+
+	public static File dir_jvm_aix() throws Exception {
+		return new File(base(), DIR_JVM_AIX);
+	}
+
+	public static File dir_jvm_linux() throws Exception {
+		return new File(base(), DIR_JVM_LINUX);
+	}
+
+	public static File dir_jvm_macos() throws Exception {
+		return new File(base(), DIR_JVM_MACOS);
+	}
+
+	public static File dir_jvm_windows() throws Exception {
+		return new File(base(), DIR_JVM_WINDOWS);
+	}
+
 	public static File dir_local() throws Exception {
 		return new File(base(), DIR_LOCAL);
 	}
@@ -139,6 +177,38 @@ public class Config {
 		return new File(base(), DIR_LOCAL_TEMP_CLASSES);
 	}
 
+	public static File dir_local_temp_dynamic() throws Exception {
+		return new File(base(), DIR_LOCAL_TEMP_DYNAMIC);
+	}
+
+	public static File dir_local_temp_dynamic_src() throws Exception {
+		return dir_local_temp_dynamic_src(false);
+	}
+
+	public static File dir_local_temp_dynamic_src(Boolean force) throws Exception {
+		File dir = new File(base(), DIR_LOCAL_TEMP_DYNAMIC_SRC);
+		if (force) {
+			if ((!dir.exists()) || dir.isFile()) {
+				FileUtils.forceMkdir(dir);
+			}
+		}
+		return dir;
+	}
+
+	public static File dir_local_temp_dynamic_target() throws Exception {
+		return dir_local_temp_dynamic_target(false);
+	}
+
+	public static File dir_local_temp_dynamic_target(Boolean force) throws Exception {
+		File dir = new File(base(), DIR_LOCAL_TEMP_DYNAMIC_TARGET);
+		if (force) {
+			if ((!dir.exists()) || dir.isFile()) {
+				FileUtils.forceMkdir(dir);
+			}
+		}
+		return dir;
+	}
+
 	public static File dir_logs() throws Exception {
 		return new File(base(), DIR_LOGS);
 	}
@@ -728,12 +798,6 @@ public class Config {
 			}
 			return list;
 		}
-//		ScanResult scanResult = new FastClasspathScanner(Packages.PREFIX).scan();
-//		List<String> names = scanResult.getNamesOfClassesWithAnnotation(ContainerEntity.class);
-//		List<Class<?>> list = new ArrayList<>();
-//		for (String str : names) {
-//			list.add(Class.forName(str));
-//		}
 	}
 
 	public static Node currentNode() throws Exception {

+ 13 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/exception/ExceptionEntityFieldEmpty.java

@@ -0,0 +1,13 @@
+package com.x.base.core.project.exception;
+
+import com.x.base.core.entity.JpaObject;
+
+public class ExceptionEntityFieldEmpty extends PromptException {
+
+	private static final long serialVersionUID = -5285504041469792111L;
+
+	public <T extends JpaObject> ExceptionEntityFieldEmpty(Class<T> cls, String field) {
+		super("实体类: {} , 字段: {} 不能为空.", cls.getName(), field);
+	}
+
+}

+ 27 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/WrapLong.java

@@ -0,0 +1,27 @@
+package com.x.base.core.project.jaxrs;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.gson.GsonPropertyObject;
+
+public class WrapLong extends GsonPropertyObject {
+
+	public WrapLong() {
+
+	}
+
+	public WrapLong(Long o) {
+		this.value = o;
+	}
+
+	@FieldDescribe("长整型值")
+	private Long value;
+
+	public Long getValue() {
+		return value;
+	}
+
+	public void setValue(Long value) {
+		this.value = value;
+	}
+
+}

+ 2 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/WrapNumber.java

@@ -3,7 +3,7 @@ package com.x.base.core.project.jaxrs;
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.gson.GsonPropertyObject;
 
-public   class WrapNumber extends GsonPropertyObject {
+public class WrapNumber extends GsonPropertyObject {
 
 	public WrapNumber() {
 
@@ -13,7 +13,7 @@ public   class WrapNumber extends GsonPropertyObject {
 		this.value = o;
 	}
 
-	@FieldDescribe("字符串值")
+	@FieldDescribe("字值")
 	private Number value;
 
 	public Number getValue() {

+ 108 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/AbstractRuntime.java

@@ -0,0 +1,108 @@
+package com.x.base.core.project.scripting;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections4.list.TreeList;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.gson.GsonPropertyObject;
+
+public abstract class AbstractRuntime extends GsonPropertyObject {
+
+	@FieldDescribe("当前用户")
+	private String person = "";
+
+	@FieldDescribe("组织")
+	private List<String> unitList = new TreeList<>();
+
+	@FieldDescribe("群组")
+	private List<String> groupList = new TreeList<>();
+
+	@FieldDescribe("角色")
+	private List<String> roleList = new TreeList<>();
+
+	@FieldDescribe("所有群组")
+	private List<String> unitAllList = new TreeList<>();
+
+	@FieldDescribe("身份")
+	private List<String> identityList = new TreeList<>();
+
+	@FieldDescribe("参数")
+	private Map<String, Object> parameter = new HashMap<>();
+
+	@FieldDescribe("数量")
+	private Integer count = 0;
+
+	public Map<String, Object> getParameter() {
+		if (this.parameter == null) {
+			this.parameter = new HashMap<String, Object>();
+		}
+		return this.parameter;
+	}
+
+	public String getPerson() {
+		return person;
+	}
+
+	public void setPerson(String person) {
+		this.person = person;
+	}
+
+	public List<String> getUnitList() {
+		return unitList;
+	}
+
+	public void setUnitList(List<String> unitList) {
+		this.unitList = unitList;
+	}
+
+	public List<String> getGroupList() {
+		return groupList;
+	}
+
+	public void setGroupList(List<String> groupList) {
+		this.groupList = groupList;
+	}
+
+	public List<String> getRoleList() {
+		return roleList;
+	}
+
+	public void setRoleList(List<String> roleList) {
+		this.roleList = roleList;
+	}
+
+	public List<String> getUnitAllList() {
+		return unitAllList;
+	}
+
+	public void setUnitAllList(List<String> unitAllList) {
+		this.unitAllList = unitAllList;
+	}
+
+	public List<String> getIdentityList() {
+		return identityList;
+	}
+
+	public void setIdentityList(List<String> identityList) {
+		this.identityList = identityList;
+	}
+
+	public Integer getCount() {
+		return count;
+	}
+
+	public void setCount(Integer count) {
+		this.count = count;
+	}
+
+	public void setParameter(Map<String, Object> parameter) {
+		this.parameter = parameter;
+	}
+
+
+ 
+
+}

+ 4 - 4
o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/Scripting.java

@@ -1,15 +1,13 @@
 package com.x.base.core.project.scripting;
 
-import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 
 public class Scripting {
 
 	public static final String ENGINE_NAME = "JavaScript";
-
 	private static ScriptEngineManager scriptEngineManager;
 
-	public static ScriptEngine getEngine() {
+	public static ScriptingEngine getEngine() {
 		if (scriptEngineManager == null) {
 			synchronized (Scripting.class) {
 				if (scriptEngineManager == null) {
@@ -17,6 +15,8 @@ public class Scripting {
 				}
 			}
 		}
-		return scriptEngineManager.getEngineByName(ENGINE_NAME);
+		ScriptingEngine engine = new ScriptingEngine(scriptEngineManager.getEngineByName(ENGINE_NAME));
+		return engine;
 	}
+
 }

+ 206 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/ScriptingEngine.java

@@ -0,0 +1,206 @@
+package com.x.base.core.project.scripting;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+
+import javax.script.ScriptEngine;
+
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.exception.ExceptionScriptEval;
+
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
+
+public class ScriptingEngine {
+
+	public ScriptEngine scriptEngine;
+
+	private static final String distinguishedName = "distinguishedName";
+
+	public static final String BINDINGNAME_ORGANIZATION = "organization";
+	public static final String BINDINGNAME_WORKCONTEXT = "workContext";
+	public static final String BINDINGNAME_DATA = "data";
+	public static final String BINDINGNAME_WEBSERVICESCLIENT = "webservicesClient";
+	public static final String BINDINGNAME_DICTIONARY = "dictionary";
+	public static final String BINDINGNAME__LOOKUP = "lookup";
+	public static final String BINDINGNAME_APPLICATIONS = "applications";
+	public static final String BINDINGNAME_PARAMETER = "parameter";
+
+	public ScriptingEngine(ScriptEngine scriptEngine) {
+		this.scriptEngine = scriptEngine;
+	}
+
+	public ScriptingEngine binding(String key, Object value) {
+		this.scriptEngine.put(key, value);
+		return this;
+	}
+
+	public ScriptingEngine binding(Map<String, Object> map) {
+		for (Entry<String, Object> entry : map.entrySet()) {
+			scriptEngine.put(entry.getKey(), entry.getValue());
+		}
+		return this;
+	}
+
+	public ScriptingEngine bindingOrganization(Object o) {
+		this.scriptEngine.put(BINDINGNAME_ORGANIZATION, o);
+		return this;
+	}
+
+	public ScriptingEngine bindingWorkContext(Object o) {
+		this.scriptEngine.put(BINDINGNAME_WORKCONTEXT, o);
+		return this;
+	}
+
+	public ScriptingEngine bindingData(Object o) {
+		this.scriptEngine.put(BINDINGNAME_DATA, o);
+		return this;
+	}
+
+	public ScriptingEngine bindingWebservicesClient(Object o) {
+		this.scriptEngine.put(BINDINGNAME_WEBSERVICESCLIENT, o);
+		return this;
+	}
+
+	public ScriptingEngine bindingDictionary(Object o) {
+		this.scriptEngine.put(BINDINGNAME_DICTIONARY, o);
+		return this;
+	}
+
+	public ScriptingEngine bindingApplications(Object o) {
+		this.scriptEngine.put(BINDINGNAME_APPLICATIONS, o);
+		return this;
+	}
+
+	public ScriptingEngine bindingParameter(Object o) {
+		this.scriptEngine.put(BINDINGNAME_PARAMETER, o);
+		return this;
+	}
+
+	public Object eval(String scriptText) throws Exception {
+		StringBuffer sb = new StringBuffer();
+		try {
+			sb.append("(function(){").append(System.lineSeparator());
+			if (StringUtils.isNotEmpty(scriptText)) {
+				sb.append(scriptText).append(System.lineSeparator());
+			}
+			sb.append("})();");
+			Object obj = this.scriptEngine.eval(sb.toString());
+			return obj;
+		} catch (Exception e) {
+			throw new ExceptionScriptEval(e, sb.toString());
+		}
+	}
+
+	public List<String> evalAsStringList(String scriptText) throws Exception {
+		Object o = this.eval(scriptText);
+		return this.readAsStringList(o);
+	}
+
+	public String evalAsString(String scriptText) throws Exception {
+		Object o = this.eval(scriptText);
+		return Objects.toString(o);
+	}
+
+	public Boolean evalAsBoolean(String scriptText) throws Exception {
+		Object o = this.eval(scriptText);
+		return (Boolean) o;
+	}
+
+	public List<String> evalExtrectDistinguishedName(String scriptText) throws Exception {
+		List<String> list = new ArrayList<>();
+		Object o = this.eval(scriptText);
+		if (null != o) {
+			if (o instanceof CharSequence) {
+				list.add(Objects.toString(o, ""));
+			} else if (o instanceof Iterable) {
+				for (Object obj : (Iterable<?>) o) {
+					if (null != obj) {
+						if (obj instanceof CharSequence) {
+							list.add(Objects.toString(obj, ""));
+						} else {
+							Object d = PropertyUtils.getProperty(obj, distinguishedName);
+							if (null != d) {
+								list.add(Objects.toString(d, ""));
+							}
+						}
+					}
+				}
+			} else if (o instanceof ScriptObjectMirror) {
+				ScriptObjectMirror som = (ScriptObjectMirror) o;
+				if (som.isArray()) {
+					Object[] objs = (som.to(Object[].class));
+					for (Object obj : objs) {
+						if (null != obj) {
+							if (obj instanceof CharSequence) {
+								list.add(Objects.toString(obj, ""));
+							} else {
+								Object d = PropertyUtils.getProperty(obj, distinguishedName);
+								if (null != d) {
+									list.add(Objects.toString(d, ""));
+								}
+							}
+						}
+					}
+				} else {
+					Object d = PropertyUtils.getProperty(o, distinguishedName);
+					if (null != d) {
+						list.add(Objects.toString(d, ""));
+					}
+				}
+			}
+		}
+		return list;
+	}
+
+	private List<String> readAsStringList(Object obj) throws Exception {
+		List<String> list = new ArrayList<>();
+		for (Object o : this.iterator(obj)) {
+			list.add(Objects.toString(o));
+		}
+		return list;
+	}
+
+	private List<Object> iterator(Object obj) throws Exception {
+		List<Object> results = new ArrayList<>();
+		this.iterator(obj, results);
+		return results;
+	}
+
+	private void iterator(Object obj, List<Object> results) throws Exception {
+		if (null == obj) {
+			return;
+		}
+		List<Object> list = new ArrayList<>();
+		if (obj.getClass().isArray()) {
+			for (Object o : (Object[]) obj) {
+				list.add(o);
+			}
+		} else if (obj instanceof Collection) {
+			for (Object o : (Collection<?>) obj) {
+				list.add(o);
+			}
+		} else if (obj instanceof ScriptObjectMirror) {
+			ScriptObjectMirror som = (ScriptObjectMirror) obj;
+			if (som.isArray()) {
+				Object[] os = (som.to(Object[].class));
+				for (Object o : os) {
+					list.add(o);
+				}
+			} else {
+				results.add(som);
+			}
+		} else {
+			results.add(obj);
+		}
+		for (Object o : list) {
+			iterator(o, results);
+		}
+	}
+
+}

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

@@ -18,8 +18,6 @@ import org.apache.commons.collections4.set.ListOrderedSet;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
 
-import com.x.base.core.project.gson.XGsonBuilder;
-
 public class ListTools {
 
 	public static <T> List<T> add(List<T> list, boolean ignoreNull, boolean unique,

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

@@ -7,6 +7,7 @@ import java.net.URLEncoder;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -19,6 +20,7 @@ import java.util.stream.Collectors;
 
 import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.collections4.ListUtils;
 import org.apache.commons.collections4.set.ListOrderedSet;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.ArrayUtils;
@@ -316,4 +318,59 @@ public class StringTools {
 		return os;
 	}
 
+	public static boolean matchWildcard(String str, String pattern) {
+		if (StringUtils.isNotEmpty(str) && StringUtils.isNotEmpty(pattern) && StringUtils.contains(pattern, "*")) {
+			if (StringUtils.equals(pattern, "*")) {
+				return true;
+			}
+			if (StringUtils.startsWith(pattern, "*")) {
+				return StringUtils.endsWith(str, StringUtils.substringAfter(pattern, "*"));
+			}
+			if (StringUtils.endsWith(pattern, "*")) {
+				return StringUtils.startsWith(str, StringUtils.substringBeforeLast(pattern, "*"));
+			}
+			String[] parts = StringUtils.split(pattern, "*", 2);
+			if (StringUtils.startsWith(str, parts[0]) && StringUtils.endsWith(str, parts[1])) {
+				return true;
+			} else {
+				return false;
+			}
+		} else {
+			return StringUtils.equals(str, pattern);
+		}
+	}
+
+	public static List<String> includesExcludesWithWildcard(List<String> list, Collection<String> includes,
+			Collection<String> excludes) {
+		if (list == null || list.isEmpty()) {
+			return list;
+		}
+		List<String> in = new ArrayList<>();
+		if (includes == null || includes.isEmpty()) {
+			in.addAll(list);
+		} else {
+			for (String str : list) {
+				loop: for (String include : includes) {
+					if (matchWildcard(str, include)) {
+						in.add(str);
+						break loop;
+					}
+				}
+			}
+		}
+		if (excludes == null || excludes.isEmpty()) {
+			return in;
+		} else {
+			List<String> ex = new ArrayList<>();
+			for (String str : in) {
+				loop: for (String exclude : excludes) {
+					if (matchWildcard(str, exclude)) {
+						ex.add(str);
+						break loop;
+					}
+				}
+			}
+			return ListUtils.subtract(in, ex);
+		}
+	}
 }

+ 18 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/webservices/WebservicesClient.java

@@ -0,0 +1,18 @@
+package com.x.base.core.project.webservices;
+
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
+
+public class WebservicesClient {
+	public Object[] jaxws(String wsdl, String method, Object... objects) {
+		Object[] result = null;
+		try {
+			JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
+			Client client = dcf.createClient(wsdl);
+			result = client.invoke(method, objects);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return result;
+	}
+}

+ 1 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_cms_assemble_control.java

@@ -25,6 +25,7 @@ public class x_cms_assemble_control extends AssembleA {
 		dependency.containerEntities.add("com.x.cms.core.entity.CategoryExt");
 		dependency.containerEntities.add("com.x.cms.core.entity.Document");
 		dependency.containerEntities.add("com.x.cms.core.entity.DocumentViewRecord");
+		dependency.containerEntities.add("com.x.cms.core.entity.element.File");
 		dependency.containerEntities.add("com.x.cms.core.entity.FileInfo");
 		dependency.containerEntities.add("com.x.cms.core.entity.Log");
 		dependency.containerEntities.add("com.x.cms.core.entity.Review");

+ 2 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_program_center.java

@@ -6,7 +6,7 @@ import com.x.base.core.project.annotation.ModuleType;
 
 @Module(type = ModuleType.CENTER, category = ModuleCategory.OFFICIAL, name = "中心")
 public class x_program_center extends AssembleC {
-	
+
 	public x_program_center() {
 		super();
 		dependency.containerEntities.add("com.x.program.center.core.entity.Agent");
@@ -48,6 +48,7 @@ public class x_program_center extends AssembleC {
 		dependency.storeJars.add(x_query_core_entity.class.getSimpleName());
 		dependency.storeJars.add(x_portal_core_entity.class.getSimpleName());
 		dependency.storeJars.add(x_general_core_entity.class.getSimpleName());
+		dependency.dynamicJars.add("x_query_dynamic_entity");
 	}
 
 //	public static final String name = "中心";

+ 4 - 36
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_designer.java

@@ -7,7 +7,7 @@ import com.x.base.core.project.annotation.ModuleType;
 
 @Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "数据查询设计")
 public class x_query_assemble_designer extends AssembleA {
-	
+
 	public x_query_assemble_designer() {
 		super();
 		dependency.containerEntities.add("com.x.query.core.entity.Item");
@@ -21,6 +21,7 @@ public class x_query_assemble_designer extends AssembleA {
 		dependency.containerEntities.add("com.x.query.core.entity.neural.InValue");
 		dependency.containerEntities.add("com.x.query.core.entity.neural.OutValue");
 		dependency.containerEntities.add("com.x.query.core.entity.neural.Model");
+		dependency.containerEntities.add("com.x.query.core.entity.schema.*");
 		dependency.containerEntities.add("com.x.processplatform.core.entity.content.Review");
 		dependency.containerEntities.add("com.x.processplatform.core.entity.content.Work");
 		dependency.containerEntities.add("com.x.processplatform.core.entity.content.WorkCompleted");
@@ -28,6 +29,7 @@ public class x_query_assemble_designer extends AssembleA {
 		dependency.containerEntities.add("com.x.cms.core.entity.Document");
 		dependency.containerEntities.add("com.x.cms.core.entity.AppInfo");
 		dependency.containerEntities.add("com.x.cms.core.entity.CategoryInfo");
+		dependency.containerEntities.add("com.x.query.dynamic.entity.*");
 		dependency.storageTypes.add(StorageType.processPlatform.toString());
 		dependency.storeJars.add(x_query_core_entity.class.getSimpleName());
 		dependency.storeJars.add(x_organization_core_entity.class.getSimpleName());
@@ -35,41 +37,7 @@ public class x_query_assemble_designer extends AssembleA {
 		dependency.storeJars.add(x_processplatform_core_entity.class.getSimpleName());
 		dependency.storeJars.add(x_cms_core_entity.class.getSimpleName());
 		dependency.storeJars.add(x_query_core_express.class.getSimpleName());
+		dependency.dynamicJars.add("x_query_dynamic_entity");
 	}
 
-//	public static final String name = "数据查询设计";
-//	public static List<String> containerEntities = new ArrayList<>();
-//	public static List<StorageType> usedStorageTypes = new ArrayList<>();
-//	public static List<Class<? extends Compilable>> dependents = new ArrayList<>();
-//
-//	static {
-//		containerEntities.add("com.x.query.core.entity.Item");
-//		containerEntities.add("com.x.query.core.entity.Query");
-//		containerEntities.add("com.x.query.core.entity.View");
-//		containerEntities.add("com.x.query.core.entity.Stat");
-//		containerEntities.add("com.x.query.core.entity.Reveal");
-//		containerEntities.add("com.x.query.core.entity.neural.Entry");
-//		containerEntities.add("com.x.query.core.entity.neural.InText");
-//		containerEntities.add("com.x.query.core.entity.neural.OutText");
-//		containerEntities.add("com.x.query.core.entity.neural.InValue");
-//		containerEntities.add("com.x.query.core.entity.neural.OutValue");
-//		containerEntities.add("com.x.query.core.entity.neural.Model");
-//		containerEntities.add("com.x.processplatform.core.entity.content.Review");
-//		containerEntities.add("com.x.processplatform.core.entity.content.Work");
-//		containerEntities.add("com.x.processplatform.core.entity.content.WorkCompleted");
-//		containerEntities.add("com.x.processplatform.core.entity.content.Attachment");
-//		containerEntities.add("com.x.cms.core.entity.Document");
-//		containerEntities.add("com.x.cms.core.entity.AppInfo");
-//		containerEntities.add("com.x.cms.core.entity.CategoryInfo");
-//		usedStorageTypes.add(StorageType.processPlatform);
-//		// usedStorageTypes.add(StorageType.cms);
-//		dependents.add(x_base_core_project.class);
-//		dependents.add(x_query_core_entity.class);
-//		dependents.add(x_organization_core_entity.class);
-//		dependents.add(x_organization_core_express.class);
-//		dependents.add(x_processplatform_core_entity.class);
-//		dependents.add(x_cms_core_entity.class);
-//		dependents.add(x_query_core_express.class);
-//	}
-
 }

+ 3 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_surface.java

@@ -7,7 +7,7 @@ import com.x.base.core.project.annotation.ModuleType;
 
 @Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "数据查询")
 public class x_query_assemble_surface extends AssembleA {
-	
+
 	public x_query_assemble_surface() {
 		super();
 		dependency.containerEntities.add("com.x.query.core.entity.Item");
@@ -23,6 +23,7 @@ public class x_query_assemble_surface extends AssembleA {
 		dependency.containerEntities.add("com.x.query.core.entity.neural.InValue");
 		dependency.containerEntities.add("com.x.query.core.entity.neural.OutValue");
 		dependency.containerEntities.add("com.x.query.core.entity.neural.Model");
+		dependency.containerEntities.add("com.x.query.core.entity.schema.*");
 		dependency.containerEntities.add("com.x.processplatform.core.entity.content.Review");
 		dependency.containerEntities.add("com.x.processplatform.core.entity.content.Work");
 		dependency.containerEntities.add("com.x.processplatform.core.entity.content.WorkCompleted");
@@ -30,6 +31,7 @@ public class x_query_assemble_surface extends AssembleA {
 		dependency.containerEntities.add("com.x.cms.core.entity.Document");
 		dependency.containerEntities.add("com.x.cms.core.entity.AppInfo");
 		dependency.containerEntities.add("com.x.cms.core.entity.CategoryInfo");
+		dependency.containerEntities.add("com.x.query.dynamic.entity.*");
 		dependency.storageTypes.add(StorageType.processPlatform.toString());
 		dependency.storageTypes.add(StorageType.cms.toString());
 		dependency.storeJars.add(x_query_core_entity.class.getSimpleName());

+ 1 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_service_processing.java

@@ -23,6 +23,7 @@ public class x_query_service_processing extends ServiceA {
 		dependency.containerEntities.add("com.x.query.core.entity.neural.InValue");
 		dependency.containerEntities.add("com.x.query.core.entity.neural.OutValue");
 		dependency.containerEntities.add("com.x.query.core.entity.neural.Model");
+		dependency.containerEntities.add("com.x.query.core.entity.schema.*");
 		dependency.containerEntities.add("com.x.processplatform.core.entity.content.Review");
 		dependency.containerEntities.add("com.x.processplatform.core.entity.content.Work");
 		dependency.containerEntities.add("com.x.processplatform.core.entity.content.WorkCompleted");

+ 1 - 219
o2server/x_base_core_project/src/test/java/com/x/base/core/project/test/TestClient.java

@@ -1,232 +1,14 @@
 package com.x.base.core.project.test;
 
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
-import java.util.TreeSet;
-import java.util.stream.Collectors;
-
-import javax.imageio.ImageIO;
-
 import org.junit.Test;
 
-import com.x.base.core.project.gson.XGsonBuilder;
-import com.x.base.core.project.tools.DateTools;
-import com.x.base.core.project.tools.ListTools;
-import com.x.base.core.project.tools.StringTools;
-
-
-
 public class TestClient {
 
 	private static final int factor = 16;
 
 	@Test
-	public void test1() throws Exception {
+	public void StringWildcard() throws Exception {
 		System.out.println(Integer.toBinaryString(0xff0000));
 	}
 
-	@Test
-	public void test() throws Exception {
-
-		File file = new File("d:/a.jpg");
-		BufferedImage bufferedImage = ImageIO.read(file);
-		int width = bufferedImage.getWidth();
-		int height = bufferedImage.getHeight();
-		int r = 0;
-		int g = 0;
-		int b = 0;
-		int rr = 0;
-		int gg = 0;
-		int bb = 0;
-		List<String> list = new ArrayList<>();
-		out: for (int w = 0; w < width; w++) {
-			for (int h = 0; h < height; h++) {
-				int pixel = bufferedImage.getRGB(w, h);
-				System.out.println(Integer.toBinaryString(pixel));
-				System.out.println(Integer.toBinaryString(pixel & 0xff0000));
-				System.out.println(Integer.toBinaryString((pixel & 0xff0000) >> 16));
-				if (1 == 1) {
-					break out;
-				}
-				r = (pixel & 0xff0000) >> 16;
-				// r = pixel >>> 16;
-				g = (pixel & 0xff00) >> 8;
-				b = (pixel & 0xff);
-				rr = (((r + factor) / factor) * factor) - 1;
-				gg = (((g + factor) / factor) * factor) - 1;
-				bb = (((b + factor) / factor) * factor) - 1;
-				list.add(rr + "," + gg + "," + bb);
-				System.out.println("[" + r + "," + g + "," + b + "] --> [" + rr + "," + gg + "," + bb + "]");
-			}
-		}
-		Map<String, Long> map = list.stream().collect(Collectors.groupingBy(p -> p, Collectors.counting()));
-		Optional<Entry<String, Long>> o = map.entrySet().stream().max(Comparator.comparing(Entry::getValue));
-		System.out.println(o.get().getKey() + ":" + o.get().getValue());
-		String str = o.get().getKey();
-		String[] rgb = str.split(",");
-		String value = "#";
-		value += Integer.toHexString(Integer.parseInt(rgb[0]));
-		value += Integer.toHexString(Integer.parseInt(rgb[1]));
-		value += Integer.toHexString(Integer.parseInt(rgb[2]));
-		System.out.println(value);
-		// ImageIO.write(scaled, "jpg", new File("d:/s.jpg"));
-
-	}
-
-	@Test
-	public void test11() throws Exception {
-		Date d1 = DateTools.parse("2018-01-01 00:00:00");
-		System.out.println(d1.getTime());
-		Date d2 = new Date();
-		System.out.println(d1.getTime());
-		System.out.println(d2.getTime());
-		System.out.println(Integer.MAX_VALUE);
-	}
-
-	@Test
-	public void test5() {
-		List<Unit> units = new ArrayList<>();
-		Unit u1 = new Unit();
-		u1.setId("1111");
-		Unit u2 = new Unit();
-		u2.setId("2222");
-		units.add(u1);
-		units.add(u2);
-		List<Person> list = new ArrayList<>();
-		Person a1 = new Person();
-		a1.setName("aaa");
-		a1.setUnit("1111");
-		Person a2 = new Person();
-		a2.setName("bbb");
-		a2.setUnit("2222");
-		Person a3 = new Person();
-		a3.setName("cccc");
-		a3.setUnit("2222");
-		list.add(a1);
-		list.add(a2);
-		list.add(a3);
-		units = ListTools.groupStick(units, list, "id", "unit", "people");
-		System.out.println(XGsonBuilder.toJson(units));
-	}
-
-	@Test
-	public void test15() {
-		List<Unit> units = new ArrayList<>();
-		Unit u1 = new Unit();
-		u1.setId("1111");
-		Unit u2 = new Unit();
-		u2.setId("2222");
-		units.add(u1);
-		units.add(u2);
-		List<Person> list = new ArrayList<>();
-		Person a1 = new Person();
-		a1.setName("aaa");
-		a1.setUnit("1111");
-		Person a2 = new Person();
-		a2.setName("bbb");
-		a2.setUnit("2222");
-		Person a3 = new Person();
-		a3.setName("cccc");
-		a3.setUnit("2222");
-		Person a4 = new Person();
-		a4.setName("bbb");
-		a4.setUnit("");
-		list.add(a1);
-		list.add(a2);
-		list.add(a3);
-		list.add(a4);
-		list = list.stream()
-				.sorted(Comparator.comparing(Person::getName, StringTools.emptyLastComparator())
-						.thenComparing(Person::getUnit, StringTools.emptyLastComparator()))
-				.collect(Collectors.toList());
-		System.out.println(XGsonBuilder.toJson(list));
-	}
-
-	public static class Unit {
-		private List<Person> people;
-		private String id;
-
-		public List<Person> getPeople() {
-			return people;
-		}
-
-		public void setPeople(List<Person> people) {
-			this.people = people;
-		}
-
-		public String getId() {
-			return id;
-		}
-
-		public void setId(String id) {
-			this.id = id;
-		}
-	}
-
-	public static class Person {
-		private String unit;
-		private String name;
-
-		public String getUnit() {
-			return unit;
-		}
-
-		public void setUnit(String unit) {
-			this.unit = unit;
-		}
-
-		public String getName() {
-			return name;
-		}
-
-		public void setName(String name) {
-			this.name = name;
-		}
-
-	}
-
-	public static final String DEFAULT_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCWcVZIS57VeOUzi8c01WKvwJK9uRe6hrGTUYmF6J/pI6/UvCbdBWCoErbzsBZOElOH8Sqal3vsNMVLjPYClfoDyYDaUlakP3ldfnXJzAFJVVubF53KadG+fwnh9ZMvxdh7VXVqRL3IQBDwGgzX4rmSK+qkUJjc3OkrNJPB7LLD8QIDAQAB";
-	public static final String DEFAULT_PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAJZxVkhLntV45TOLxzTVYq/Akr25F7qGsZNRiYXon+kjr9S8Jt0FYKgStvOwFk4SU4fxKpqXe+w0xUuM9gKV+gPJgNpSVqQ/eV1+dcnMAUlVW5sXncpp0b5/CeH1ky/F2HtVdWpEvchAEPAaDNfiuZIr6qRQmNzc6Ss0k8HsssPxAgMBAAECgYAWtRy05NUgm5Lc6Og0jVDL/mEnydxPBy2ectwzHh2k7wIHNi8XhUxFki2TMqzrM9Dv3/LySpMl4AE3mhs34LNPy6F+MwyF5X7j+2Y6MflJyeb9HNyT++viysQneoOEiOk3ghxF2/GPjpiEF79wSp+1YKTxRAyq7ypV3t35fGOOEQJBANLDPWl8b5c3lrcz/dTamMjHbVamEyX43yzQOphzkhYsz4pruATzTxU+z8/zPdEqHcWWV39CP3xu3EYNcAhxJW8CQQC2u7PF5Xb1xYRCsmIPssFxil64vvdUadSxl7GLAgjQ9ULyYWB24KObCEzLnPcT8Pf2Q0YQOixxa/78FuzmgbyfAkA7ZFFV/H7lugB6t+f7p24OhkRFep9CwBMD6dnZRBgSr6X8d8ZvfrD2Z7DgBMeSva+OEoOtlNmXExZ3lynO9zN5AkAVczEmIMp3DSl6XtAuAZC9kD2QODJ2QToLYsAfjiyUwsWKCC43piTuVOoW2KUUPSwOR1VZIEsJQWEcHGDQqhgHAkAeZ7a6dVRZFdBwKA0ADjYCufAW2cIYiVDQBJpgB+kiLQflusNOCBK0FT3lg8BdUSy2D253Ih6l3lbaM/4M7DFQ";
-
-	@Test
-	public void test1111() throws Exception {
-		String str = "a你好a";
-		System.out.println(StringTools.utf8SubString(str, 2));
-		System.out.println(StringTools.utf8SubString(str, 3));
-		System.out.println(StringTools.utf8SubString(str, 4));
-		System.out.println(StringTools.utf8SubString(str, 5));
-		System.out.println(StringTools.utf8SubString(str, 6));
-		System.out.println(StringTools.utf8SubString(str, 7));
-		System.out.println(StringTools.utf8SubString(str, 8));
-		System.out.println(StringTools.utf8SubString(str, 9));
-
-	}
-
-	@Test
-	public void test3() {
-		String sss = "{\"total\":{\"publishedCount\":24,\"errorCount\":15,\"安庆市分公司@27385a8e-87ac-4716-b20e-792d79d3d255@U\":{\"publishedCount\":3,\"桐城市分公司@a19025c0-ab78-4a7c-8029-1aa0d508dee7@U\":{\"publishedCount\":3}},\"合肥市分公司@bd773aea-76c3-47e0-9442-cda";
-		System.out.println(StringTools.utf8Length(sss));
-	}
-
-	@Test
-	public void test9() {
-		TreeSet<String> list = new TreeSet<>();
-		list.add("ccc");
-		list.add("ccc");
-		list.add("acc");
-		list.add("dcc");
-		list.add("bcc");
-		list.add("ecc");
-		for (String str : list) {
-			System.out.println(str);
-		}
-	}
-
 }

+ 0 - 4
o2server/x_bbs_assemble_control/pom.xml

@@ -30,10 +30,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 15 - 3
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/permissioninfo/ActionGetSubjectOperationPermissoin.java

@@ -112,6 +112,7 @@ public class ActionGetSubjectOperationPermissoin extends BaseAction {
 			hasPermission = checkUserPermission(checkUserPermission, roleAndPermission.getPermissionInfoList());
 			if (hasPermission) {
 				wrap.setManageAble(true);
+				wrap.setEditAble(true);
 			}
 		}
 		if (check) {
@@ -161,7 +162,7 @@ public class ActionGetSubjectOperationPermissoin extends BaseAction {
 		if (check) {
 			if (effectivePerson.getDistinguishedName() != null
 					&& subjectInfo.getCreatorName().equalsIgnoreCase(effectivePerson.getDistinguishedName())) {
-				wrap.setManageAble(true);
+				wrap.setEditAble(true);
 			}
 		}
 
@@ -174,7 +175,10 @@ public class ActionGetSubjectOperationPermissoin extends BaseAction {
 		@FieldDescribe( "用户是否可以审核该主题." )
 		private Boolean auditAble = false;
 		
-		@FieldDescribe( "用户是否可以删除或者管理该主题." )
+		@FieldDescribe( "用户是否可以编辑该主题." )
+		private Boolean editAble = false;
+		
+		@FieldDescribe( "用户是否可以管理该主题." )
 		private Boolean manageAble = false;	
 		
 		@FieldDescribe( "用户是否可以推荐该主题." )
@@ -193,7 +197,15 @@ public class ActionGetSubjectOperationPermissoin extends BaseAction {
 		private Boolean replyAuditAble = false;	
 		
 		@FieldDescribe( "用户是否可以在主题中对回复进行查询或者删除." )
-		private Boolean replyManageAble = false;
+		private Boolean replyManageAble = false;		
+
+		public Boolean getEditAble() {
+			return editAble;
+		}
+
+		public void setEditAble(Boolean editAble) {
+			this.editAble = editAble;
+		}
 
 		public Boolean getAuditAble() {
 			return auditAble;

+ 0 - 4
o2server/x_calendar_assemble_control/pom.xml

@@ -38,10 +38,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 2 - 1
o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionListWhatICanView.java

@@ -5,6 +5,7 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
@@ -158,7 +159,7 @@ public class ActionListWhatICanView extends BaseAction {
 		public static List<String> Excludes = new ArrayList<String>();
 		
 		static {
-			Excludes.add( "sequence" );
+			Excludes.add(  JpaObject.sequence_FIELDNAME );
 			Excludes.add( "updateTime" );
 			Excludes.add( "manageablePersonList" );
 			Excludes.add( "viewablePersonList" );

+ 0 - 4
o2server/x_cms_assemble_control/pom.xml

@@ -50,10 +50,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 105 - 0
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/factory/ElementFactory.java

@@ -0,0 +1,105 @@
+package com.x.cms.assemble.control.factory;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.cms.assemble.control.AbstractFactory;
+import com.x.cms.assemble.control.Business;
+import com.x.cms.core.entity.AppInfo;
+import com.x.cms.core.entity.CategoryInfo;
+
+import net.sf.ehcache.Ehcache;
+import net.sf.ehcache.Element;
+
+public abstract class ElementFactory extends AbstractFactory {
+
+	protected Ehcache cache;
+
+	public ElementFactory(Business abstractBusiness) throws Exception {
+		super(abstractBusiness);
+	}
+
+	@SuppressWarnings("unchecked")
+	protected <T extends JpaObject> T pick(String flag, Class<T> clz) throws Exception {
+		Ehcache cache = ApplicationCache.instance().getCache(clz);
+		T t = null;
+		Element element = cache.get(flag);
+		if (null != element) {
+			if (null != element.getObjectValue()) {
+				t = (T) element.getObjectValue();
+			}
+		} else {
+			t = this.entityManagerContainer().flag(flag, clz);
+			if (t != null) {
+				this.entityManagerContainer().get(clz).detach(t);
+			}
+			cache.put(new Element(flag, t));
+		}
+		return t;
+	}
+
+	@SuppressWarnings("unchecked")
+	protected <T extends JpaObject> T pick( AppInfo appInfo, String flag, Class<T> clz) throws Exception {
+		if (null == appInfo) {
+			return null;
+		}
+		Ehcache cache = ApplicationCache.instance().getCache(clz);
+		T t = null;
+		String cacheKey = ApplicationCache.concreteCacheKey(appInfo.getId(), flag);
+		Element element = cache.get(cacheKey);
+		if (null != element) {
+			if (null != element.getObjectValue()) {
+				t = (T) element.getObjectValue();
+			}
+		} else {
+			t = this.entityManagerContainer().restrictFlag(flag, clz, CategoryInfo.appId_FIELDNAME,
+					appInfo.getId());
+			if (t != null) {
+				this.entityManagerContainer().get(clz).detach(t);
+			}
+			cache.put(new Element(cacheKey, t));
+		}
+		return t;
+	}
+
+	/* 取得属于指定CategoryInfo 的设计元素 */
+	@SuppressWarnings("unchecked")
+	protected <T extends JpaObject> List<T> listWithCategory(Class<T> clz, CategoryInfo categoryInfo) throws Exception {
+		List<T> list = new ArrayList<>();
+		Ehcache cache = ApplicationCache.instance().getCache(clz);
+		String cacheKey = "listWithCategory#" + categoryInfo.getId() + "#" + clz.getName();
+		Element element = cache.get(cacheKey);
+		if (null != element) {
+			Object obj = element.getObjectValue();
+			if (null != obj) {
+				list = (List<T>) obj;
+			}
+		} else {
+			EntityManager em = this.entityManagerContainer().get(clz);
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<T> cq = cb.createQuery(clz);
+			Root<T> root = cq.from(clz);
+			Predicate p = cb.equal(root.get("categoryInfo"), categoryInfo.getId());
+			cq.select(root).where(p);
+			List<T> os = em.createQuery(cq).getResultList();
+			for (T t : os) {
+				em.detach(t);
+				list.add(t);
+			}
+			/* 将object改为unmodifiable */
+			list = Collections.unmodifiableList(list);
+			cache.put(new Element(cacheKey, list));
+		}
+		return list;
+	}
+
+}

+ 67 - 3
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/factory/FileFactory.java

@@ -1,5 +1,6 @@
 package com.x.cms.assemble.control.factory;
 
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -10,15 +11,20 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import com.x.cms.assemble.control.AbstractFactory;
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.cache.ApplicationCache;
 import com.x.cms.assemble.control.Business;
 import com.x.cms.core.entity.element.File;
 import com.x.cms.core.entity.element.File_;
 
-public class FileFactory extends AbstractFactory {
+import net.sf.ehcache.Element;
+
+public class FileFactory extends ElementFactory {
 
 	public FileFactory(Business business) throws Exception {
 		super(business);
+		this.cache = ApplicationCache.instance().getCache(File.class);
 	}
 	
 	public List<String> listWithApplication(String applicationId) throws Exception {
@@ -41,8 +47,66 @@ public class FileFactory extends AbstractFactory {
 		return em.createQuery(cq).getResultList();
 	}
 
+	public List<File> pick(List<String> flags) throws Exception {
+		List<File> list = new ArrayList<>();
+		for (String str : flags) {
+			Element element = cache.get(str);
+			if (null != element) {
+				if (null != element.getObjectValue()) {
+					list.add((File) element.getObjectValue());
+				}
+			} else {
+				File o = this.pickObject(str);
+				cache.put(new Element(str, o));
+				if (null != o) {
+					list.add(o);
+				}
+			}
+		}
+		return list;
+	}
+
+	public File pick(String flag) throws Exception {
+		if (StringUtils.isEmpty(flag)) {
+			return null;
+		}
+		File o = null;
+		Element element = cache.get(flag);
+		if (null != element) {
+			if (null != element.getObjectValue()) {
+				o = (File) element.getObjectValue();
+			}
+		} else {
+			o = this.pickObject(flag);
+			cache.put(new Element(flag, o));
+		}
+		return o;
+	}
+
+	private File pickObject(String flag) throws Exception {
+		File o = this.business().entityManagerContainer().flag(flag, File.class);
+		if (o != null) {
+			this.entityManagerContainer().get(File.class).detach(o);
+		}
+		if (null == o) {
+			EntityManager em = this.entityManagerContainer().get(File.class);
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<File> cq = cb.createQuery(File.class);
+			Root<File> root = cq.from(File.class);
+			Predicate p = cb.equal(root.get(File_.name), flag);
+			List<File> os = em.createQuery(cq.select(root).where(p).distinct(true)).getResultList();
+			if (os.size() == 1) {
+				o = os.get(0);
+				em.detach(o);
+			}
+		}
+		return o;
+	}
+
 	public <T extends File> List<T> sort(List<T> list) {
-		list = list.stream().sorted(Comparator.comparing(File::getName, Comparator.nullsLast(String::compareTo)))
+		list = list.stream()
+				.sorted(Comparator.comparing(File::getAlias, Comparator.nullsLast(String::compareTo))
+						.thenComparing(File::getName, Comparator.nullsLast(String::compareTo)))
 				.collect(Collectors.toList());
 		return list;
 	}

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/ActionApplication.java

@@ -5,7 +5,6 @@ import java.util.Set;
 import javax.ws.rs.ApplicationPath;
 
 import com.x.base.core.project.jaxrs.AbstractActionApplication;
-import com.x.cms.assemble.control.file.FileAction;
 import com.x.cms.assemble.control.jaxrs.appdict.AppDictAction;
 import com.x.cms.assemble.control.jaxrs.appdict.AppDictAnonymousAction;
 import com.x.cms.assemble.control.jaxrs.appdictdesign.AppDictDesignAction;
@@ -17,6 +16,7 @@ import com.x.cms.assemble.control.jaxrs.document.DocumentAction;
 import com.x.cms.assemble.control.jaxrs.document.DocumentAnonymousAction;
 import com.x.cms.assemble.control.jaxrs.document.DocumentCipherAction;
 import com.x.cms.assemble.control.jaxrs.document.DocumentViewRecordAction;
+import com.x.cms.assemble.control.jaxrs.file.FileAction;
 import com.x.cms.assemble.control.jaxrs.fileinfo.FileInfoAction;
 import com.x.cms.assemble.control.jaxrs.fileinfo.FileInfoAnonymousAction;
 import com.x.cms.assemble.control.jaxrs.form.FormAction;

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionContent.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionContent.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;

+ 87 - 0
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionContentWithApp.java

@@ -0,0 +1,87 @@
+package com.x.cms.assemble.control.jaxrs.file;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.exception.ExceptionEntityNotExist;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+import com.x.base.core.project.jaxrs.WoFile;
+import com.x.cms.assemble.control.Business;
+import com.x.cms.core.entity.AppInfo;
+import com.x.cms.core.entity.element.File;
+import com.x.cms.core.entity.element.File_;
+
+import net.sf.ehcache.Ehcache;
+import net.sf.ehcache.Element;
+
+class ActionContentWithApp extends StandardJaxrsAction {
+
+	private Ehcache cache = ApplicationCache.instance().getCache(File.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String flag, String appInfoFlag) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<Wo> result = new ActionResult<>();
+			Wo wo = null;
+			String cacheKey = ApplicationCache.concreteCacheKey(this.getClass(), flag, appInfoFlag);
+			Element element = cache.get(cacheKey);
+			if (null != element && (null != element.getObjectValue())) {
+				wo = ((Wo) element.getObjectValue());
+			} else {
+				Business business = new Business(emc);
+				AppInfo appInfo = business.getAppInfoFactory().pick(appInfoFlag);
+				if (null == appInfo) {
+					throw new ExceptionEntityNotExist(appInfoFlag, AppInfo.class);
+				}
+				String id = this.get(business, appInfo, flag);
+				if (StringUtils.isEmpty(id)) {
+					throw new ExceptionEntityNotExist(flag, File.class);
+				}
+				File file = business.fileFactory().pick(id);
+				byte[] bs = new byte[] {};
+				if (StringUtils.isNotEmpty(file.getData())) {
+					bs = Base64.decodeBase64(file.getData());
+				}
+				wo = new Wo(bs, this.contentType(false, file.getFileName()),
+						this.contentDisposition(false, file.getFileName()));
+				cache.put(new Element(cacheKey, wo));
+			}
+			result.setData(wo);
+			return result;
+		}
+	}
+
+	public static class Wo extends WoFile {
+
+		public Wo(byte[] bytes, String contentType, String contentDisposition) {
+			super(bytes, contentType, contentDisposition);
+		}
+
+	}
+
+	private String get(Business business, AppInfo AppInfo, String flag) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(File.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<File> root = cq.from(File.class);
+		Predicate p = cb.equal(root.get(File_.name), flag);
+		p = cb.or(p, cb.equal(root.get(File_.alias), flag));
+		p = cb.or(p, cb.equal(root.get(File_.id), flag));
+		p = cb.and(p, cb.equal(root.get(File_.appId), AppInfo.getId()));
+		List<String> list = em.createQuery(cq.select(root.get(File_.id)).where(p)).setMaxResults(1).getResultList();
+		return list.isEmpty() ? null : list.get(0);
+	}
+
+}

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionCopy.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionCopy.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import java.util.Date;
 

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionCreate.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionCreate.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import org.apache.commons.lang3.StringUtils;
 

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionDelete.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionDelete.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionDownload.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionDownload.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;

+ 87 - 0
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionDownloadWithApp.java

@@ -0,0 +1,87 @@
+package com.x.cms.assemble.control.jaxrs.file;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.exception.ExceptionEntityNotExist;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+import com.x.base.core.project.jaxrs.WoFile;
+import com.x.cms.assemble.control.Business;
+import com.x.cms.core.entity.AppInfo;
+import com.x.cms.core.entity.element.File;
+import com.x.cms.core.entity.element.File_;
+
+import net.sf.ehcache.Ehcache;
+import net.sf.ehcache.Element;
+
+class ActionDownloadWithApp extends StandardJaxrsAction {
+
+	private Ehcache cache = ApplicationCache.instance().getCache(File.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String flag, String appInfoFlag) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<Wo> result = new ActionResult<>();
+			Wo wo = null;
+			String cacheKey = ApplicationCache.concreteCacheKey(this.getClass(), flag, appInfoFlag);
+			Element element = cache.get(cacheKey);
+			if (null != element && (null != element.getObjectValue())) {
+				wo = ((Wo) element.getObjectValue());
+			} else {
+				Business business = new Business(emc);
+				AppInfo appInfo = business.getAppInfoFactory().pick(appInfoFlag);
+				if (null == appInfo) {
+					throw new ExceptionEntityNotExist(appInfoFlag, AppInfo.class);
+				}
+				String id = this.get(business, appInfo, flag);
+				if (StringUtils.isEmpty(id)) {
+					throw new ExceptionEntityNotExist(flag, File.class);
+				}
+				File file = business.fileFactory().pick(id);
+				byte[] bs = new byte[] {};
+				if (StringUtils.isNotEmpty(file.getData())) {
+					bs = Base64.decodeBase64(file.getData());
+				}
+				wo = new Wo(bs, this.contentType(true, file.getFileName()),
+						this.contentDisposition(true, file.getFileName()));
+				cache.put(new Element(cacheKey, wo));
+			}
+			result.setData(wo);
+			return result;
+		}
+	}
+
+	public static class Wo extends WoFile {
+
+		public Wo(byte[] bytes, String contentType, String contentDisposition) {
+			super(bytes, contentType, contentDisposition);
+		}
+
+	}
+
+	private String get(Business business, AppInfo appInfo, String flag) throws Exception {
+		EntityManager em = business.entityManagerContainer().get(File.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<File> root = cq.from(File.class);
+		Predicate p = cb.equal(root.get(File_.name), flag);
+		p = cb.or(p, cb.equal(root.get(File_.alias), flag));
+		p = cb.or(p, cb.equal(root.get(File_.id), flag));
+		p = cb.and(p, cb.equal(root.get(File_.appId), appInfo.getId()));
+		List<String> list = em.createQuery(cq.select(root.get(File_.id)).where(p)).setMaxResults(1).getResultList();
+		return list.isEmpty() ? null : list.get(0);
+	}
+
+}

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionEdit.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionEdit.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import org.apache.commons.lang3.StringUtils;
 

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionGet.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionGet.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionListNext.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionListNext.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import java.util.List;
 

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionListPrev.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionListPrev.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import java.util.List;
 

+ 2 - 2
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionListWithApplication.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionListWithApp.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import java.util.List;
 
@@ -16,7 +16,7 @@ import com.x.cms.assemble.control.Business;
 import com.x.cms.core.entity.AppInfo;
 import com.x.cms.core.entity.element.File;
 
-class ActionListWithApplication extends BaseAction {
+class ActionListWithApp extends BaseAction {
 
 	ActionResult<List<Wo>> execute(EffectivePerson effectivePerson, String applicationFlag) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ActionUpload.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ActionUpload.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.StringUtils;

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/BaseAction.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/BaseAction.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import java.util.Date;
 

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ExceptionEmptyName.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ExceptionEmptyName.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import com.x.base.core.project.exception.PromptException;
 

+ 1 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/ExceptionErrorName.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/ExceptionErrorName.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import com.x.base.core.project.exception.PromptException;
 

+ 46 - 10
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/file/FileAction.java → o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/file/FileAction.java

@@ -1,4 +1,4 @@
-package com.x.cms.assemble.control.file;
+package com.x.cms.assemble.control.jaxrs.file;
 
 import java.util.List;
 
@@ -146,17 +146,17 @@ public class FileAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
 	}
 
-	@JaxrsMethodDescribe(value = "根据应用列示文件.", action = ActionListWithApplication.class)
+	@JaxrsMethodDescribe(value = "根据应用列示文件.", action = ActionListWithApp.class)
 	@GET
-	@Path("list/application/{applicationFlag}")
+	@Path("list/appInfo/{appInfoFlag}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void listWithApplication(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
-			@JaxrsParameterDescribe("应用标识") @PathParam("applicationFlag") String applicationFlag) {
-		ActionResult<List<ActionListWithApplication.Wo>> result = new ActionResult<>();
+	public void listWithAppInfo(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("应用标识") @PathParam("appInfoFlag") String appInfoFlag) {
+		ActionResult<List<ActionListWithApp.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
-			result = new ActionListWithApplication().execute(effectivePerson, applicationFlag);
+			result = new ActionListWithApp().execute(effectivePerson, appInfoFlag);
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
@@ -221,15 +221,15 @@ public class FileAction extends StandardJaxrsAction {
 
 	@JaxrsMethodDescribe(value = "复制资源文件到新的应用.", action = ActionCopy.class)
 	@GET
-	@Path("{flag}/application/{applicationFlag}")
+	@Path("{flag}/appInfo/{appInfoFlag}")
 	@Consumes(MediaType.APPLICATION_JSON)
 	public void copy(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("标识") @PathParam("flag") String flag,
-			@JaxrsParameterDescribe("应用标识") @PathParam("applicationFlag") String applicationFlag) {
+			@JaxrsParameterDescribe("应用标识") @PathParam("appInfoFlag") String appInfoFlag) {
 		ActionResult<ActionCopy.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
-			result = new ActionCopy().execute(effectivePerson, flag, applicationFlag);
+			result = new ActionCopy().execute(effectivePerson, flag, appInfoFlag);
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
@@ -237,4 +237,40 @@ public class FileAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
 	}
 
+	@JaxrsMethodDescribe(value = "访问文件内容.义stream格式下载", action = ActionDownloadWithApp.class)
+	@GET
+	@Path("{flag}/appInfo/{appInfoFlag}/download")
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void downloadWithApp(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("标识") @PathParam("flag") String flag,
+			@JaxrsParameterDescribe("应用标识") @PathParam("appInfoFlag") String appInfoFlag) {
+		ActionResult<ActionDownloadWithApp.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionDownloadWithApp().execute(effectivePerson, flag, appInfoFlag);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+	}
+
+	@JaxrsMethodDescribe(value = "访问文件内容.", action = ActionContentWithApp.class)
+	@GET
+	@Path("{flag}/appInfo/{appInfoFlag}/content")
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void contentWithApp(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("标识") @PathParam("flag") String flag,
+			@JaxrsParameterDescribe("应用标识") @PathParam("appInfoFlag") String appInfoFlag) {
+		ActionResult<ActionContentWithApp.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionContentWithApp().execute(effectivePerson, flag, appInfoFlag);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+	}
+	
 }

+ 0 - 1
o2server/x_cms_assemble_control/src/main/java/com/x/cms/assemble/control/jaxrs/view/ActionListNextPageViewData.java

@@ -28,7 +28,6 @@ import com.x.cms.assemble.control.jaxrs.view.exception.ExceptionViewInfoProcess;
 import com.x.cms.assemble.control.jaxrs.view.exception.ExceptionViewNotExists;
 import com.x.cms.core.entity.Document;
 import com.x.cms.core.entity.element.View;
-import com.x.cms.core.entity.tools.LogUtil;
 
 public class ActionListNextPageViewData extends BaseAction {
 	

+ 214 - 0
o2server/x_cms_core_entity/src/main/java/com/x/cms/core/entity/element/File.java

@@ -0,0 +1,214 @@
+package com.x.cms.core.entity.element;
+
+import java.util.Date;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+import javax.persistence.UniqueConstraint;
+
+import org.apache.openjpa.persistence.jdbc.Index;
+
+import com.x.base.core.entity.AbstractPersistenceProperties;
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.entity.SliceJpaObject;
+import com.x.base.core.entity.annotation.CheckPersist;
+import com.x.base.core.entity.annotation.CitationExist;
+import com.x.base.core.entity.annotation.CitationNotExist;
+import com.x.base.core.entity.annotation.ContainerEntity;
+import com.x.base.core.entity.annotation.Equal;
+import com.x.base.core.entity.annotation.Flag;
+import com.x.base.core.entity.annotation.IdReference;
+import com.x.base.core.entity.annotation.RestrictFlag;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.cms.core.entity.AppInfo;
+import com.x.cms.core.entity.PersistenceProperties;
+
+/**
+ * 资源文件
+ * @author O2LEE
+ *
+ */
+@Entity
+@ContainerEntity
+@Table(name = PersistenceProperties.Element.File.table, uniqueConstraints = {
+		@UniqueConstraint(name = PersistenceProperties.Element.File.table + JpaObject.IndexNameMiddle
+				+ JpaObject.DefaultUniqueConstraintSuffix, columnNames = { JpaObject.IDCOLUMN,
+						JpaObject.CREATETIMECOLUMN, JpaObject.UPDATETIMECOLUMN, JpaObject.SEQUENCECOLUMN }) })
+@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+public class File extends SliceJpaObject {
+
+	private static final long serialVersionUID = -6850325164542850879L;
+
+	private static final String TABLE = PersistenceProperties.Element.File.table;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	@FieldDescribe("数据库主键,自动生成.")
+	@Id
+	@Column(length = length_id, name = ColumnNamePrefix + id_FIELDNAME)
+	private String id = createId();
+
+	/* 以上为 JpaObject 默认字段 */
+
+	public void onPersist() throws Exception {
+		if (this.length == null) {
+			this.length = 0L;
+		}
+	}
+
+	/* flag标志位 */
+	/* Entity 默认字段结束 */
+
+	public static final String name_FIELDNAME = "name";
+	@RestrictFlag
+	@FieldDescribe("文件名称.")
+	@Column(length = length_255B, name = ColumnNamePrefix + name_FIELDNAME)
+	@CheckPersist(allowEmpty = false, simplyString = true, citationNotExists =
+	/* 同一个应用下不可重名 */
+	@CitationNotExist(fields = { "name", "id",
+			"alias" }, type = File.class, equals = @Equal(property = "appId", field = "appId")))
+	private String name;
+
+	public static final String alias_FIELDNAME = "alias";
+	@Flag
+	@FieldDescribe("文件别名.")
+	@Column(length = length_255B, name = ColumnNamePrefix + alias_FIELDNAME)
+	@CheckPersist(allowEmpty = true, simplyString = true, citationNotExists =
+	/* 如果设置别名,那么需要全局唯一 */
+	@CitationNotExist(fields = { "id", "alias" }, type = File.class))
+	private String alias;
+
+	public static final String description_FIELDNAME = "description";
+	@FieldDescribe("描述.")
+	@Column(length = length_255B, name = ColumnNamePrefix + description_FIELDNAME)
+	@CheckPersist(allowEmpty = true)
+	private String description;
+
+	public static final String appId_FIELDNAME = "appId";
+	@FieldDescribe("文件所属应用.")
+	@Column(length = JpaObject.length_id, name = ColumnNamePrefix + appId_FIELDNAME)
+	@Index(name = TABLE + IndexNameMiddle + appId_FIELDNAME)
+	@CheckPersist(allowEmpty = false, citationExists = { @CitationExist(type = AppInfo.class) })
+	@IdReference(AppInfo.class)
+	private String appId;
+
+	public static final String lastUpdatePerson_FIELDNAME = "lastUpdatePerson";
+	@FieldDescribe("最后的编辑者.")
+	@Column(length = AbstractPersistenceProperties.organization_name_length, name = ColumnNamePrefix
+			+ lastUpdatePerson_FIELDNAME)
+	@CheckPersist(allowEmpty = false)
+	private String lastUpdatePerson;
+
+	public static final String lastUpdateTime_FIELDNAME = "lastUpdateTime";
+	@FieldDescribe("最后的编辑时间.")
+	@Column(name = ColumnNamePrefix + lastUpdateTime_FIELDNAME)
+	@CheckPersist(allowEmpty = false)
+	private Date lastUpdateTime;
+
+	public static final String data_FIELDNAME = "data";
+	@FieldDescribe("编码后文本内容.")
+	@Lob
+	@Basic(fetch = FetchType.EAGER)
+	@Column(length = JpaObject.length_10M, name = ColumnNamePrefix + data_FIELDNAME)
+	@CheckPersist(allowEmpty = true)
+	private String data;
+
+	public static final String fileName_FIELDNAME = "fileName";
+	@FieldDescribe("文件名称.")
+	@Column(length = length_255B, name = ColumnNamePrefix + fileName_FIELDNAME)
+	@CheckPersist(allowEmpty = true)
+	private String fileName;
+
+	public static final String length_FIELDNAME = "length";
+	@FieldDescribe("文件大小.")
+	@Column(name = ColumnNamePrefix + length_FIELDNAME)
+	@Index(name = TABLE + IndexNameMiddle + length_FIELDNAME)
+	@CheckPersist(allowEmpty = true)
+	private Long length;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getData() {
+		return data;
+	}
+
+	public void setData(String data) {
+		this.data = data;
+	}
+	
+	public String getAppId() {
+		return appId;
+	}
+
+	public void setAppId(String appId) {
+		this.appId = appId;
+	}
+
+	public String getAlias() {
+		return alias;
+	}
+
+	public void setAlias(String alias) {
+		this.alias = alias;
+	}
+
+	public String getLastUpdatePerson() {
+		return lastUpdatePerson;
+	}
+
+	public void setLastUpdatePerson(String lastUpdatePerson) {
+		this.lastUpdatePerson = lastUpdatePerson;
+	}
+
+	public Date getLastUpdateTime() {
+		return lastUpdateTime;
+	}
+
+	public void setLastUpdateTime(Date lastUpdateTime) {
+		this.lastUpdateTime = lastUpdateTime;
+	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public Long getLength() {
+		return length;
+	}
+
+	public void setLength(Long length) {
+		this.length = length;
+	}
+
+}

+ 18 - 0
o2server/x_cms_core_entity/src/main/java/com/x/cms/core/entity/element/wrap/WrapFile.java

@@ -0,0 +1,18 @@
+package com.x.cms.core.entity.element.wrap;
+
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.project.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.cms.core.entity.element.File;
+
+public class WrapFile extends File {
+
+	private static final long serialVersionUID = -4796891325524967094L;
+
+	public static WrapCopier<File, WrapFile> outCopier = WrapCopierFactory.wo(File.class, WrapFile.class, null,
+			JpaObject.FieldsInvisible);
+
+	public static WrapCopier<WrapFile, File> inCopier = WrapCopierFactory.wi(WrapFile.class, File.class, null,
+			JpaObject.FieldsUnmodifyExcludeId);
+
+}

+ 0 - 4
o2server/x_collaboration_assemble_websocket/pom.xml

@@ -39,10 +39,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 0 - 4
o2server/x_collaboration_service_message/pom.xml

@@ -38,10 +38,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 0 - 4
o2server/x_component_assemble_control/pom.xml

@@ -34,10 +34,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

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

@@ -778,10 +778,17 @@ public class Main {
 		/* load custom jar */
 		File custom_jars_dir = new File(base, "custom/jars");
 		if (custom_jars_dir.exists() && custom_jars_dir.isDirectory()) {
-			for (File file : Config.dir_custom_jars().listFiles()) {
+			for (File file : custom_jars_dir.listFiles()) {
 				method.invoke(urlClassLoader, new Object[] { file.toURI().toURL() });
 			}
 		}
+		File dynamic_jars_dir = new File(base, "dynamic/jars");
+		if (dynamic_jars_dir.exists() && dynamic_jars_dir.isDirectory()) {
+			for (File file : dynamic_jars_dir.listFiles()) {
+				method.invoke(urlClassLoader, new Object[] { file.toURI().toURL() });
+			}
+		}
+
 		/* load temp class */
 		method.invoke(urlClassLoader, new Object[] { Config.dir_local_temp_classes().toURI().toURL() });
 	}

+ 6 - 0
o2server/x_console/src/main/java/com/x/server/console/server/JettySeverTools.java

@@ -146,6 +146,12 @@ public abstract class JettySeverTools {
 				jars.add(file.getAbsolutePath());
 			}
 		}
+		for (String str : dependency.dynamicJars) {
+			File file = new File(Config.dir_dynamic_jars(), str + ".jar");
+			if (file.exists()) {
+				jars.add(file.getAbsolutePath());
+			}
+		}
 		return StringUtils.join(jars, ";");
 	}
 

+ 10 - 23
o2server/x_console/src/main/java/com/x/server/console/server/application/ApplicationServerTools.java

@@ -50,6 +50,7 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.DefaultCharset;
 import com.x.base.core.project.tools.JarTools;
 import com.x.base.core.project.tools.ListTools;
+import com.x.base.core.project.tools.StringTools;
 import com.x.server.console.server.JettySeverTools;
 
 import io.github.classgraph.ClassGraph;
@@ -63,7 +64,7 @@ public class ApplicationServerTools extends JettySeverTools {
 	private static Logger logger = LoggerFactory.getLogger(ApplicationServerTools.class);
 
 	private static int APPLICATIONSERVER_THREAD_POOL_SIZE_MIN = 5;
-	private static int APPLICATIONSERVER_THREAD_POOL_SIZE_MAX = 50;
+	private static int APPLICATIONSERVER_THREAD_POOL_SIZE_MAX = 100;
 
 	protected static String PATH_WEBAPPS = "servers/applicationServer/webapps";
 	protected static String PATH_WORK = "servers/applicationServer/work";
@@ -74,7 +75,6 @@ public class ApplicationServerTools extends JettySeverTools {
 			cleanDirectory(Config.dir_servers_applicationServer_work());
 			cleanDirectory(Config.dir_servers_applicationServer_webapps());
 			List<ClassInfo> classInfoList = listOfficial();
-			classInfoList = filter(classInfoList);
 			logger.print("start to deploy official module, size:{}.", classInfoList.size());
 			for (ClassInfo info : classInfoList) {
 				Class<?> clz = Class.forName(info.getName());
@@ -107,6 +107,7 @@ public class ApplicationServerTools extends JettySeverTools {
 		threadPool.setMinThreads(APPLICATIONSERVER_THREAD_POOL_SIZE_MIN);
 		threadPool.setMaxThreads(APPLICATIONSERVER_THREAD_POOL_SIZE_MAX);
 		Server server = new Server(threadPool);
+		server.setAttribute("maxFormContentSize", 1024 * 1024 * 1024 * 10);
 
 		ClassList classlist = ClassList.setServerDefault(server);
 		classlist.addAfter(FragmentConfiguration.class.getName(), EnvConfiguration.class.getName(),
@@ -135,6 +136,7 @@ public class ApplicationServerTools extends JettySeverTools {
 
 		GzipHandler gzipHandler = new GzipHandler();
 		DefaultHandler defaultHandler = new DefaultHandler();
+
 		/** 禁止显示Contexts */
 		defaultHandler.setShowContexts(false);
 		/** 禁止显示icon */
@@ -169,7 +171,8 @@ public class ApplicationServerTools extends JettySeverTools {
 			for (ClassInfo info : list) {
 				filters.add(info.getName());
 			}
-			filters = ListTools.includesExcludes(filters, Config.currentNode().getApplication().getIncludes(),
+			filters = StringTools.includesExcludesWithWildcard(filters,
+					Config.currentNode().getApplication().getIncludes(),
 					Config.currentNode().getApplication().getExcludes());
 			List<ClassInfo> os = new ArrayList<>();
 			for (ClassInfo info : list) {
@@ -177,38 +180,22 @@ public class ApplicationServerTools extends JettySeverTools {
 					os.add(info);
 				}
 			}
+
 			return os;
 		}
 	}
 
 	private static List<String> listCustom() throws Exception {
 		List<String> list = new ArrayList<>();
-		for (String str : Config.dir_custom()
+		for (String str : Config.dir_custom(true)
 				.list(FileFilterUtils.or(new WildcardFileFilter("*.WAR"), new WildcardFileFilter("*.war")))) {
 			list.add(str);
 		}
+		list = ListTools.includesExcludesWildcard(list, Config.currentNode().getApplication().getIncludes(),
+				Config.currentNode().getApplication().getExcludes());
 		return list;
 	}
 
-	private static List<ClassInfo> filter(List<ClassInfo> list) throws Exception {
-		List<String> includes = new ArrayList<>();
-		List<String> excludes = new ArrayList<>();
-		includes.addAll(Config.currentNode().getApplication().getIncludes());
-		excludes.addAll(Config.currentNode().getApplication().getExcludes());
-		List<String> names = new ArrayList<>();
-		for (ClassInfo info : list) {
-			names.add(info.getName());
-		}
-		names = ListTools.includesExcludesWildcard(names, includes, excludes);
-		List<ClassInfo> os = new ArrayList<>();
-		for (ClassInfo info : list) {
-			if (ListTools.contains(names, info.getName())) {
-				os.add(info);
-			}
-		}
-		return os;
-	}
-
 	private static void customDeployDescriptor(File war) throws Exception {
 		File unzip_dir = new File(Config.dir_local_temp(), FilenameUtils.getBaseName(war.getName()));
 		FileUtils.forceMkdir(unzip_dir);

+ 2 - 28
o2server/x_console/src/main/java/com/x/server/console/server/center/CenterServerTools.java

@@ -34,22 +34,13 @@ public class CenterServerTools extends JettySeverTools {
 	private static Logger logger = LoggerFactory.getLogger(CenterServerTools.class);
 
 	private static int CENTERSERVER_THREAD_POOL_SIZE_MIN = 5;
-	private static int CENTERSERVER_THREAD_POOL_SIZE_MAX = 50;
+	private static int CENTERSERVER_THREAD_POOL_SIZE_MAX = 100;
 
 	protected static final String PATH_WEBAPPS = "servers/centerServer/webapps";
 	protected static final String PATH_WORK = "servers/centerServer/work";
 
 	public static Server start(CenterServer centerServer) throws Exception {
 
-//		File commons_dir = new File(Config.base(), PATH_COMMONS);
-//		File commons_ext_dir = new File(Config.base(), PATH_COMMONS_EXT);
-//		File webapps_dir = new File(Config.base(), PATH_WEBAPPS);
-//		File work_dir = new File(Config.base(), PATH_WORK);
-//		File store_dir = new File(Config.base(), PATH_STORE);
-//		File store_jars_dir = new File(Config.base(), PATH_STORE_JARS);
-//		File custom_dir = new File(Config.base(), PATH_CUSTOM);
-//		File custom_jars_dir = new File(Config.base(), PATH_CUSTOM_JARS);
-
 		if (BooleanUtils.isTrue(centerServer.getRedeploy())) {
 			cleanDirectory(Config.dir_servers_centerServer_webapps());
 			cleanDirectory(Config.dir_servers_centerServer_work());
@@ -59,6 +50,7 @@ public class CenterServerTools extends JettySeverTools {
 		threadPool.setMinThreads(CENTERSERVER_THREAD_POOL_SIZE_MIN);
 		threadPool.setMaxThreads(CENTERSERVER_THREAD_POOL_SIZE_MAX);
 		Server server = new Server(threadPool);
+		server.setAttribute("maxFormContentSize", 1024 * 1024 * 1024 * 10);
 
 		ClassList classlist = ClassList.setServerDefault(server);
 		classlist.addAfter(FragmentConfiguration.class.getName(), EnvConfiguration.class.getName(),
@@ -105,24 +97,6 @@ public class CenterServerTools extends JettySeverTools {
 		return server;
 	}
 
-//	private static ClassInfo getClassInfo() {
-//		try (ScanResult scanResult = // Assign scanResult in try-with-resources
-//				new ClassGraph().enableAnnotationInfo() // Create a new ClassGraph instance
-//						// .verbose() // If you want to enable logging to stderr
-//						.enableAllInfo() // Scan classes, methods, fields, annotations
-//						.whitelistPackages("com.x.base.core.project")
-//						// .whitelistPackages("com.xyz") // Scan com.xyz and subpackages
-//						.scan()) { // Perform the scan and return a ScanResult
-//			List<ClassInfo> classInfos = scanResult.getClassesWithAnnotation(Module.class.getName());
-//			for (ClassInfo info : classInfos) {
-//				if (StringUtils.equals(x_program_center.class.getName(), info.getName())) {
-//					return info;
-//				}
-//			}
-//			return null;
-//		}
-//	}
-
 	protected static void createDeployDescriptor() throws Exception {
 		StringBuffer buffer = new StringBuffer();
 		buffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

+ 51 - 2
o2server/x_console/src/test/java/com/x/server/console/test/TestClient.java

@@ -1,13 +1,17 @@
 package com.x.server.console.test;
 
-import java.awt.Font;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
 import java.awt.RenderingHints;
 import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.junit.Test;
 
+import com.x.base.core.project.gson.XGsonBuilder;
+import com.x.base.core.project.tools.StringTools;
+
 public class TestClient {
 
 	@Test
@@ -19,7 +23,7 @@ public class TestClient {
 		// File("/Users/mkyong/Desktop/logo.jpg"));
 		BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
 		Graphics g = image.getGraphics();
-		//g.setFont(new Font("SansSerif", Font.BOLD, 24));
+		// g.setFont(new Font("SansSerif", Font.BOLD, 24));
 
 		Graphics2D graphics = (Graphics2D) g;
 		graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
@@ -45,4 +49,49 @@ public class TestClient {
 
 	}
 
+	@Test
+	public void test() {
+		List<String> list = new ArrayList<>();
+		list.add("com.x.base.core.project.x_attendance_assemble_control");
+		list.add("com.x.base.core.project.x_bbs_assemble_control");
+		list.add("com.x.base.core.project.x_calendar_assemble_control");
+		list.add("com.x.base.core.project.x_cms_assemble_control");
+		list.add("com.x.base.core.project.x_collaboration_assemble_websocket");
+		list.add("com.x.base.core.project.x_collaboration_service_message");
+		list.add("com.x.base.core.project.x_component_assemble_control");
+		list.add("com.x.base.core.project.x_file_assemble_control");
+		list.add("com.x.base.core.project.x_general_assemble_control");
+		list.add("com.x.base.core.project.x_hotpic_assemble_control");
+		list.add("com.x.base.core.project.x_meeting_assemble_control");
+		list.add("com.x.base.core.project.x_message_assemble_communicate");
+		list.add("com.x.base.core.project.x_mind_assemble_control");
+		list.add("com.x.base.core.project.x_okr_assemble_control");
+		list.add("com.x.base.core.project.x_organization_assemble_authentication");
+		list.add("com.x.base.core.project.x_organization_assemble_control");
+		list.add("com.x.base.core.project.x_organization_assemble_custom");
+		list.add("com.x.base.core.project.x_organization_assemble_express");
+		list.add("com.x.base.core.project.x_organization_assemble_personal");
+		list.add("com.x.base.core.project.x_portal_assemble_designer");
+		list.add("com.x.base.core.project.x_portal_assemble_surface");
+		list.add("com.x.base.core.project.x_processplatform_assemble_bam");
+		list.add("com.x.base.core.project.x_processplatform_assemble_designer");
+		list.add("com.x.base.core.project.x_processplatform_assemble_surface");
+		list.add("com.x.base.core.project.x_processplatform_service_processing");
+		list.add("com.x.base.core.project.x_query_assemble_designer");
+		list.add("com.x.base.core.project.x_query_assemble_surface");
+		list.add("com.x.base.core.project.x_query_service_processing");
+		List<String> in = new ArrayList<>();
+		List<String> ex = new ArrayList<>();
+		ex.add("com.x.base.core.project.x_mind_assemble_*");
+		ex.add("com.x.base.core.project.x_okr_assemble_*");
+		ex.add("com.x.base.core.project.x_hotpic_assemble_*");
+		ex.add("com.x.base.core.project.x_calendar_*");
+		ex.add("com.x.base.core.project.x_attendance_*");
+		ex.add("com.x.base.core.project.x_meeting_*");
+		ex.add("com.x.base.core.project.x_file_*");
+		list = StringTools.includesExcludesWithWildcard(list, in, ex);
+		System.out.println(XGsonBuilder.toJson(list));
+		System.out.println(StringTools.matchWildcard("com.x.base.core.project.x_hotpic_assemble_control", "com.x.base.core.project.x_hotpic_assemble_*"));
+	}
+
 }

+ 0 - 4
o2server/x_console/更新过程.txt

@@ -1,4 +0,0 @@
-1.执行before脚本
-2.拷贝 commons,store,servers,和console.jar
-3.更新版本文件
-4.执行after脚本

+ 0 - 4
o2server/x_file_assemble_control/pom.xml

@@ -38,10 +38,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 0 - 4
o2server/x_general_assemble_control/pom.xml

@@ -34,10 +34,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 0 - 4
o2server/x_hotpic_assemble_control/pom.xml

@@ -42,10 +42,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 2 - 1
o2server/x_hotpic_assemble_control/src/main/java/com/x/hotpic/assemble/control/jaxrs/hotpic/HotPictureInfoAction.java

@@ -17,6 +17,7 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.cache.ApplicationCache;
@@ -270,7 +271,7 @@ public class HotPictureInfoAction extends StandardJaxrsAction {
 								if (hotPictureInfoList != null) {
 									try {
 										wraps_out = wrapout_copier.copy(hotPictureInfoList);
-										SortTools.desc(wraps_out, "sequence");
+										SortTools.desc(wraps_out,  JpaObject.sequence_FIELDNAME);
 									} catch (Exception e) {
 										check = false;
 										Exception exception = new InfoWrapOutException(e);

+ 2 - 1
o2server/x_hotpic_assemble_control/src/main/java/com/x/hotpic/assemble/control/jaxrs/hotpic/HotPictureInfoCipherAction.java

@@ -15,6 +15,7 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.cache.ApplicationCache;
@@ -177,7 +178,7 @@ public class HotPictureInfoCipherAction extends StandardJaxrsAction {
 								if (hotPictureInfoList != null) {
 									try {
 										wraps_out = wrapout_copier.copy(hotPictureInfoList);
-										SortTools.desc(wraps_out, "sequence");
+										SortTools.desc(wraps_out,  JpaObject.sequence_FIELDNAME);
 									} catch (Exception e) {
 										check = false;
 										Exception exception = new InfoWrapOutException(e);

+ 0 - 4
o2server/x_meeting_assemble_control/pom.xml

@@ -38,10 +38,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 1 - 1
o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/attachment/ActionListNext.java

@@ -24,7 +24,7 @@ class ActionListNext extends BaseAction {
 					OrganizationDefinition.Manager, OrganizationDefinition.MeetingManager))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
-			result = this.standardListNext(Wo.copier, id, count, "sequence", null, null, null, null, null, null, null,
+			result = this.standardListNext(Wo.copier, id, count,  JpaObject.sequence_FIELDNAME, null, null, null, null, null, null, null,
 					null, true, DESC);
 			return result;
 		}

+ 1 - 1
o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/attachment/ActionListPrev.java

@@ -24,7 +24,7 @@ class ActionListPrev extends BaseAction {
 					OrganizationDefinition.Manager, OrganizationDefinition.MeetingManager))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
-			result = this.standardListPrev(Wo.copier, id, count, "sequence", null, null, null, null, null, null, null,
+			result = this.standardListPrev(Wo.copier, id, count,  JpaObject.sequence_FIELDNAME, null, null, null, null, null, null, null,
 					null, true, DESC);
 			return result;
 		}

+ 1 - 1
o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionListNext.java

@@ -17,7 +17,7 @@ class ActionListNext extends BaseAction {
 		if (effectivePerson.isNotManager()) {
 			throw new ExceptionAccessDenied(effectivePerson);
 		}
-		result = this.standardListNext(Wo.copier, id, count, "sequence", null, null, null, null, null, null, null, null,
+		result = this.standardListNext(Wo.copier, id, count,  JpaObject.sequence_FIELDNAME, null, null, null, null, null, null, null, null,
 				true, DESC);
 		return result;
 	}

+ 1 - 1
o2server/x_meeting_assemble_control/src/main/java/com/x/meeting/assemble/control/jaxrs/meeting/ActionListPrev.java

@@ -17,7 +17,7 @@ class ActionListPrev extends BaseAction {
 		if (effectivePerson.isNotManager()) {
 			throw new ExceptionAccessDenied(effectivePerson);
 		}
-		result = this.standardListPrev(Wo.copier, id, count, "sequence", null, null, null, null, null, null, null, null,
+		result = this.standardListPrev(Wo.copier, id, count,  JpaObject.sequence_FIELDNAME, null, null, null, null, null, null, null, null,
 				true, DESC);
 		return result;
 	}

+ 0 - 4
o2server/x_message_assemble_communicate/pom.xml

@@ -34,10 +34,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 1 - 1
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/jaxrs/mass/ActionListNext.java

@@ -25,7 +25,7 @@ class ActionListNext extends BaseAction {
 			}
 		}
 		ActionResult<List<Wo>> result = new ActionResult<>();
-		result = this.standardListNext(Wo.copier, id, count, "sequence", null, null, null, null, null, null, null, null,
+		result = this.standardListNext(Wo.copier, id, count,  JpaObject.sequence_FIELDNAME, null, null, null, null, null, null, null, null,
 				true, DESC);
 		return result;
 	}

+ 1 - 1
o2server/x_message_assemble_communicate/src/main/java/com/x/message/assemble/communicate/jaxrs/mass/ActionListPrev.java

@@ -25,7 +25,7 @@ class ActionListPrev extends BaseAction {
 			}
 		}
 		ActionResult<List<Wo>> result = new ActionResult<>();
-		result = this.standardListPrev(Wo.copier, id, count, "sequence", null, null, null, null, null, null, null, null,
+		result = this.standardListPrev(Wo.copier, id, count,  JpaObject.sequence_FIELDNAME, null, null, null, null, null, null, null, null,
 				true, DESC);
 		return result;
 	}

+ 0 - 4
o2server/x_mind_assemble_control/pom.xml

@@ -34,10 +34,6 @@
 			<plugin>
 				<artifactId>maven-antrun-plugin</artifactId>
 				<executions>
-					<execution>
-						<id>createPersistenceXml</id>
-						<phase>generate-sources</phase>
-					</execution>
 					<execution>
 						<id>describe</id>
 						<phase>prepare-package</phase>

+ 3 - 2
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/factory/MindBaseInfoFactory.java

@@ -12,6 +12,7 @@ import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang3.StringUtils;
 
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.exception.ExceptionWhen;
 import com.x.base.core.project.tools.ListTools;
 import com.x.mind.assemble.control.AbstractFactory;
@@ -248,7 +249,7 @@ public class MindBaseInfoFactory extends AbstractFactory {
 				}else{
 					p = cb.and( p, cb.greaterThan( root.get( MindBaseInfo_.creator_sequence ), sequenceFieldValue.toString() ));
 				}
-			}else if( "sequence".equals( orderField  )){//sequence
+			}else if(  JpaObject.sequence_FIELDNAME.equals( orderField  )){//sequence
 				p = cb.and( p, cb.isNotNull( root.get( MindBaseInfo_.sequence ) ));
 				if( "DESC".equalsIgnoreCase( orderType )){
 					p = cb.and( p, cb.lessThan( root.get( MindBaseInfo_.sequence ), sequenceFieldValue.toString() ));
@@ -310,7 +311,7 @@ public class MindBaseInfoFactory extends AbstractFactory {
 			}else{
 				cq.orderBy( cb.asc( root.get( MindBaseInfo_.creator_sequence ) ));
 			}
-		}else if( "sequence".equals( orderField  )){//sequence
+		}else if(  JpaObject.sequence_FIELDNAME.equals( orderField  )){//sequence
 			if( "DESC".equalsIgnoreCase( orderType )){
 				cq.orderBy( cb.desc( root.get( MindBaseInfo_.sequence ) ) );
 			}else{

+ 3 - 2
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/factory/MindRecycleInfoFactory.java

@@ -12,6 +12,7 @@ import javax.persistence.criteria.Root;
 
 import org.apache.commons.lang3.StringUtils;
 
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.exception.ExceptionWhen;
 import com.x.base.core.project.tools.ListTools;
 import com.x.mind.assemble.control.AbstractFactory;
@@ -214,7 +215,7 @@ public class MindRecycleInfoFactory extends AbstractFactory {
 				}else{
 					p = cb.and( p, cb.greaterThan( root.get( MindRecycleInfo_.creator_sequence ), sequenceFieldValue.toString() ));
 				}
-			}else if( "sequence".equals( orderField  )){//sequence
+			}else if(  JpaObject.sequence_FIELDNAME.equals( orderField  )){//sequence
 				p = cb.and( p, cb.isNotNull( root.get( MindRecycleInfo_.sequence ) ));
 				if( "DESC".equalsIgnoreCase( orderType )){
 					p = cb.and( p, cb.lessThan( root.get( MindRecycleInfo_.sequence ), sequenceFieldValue.toString() ));
@@ -270,7 +271,7 @@ public class MindRecycleInfoFactory extends AbstractFactory {
 			}else{
 				cq.orderBy( cb.asc( root.get( MindRecycleInfo_.creator_sequence ) ));
 			}
-		}else if( "sequence".equals( orderField  )){//sequence
+		}else if(  JpaObject.sequence_FIELDNAME.equals( orderField  )){//sequence
 			if( "DESC".equalsIgnoreCase( orderType )){
 				cq.orderBy( cb.desc( root.get( MindRecycleInfo_.sequence ) ) );
 			}else{

+ 2 - 1
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMindListNextWithFilter.java

@@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletRequest;
 import org.apache.commons.lang3.StringUtils;
 
 import com.google.gson.JsonElement;
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
@@ -114,7 +115,7 @@ public class ActionMindListNextWithFilter extends BaseAction {
 		private Boolean shared = null;
 		
 		@FieldDescribe( "排序列:默认为sequence" )
-		String orderField = "sequence" ;
+		String orderField =  JpaObject.sequence_FIELDNAME ;
 		
 		@FieldDescribe( "排序方式:DESC|ASC, 默认为DESC" )
 		String orderType = "DESC";

+ 2 - 1
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMindViewWithId.java

@@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.lang3.StringUtils;
 
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
@@ -85,7 +86,7 @@ public class ActionMindViewWithId extends BaseAction {
 		private static final long serialVersionUID = -5076990764713538973L;
 		public static List<String> Excludes = new ArrayList<String>();
 		{
-			Excludes.add("sequence");
+			Excludes.add( JpaObject.sequence_FIELDNAME);
 			Excludes.add("creatorUnit_sequence");
 			Excludes.add("shared_sequence");
 			Excludes.add("folder_sequence");

+ 2 - 1
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMyReciveMindNextWithFilter.java

@@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletRequest;
 import org.apache.commons.lang3.StringUtils;
 
 import com.google.gson.JsonElement;
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
@@ -131,7 +132,7 @@ public class ActionMyReciveMindNextWithFilter extends BaseAction {
 		private String key = null;
 
 		@FieldDescribe( "排序列:默认为sequence" )
-		private String orderField = "sequence" ;
+		private String orderField =  JpaObject.sequence_FIELDNAME ;
 		
 		@FieldDescribe( "排序方式:DESC|ASC, 默认为DESC" )
 		private String orderType = "DESC";

+ 2 - 1
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMyRecycleNextWithFilter.java

@@ -6,6 +6,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 
 import com.google.gson.JsonElement;
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
@@ -78,7 +79,7 @@ public class ActionMyRecycleNextWithFilter extends BaseAction {
 		private String key = null;
 		
 		@FieldDescribe( "排序列:默认为sequence" )
-		private String orderField = "sequence" ;
+		private String orderField =  JpaObject.sequence_FIELDNAME ;
 		
 		@FieldDescribe( "排序方式:DESC|ASC, 默认为DESC" )
 		private String orderType = "DESC";

+ 2 - 1
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMyShareMindNextWithFilter.java

@@ -6,6 +6,7 @@ import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 
 import com.google.gson.JsonElement;
+import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
@@ -88,7 +89,7 @@ public class ActionMyShareMindNextWithFilter extends BaseAction {
 		private List<String> shareGroups = null;
 
 		@FieldDescribe( "排序列:默认为sequence" )
-		private String orderField = "sequence" ;
+		private String orderField =  JpaObject.sequence_FIELDNAME ;
 		
 		@FieldDescribe( "排序方式:DESC|ASC, 默认为DESC" )
 		private String orderType = "DESC";

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio