Răsfoiți Sursa

Merge branch 'feature/teamwork.view_add' into fix/teamwork_1024

# Conflicts:
#	o2server/x_console/src/main/java/com/x/server/console/server/application/ApplicationServerTools.java
luojing 5 ani în urmă
părinte
comite
6933f523df
100 a modificat fișierele cu 4812 adăugiri și 728 ștergeri
  1. 4 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/organization/OrganizationDefinition.java
  2. 0 24
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_teamwork_assemble_control.java
  3. 0 10
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_teamwork_core_entity.java
  4. 3 3
      o2server/x_console/src/main/java/com/x/server/console/server/application/ApplicationServerTools.java
  5. 4 2
      o2server/x_program_center/src/main/java/com/x/program/center/Context.java
  6. 182 182
      o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/command/ActionUploadFile.java
  7. 1 1
      o2server/x_teamwork_assemble_control/pom.xml
  8. 34 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/Business.java
  9. 7 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/MimeTypeDefinition.java
  10. 150 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/CustomExtFieldReleFactory.java
  11. 105 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/PriorityFactory.java
  12. 230 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectConfigFactory.java
  13. 0 115
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectExtFieldReleFactory.java
  14. 24 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectFactory.java
  15. 55 43
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectTemplateFactory.java
  16. 184 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/StatisticFactory.java
  17. 5 3
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/TaskListTemplateFactory.java
  18. 6 2
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/ActionApplication.java
  19. 1 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/JaxrsManagerUserFilter.java
  20. 1 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/chat/ActionCreate.java
  21. 12 12
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionDelete.java
  22. 13 13
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionGet.java
  23. 12 10
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionGetNextUseableExtFieldName.java
  24. 2 2
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionListAllExtFields.java
  25. 80 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionListWithCorrelation.java
  26. 15 15
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionListWithType.java
  27. 84 44
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionSave.java
  28. 8 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/BaseAction.java
  29. 37 18
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldReleAction.java
  30. 12 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldReleFlagForQueryEmptyException.java
  31. 12 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldReleNotExistsException.java
  32. 20 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldRelePersistException.java
  33. 20 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldReleQueryException.java
  34. 0 12
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ProjectExtFieldReleFlagForQueryEmptyException.java
  35. 0 12
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ProjectExtFieldReleNotExistsException.java
  36. 0 20
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ProjectExtFieldRelePersistException.java
  37. 0 20
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ProjectExtFieldReleQueryException.java
  38. 12 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/TaskNotExistsException.java
  39. 73 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionInitConfig.java
  40. 39 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionIsManager.java
  41. 140 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionListProjectConfigNextWithFilter.java
  42. 80 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionPriorityDelete.java
  43. 78 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionPriorityGet.java
  44. 70 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionPriorityList.java
  45. 61 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionPrioritySave.java
  46. 70 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionProjectConfigDelete.java
  47. 79 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionProjectConfigGet.java
  48. 83 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionProjectConfigGetByProject.java
  49. 61 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionProjectConfigSave.java
  50. 34 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/BaseAction.java
  51. 245 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/GlobalAction.java
  52. 12 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/PriorityFlagForQueryEmptyException.java
  53. 12 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/PriorityNotExistsException.java
  54. 20 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/PriorityPersistException.java
  55. 16 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/PriorityQueryException.java
  56. 12 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ProjectConfigFlagForQueryEmptyException.java
  57. 12 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ProjectConfigNotExistsException.java
  58. 20 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ProjectConfigPersistException.java
  59. 16 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ProjectConfigQueryException.java
  60. 223 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/WrapInQueryProjectConfig.java
  61. 7 1
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/list/ActionListWithTaskGroup.java
  62. 3 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/list/BaseAction.java
  63. 92 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionComplete.java
  64. 92 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionCreateable.java
  65. 105 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionGet.java
  66. 6 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListArchiveNextWithFilter.java
  67. 6 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListCompletedNextWithFilter.java
  68. 6 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListMyNextWithFilter.java
  69. 6 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListNextInGroupWithFilter.java
  70. 30 4
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListNextWithFilter.java
  71. 6 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListNoGroupNextWithFilter.java
  72. 8 8
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListPageInGroupWithFilter.java
  73. 8 8
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListPageWithFilter.java
  74. 6 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListRecycleNextWithFilter.java
  75. 6 6
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListStarNextWithFilter.java
  76. 74 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionRecovery.java
  77. 11 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionSave.java
  78. 4 4
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionStatisticMyProjects.java
  79. 4 4
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionStatisticMyProjectsGroups.java
  80. 3 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/BaseAction.java
  81. 59 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ProjectAction.java
  82. 88 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/WrapOutControl.java
  83. 3 3
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionDelete.java
  84. 80 5
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionGet.java
  85. 19 26
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionList.java
  86. 173 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionListNextWithFilter.java
  87. 220 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionStatisticProjectTemplates.java
  88. 23 20
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ProjectTemplateAction.java
  89. 103 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/WrapInQueryProjectTemplate.java
  90. 51 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/WrapOutControl.java
  91. 272 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/ActionStatisticMyProjects.java
  92. 132 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/ActionStatisticTaskWithFilter.java
  93. 28 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/BaseAction.java
  94. 16 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/ProjectQueryException.java
  95. 16 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/StatisticQueryException.java
  96. 73 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/StatisticsAction.java
  97. 139 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/WrapInQueryTask.java
  98. 3 0
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionCopyTask.java
  99. 34 14
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionGet.java
  100. 6 7
      o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionListMyTaskWithTaskList.java

+ 4 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/organization/OrganizationDefinition.java

@@ -58,6 +58,9 @@ public class OrganizationDefinition {
 
 
 	public final static String CRMManager = "CRMManager";
 	public final static String CRMManager = "CRMManager";
 	public final static String CRMManager_discription = "CRM管理员(系统角色),可以进行CRM系统相关配置,对客户信息,商机等信息进行管理操作。";
 	public final static String CRMManager_discription = "CRM管理员(系统角色),可以进行CRM系统相关配置,对客户信息,商机等信息进行管理操作。";
+	
+	public final static String TeamWorkManager = "TeamWorkManager";
+	public final static String TeamWorkManager_discription = "TeamWork管理员(系统角色),可以进行TeamWork系统相关配置,对项目,任务等信息进行管理操作。";
 
 
 	public final static String QueryManager = "QueryManager";
 	public final static String QueryManager = "QueryManager";
 	public final static String QueryManager_discription = "数据中心管理员(系统角色),可以在数据中心进行视图管理,统计管理等操作。";
 	public final static String QueryManager_discription = "数据中心管理员(系统角色),可以在数据中心进行视图管理,统计管理等操作。";
@@ -94,7 +97,7 @@ public class OrganizationDefinition {
 	public final static List<String> DEFAULTROLES = new UnmodifiableList<String>(ListTools.toList(Manager,
 	public final static List<String> DEFAULTROLES = new UnmodifiableList<String>(ListTools.toList(Manager,
 			AttendanceManager, OrganizationManager, PersonManager, GroupManager, UnitManager, RoleManager,
 			AttendanceManager, OrganizationManager, PersonManager, GroupManager, UnitManager, RoleManager,
 			ProcessPlatformManager, ProcessPlatformCreator, MeetingManager, MeetingViewer, PortalManager, BBSManager,
 			ProcessPlatformManager, ProcessPlatformCreator, MeetingManager, MeetingViewer, PortalManager, BBSManager,
-			CMSManager, OKRManager, CRMManager, QueryManager, MessageManager, HotPictureManager, SearchPrivilege));
+			CMSManager, OKRManager, CRMManager,TeamWorkManager, QueryManager, MessageManager, HotPictureManager, SearchPrivilege));
 
 
 	public static String name(String distinguishedName) {
 	public static String name(String distinguishedName) {
 		if (StringUtils.contains(distinguishedName, "@")) {
 		if (StringUtils.contains(distinguishedName, "@")) {

+ 0 - 24
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_teamwork_assemble_control.java

@@ -1,24 +0,0 @@
-package com.x.base.core.project;
-
-import com.x.base.core.project.annotation.Module;
-import com.x.base.core.project.annotation.ModuleCategory;
-import com.x.base.core.project.annotation.ModuleType;
-
-@Module(type = ModuleType.ASSEMBLE, category = ModuleCategory.OFFICIAL, name = "工作任务管理", packageName = "com.x.teamwork.assemble.control", 
-containerEntities = {
-		"com.x.teamwork.core.entity.Project", "com.x.teamwork.core.entity.ProjectDetail",
-		"com.x.teamwork.core.entity.ProjectExtFieldRele", "com.x.teamwork.core.entity.ProjectGroup",
-		"com.x.teamwork.core.entity.ProjectTemplate","com.x.teamwork.core.entity.TaskListTemplate",
-		"com.x.teamwork.core.entity.ProjectGroupRele", "com.x.teamwork.core.entity.Task",
-		"com.x.teamwork.core.entity.TaskGroup", "com.x.teamwork.core.entity.TaskGroupRele",
-		"com.x.teamwork.core.entity.TaskDetail", "com.x.teamwork.core.entity.TaskExtField", "com.x.teamwork.core.entity.TaskList",
-		"com.x.teamwork.core.entity.TaskListRele", "com.x.teamwork.core.entity.TaskRelevance",
-		"com.x.teamwork.core.entity.TaskView", "com.x.teamwork.core.entity.SystemConfig",
-		"com.x.teamwork.core.entity.SystemConfigLobValue", "com.x.teamwork.core.entity.Review",
-		"com.x.teamwork.core.entity.BatchOperation", "com.x.teamwork.core.entity.TaskTag", 
-		"com.x.teamwork.core.entity.TaskTagRele", "com.x.teamwork.core.entity.Attachment",
-		"com.x.teamwork.core.entity.Chat", "com.x.teamwork.core.entity.ChatContent",
-		"com.x.teamwork.core.entity.Dynamic", "com.x.teamwork.core.entity.DynamicDetail" }, storeJars = { "x_organization_core_entity",
-		"x_organization_core_express", "x_teamwork_core_entity" })
-public class x_teamwork_assemble_control extends Deployable {
-}

+ 0 - 10
o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_teamwork_core_entity.java

@@ -1,10 +0,0 @@
-package com.x.base.core.project;
-
-import com.x.base.core.project.annotation.Module;
-import com.x.base.core.project.annotation.ModuleCategory;
-import com.x.base.core.project.annotation.ModuleType;
-
-@Module(type = ModuleType.ENTITY, category = ModuleCategory.OFFICIAL, name = "工作任务管理", packageName = "com.x.teamwork.core.entity")
-public class x_teamwork_core_entity extends Compilable {
-
-}

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

@@ -60,12 +60,12 @@ import com.x.base.core.project.x_processplatform_service_processing;
 import com.x.base.core.project.x_query_assemble_designer;
 import com.x.base.core.project.x_query_assemble_designer;
 import com.x.base.core.project.x_query_assemble_surface;
 import com.x.base.core.project.x_query_assemble_surface;
 import com.x.base.core.project.x_query_service_processing;
 import com.x.base.core.project.x_query_service_processing;
-import com.x.base.core.project.x_teamwork_assemble_control;
 import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.Module;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleCategory;
 import com.x.base.core.project.annotation.ModuleType;
 import com.x.base.core.project.annotation.ModuleType;
 import com.x.base.core.project.config.ApplicationServer;
 import com.x.base.core.project.config.ApplicationServer;
 import com.x.base.core.project.config.Config;
 import com.x.base.core.project.config.Config;
+import com.x.base.core.project.gson.XGsonBuilder;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.DefaultCharset;
 import com.x.base.core.project.tools.DefaultCharset;
@@ -97,8 +97,8 @@ public class ApplicationServerTools extends JettySeverTools {
 			x_bbs_assemble_control.class.getName(), x_file_assemble_control.class.getName(),
 			x_bbs_assemble_control.class.getName(), x_file_assemble_control.class.getName(),
 			x_meeting_assemble_control.class.getName(), x_mind_assemble_control.class.getName(),
 			x_meeting_assemble_control.class.getName(), x_mind_assemble_control.class.getName(),
 			x_okr_assemble_control.class.getName(), x_hotpic_assemble_control.class.getName(),
 			x_okr_assemble_control.class.getName(), x_hotpic_assemble_control.class.getName(),
-			x_teamwork_assemble_control.class.getName(), x_query_service_processing.class.getName(),
-			x_query_assemble_designer.class.getName(), x_query_assemble_surface.class.getName());
+			x_query_service_processing.class.getName(), x_query_assemble_designer.class.getName(),
+			x_query_assemble_surface.class.getName());
 
 
 	public static Server start(ApplicationServer applicationServer) throws Exception {
 	public static Server start(ApplicationServer applicationServer) throws Exception {
 
 

+ 4 - 2
o2server/x_program_center/src/main/java/com/x/program/center/Context.java

@@ -221,7 +221,7 @@ public class Context extends AbstractContext {
 				OrganizationDefinition.GroupManager, OrganizationDefinition.UnitManager,
 				OrganizationDefinition.GroupManager, OrganizationDefinition.UnitManager,
 				OrganizationDefinition.RoleManager, OrganizationDefinition.ProcessPlatformManager,
 				OrganizationDefinition.RoleManager, OrganizationDefinition.ProcessPlatformManager,
 				OrganizationDefinition.ProcessPlatformCreator, OrganizationDefinition.MeetingManager,
 				OrganizationDefinition.ProcessPlatformCreator, OrganizationDefinition.MeetingManager,
-				OrganizationDefinition.PortalManager, OrganizationDefinition.BBSManager,
+				OrganizationDefinition.PortalManager, OrganizationDefinition.BBSManager,OrganizationDefinition.TeamWorkManager,
 				OrganizationDefinition.CMSManager, OrganizationDefinition.OKRManager, OrganizationDefinition.CRMManager,
 				OrganizationDefinition.CMSManager, OrganizationDefinition.OKRManager, OrganizationDefinition.CRMManager,
 				OrganizationDefinition.QueryManager, OrganizationDefinition.MessageManager,
 				OrganizationDefinition.QueryManager, OrganizationDefinition.MessageManager,
 				OrganizationDefinition.SearchPrivilege, OrganizationDefinition.HotPictureManager);
 				OrganizationDefinition.SearchPrivilege, OrganizationDefinition.HotPictureManager);
@@ -290,7 +290,9 @@ public class Context extends AbstractContext {
 			return OrganizationDefinition.OKRManager_discription;
 			return OrganizationDefinition.OKRManager_discription;
 		} else if (OrganizationDefinition.CRMManager.equalsIgnoreCase(str)) {
 		} else if (OrganizationDefinition.CRMManager.equalsIgnoreCase(str)) {
 			return OrganizationDefinition.CRMManager_discription;
 			return OrganizationDefinition.CRMManager_discription;
-		} else if (OrganizationDefinition.QueryManager.equalsIgnoreCase(str)) {
+		}else if (OrganizationDefinition.TeamWorkManager.equalsIgnoreCase(str)) {
+			return OrganizationDefinition.TeamWorkManager_discription;
+		}else if (OrganizationDefinition.QueryManager.equalsIgnoreCase(str)) {
 			return OrganizationDefinition.QueryManager_discription;
 			return OrganizationDefinition.QueryManager_discription;
 		} else if (OrganizationDefinition.MessageManager.equalsIgnoreCase(str)) {
 		} else if (OrganizationDefinition.MessageManager.equalsIgnoreCase(str)) {
 			return OrganizationDefinition.MessageManager_discription;
 			return OrganizationDefinition.MessageManager_discription;

+ 182 - 182
o2server/x_program_center/src/main/java/com/x/program/center/jaxrs/command/ActionUploadFile.java

@@ -1,182 +1,182 @@
-package com.x.program.center.jaxrs.command;
-
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.InputStream;
-import java.net.Socket;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-
-import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
-
-import com.hankcs.hanlp.corpus.io.IOUtil;
-import com.x.base.core.project.annotation.FieldDescribe;
-import com.x.base.core.project.config.Config;
-import com.x.base.core.project.config.Nodes;
-import com.x.base.core.project.gson.GsonPropertyObject;
-import com.x.base.core.project.gson.XGsonBuilder;
-import com.x.base.core.project.http.ActionResult;
-import com.x.base.core.project.http.EffectivePerson;
-import com.x.base.core.project.logger.Logger;
-import com.x.base.core.project.logger.LoggerFactory;
-import com.x.base.core.project.tools.Crypto;
-
-
-public class ActionUploadFile  extends BaseAction {
-    private static Logger logger = LoggerFactory.getLogger(CommandAction.class);
-
-	ActionResult<Wo> execute(HttpServletRequest request ,EffectivePerson effectivePerson, String ctl, String nodeName , String nodePort, InputStream fileInputStream, FormDataContentDisposition disposition) throws Exception {
-			ActionResult<Wo> result = new ActionResult<>();	
-			Wo wo  = null;
-			String curServer = request.getLocalAddr();
-			ByteArrayInputStream byteArrayInputStream = null;
-			byte[] byteArray = IOUtil.readBytesFromOtherInputStream(fileInputStream);
-			fileInputStream.close();
-			if(nodeName.equalsIgnoreCase("*")) {
-				Nodes nodes = Config.nodes();
-				logger.info("先其他服务器");
-				for (String node : nodes.keySet()){
-					//先其他服务器
-					if(!node.equalsIgnoreCase(curServer)) {
-						if(nodes.get(node).getApplication().getEnable() || nodes.get(node).getCenter().getEnable()){
-							 byteArrayInputStream = new ByteArrayInputStream(byteArray);
-								logger.info("node="+node);
-					      wo = executeCommand( ctl,  node ,  nodes.get(node).nodeAgentPort(),  byteArrayInputStream, disposition);
-						}
-					}
-				}
-				
-				logger.info("后当前服务器");
-				for(String node : nodes.keySet()) {
-					   //后当前服务器
-					if(node.equalsIgnoreCase(curServer)) {
-				       if(nodes.get(curServer).getApplication().getEnable() || nodes.get(curServer).getCenter().getEnable()){
-				        	 byteArrayInputStream = new ByteArrayInputStream(byteArray);
-				        		logger.info("node="+node);
-					       wo = executeCommand( ctl,  node ,  nodes.get(curServer).nodeAgentPort(),  byteArrayInputStream, disposition);
-			          }
-					}
-				}
-			}else {
-				
-				 byteArrayInputStream = new ByteArrayInputStream(byteArray);
-			     wo = executeCommand( ctl,  nodeName ,  Integer.parseInt(nodePort),  byteArrayInputStream, disposition);
-			}
-			
-			result.setData(wo);
-			return result;
-	}
-
-	synchronized private Wo executeCommand(String ctl , String nodeName ,int nodePort,InputStream fileInputStream, FormDataContentDisposition disposition) throws Exception{
-		Wo wo = new Wo();
-		wo.setNode(nodeName);
-		wo.setStatus("success");
-		try (Socket socket = new Socket(nodeName, nodePort)) {
-			socket.setKeepAlive(true);
-			socket.setSoTimeout(5000);
-			DataOutputStream dos = null;
-			DataInputStream dis  = null;
-			try {
-				dos = new DataOutputStream(socket.getOutputStream());
-			    dis = new DataInputStream(socket.getInputStream());
-			    
-				Map<String, Object> commandObject = new HashMap<>();
-				commandObject.put("command", "redeploy:"+ ctl);
-				commandObject.put("credential", Crypto.rsaEncrypt("o2@", Config.publicKey()));
-				dos.writeUTF(XGsonBuilder.toJson(commandObject));
-				dos.flush();
-				
-				dos.writeUTF(disposition.getFileName());
-				dos.flush();
-				
-				logger.info("发送文件starting.......");
-				byte[] bytes = new byte[1024];
-				int length =0;
-				while((length = fileInputStream.read(bytes, 0, bytes.length)) != -1) {
-					dos.write(bytes, 0, length);
-					dos.flush();
-				}
-				logger.info("发送文件end.");
-				
-			}finally {
-				dos.close();
-				dis.close();
-				socket.close();
-				fileInputStream.close();
-			}
-		} catch (Exception ex) {
-			wo.setStatus("fail");
-		}
-        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-		wo.setTime(df.format(new Date()));
-		return wo;
-	}
-	
-
-	public static class Wi  extends GsonPropertyObject{
-		private String ctl;
-		private String nodeName;
-		private String nodePort;
-		
-		public String getCtl() {
-			return ctl;
-		}
-		public void setCtl(String ctl) {
-			this.ctl = ctl;
-		}
-		public String getNodeName() {
-			return nodeName;
-		}
-		public void setNodeName(String nodeName) {
-			this.nodeName = nodeName;
-		}
-		public String getNodePort() {
-			return nodePort;
-		}
-		public void setNodePort(String nodePort) {
-			this.nodePort = nodePort;
-		}
-	}
-	
-	public static class Wo extends GsonPropertyObject {
-		
-		@FieldDescribe("执行时间")
-		private String time;
-		@FieldDescribe("执行结束")
-		private String status;
-		@FieldDescribe("执行服务器")
-		private String node;
-
-		public String getTime() {
-			return time;
-		}
-		
-		public void setTime(String time) {
-			this.time = time;
-		}
-		
-		public String getNode() {
-			return node;
-		}
-
-		public void setNode(String node) {
-			this.node = node;
-		}
-
-		public String getStatus() {
-			return status;
-		}
-
-		public void setStatus(String status) {
-			this.status = status;
-		}
-	}
-	
-}
-
-
-
+package com.x.program.center.jaxrs.command;
+
+import java.io.ByteArrayInputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.InputStream;
+import java.net.Socket;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+
+import com.hankcs.hanlp.corpus.io.IOUtil;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.config.Config;
+import com.x.base.core.project.config.Nodes;
+import com.x.base.core.project.gson.GsonPropertyObject;
+import com.x.base.core.project.gson.XGsonBuilder;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.Crypto;
+
+
+public class ActionUploadFile  extends BaseAction {
+    private static Logger logger = LoggerFactory.getLogger(CommandAction.class);
+
+	ActionResult<Wo> execute(HttpServletRequest request ,EffectivePerson effectivePerson, String ctl, String nodeName , String nodePort, InputStream fileInputStream, FormDataContentDisposition disposition) throws Exception {
+			ActionResult<Wo> result = new ActionResult<>();	
+			Wo wo  = null;
+			String curServer = request.getLocalAddr();
+			ByteArrayInputStream byteArrayInputStream = null;
+			byte[] byteArray = IOUtil.readBytesFromOtherInputStream(fileInputStream);
+			fileInputStream.close();
+			if(nodeName.equalsIgnoreCase("*")) {
+				Nodes nodes = Config.nodes();
+				logger.info("先其他服务器");
+				for (String node : nodes.keySet()){
+					//先其他服务器
+					if(!node.equalsIgnoreCase(curServer)) {
+						if(nodes.get(node).getApplication().getEnable() || nodes.get(node).getCenter().getEnable()){
+							 byteArrayInputStream = new ByteArrayInputStream(byteArray);
+								logger.info("node="+node);
+					      wo = executeCommand( ctl,  node ,  nodes.get(node).nodeAgentPort(),  byteArrayInputStream, disposition);
+						}
+					}
+				}
+				
+				logger.info("后当前服务器");
+				for(String node : nodes.keySet()) {
+					   //后当前服务器
+					if(node.equalsIgnoreCase(curServer)) {
+				       if(nodes.get(curServer).getApplication().getEnable() || nodes.get(curServer).getCenter().getEnable()){
+				        	 byteArrayInputStream = new ByteArrayInputStream(byteArray);
+				        		logger.info("node="+node);
+					       wo = executeCommand( ctl,  node ,  nodes.get(curServer).nodeAgentPort(),  byteArrayInputStream, disposition);
+			          }
+					}
+				}
+			}else {
+				
+				 byteArrayInputStream = new ByteArrayInputStream(byteArray);
+			     wo = executeCommand( ctl,  nodeName ,  Integer.parseInt(nodePort),  byteArrayInputStream, disposition);
+			}
+			
+			result.setData(wo);
+			return result;
+	}
+
+	synchronized private Wo executeCommand(String ctl , String nodeName ,int nodePort,InputStream fileInputStream, FormDataContentDisposition disposition) throws Exception{
+		Wo wo = new Wo();
+		wo.setNode(nodeName);
+		wo.setStatus("success");
+		try (Socket socket = new Socket(nodeName, nodePort)) {
+			socket.setKeepAlive(true);
+			socket.setSoTimeout(5000);
+			DataOutputStream dos = null;
+			DataInputStream dis  = null;
+			try {
+				dos = new DataOutputStream(socket.getOutputStream());
+			    dis = new DataInputStream(socket.getInputStream());
+			    
+				Map<String, Object> commandObject = new HashMap<>();
+				commandObject.put("command", "redeploy:"+ ctl);
+				commandObject.put("credential", Crypto.rsaEncrypt("o2@", Config.publicKey()));
+				dos.writeUTF(XGsonBuilder.toJson(commandObject));
+				dos.flush();
+				
+				dos.writeUTF(disposition.getFileName());
+				dos.flush();
+				
+				logger.info("发送文件starting.......");
+				byte[] bytes = new byte[1024];
+				int length =0;
+				while((length = fileInputStream.read(bytes, 0, bytes.length)) != -1) {
+					dos.write(bytes, 0, length);
+					dos.flush();
+				}
+				logger.info("发送文件end.");
+				
+			}finally {
+				dos.close();
+				dis.close();
+				socket.close();
+				fileInputStream.close();
+			}
+		} catch (Exception ex) {
+			wo.setStatus("fail");
+		}
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		wo.setTime(df.format(new Date()));
+		return wo;
+	}
+	
+
+	public static class Wi  extends GsonPropertyObject{
+		private String ctl;
+		private String nodeName;
+		private String nodePort;
+		
+		public String getCtl() {
+			return ctl;
+		}
+		public void setCtl(String ctl) {
+			this.ctl = ctl;
+		}
+		public String getNodeName() {
+			return nodeName;
+		}
+		public void setNodeName(String nodeName) {
+			this.nodeName = nodeName;
+		}
+		public String getNodePort() {
+			return nodePort;
+		}
+		public void setNodePort(String nodePort) {
+			this.nodePort = nodePort;
+		}
+	}
+	
+	public static class Wo extends GsonPropertyObject {
+		
+		@FieldDescribe("执行时间")
+		private String time;
+		@FieldDescribe("执行结束")
+		private String status;
+		@FieldDescribe("执行服务器")
+		private String node;
+
+		public String getTime() {
+			return time;
+		}
+		
+		public void setTime(String time) {
+			this.time = time;
+		}
+		
+		public String getNode() {
+			return node;
+		}
+
+		public void setNode(String node) {
+			this.node = node;
+		}
+
+		public String getStatus() {
+			return status;
+		}
+
+		public void setStatus(String status) {
+			this.status = status;
+		}
+	}
+	
+}
+
+
+

+ 1 - 1
o2server/x_teamwork_assemble_control/pom.xml

@@ -111,7 +111,7 @@
 							<goal>copy-resources</goal>
 							<goal>copy-resources</goal>
 						</goals>
 						</goals>
 						<configuration>
 						<configuration>
-							<outputDirectory>../store</outputDirectory>
+							<outputDirectory>../../o2server/custom</outputDirectory>
 							<resources>
 							<resources>
 								<resource>
 								<resource>
 									<directory>target</directory>
 									<directory>target</directory>

+ 34 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/Business.java

@@ -12,7 +12,9 @@ import com.x.teamwork.assemble.control.factory.AttachmentFactory;
 import com.x.teamwork.assemble.control.factory.BatchOperationFactory;
 import com.x.teamwork.assemble.control.factory.BatchOperationFactory;
 import com.x.teamwork.assemble.control.factory.ChatFactory;
 import com.x.teamwork.assemble.control.factory.ChatFactory;
 import com.x.teamwork.assemble.control.factory.DynamicFactory;
 import com.x.teamwork.assemble.control.factory.DynamicFactory;
-import com.x.teamwork.assemble.control.factory.ProjectExtFieldReleFactory;
+import com.x.teamwork.assemble.control.factory.PriorityFactory;
+import com.x.teamwork.assemble.control.factory.ProjectConfigFactory;
+import com.x.teamwork.assemble.control.factory.CustomExtFieldReleFactory;
 import com.x.teamwork.assemble.control.factory.ProjectFactory;
 import com.x.teamwork.assemble.control.factory.ProjectFactory;
 import com.x.teamwork.assemble.control.factory.ProjectGroupFactory;
 import com.x.teamwork.assemble.control.factory.ProjectGroupFactory;
 import com.x.teamwork.assemble.control.factory.ProjectGroupReleFactory;
 import com.x.teamwork.assemble.control.factory.ProjectGroupReleFactory;
@@ -52,11 +54,13 @@ public class Business {
 	private TaskGroupFactory taskGroupFactory;
 	private TaskGroupFactory taskGroupFactory;
 	private TaskGroupReleFactory taskGroupReleFactory;
 	private TaskGroupReleFactory taskGroupReleFactory;
 	private TaskViewFactory taskViewFactory;
 	private TaskViewFactory taskViewFactory;
-	private ProjectExtFieldReleFactory projectExtFieldReleFactory;
+	private CustomExtFieldReleFactory customExtFieldReleFactory;
 	private ReviewFactory reviewFactory;
 	private ReviewFactory reviewFactory;
 	private BatchOperationFactory batchOperationFactory;
 	private BatchOperationFactory batchOperationFactory;
 	private TaskTagFactory taskTagFactory;	
 	private TaskTagFactory taskTagFactory;	
 	private AttachmentFactory attachmentFactory;	
 	private AttachmentFactory attachmentFactory;	
+	private PriorityFactory priorityFactory;
+	private ProjectConfigFactory projectConfigFactory;
 	
 	
 	public Organization organization() throws Exception {
 	public Organization organization() throws Exception {
 		if (null == this.organization) {
 		if (null == this.organization) {
@@ -118,11 +122,11 @@ public class Business {
 	 * @return
 	 * @return
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
-	public ProjectExtFieldReleFactory projectExtFieldReleFactory() throws Exception {
-		if (null == this.projectExtFieldReleFactory) {
-			this.projectExtFieldReleFactory = new ProjectExtFieldReleFactory( this );
+	public CustomExtFieldReleFactory customExtFieldReleFactory() throws Exception {
+		if (null == this.customExtFieldReleFactory) {
+			this.customExtFieldReleFactory = new CustomExtFieldReleFactory( this );
 		}
 		}
-		return projectExtFieldReleFactory;
+		return customExtFieldReleFactory;
 	}
 	}
 	
 	
 	/**
 	/**
@@ -197,6 +201,30 @@ public class Business {
 		return projectGroupFactory;
 		return projectGroupFactory;
 	}
 	}
 	
 	
+	/**
+	 * 获取优先级数据库访问类
+	 * @return
+	 * @throws Exception
+	 */
+	public ProjectConfigFactory projectConfigFactory() throws Exception {
+		if (null == this.projectConfigFactory) {
+			this.projectConfigFactory = new ProjectConfigFactory( this );
+		}
+		return projectConfigFactory;
+	}
+	
+	/**
+	 * 获取优先级数据库访问类
+	 * @return
+	 * @throws Exception
+	 */
+	public PriorityFactory priorityFactory() throws Exception {
+		if (null == this.priorityFactory) {
+			this.priorityFactory = new PriorityFactory( this );
+		}
+		return priorityFactory;
+	}
+	
 	/**
 	/**
 	 * 获取项目模板数据库访问类
 	 * 获取项目模板数据库访问类
 	 * @return
 	 * @return

+ 7 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/MimeTypeDefinition.java

@@ -0,0 +1,7 @@
+package com.x.teamwork.assemble.control;
+
+import javax.activation.MimetypesFileTypeMap;
+
+public class MimeTypeDefinition {
+	public static MimetypesFileTypeMap instance;
+}

+ 150 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/CustomExtFieldReleFactory.java

@@ -0,0 +1,150 @@
+package com.x.teamwork.assemble.control.factory;
+
+import java.util.ArrayList;
+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.lang3.StringUtils;
+
+import com.x.base.core.project.exception.ExceptionWhen;
+import com.x.teamwork.assemble.control.AbstractFactory;
+import com.x.teamwork.assemble.control.Business;
+import com.x.teamwork.core.entity.CustomExtFieldRele;
+import com.x.teamwork.core.entity.CustomExtFieldRele_;
+
+
+public class CustomExtFieldReleFactory extends AbstractFactory {
+
+	public CustomExtFieldReleFactory( Business business ) throws Exception {
+		super(business);
+	}
+
+	/**
+	 * 获取指定Id的CustomExtFieldRele实体信息对象
+	 * @param id
+	 * @return
+	 * @throws Exception
+	 */
+	public CustomExtFieldRele get( String id ) throws Exception {
+		return this.entityManagerContainer().find( id, CustomExtFieldRele.class, ExceptionWhen.none );
+	}
+	
+	/**
+	 * 列示指定Id的CustomExtFieldRele实体信息列表
+	 * @param ids
+	 * @return
+	 * @throws Exception
+	 */
+	public List<CustomExtFieldRele> list( List<String> ids ) throws Exception {
+		if( ids == null || ids.size() == 0 ){
+			return new ArrayList<CustomExtFieldRele>();
+		}
+		EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
+		Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
+		Predicate p = root.get(CustomExtFieldRele_.id).in(ids);
+		cq.orderBy( cb.desc( root.get( CustomExtFieldRele_.updateTime ) ) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 列示所有扩展属性信息列表
+	 * @return
+	 * @throws Exception
+	 */
+	public List<CustomExtFieldRele> listAllFieldReleObj() throws Exception {
+		
+		EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
+		Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
+		cq.orderBy( cb.asc( root.get( CustomExtFieldRele_.order ) ) );
+		return em.createQuery(cq).getResultList();
+	}
+
+	/**
+	 * 根据关联ID列示扩展属性信息列表
+	 * @param correlationId
+	 * @return
+	 * @throws Exception
+	 */
+	public List<CustomExtFieldRele> listFieldReleObjByCorrelation( String correlationId ) throws Exception {
+		if( StringUtils.isEmpty( correlationId ) ){
+			throw new Exception("correlationId can not be empty!");
+		}
+		EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
+		Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
+		Predicate p = cb.equal( root.get(CustomExtFieldRele_.correlationId), correlationId );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 根据扩展属性类型列示扩展属性信息列表
+	 * @param type
+	 * @return
+	 * @throws Exception
+	 */
+	public List<CustomExtFieldRele> listFieldReleObjByType( String type ) throws Exception {
+		if( StringUtils.isEmpty( type ) ){
+			throw new Exception("type can not be empty!");
+		}
+		EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
+		Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
+		Predicate p = cb.equal( root.get(CustomExtFieldRele_.type), type );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 根据关联ID列示扩展属性ID信息列表
+	 * @param correlationId
+	 * @return
+	 * @throws Exception
+	 */
+	public List<String> listFieldReleIdsByCorrelation( String correlationId ) throws Exception {
+		if( StringUtils.isEmpty( correlationId ) ){
+			throw new Exception("correlationId can not be empty!");
+		}
+		EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
+		Predicate p = cb.equal( root.get(CustomExtFieldRele_.correlationId), correlationId );
+		cq.select( root.get(CustomExtFieldRele_.correlationId) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 根据扩展属性名以及关联ID获取一组关联信息
+	 * @param fieldName
+	 * @param correlationId
+	 * @return
+	 * @throws Exception
+	 */
+	public List<CustomExtFieldRele> listWithFieldNameAndCorrelation( String fieldName, String correlationId ) throws Exception {
+		if( StringUtils.isEmpty( fieldName ) ){
+			throw new Exception("fieldName can not be empty!");
+		}
+		/*if( StringUtils.isEmpty( correlationId ) ){
+			throw new Exception("correlationId can not be empty!");
+		}*/
+		EntityManager em = this.entityManagerContainer().get(CustomExtFieldRele.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<CustomExtFieldRele> cq = cb.createQuery(CustomExtFieldRele.class);
+		Root<CustomExtFieldRele> root = cq.from(CustomExtFieldRele.class);
+		Predicate p = cb.equal( root.get(CustomExtFieldRele_.extFieldName), fieldName );
+		if( StringUtils.isNotEmpty( correlationId ) ){
+			p = cb.and( p,  cb.equal( root.get(CustomExtFieldRele_.correlationId), correlationId ));
+		}
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+}

+ 105 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/PriorityFactory.java

@@ -0,0 +1,105 @@
+package com.x.teamwork.assemble.control.factory;
+
+import java.util.ArrayList;
+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.lang3.StringUtils;
+
+import com.x.base.core.project.exception.ExceptionWhen;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.assemble.control.AbstractFactory;
+import com.x.teamwork.assemble.control.Business;
+import com.x.teamwork.core.entity.Priority;
+import com.x.teamwork.core.entity.Priority_;
+import com.x.teamwork.core.entity.ProjectGroup;
+import com.x.teamwork.core.entity.ProjectGroup_;
+
+
+public class PriorityFactory extends AbstractFactory {
+
+	public PriorityFactory( Business business ) throws Exception {
+		super(business);
+	}
+
+	/**
+	 * 获取指定Id的ProjectGroup实体信息对象
+	 * @param id
+	 * @return
+	 * @throws Exception
+	 */
+	public Priority get( String id ) throws Exception {
+		return this.entityManagerContainer().find( id, Priority.class, ExceptionWhen.none );
+	}
+	
+	/**
+	 * 获取指定name的优先级实体信息对象
+	 * @param name
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Priority> getByName( String name ) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(Priority.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
+		Root<Priority> root = cq.from(Priority.class);
+		Predicate p = cb.equal( root.get(Priority_.priority), name );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 列示指定Id的ProjectGroup实体信息列表
+	 * @param ids
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Priority> listPriority() throws Exception {
+		EntityManager em = this.entityManagerContainer().get(Priority.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
+		Root<Priority> root = cq.from(Priority.class);
+		//Predicate p = cb.equal( root.get(Priority_.owner), person );
+		cq.orderBy( cb.asc( root.get( Priority_.order ) ) );
+		return em.createQuery(cq).getResultList();
+	}
+
+	/**
+	 * 根据用户列示ProjectGroup实体信息列表
+	 * @param person
+	 * @return
+	 * @throws Exception
+	 */
+	public List<String> listByPerson( String person ) throws Exception {
+		if( StringUtils.isEmpty( person ) ){
+			throw new Exception("person can not be empty!");
+		}
+		EntityManager em = this.entityManagerContainer().get(ProjectGroup.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<ProjectGroup> root = cq.from(ProjectGroup.class);
+		Predicate p = cb.equal( root.get(ProjectGroup_.owner), person );
+		cq.select( root.get(ProjectGroup_.id ) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 根据用户列示Priority实体信息列表
+	 * @param person
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Priority> listPriorityByPerson( String person ) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(Priority.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
+		Root<Priority> root = cq.from(Priority.class);
+		//Predicate p = cb.equal( root.get(Priority_.owner), person );
+		cq.orderBy( cb.desc( root.get( Priority_.order ) ) );
+		return em.createQuery(cq).getResultList();
+	}	
+}

+ 230 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectConfigFactory.java

@@ -0,0 +1,230 @@
+package com.x.teamwork.assemble.control.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Order;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.exception.ExceptionWhen;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.assemble.control.AbstractFactory;
+import com.x.teamwork.assemble.control.Business;
+import com.x.teamwork.core.entity.Dynamic_;
+import com.x.teamwork.core.entity.Priority;
+import com.x.teamwork.core.entity.Priority_;
+import com.x.teamwork.core.entity.Project;
+import com.x.teamwork.core.entity.ProjectConfig;
+import com.x.teamwork.core.entity.ProjectConfig_;
+import com.x.teamwork.core.entity.ProjectGroup;
+import com.x.teamwork.core.entity.ProjectGroup_;
+import com.x.teamwork.core.entity.Project_;
+import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+
+
+public class ProjectConfigFactory extends AbstractFactory {
+
+	public ProjectConfigFactory( Business business ) throws Exception {
+		super(business);
+	}
+
+	/**
+	 * 获取指定Id的ProjectGroup实体信息对象
+	 * @param id
+	 * @return
+	 * @throws Exception
+	 */
+	public ProjectConfig get( String id ) throws Exception {
+		return this.entityManagerContainer().find( id, ProjectConfig.class, ExceptionWhen.none );
+	}
+	
+	/**
+	 * 获取指定name的优先级实体信息对象
+	 * @param name
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Priority> getByName( String name ) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(Priority.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
+		Root<Priority> root = cq.from(Priority.class);
+		Predicate p = cb.equal( root.get(Priority_.priority), name );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 列示指定Id的ProjectGroup实体信息列表
+	 * @param ids
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Priority> listPriority() throws Exception {
+		EntityManager em = this.entityManagerContainer().get(Priority.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
+		Root<Priority> root = cq.from(Priority.class);
+		//Predicate p = cb.equal( root.get(Priority_.owner), person );
+		cq.orderBy( cb.asc( root.get( Priority_.order ) ) );
+		return em.createQuery(cq).getResultList();
+	}
+
+	/**
+	 * 根据用户列示ProjectGroup实体信息列表
+	 * @param person
+	 * @return
+	 * @throws Exception
+	 */
+	public List<String> listByPerson( String person ) throws Exception {
+		if( StringUtils.isEmpty( person ) ){
+			throw new Exception("person can not be empty!");
+		}
+		EntityManager em = this.entityManagerContainer().get(ProjectGroup.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<ProjectGroup> root = cq.from(ProjectGroup.class);
+		Predicate p = cb.equal( root.get(ProjectGroup_.owner), person );
+		cq.select( root.get(ProjectGroup_.id ) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 根据用户列示Priority实体信息列表
+	 * @param person
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Priority> listPriorityByPerson( String person ) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(Priority.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Priority> cq = cb.createQuery(Priority.class);
+		Root<Priority> root = cq.from(Priority.class);
+		//Predicate p = cb.equal( root.get(Priority_.owner), person );
+		cq.orderBy( cb.desc( root.get( Priority_.order ) ) );
+		return em.createQuery(cq).getResultList();
+	}	
+	
+	/**
+	 * 根据条件查询所有符合条件的项目配置信息ID,项目配置信息不会很多 ,所以直接查询出来
+	 * @param maxCount
+	 * @param sequenceFieldValue
+	 * @param orderField
+	 * @param orderType
+	 * @param personName
+	 * @param queryFilter
+	 * @return
+	 * @throws Exception
+	 */
+	public List<String> listAllProjectConfigIds( Integer maxCount, String personName,  QueryFilter queryFilter) throws Exception {
+		EntityManager em = this.entityManagerContainer().get( ProjectConfig.class );
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<ProjectConfig> root = cq.from(ProjectConfig.class);
+		Predicate p_permission = null;
+		
+		
+		/*if( StringUtils.isNotEmpty( personName )) {
+			//可以管理的栏目,肯定可以发布信息
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.participantPersonList )) );
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.creatorPerson ), personName ) );
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.executor ), personName ) );
+		}*/
+		
+		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectConfig_.class, cb, p_permission, root, queryFilter );
+		cq.distinct(true).select( root.get(ProjectConfig_.id) );
+		return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
+	}
+	
+	/**
+	 *  根据条件查询符合条件的项目信息ID
+	 * @param maxCount
+	 * @param orderField
+	 * @param orderType
+	 * @param personName
+	 * @param identityNames
+	 * @param unitNames
+	 * @param groupNames
+	 * @param queryFilter
+	 * @return
+	 * @throws Exception
+	 */
+	public List<ProjectConfig> listWithFilter( Integer maxCount, String orderField, String orderType, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
+		EntityManager em = this.entityManagerContainer().get( ProjectConfig.class );
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<ProjectConfig> cq = cb.createQuery(ProjectConfig.class);
+		Root<ProjectConfig> root = cq.from(ProjectConfig.class);
+		Predicate p_permission = null;
+		
+		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectConfig_.class, cb, p_permission, root, queryFilter );
+
+		Order orderWithField = CriteriaBuilderTools.getOrder(cb, root, ProjectConfig_.class, orderField, orderType);
+		if( orderWithField != null ){
+			cq.orderBy( orderWithField );
+		}
+		return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
+	}
+	
+	/**
+	 * 根据条件查询符合条件的项目信息ID,根据上一条的sequnce查询指定数量的信息
+	 * @param maxCount
+	 * @param sequenceFieldValue
+	 * @param orderField
+	 * @param orderType
+	 * @param personName
+	 * @param identityNames
+	 * @param unitNames
+	 * @param groupNames
+	 * @param queryFilter
+	 * @return
+	 * @throws Exception
+	 */
+	public List<ProjectConfig> listWithFilter( Integer maxCount, Object sequenceFieldValue, String orderField, String orderType, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
+		EntityManager em = this.entityManagerContainer().get( ProjectConfig.class );
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<ProjectConfig> cq = cb.createQuery(ProjectConfig.class);
+		Root<ProjectConfig> root = cq.from(ProjectConfig.class);
+		Predicate p_permission = null;
+		
+		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectConfig_.class, cb, p_permission, root, queryFilter );
+		
+		if( sequenceFieldValue != null && StringUtils.isNotEmpty( sequenceFieldValue.toString() )) {
+			Predicate p_seq = cb.isNotNull( root.get( Dynamic_.sequence ) );
+			if( "desc".equalsIgnoreCase( orderType )){
+				p_seq = cb.and( p_seq, cb.lessThan( root.get( ProjectConfig_.sequence ), sequenceFieldValue.toString() ));
+			}else{
+				p_seq = cb.and( p_seq, cb.greaterThan( root.get( ProjectConfig_.sequence ), sequenceFieldValue.toString() ));
+			}
+			p = cb.and( p, p_seq);
+		}		
+		
+		Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, ProjectConfig_.class, orderField, orderType );
+		if( orderWithField != null ){
+			cq.orderBy( orderWithField );
+		}
+		System.out.println(">>>SQL:" + em.createQuery(cq.where(p)).setMaxResults( maxCount).toString() );
+		return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
+	}
+	
+	/**
+	 * 获取指定name的优先级实体信息对象
+	 * @param name
+	 * @return
+	 * @throws Exception
+	 */
+	public List<ProjectConfig> getProjectConfigByProject( String name ) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(ProjectConfig.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<ProjectConfig> cq = cb.createQuery(ProjectConfig.class);
+		Root<ProjectConfig> root = cq.from(ProjectConfig.class);
+		Predicate p = cb.equal( root.get(ProjectConfig_.project), name );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+}

+ 0 - 115
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectExtFieldReleFactory.java

@@ -1,115 +0,0 @@
-package com.x.teamwork.assemble.control.factory;
-
-import java.util.ArrayList;
-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.lang3.StringUtils;
-
-import com.x.base.core.project.exception.ExceptionWhen;
-import com.x.teamwork.assemble.control.AbstractFactory;
-import com.x.teamwork.assemble.control.Business;
-import com.x.teamwork.core.entity.ProjectExtFieldRele;
-import com.x.teamwork.core.entity.ProjectExtFieldRele_;
-
-
-public class ProjectExtFieldReleFactory extends AbstractFactory {
-
-	public ProjectExtFieldReleFactory( Business business ) throws Exception {
-		super(business);
-	}
-
-	/**
-	 * 获取指定Id的ProjectExtFieldRele实体信息对象
-	 * @param id
-	 * @return
-	 * @throws Exception
-	 */
-	public ProjectExtFieldRele get( String id ) throws Exception {
-		return this.entityManagerContainer().find( id, ProjectExtFieldRele.class, ExceptionWhen.none );
-	}
-	
-	/**
-	 * 列示指定Id的ProjectExtFieldRele实体信息列表
-	 * @param ids
-	 * @return
-	 * @throws Exception
-	 */
-	public List<ProjectExtFieldRele> list( List<String> ids ) throws Exception {
-		if( ids == null || ids.size() == 0 ){
-			return new ArrayList<ProjectExtFieldRele>();
-		}
-		EntityManager em = this.entityManagerContainer().get(ProjectExtFieldRele.class);
-		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<ProjectExtFieldRele> cq = cb.createQuery(ProjectExtFieldRele.class);
-		Root<ProjectExtFieldRele> root = cq.from(ProjectExtFieldRele.class);
-		Predicate p = root.get(ProjectExtFieldRele_.id).in(ids);
-		cq.orderBy( cb.desc( root.get( ProjectExtFieldRele_.updateTime ) ) );
-		return em.createQuery(cq.where(p)).getResultList();
-	}
-
-	/**
-	 * 根据项目ID列示项目扩展属性ID信息列表
-	 * @param project
-	 * @return
-	 * @throws Exception
-	 */
-	public List<ProjectExtFieldRele> listFieldReleObjByProject( String project ) throws Exception {
-		if( StringUtils.isEmpty( project ) ){
-			throw new Exception("project can not be empty!");
-		}
-		EntityManager em = this.entityManagerContainer().get(ProjectExtFieldRele.class);
-		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<ProjectExtFieldRele> cq = cb.createQuery(ProjectExtFieldRele.class);
-		Root<ProjectExtFieldRele> root = cq.from(ProjectExtFieldRele.class);
-		Predicate p = cb.equal( root.get(ProjectExtFieldRele_.projectId), project );
-		return em.createQuery(cq.where(p)).getResultList();
-	}
-	
-	/**
-	 * 根据项目ID列示项目扩展属性ID信息列表
-	 * @param project
-	 * @return
-	 * @throws Exception
-	 */
-	public List<String> listFieldReleIdsByProject( String project ) throws Exception {
-		if( StringUtils.isEmpty( project ) ){
-			throw new Exception("project can not be empty!");
-		}
-		EntityManager em = this.entityManagerContainer().get(ProjectExtFieldRele.class);
-		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<String> cq = cb.createQuery(String.class);
-		Root<ProjectExtFieldRele> root = cq.from(ProjectExtFieldRele.class);
-		Predicate p = cb.equal( root.get(ProjectExtFieldRele_.projectId), project );
-		cq.select( root.get(ProjectExtFieldRele_.projectId) );
-		return em.createQuery(cq.where(p)).getResultList();
-	}
-	
-	/**
-	 * 根据扩展属性名以及项目ID获取一组关联信息
-	 * @param fieldName
-	 * @param project
-	 * @return
-	 * @throws Exception
-	 */
-	public List<ProjectExtFieldRele> listWithFieldNameAndProject( String fieldName, String project ) throws Exception {
-		if( StringUtils.isEmpty( fieldName ) ){
-			throw new Exception("fieldName can not be empty!");
-		}
-		if( StringUtils.isEmpty( project ) ){
-			throw new Exception("project can not be empty!");
-		}
-		EntityManager em = this.entityManagerContainer().get(ProjectExtFieldRele.class);
-		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<ProjectExtFieldRele> cq = cb.createQuery(ProjectExtFieldRele.class);
-		Root<ProjectExtFieldRele> root = cq.from(ProjectExtFieldRele.class);
-		Predicate p = cb.equal( root.get(ProjectExtFieldRele_.extFieldName), fieldName );
-		p = cb.and( p,  cb.equal( root.get(ProjectExtFieldRele_.projectId), project ));
-		return em.createQuery(cq.where(p)).getResultList();
-	}
-}

+ 24 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectFactory.java

@@ -20,6 +20,8 @@ import com.x.teamwork.core.entity.Dynamic_;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.Project_;
 import com.x.teamwork.core.entity.Project_;
+import com.x.teamwork.core.entity.Task;
+import com.x.teamwork.core.entity.Task_;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 
 
@@ -158,6 +160,28 @@ public class ProjectFactory extends AbstractFactory {
 		return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
 		return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
 	}
 	}
 	
 	
+	/**
+	 *  根据条件查询符合条件的项目信息ID
+	 * @param projectId
+	 * @param deleted
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Task> listAllTasks(String projectId, Boolean deleted) throws Exception {
+		if( StringUtils.isEmpty( projectId ) ){
+			return new ArrayList<Task>();
+		}
+		EntityManager em = this.entityManagerContainer().get(Task.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Task> cq = cb.createQuery(Task.class);
+		Root<Task> root = cq.from(Task.class);
+		Predicate p = root.get(Task_.project).in(projectId);
+		p = cb.and( p, cb.isFalse( root.get(Task_.deleted )));
+		
+		cq.orderBy( cb.desc( root.get( Task_.updateTime ) ) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
 	/**
 	/**
 	 * 根据条件查询符合条件的项目信息ID,根据上一条的sequnce查询指定数量的信息
 	 * 根据条件查询符合条件的项目信息ID,根据上一条的sequnce查询指定数量的信息
 	 * @param maxCount
 	 * @param maxCount

+ 55 - 43
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/ProjectTemplateFactory.java

@@ -14,12 +14,15 @@ import org.apache.commons.lang3.StringUtils;
 
 
 import com.x.base.core.project.exception.ExceptionWhen;
 import com.x.base.core.project.exception.ExceptionWhen;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
+import com.x.organization.core.entity.PersonCard;
+import com.x.organization.core.entity.PersonCard_;
 import com.x.teamwork.assemble.control.AbstractFactory;
 import com.x.teamwork.assemble.control.AbstractFactory;
 import com.x.teamwork.assemble.control.Business;
 import com.x.teamwork.assemble.control.Business;
 import com.x.teamwork.core.entity.Dynamic_;
 import com.x.teamwork.core.entity.Dynamic_;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.ProjectTemplate;
 import com.x.teamwork.core.entity.ProjectTemplate;
+import com.x.teamwork.core.entity.ProjectTemplate_;
 import com.x.teamwork.core.entity.Project_;
 import com.x.teamwork.core.entity.Project_;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
@@ -173,44 +176,34 @@ public class ProjectTemplateFactory extends AbstractFactory {
 	 * @return
 	 * @return
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
-	public List<Project> listWithFilter( Integer maxCount, Object sequenceFieldValue, String orderField, String orderType, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
-		EntityManager em = this.entityManagerContainer().get( Project.class );
+	public List<ProjectTemplate> listWithFilter( Integer maxCount, Object sequenceFieldValue, String orderField, String orderType, String personName, QueryFilter queryFilter) throws Exception {
+		EntityManager em = this.entityManagerContainer().get( ProjectTemplate.class );
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<Project> cq = cb.createQuery(Project.class);
-		Root<Project> root = cq.from(Project.class);
+		CriteriaQuery<ProjectTemplate> cq = cb.createQuery(ProjectTemplate.class);
+		Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
 		Predicate p_permission = null;
 		Predicate p_permission = null;
 		
 		
-		if( StringUtils.isNotEmpty( personName )) {
+		/*if( StringUtils.isNotEmpty( personName )) {
 			//可以管理的栏目,肯定可以发布信息
 			//可以管理的栏目,肯定可以发布信息
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.participantPersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.participantPersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.creatorPerson ), personName ) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.creatorPerson ), personName ) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.executor ), personName ) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.executor ), personName ) );
-		}
-		
-		if( ListTools.isNotEmpty( identityNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantIdentityList).in(identityNames));
-		}
-		if( ListTools.isNotEmpty( unitNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantUnitList).in(unitNames));
-		}
-		if( ListTools.isNotEmpty( groupNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantGroupList).in(groupNames));
-		}
+		}*/
 		
 		
-		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
+		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectTemplate_.class, cb, p_permission, root, queryFilter );
 		
 		
 		if( sequenceFieldValue != null && StringUtils.isNotEmpty( sequenceFieldValue.toString() )) {
 		if( sequenceFieldValue != null && StringUtils.isNotEmpty( sequenceFieldValue.toString() )) {
 			Predicate p_seq = cb.isNotNull( root.get( Dynamic_.sequence ) );
 			Predicate p_seq = cb.isNotNull( root.get( Dynamic_.sequence ) );
 			if( "desc".equalsIgnoreCase( orderType )){
 			if( "desc".equalsIgnoreCase( orderType )){
-				p_seq = cb.and( p_seq, cb.lessThan( root.get( Project_.sequence ), sequenceFieldValue.toString() ));
+				p_seq = cb.and( p_seq, cb.lessThan( root.get( ProjectTemplate_.sequence ), sequenceFieldValue.toString() ));
 			}else{
 			}else{
-				p_seq = cb.and( p_seq, cb.greaterThan( root.get( Project_.sequence ), sequenceFieldValue.toString() ));
+				p_seq = cb.and( p_seq, cb.greaterThan( root.get( ProjectTemplate_.sequence ), sequenceFieldValue.toString() ));
 			}
 			}
 			p = cb.and( p, p_seq);
 			p = cb.and( p, p_seq);
 		}		
 		}		
 		
 		
-		Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, Project_.class, orderField, orderType );
+		Order orderWithField = CriteriaBuilderTools.getOrder( cb, root, ProjectTemplate_.class, orderField, orderType );
 		if( orderWithField != null ){
 		if( orderWithField != null ){
 			cq.orderBy( orderWithField );
 			cq.orderBy( orderWithField );
 		}
 		}
@@ -219,48 +212,67 @@ public class ProjectTemplateFactory extends AbstractFactory {
 	}
 	}
 	
 	
 	/**
 	/**
-	 * 根据条件查询所有符合条件的项目信息ID,项目信息不会很多 ,所以直接查询出来
+	 * 根据条件查询所有符合条件的项目模板信息ID,项目信息不会很多 ,所以直接查询出来
 	 * @param maxCount
 	 * @param maxCount
 	 * @param sequenceFieldValue
 	 * @param sequenceFieldValue
 	 * @param orderField
 	 * @param orderField
 	 * @param orderType
 	 * @param orderType
 	 * @param personName
 	 * @param personName
-	 * @param identityNames
-	 * @param unitNames
-	 * @param groupNames
 	 * @param queryFilter
 	 * @param queryFilter
 	 * @return
 	 * @return
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
-	public List<String> listAllViewableProjectIds( Integer maxCount, String personName, List<String> identityNames, List<String> unitNames, List<String> groupNames, QueryFilter queryFilter) throws Exception {
-		EntityManager em = this.entityManagerContainer().get( Project.class );
+	public List<String> listAllProjectTemplateIds( Integer maxCount, String personName, QueryFilter queryFilter) throws Exception {
+		EntityManager em = this.entityManagerContainer().get( ProjectTemplate.class );
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
-		Root<Project> root = cq.from(Project.class);
+		Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
 		Predicate p_permission = null;
 		Predicate p_permission = null;
 		
 		
 		
 		
-		if( StringUtils.isNotEmpty( personName )) {
+		/*if( StringUtils.isNotEmpty( personName )) {
 			//可以管理的栏目,肯定可以发布信息
 			//可以管理的栏目,肯定可以发布信息
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.participantPersonList )) );
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( ProjectTemplate_.participantPersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
 			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.isMember( personName, root.get( Project_.manageablePersonList )) );
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.creatorPerson ), personName ) );
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( Project_.executor ), personName ) );
-		}
-		if( ListTools.isNotEmpty( identityNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantIdentityList).in(identityNames));
-		}
-		if( ListTools.isNotEmpty( unitNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantUnitList).in(unitNames));
-		}
-		if( ListTools.isNotEmpty( groupNames )) {
-			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission,  root.get( Project_.participantGroupList).in(groupNames));
-		}
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( ProjectTemplate_.creatorPerson ), personName ) );
+			p_permission = CriteriaBuilderTools.predicate_or( cb, p_permission, cb.equal( root.get( ProjectTemplate_.executor ), personName ) );
+		}*/
 		
 		
-		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( Project_.class, cb, p_permission, root, queryFilter );
-		cq.distinct(true).select( root.get(Project_.id) );
+		Predicate p = CriteriaBuilderTools.composePredicateWithQueryFilter( ProjectTemplate_.class, cb, p_permission, root, queryFilter );
+		cq.distinct(true).select( root.get(ProjectTemplate_.id) );
 		return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
 		return em.createQuery(cq.where(p)).setMaxResults( maxCount).getResultList();
 	}
 	}
 
 
+	/**
+	 * 列示所有模板的分类信息
+	 * @param distinguishName
+	 * @return
+	 * @throws Exception
+	 */
+	public List<String> fetchAllGroupType( String distinguishName ) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(ProjectTemplate.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
+		Predicate p = cb.equal(root.get(ProjectTemplate_.deleted), false);
+		cq.select(root.get(ProjectTemplate_.type)).where(p).distinct(true);
+		return em.createQuery(cq).getResultList();
+	}
+	
+	/**
+	 * 根据模板类型列示模板信息
+	 * @param type
+	 * @return
+	 * @throws Exception
+	 */
+	public List<ProjectTemplate> ListProjectTemplateWithType( String type ) throws Exception {
+		EntityManager em = this.entityManagerContainer().get(ProjectTemplate.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<ProjectTemplate> cq = cb.createQuery(ProjectTemplate.class);
+		Root<ProjectTemplate> root = cq.from(ProjectTemplate.class);
+		Predicate p = cb.equal(root.get(ProjectTemplate_.deleted), false);
+		p = cb.and( p, cb.equal(root.get(ProjectTemplate_.type), type));
+		return em.createQuery(cq.where(p)).getResultList();
+	}
 	
 	
 }
 }

+ 184 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/StatisticFactory.java

@@ -0,0 +1,184 @@
+package com.x.teamwork.assemble.control.factory;
+
+import java.util.ArrayList;
+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.lang3.StringUtils;
+
+import com.x.base.core.project.exception.ExceptionWhen;
+import com.x.teamwork.assemble.control.AbstractFactory;
+import com.x.teamwork.assemble.control.Business;
+import com.x.teamwork.core.entity.Task;
+import com.x.teamwork.core.entity.TaskDetail;
+import com.x.teamwork.core.entity.Task_;
+
+
+public class StatisticFactory extends AbstractFactory {
+
+	public StatisticFactory( Business business ) throws Exception {
+		super(business);
+	}
+
+	/**
+	 * 获取指定Id的Task实体信息对象
+	 * @param id
+	 * @return
+	 * @throws Exception
+	 */
+	public Task get( String id ) throws Exception {
+		return this.entityManagerContainer().find( id, Task.class, ExceptionWhen.none );
+	}
+	
+	/**
+	 * 获取指定Id的TaskDetail实体信息对象
+	 * @param id
+	 * @return
+	 * @throws Exception
+	 */
+	public TaskDetail getDetail( String id ) throws Exception {
+		return this.entityManagerContainer().find( id, TaskDetail.class, ExceptionWhen.none );
+	}
+	
+	/**
+	 * 列示指定Id的Task实体信息列表
+	 * @param ids
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Task> list( List<String> ids ) throws Exception {
+		if( ids == null || ids.size() == 0 ){
+			return new ArrayList<Task>();
+		}
+		EntityManager em = this.entityManagerContainer().get(Task.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Task> cq = cb.createQuery(Task.class);
+		Root<Task> root = cq.from(Task.class);
+		Predicate p = root.get(Task_.id).in(ids);
+		cq.orderBy( cb.asc( root.get( Task_.createTime ) ) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 根据类别列示Task实体ID信息列表
+	 * @param application
+	 * @return
+	 * @throws Exception
+	 */
+	public List<String> listByProject( String projectId ) throws Exception {
+		if( StringUtils.isEmpty( projectId ) ){
+			throw new Exception("projectId can not be empty!");
+		}
+		EntityManager em = this.entityManagerContainer().get(Task.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<Task> root = cq.from(Task.class);
+		Predicate p = cb.equal( root.get(Task_.project), projectId );
+		cq.select( root.get(Task_.id ) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 根据类别列示Task实体ID信息列表
+	 * @param projectId
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Task> listAllTasksByProject( String projectId ) throws Exception {
+		if( StringUtils.isEmpty( projectId ) ){
+			throw new Exception("projectId can not be empty!");
+		}
+		EntityManager em = this.entityManagerContainer().get(Task.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Task> cq = cb.createQuery(Task.class);
+		Root<Task> root = cq.from(Task.class);
+		Predicate p = cb.equal( root.get(Task_.project), projectId );
+		return em.createQuery(cq.where(p)).getResultList(); 
+	}
+	
+	/**
+	 * 查询未review的工作任务信息
+	 * @param maxCount
+	 * @return
+	 * @throws Exception
+	 */
+	public List<Task> listUnReviewTask(int maxCount) throws Exception {
+		if( maxCount == 0  ){
+			maxCount = 100;
+		}
+		EntityManager em = this.entityManagerContainer().get(Task.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Task> cq = cb.createQuery(Task.class);
+		Root<Task> root = cq.from(Task.class);
+		Predicate p = cb.or( cb.isNull(root.get(Task_.reviewed )), cb.isFalse( root.get(Task_.reviewed )));
+		cq.orderBy( cb.asc( root.get( Task_.updateTime ) ) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+
+	
+	/**
+	 * 根据类别列示Task实体信息列表
+	 * @param application
+	 * @return
+	 * @throws Exception
+	 */
+	public List<String> listByParent( String pid) throws Exception {
+		if( StringUtils.isEmpty( pid ) ){
+			throw new Exception("projectId can not be empty!");
+		}
+		EntityManager em = this.entityManagerContainer().get(Task.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<Task> root = cq.from(Task.class);
+		Predicate p = cb.equal( root.get(Task_.parent), pid );
+		cq.select( root.get(Task_.id ) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+	
+	/**
+	 * 根据条件查询符合条件的项目信息数量
+	 * @param projectId
+	 * @return
+	 * @throws Exception
+	 */
+	public Long countWithProject( String projectId ) throws Exception {
+		EntityManager em = this.entityManagerContainer().get( Task.class );
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Long> cq = cb.createQuery(Long.class);
+		Root<Task> root = cq.from(Task.class);
+		Predicate p = cb.equal( root.get( Task_.project), projectId );
+		cq.select(cb.count(root)).where(p);
+		return em.createQuery(cq).getSingleResult();
+	}
+
+	public List<Task> allUnCompletedSubTasks(String taskId) throws Exception {
+		if( StringUtils.isEmpty( taskId )  ){
+			return null;
+		}
+		EntityManager em = this.entityManagerContainer().get(Task.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Task> cq = cb.createQuery(Task.class);
+		Root<Task> root = cq.from(Task.class);
+		Predicate p = cb.equal(  root.get( Task_.parent ), taskId );
+		p = cb.and( p, cb.isFalse( root.get(Task_.completed )));
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+
+	public List<String> listAllTaskIdsWithProject(String project) throws Exception {
+		if( StringUtils.isEmpty( project )  ){
+			return null;
+		}
+		EntityManager em = this.entityManagerContainer().get(Task.class);
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<Task> root = cq.from(Task.class);
+		Predicate p = cb.equal(  root.get( Task_.project ), project );
+		cq.select( root.get(Task_.id ) );
+		return em.createQuery(cq.where(p)).getResultList();
+	}
+}

+ 5 - 3
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/factory/TaskListTemplateFactory.java

@@ -23,6 +23,7 @@ import com.x.teamwork.core.entity.ProjectTemplate;
 import com.x.teamwork.core.entity.Project_;
 import com.x.teamwork.core.entity.Project_;
 import com.x.teamwork.core.entity.TaskListTemplate;
 import com.x.teamwork.core.entity.TaskListTemplate;
 import com.x.teamwork.core.entity.TaskListTemplate_;
 import com.x.teamwork.core.entity.TaskListTemplate_;
+import com.x.teamwork.core.entity.Task_;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.CriteriaBuilderTools;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 
 
@@ -54,14 +55,15 @@ public class TaskListTemplateFactory extends AbstractFactory {
 	 * @throws Exception
 	 * @throws Exception
 	 */
 	 */
 	public List<TaskListTemplate> list( String id ) throws Exception {
 	public List<TaskListTemplate> list( String id ) throws Exception {
-		if( StringUtils.isNotEmpty( id ) ){
+		if( StringUtils.isEmpty( id ) ){
 			return new ArrayList<TaskListTemplate>();
 			return new ArrayList<TaskListTemplate>();
 		}
 		}
-		EntityManager em = this.entityManagerContainer().get(Project.class);
+		EntityManager em = this.entityManagerContainer().get(TaskListTemplate.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<TaskListTemplate> cq = cb.createQuery(TaskListTemplate.class);
 		CriteriaQuery<TaskListTemplate> cq = cb.createQuery(TaskListTemplate.class);
 		Root<TaskListTemplate> root = cq.from(TaskListTemplate.class);
 		Root<TaskListTemplate> root = cq.from(TaskListTemplate.class);
-		Predicate p = cb.equal( root.get( TaskListTemplate_.id ), id ); 
+		Predicate p = cb.equal( root.get( TaskListTemplate_.projectTemplate ), id ); 
+		p = cb.and( p, cb.isFalse( root.get(TaskListTemplate_.deleted)));
 		cq.orderBy( cb.desc( root.get( TaskListTemplate_.updateTime ) ) ); 
 		cq.orderBy( cb.desc( root.get( TaskListTemplate_.updateTime ) ) ); 
 		return em.createQuery(cq.where(p)).getResultList();
 		return em.createQuery(cq.where(p)).getResultList();
 	}
 	}

+ 6 - 2
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/ActionApplication.java

@@ -9,7 +9,8 @@ import com.x.teamwork.assemble.control.jaxrs.attachment.AttachmentAction;
 import com.x.teamwork.assemble.control.jaxrs.chat.ChatAction;
 import com.x.teamwork.assemble.control.jaxrs.chat.ChatAction;
 import com.x.teamwork.assemble.control.jaxrs.config.SystemConfigAction;
 import com.x.teamwork.assemble.control.jaxrs.config.SystemConfigAction;
 import com.x.teamwork.assemble.control.jaxrs.dynamic.DynamicAction;
 import com.x.teamwork.assemble.control.jaxrs.dynamic.DynamicAction;
-import com.x.teamwork.assemble.control.jaxrs.extfield.ProjectExtFieldReleAction;
+import com.x.teamwork.assemble.control.jaxrs.extfield.CustomExtFieldReleAction;
+import com.x.teamwork.assemble.control.jaxrs.global.GlobalAction;
 import com.x.teamwork.assemble.control.jaxrs.list.TaskListAction;
 import com.x.teamwork.assemble.control.jaxrs.list.TaskListAction;
 import com.x.teamwork.assemble.control.jaxrs.project.ProjectAction;
 import com.x.teamwork.assemble.control.jaxrs.project.ProjectAction;
 import com.x.teamwork.assemble.control.jaxrs.projectTemplate.ProjectTemplateAction;
 import com.x.teamwork.assemble.control.jaxrs.projectTemplate.ProjectTemplateAction;
@@ -19,6 +20,7 @@ import com.x.teamwork.assemble.control.jaxrs.taskListTemplate.TaskListTemplateAc
 import com.x.teamwork.assemble.control.jaxrs.taskgroup.TaskGroupAction;
 import com.x.teamwork.assemble.control.jaxrs.taskgroup.TaskGroupAction;
 import com.x.teamwork.assemble.control.jaxrs.tasktag.TaskTagAction;
 import com.x.teamwork.assemble.control.jaxrs.tasktag.TaskTagAction;
 import com.x.teamwork.assemble.control.jaxrs.taskview.TaskViewAction;
 import com.x.teamwork.assemble.control.jaxrs.taskview.TaskViewAction;
+import com.x.teamwork.core.entity.CustomExtFieldRele;
 
 
 @ApplicationPath("jaxrs")
 @ApplicationPath("jaxrs")
 public class ActionApplication extends AbstractActionApplication {
 public class ActionApplication extends AbstractActionApplication {
@@ -36,9 +38,11 @@ public class ActionApplication extends AbstractActionApplication {
 		this.classes.add( DynamicAction.class );
 		this.classes.add( DynamicAction.class );
 		this.classes.add( ChatAction.class );
 		this.classes.add( ChatAction.class );
 		this.classes.add( SystemConfigAction.class );
 		this.classes.add( SystemConfigAction.class );
-		this.classes.add( ProjectExtFieldReleAction.class );
+		this.classes.add( CustomExtFieldReleAction.class );
 		this.classes.add( ProjectTemplateAction.class );
 		this.classes.add( ProjectTemplateAction.class );
 		this.classes.add( TaskListTemplateAction.class );
 		this.classes.add( TaskListTemplateAction.class );
+		this.classes.add( GlobalAction.class );
+		this.classes.add( CustomExtFieldRele.class );
 		return this.classes;
 		return this.classes;
 	}
 	}
 
 

+ 1 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/JaxrsManagerUserFilter.java

@@ -18,6 +18,7 @@ import com.x.base.core.project.jaxrs.ManagerUserJaxrsFilter;
 		"/jaxrs/task_list/*",
 		"/jaxrs/task_list/*",
 		"/jaxrs/config/*",
 		"/jaxrs/config/*",
 		"/jaxrs/extfield/*",
 		"/jaxrs/extfield/*",
+		"/jaxrs/global/*",
 		"/jaxrs/dynamic/*"
 		"/jaxrs/dynamic/*"
 		}, asyncSupported = true)
 		}, asyncSupported = true)
 public class JaxrsManagerUserFilter extends ManagerUserJaxrsFilter {
 public class JaxrsManagerUserFilter extends ManagerUserJaxrsFilter {

+ 1 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/chat/ActionCreate.java

@@ -76,6 +76,7 @@ public class ActionCreate extends BaseAction {
 					chat.setProjectId( task.getProject() );
 					chat.setProjectId( task.getProject() );
 					chat.setProjectTitle( task.getProjectName() );
 					chat.setProjectTitle( task.getProjectName() );
 					chat.setTaskTitle( task.getName() );
 					chat.setTaskTitle( task.getName() );
+					chat.setTarget(effectivePerson.getDistinguishedName());
 				}
 				}
 			} catch (Exception e) {
 			} catch (Exception e) {
 				check = false;
 				check = false;

+ 12 - 12
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionDelete.java

@@ -18,7 +18,7 @@ import com.x.base.core.project.jaxrs.WoId;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.teamwork.core.entity.Dynamic;
 import com.x.teamwork.core.entity.Dynamic;
-import com.x.teamwork.core.entity.ProjectExtFieldRele;
+import com.x.teamwork.core.entity.CustomExtFieldRele;
 
 
 public class ActionDelete extends BaseAction {
 public class ActionDelete extends BaseAction {
 
 
@@ -26,27 +26,27 @@ public class ActionDelete extends BaseAction {
 
 
 	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String flag) throws Exception {
 	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String flag) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		ActionResult<Wo> result = new ActionResult<>();
-		ProjectExtFieldRele projectExtFieldRele = null;
+		CustomExtFieldRele customExtFieldRele = null;
 		Wo wo = new Wo();
 		Wo wo = new Wo();
 		Boolean check = true;
 		Boolean check = true;
 
 
 		if ( StringUtils.isEmpty( flag ) ) {
 		if ( StringUtils.isEmpty( flag ) ) {
 			check = false;
 			check = false;
-			Exception exception = new ProjectExtFieldReleFlagForQueryEmptyException();
+			Exception exception = new CustomExtFieldReleFlagForQueryEmptyException();
 			result.error( exception );
 			result.error( exception );
 		}
 		}
 
 
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
 			try {
 			try {
-				projectExtFieldRele = projectExtFieldReleQueryService.get(flag);
-				if ( projectExtFieldRele == null) {
+				customExtFieldRele = customExtFieldReleQueryService.get(flag);
+				if ( customExtFieldRele == null) {
 					check = false;
 					check = false;
-					Exception exception = new ProjectExtFieldReleNotExistsException(flag);
+					Exception exception = new CustomExtFieldReleNotExistsException(flag);
 					result.error( exception );
 					result.error( exception );
 				}
 				}
 			} catch (Exception e) {
 			} catch (Exception e) {
 				check = false;
 				check = false;
-				Exception exception = new ProjectExtFieldReleQueryException(e, "根据指定flag查询项目扩展属性关联信息对象时发生异常。flag:" + flag);
+				Exception exception = new CustomExtFieldReleQueryException(e, "根据指定flag查询扩展属性关联信息对象时发生异常。flag:" + flag);
 				result.error(exception);
 				result.error(exception);
 				logger.error(e, effectivePerson, request, null);
 				logger.error(e, effectivePerson, request, null);
 			}
 			}
@@ -54,23 +54,23 @@ public class ActionDelete extends BaseAction {
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
 			try {
 			try {
-				projectExtFieldRelePersistService.delete(flag, effectivePerson );
+				customExtFieldRelePersistService.delete(flag, effectivePerson );
 				
 				
 				// 更新缓存
 				// 更新缓存
-				ApplicationCache.notify( ProjectExtFieldRele.class );
+				ApplicationCache.notify( CustomExtFieldRele.class );
 				
 				
-				wo.setId( projectExtFieldRele.getId() );
+				wo.setId( customExtFieldRele.getId() );
 				
 				
 			} catch (Exception e) {
 			} catch (Exception e) {
 				check = false;
 				check = false;
-				Exception exception = new ProjectExtFieldReleQueryException(e, "根据指定flag删除项目扩展属性关联信息对象时发生异常。flag:" + flag);
+				Exception exception = new CustomExtFieldReleQueryException(e, "根据指定flag删除扩展属性关联信息对象时发生异常。flag:" + flag);
 				result.error(exception);
 				result.error(exception);
 				logger.error(e, effectivePerson, request, null);
 				logger.error(e, effectivePerson, request, null);
 			}
 			}
 		}
 		}
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
 			try {					
 			try {					
-				Dynamic dynamic = dynamicPersistService.projectExtFieldReleDeleteDynamic( projectExtFieldRele, effectivePerson);
+				Dynamic dynamic = dynamicPersistService.projectExtFieldReleDeleteDynamic( customExtFieldRele, effectivePerson);
 				if( dynamic != null ) {
 				if( dynamic != null ) {
 					List<WoDynamic> dynamics = new ArrayList<>();
 					List<WoDynamic> dynamics = new ArrayList<>();
 					dynamics.add( WoDynamic.copier.copy( dynamic ) );
 					dynamics.add( WoDynamic.copier.copy( dynamic ) );

+ 13 - 13
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionGet.java

@@ -16,7 +16,7 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
-import com.x.teamwork.core.entity.ProjectExtFieldRele;
+import com.x.teamwork.core.entity.CustomExtFieldRele;
 
 
 import net.sf.ehcache.Element;
 import net.sf.ehcache.Element;
 
 
@@ -27,17 +27,17 @@ public class ActionGet extends BaseAction {
 	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id) throws Exception {
 	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		ActionResult<Wo> result = new ActionResult<>();
 		Wo wo = null;
 		Wo wo = null;
-		ProjectExtFieldRele projectExtFieldRele = null;
+		CustomExtFieldRele customExtFieldRele = null;
 		Boolean check = true;
 		Boolean check = true;
 
 
 		if ( StringUtils.isEmpty( id ) ) {
 		if ( StringUtils.isEmpty( id ) ) {
 			check = false;
 			check = false;
-			Exception exception = new ProjectExtFieldReleFlagForQueryEmptyException();
+			Exception exception = new CustomExtFieldReleFlagForQueryEmptyException();
 			result.error( exception );
 			result.error( exception );
 		}
 		}
 
 
-		String cacheKey = ApplicationCache.concreteCacheKey( "ProjectExtFieldRele.Get." + id );
-		Element element = projectExtFieldReleCache.get( cacheKey );
+		String cacheKey = ApplicationCache.concreteCacheKey( "CustomExtFieldRele.Get." + id );
+		Element element = customExtFieldReleCache.get( cacheKey );
 
 
 		if ((null != element) && (null != element.getObjectValue())) {
 		if ((null != element) && (null != element.getObjectValue())) {
 			wo = (Wo) element.getObjectValue();
 			wo = (Wo) element.getObjectValue();
@@ -45,15 +45,15 @@ public class ActionGet extends BaseAction {
 		} else {
 		} else {
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
-					projectExtFieldRele = projectExtFieldReleQueryService.get(id);
-					if ( projectExtFieldRele == null) {
+					customExtFieldRele = customExtFieldReleQueryService.get(id);
+					if ( customExtFieldRele == null) {
 						check = false;
 						check = false;
-						Exception exception = new ProjectExtFieldReleNotExistsException(id);
+						Exception exception = new CustomExtFieldReleNotExistsException(id);
 						result.error( exception );
 						result.error( exception );
 					}
 					}
 				} catch (Exception e) {
 				} catch (Exception e) {
 					check = false;
 					check = false;
-					Exception exception = new ProjectExtFieldReleQueryException( e, "根据指定id查询扩展属性关联信息对象时发生异常。flag:" + id );
+					Exception exception = new CustomExtFieldReleQueryException( e, "根据指定id查询扩展属性关联信息对象时发生异常。flag:" + id );
 					result.error(exception);
 					result.error(exception);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
@@ -61,9 +61,9 @@ public class ActionGet extends BaseAction {
 			
 			
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
-					wo = Wo.copier.copy( projectExtFieldRele );
+					wo = Wo.copier.copy( customExtFieldRele );
 				} catch (Exception e) {
 				} catch (Exception e) {
-					Exception exception = new ProjectExtFieldReleQueryException(e, "将查询出来的扩展属性关联信息对象转换为可输出的数据信息时发生异常。");
+					Exception exception = new CustomExtFieldReleQueryException(e, "将查询出来的扩展属性关联信息对象转换为可输出的数据信息时发生异常。");
 					result.error(exception);
 					result.error(exception);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
@@ -73,13 +73,13 @@ public class ActionGet extends BaseAction {
 		return result;
 		return result;
 	}
 	}
 
 
-	public static class Wo extends ProjectExtFieldRele {
+	public static class Wo extends CustomExtFieldRele {
 		
 		
 		private static final long serialVersionUID = -5076990764713538973L;
 		private static final long serialVersionUID = -5076990764713538973L;
 
 
 		public static List<String> Excludes = new ArrayList<String>();
 		public static List<String> Excludes = new ArrayList<String>();
 
 
-		static WrapCopier<ProjectExtFieldRele, Wo> copier = WrapCopierFactory.wo( ProjectExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
+		static WrapCopier<CustomExtFieldRele, Wo> copier = WrapCopierFactory.wo( CustomExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
 
 
 	}
 	}
 }
 }

+ 12 - 10
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionGetNextUseableExtFieldName.java

@@ -9,21 +9,23 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.Project;
+import com.x.teamwork.core.entity.Task;
 
 
 public class ActionGetNextUseableExtFieldName extends BaseAction {
 public class ActionGetNextUseableExtFieldName extends BaseAction {
 	
 	
 	private static  Logger logger = LoggerFactory.getLogger(ActionGetNextUseableExtFieldName.class);
 	private static  Logger logger = LoggerFactory.getLogger(ActionGetNextUseableExtFieldName.class);
 	
 	
-	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String projectId, String fieldType ) throws Exception {
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String correlationId, String fieldType ) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		ActionResult<Wo> result = new ActionResult<>();
 		Project project = null;
 		Project project = null;
+		Task task = null;
 		Boolean check = true;
 		Boolean check = true;
 		Wo wo = new Wo();
 		Wo wo = new Wo();
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			if( StringUtils.isEmpty( projectId )) {
+			if( StringUtils.isEmpty( correlationId )) {
 				check = false;
 				check = false;
-				Exception exception = new ProjectFlagForQueryEmptyException();
+				Exception exception = new CustomExtFieldReleFlagForQueryEmptyException();
 				result.error( exception );
 				result.error( exception );
 			}
 			}
 		}
 		}
@@ -34,28 +36,28 @@ public class ActionGetNextUseableExtFieldName extends BaseAction {
 			}
 			}
 		}
 		}
 		
 		
-		if( Boolean.TRUE.equals( check ) ){
+		/*if( Boolean.TRUE.equals( check ) ){
 			try {
 			try {
-				project = projectQueryService.get( projectId );
+				project = projectQueryService.get( correlationId );
 				if ( project == null) {
 				if ( project == null) {
 					check = false;
 					check = false;
-					Exception exception = new ProjectNotExistsException( projectId );
+					Exception exception = new ProjectNotExistsException( correlationId );
 					result.error( exception );
 					result.error( exception );
 				}
 				}
 			} catch (Exception e) {
 			} catch (Exception e) {
 				check = false;
 				check = false;
-				Exception exception = new ProjectExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" +  projectId );
+				Exception exception = new CustomExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" +  correlationId );
 				result.error(exception);
 				result.error(exception);
 				logger.error(e, effectivePerson, request, null);
 				logger.error(e, effectivePerson, request, null);
 			}
 			}
-		}
+		}*/
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			String fieldName = projectExtFieldReleQueryService.getNextUseableExtFieldName( projectId, fieldType );
+			String fieldName = customExtFieldReleQueryService.getNextUseableExtFieldName( correlationId, fieldType );
 			if( StringUtils.isNotEmpty( fieldName )) {
 			if( StringUtils.isNotEmpty( fieldName )) {
 				wo.setFieldName(fieldName);
 				wo.setFieldName(fieldName);
 			}else {
 			}else {
-				Exception exception = new ProjectExtFieldReleQueryException( "当前项目无可用扩展属性。" );
+				Exception exception = new CustomExtFieldReleQueryException( "当前关联ID无可用扩展属性。" );
 				result.error(exception);
 				result.error(exception);
 			}
 			}
 		}
 		}

+ 2 - 2
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionListAllExtFields.java

@@ -7,7 +7,7 @@ import javax.servlet.http.HttpServletRequest;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.teamwork.core.entity.tools.FieldInfo;
 import com.x.teamwork.core.entity.tools.FieldInfo;
-import com.x.teamwork.core.entity.tools.ProjectExtField;
+import com.x.teamwork.core.entity.tools.CustomExtField;
 
 
 public class ActionListAllExtFields extends BaseAction {
 public class ActionListAllExtFields extends BaseAction {
 
 
@@ -20,7 +20,7 @@ public class ActionListAllExtFields extends BaseAction {
 
 
 	public static class Wo {
 	public static class Wo {
  
  
-		private List<FieldInfo> fieldInfos = ProjectExtField.listAllExtField();
+		private List<FieldInfo> fieldInfos = CustomExtField.listAllExtField();
 		
 		
 		public List<FieldInfo> getFieldInfos() {
 		public List<FieldInfo> getFieldInfos() {
 			return fieldInfos;
 			return fieldInfos;

+ 80 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionListWithCorrelation.java

@@ -0,0 +1,80 @@
+package com.x.teamwork.assemble.control.jaxrs.extfield;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+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;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.base.core.project.tools.SortTools;
+import com.x.teamwork.core.entity.CustomExtFieldRele;
+
+import net.sf.ehcache.Element;
+
+public class ActionListWithCorrelation extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionListWithCorrelation.class);
+
+	@SuppressWarnings("unchecked")
+	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson, String correlationId ) throws Exception {
+		ActionResult<List<Wo>> result = new ActionResult<>();
+		List<Wo> wos = null;
+		List<CustomExtFieldRele> customExtFieldReles = null;
+		Boolean check = true;
+
+		String cacheKey = ApplicationCache.concreteCacheKey( "ActionListWithCorrelation", correlationId, effectivePerson.getDistinguishedName() );
+		Element element = customExtFieldReleCache.get( cacheKey );
+		
+		if ((null != element) && (null != element.getObjectValue())) {
+			wos = (List<Wo>) element.getObjectValue();
+			result.setData( wos );
+		} else {
+			if( Boolean.TRUE.equals( check ) ){
+				try {
+					customExtFieldReles = customExtFieldReleQueryService.listReleWithCorrelation(correlationId);
+					if( ListTools.isEmpty( customExtFieldReles )) {
+						customExtFieldReles = new ArrayList<>();
+					}
+					wos = Wo.copier.copy( customExtFieldReles );						
+					SortTools.asc( wos, "createTime");						
+					customExtFieldReleCache.put(new Element(cacheKey, wos));
+					result.setData(wos);	
+				} catch (Exception e) {
+					check = false;
+					Exception exception = new CustomExtFieldReleQueryException(e, "根据关联ID查询对应的扩展属性信息列表时发生异常。");
+					result.error(exception);
+					logger.error(e, effectivePerson, request, null);
+				}
+			}
+		}
+		return result;
+	}
+
+	public static class Wo extends CustomExtFieldRele {
+		
+		private Long rank;
+
+		public Long getRank() {
+			return rank;
+		}
+
+		public void setRank(Long rank) {
+			this.rank = rank;
+		}
+		
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<CustomExtFieldRele, Wo> copier = WrapCopierFactory.wo( CustomExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+
+	}
+}

+ 15 - 15
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionListWithProject.java → o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionListWithType.java

@@ -15,23 +15,23 @@ import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.SortTools;
 import com.x.base.core.project.tools.SortTools;
-import com.x.teamwork.core.entity.ProjectExtFieldRele;
+import com.x.teamwork.core.entity.CustomExtFieldRele;
 
 
 import net.sf.ehcache.Element;
 import net.sf.ehcache.Element;
 
 
-public class ActionListWithProject extends BaseAction {
+public class ActionListWithType extends BaseAction {
 
 
-	private static Logger logger = LoggerFactory.getLogger(ActionListWithProject.class);
+	private static Logger logger = LoggerFactory.getLogger(ActionListWithType.class);
 
 
 	@SuppressWarnings("unchecked")
 	@SuppressWarnings("unchecked")
-	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson, String projectId ) throws Exception {
+	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson, String type ) throws Exception {
 		ActionResult<List<Wo>> result = new ActionResult<>();
 		ActionResult<List<Wo>> result = new ActionResult<>();
 		List<Wo> wos = null;
 		List<Wo> wos = null;
-		List<ProjectExtFieldRele> projectExtFieldReles = null;
+		List<CustomExtFieldRele> customExtFieldReles = null;
 		Boolean check = true;
 		Boolean check = true;
 
 
-		String cacheKey = ApplicationCache.concreteCacheKey( "ActionList", projectId, effectivePerson.getDistinguishedName() );
-		Element element = projectExtFieldReleCache.get( cacheKey );
+		String cacheKey = ApplicationCache.concreteCacheKey( "ActionListWithPublic", type, effectivePerson.getDistinguishedName() );
+		Element element = customExtFieldReleCache.get( cacheKey );
 		
 		
 		if ((null != element) && (null != element.getObjectValue())) {
 		if ((null != element) && (null != element.getObjectValue())) {
 			wos = (List<Wo>) element.getObjectValue();
 			wos = (List<Wo>) element.getObjectValue();
@@ -39,17 +39,17 @@ public class ActionListWithProject extends BaseAction {
 		} else {
 		} else {
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
-					projectExtFieldReles = projectExtFieldReleQueryService.listReleWithProject(projectId);
-					if( ListTools.isEmpty( projectExtFieldReles )) {
-						projectExtFieldReles = new ArrayList<>();
+					customExtFieldReles = customExtFieldReleQueryService.listReleWithType(type);
+					if( ListTools.isEmpty( customExtFieldReles )) {
+						customExtFieldReles = new ArrayList<>();
 					}
 					}
-					wos = Wo.copier.copy( projectExtFieldReles );						
+					wos = Wo.copier.copy( customExtFieldReles );						
 					SortTools.asc( wos, "createTime");						
 					SortTools.asc( wos, "createTime");						
-					projectExtFieldReleCache.put(new Element(cacheKey, wos));
+					customExtFieldReleCache.put(new Element(cacheKey, wos));
 					result.setData(wos);	
 					result.setData(wos);	
 				} catch (Exception e) {
 				} catch (Exception e) {
 					check = false;
 					check = false;
-					Exception exception = new ProjectExtFieldReleQueryException(e, "根据用户拥有的项目扩展属性关联信息列表时发生异常。");
+					Exception exception = new CustomExtFieldReleQueryException(e, "根据关联ID查询对应的扩展属性信息列表时发生异常。");
 					result.error(exception);
 					result.error(exception);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
@@ -58,7 +58,7 @@ public class ActionListWithProject extends BaseAction {
 		return result;
 		return result;
 	}
 	}
 
 
-	public static class Wo extends ProjectExtFieldRele {
+	public static class Wo extends CustomExtFieldRele {
 		
 		
 		private Long rank;
 		private Long rank;
 
 
@@ -74,7 +74,7 @@ public class ActionListWithProject extends BaseAction {
 
 
 		public static List<String> Excludes = new ArrayList<String>();
 		public static List<String> Excludes = new ArrayList<String>();
 
 
-		static WrapCopier<ProjectExtFieldRele, Wo> copier = WrapCopierFactory.wo( ProjectExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+		static WrapCopier<CustomExtFieldRele, Wo> copier = WrapCopierFactory.wo( CustomExtFieldRele.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
 
 
 	}
 	}
 }
 }

+ 84 - 44
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ActionSave.java

@@ -20,7 +20,8 @@ import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.teamwork.core.entity.Dynamic;
 import com.x.teamwork.core.entity.Dynamic;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.Project;
-import com.x.teamwork.core.entity.ProjectExtFieldRele;
+import com.x.teamwork.core.entity.Task;
+import com.x.teamwork.core.entity.CustomExtFieldRele;
 
 
 public class ActionSave extends BaseAction {
 public class ActionSave extends BaseAction {
 
 
@@ -28,9 +29,10 @@ public class ActionSave extends BaseAction {
 
 
 	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
 	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		ActionResult<Wo> result = new ActionResult<>();
-		ProjectExtFieldRele projectExtFieldRele = null;
-		ProjectExtFieldRele projectExtFieldRele_old = null;
+		CustomExtFieldRele customExtFieldRele = null;
+		CustomExtFieldRele customExtFieldRele_old = null;
 		Project project = null;
 		Project project = null;
+		Task task = null;
 		Wi wi = null;
 		Wi wi = null;
 		Wo wo = new Wo();
 		Wo wo = new Wo();
 		String fieldName = null;
 		String fieldName = null;
@@ -38,45 +40,59 @@ public class ActionSave extends BaseAction {
 
 
 		try {
 		try {
 			wi = this.convertToWrapIn( jsonElement, Wi.class );
 			wi = this.convertToWrapIn( jsonElement, Wi.class );
-			projectExtFieldRele = Wi.copier.copy( wi );
+			customExtFieldRele = Wi.copier.copy( wi );
 		} catch (Exception e) {
 		} catch (Exception e) {
 			check = false;
 			check = false;
-			Exception exception = new ProjectExtFieldRelePersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
+			Exception exception = new CustomExtFieldRelePersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
 			result.error(exception);
 			result.error(exception);
 			logger.error(e, effectivePerson, request, null);
 			logger.error(e, effectivePerson, request, null);
 		}
 		}
 		
 		
-		if( Boolean.TRUE.equals( check ) ){
-			if( StringUtils.isEmpty( projectExtFieldRele.getProjectId() )) {
+		/*if( Boolean.TRUE.equals( check ) ){
+			if( StringUtils.isEmpty( customExtFieldRele.getProjectId() )) {
 				check = false;
 				check = false;
 				Exception exception = new ProjectFlagForQueryEmptyException();
 				Exception exception = new ProjectFlagForQueryEmptyException();
 				result.error( exception );
 				result.error( exception );
 			}
 			}
-		}
+		}*/
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			try {
-				project = projectQueryService.get( projectExtFieldRele.getProjectId() );
-				if ( project == null) {
+			if(StringUtils.isNotEmpty( customExtFieldRele.getCorrelationId() )){
+				try {
+					if(StringUtils.equals(customExtFieldRele.getType(), "project")){
+						project = projectQueryService.get( customExtFieldRele.getCorrelationId() );
+						if ( project == null) {
+							check = false;
+							Exception exception = new ProjectNotExistsException( customExtFieldRele.getCorrelationId() );
+							result.error( exception );
+						}
+					}
+					if(StringUtils.equals(customExtFieldRele.getType(), "task")){
+						task = taskQueryService.get( customExtFieldRele.getCorrelationId() );
+						if ( task == null) {
+							check = false;
+							Exception exception = new TaskNotExistsException( customExtFieldRele.getCorrelationId() );
+							result.error( exception );
+						}
+					}
+					
+				} catch (Exception e) {
 					check = false;
 					check = false;
-					Exception exception = new ProjectNotExistsException( projectExtFieldRele.getProjectId() );
-					result.error( exception );
+					Exception exception = new CustomExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" +  customExtFieldRele.getCorrelationId() );
+					result.error(exception);
+					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			} catch (Exception e) {
-				check = false;
-				Exception exception = new ProjectExtFieldRelePersistException(e, "根据指定flag查询应用项目信息对象时发生异常。flag:" +  projectExtFieldRele.getProjectId() );
-				result.error(exception);
-				logger.error(e, effectivePerson, request, null);
 			}
 			}
+			
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			if( StringUtils.isNotEmpty( projectExtFieldRele.getId() )) {
+			if( StringUtils.isNotEmpty( customExtFieldRele.getId() )) {
 				try {
 				try {
-					projectExtFieldRele_old = projectExtFieldReleQueryService.get( projectExtFieldRele.getId() );
+					customExtFieldRele_old = customExtFieldReleQueryService.get( customExtFieldRele.getId() );
 				} catch (Exception e) {
 				} catch (Exception e) {
 					check = false;
 					check = false;
-					Exception exception = new ProjectExtFieldReleQueryException(e, "系统在根据ID查询指定的扩展属性关联信息时发生异常。ID:" +  projectExtFieldRele.getId() );
+					Exception exception = new CustomExtFieldReleQueryException(e, "系统在根据ID查询指定的扩展属性关联信息时发生异常。ID:" +  customExtFieldRele.getId() );
 					result.error(exception);
 					result.error(exception);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
@@ -84,51 +100,53 @@ public class ActionSave extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			if( projectExtFieldRele_old == null ) { //新建
-				fieldName = projectExtFieldReleQueryService.getNextUseableExtFieldName( projectExtFieldRele.getProjectId(), projectExtFieldRele.getDisplayType() );
+			if( customExtFieldRele_old == null ) { //新建
+				fieldName = customExtFieldReleQueryService.getNextUseableExtFieldName( customExtFieldRele.getCorrelationId(), customExtFieldRele.getDisplayType() );
 			}else {
 			}else {
 				//判断是否属性在富文本和普通 文本之间发生了变换
 				//判断是否属性在富文本和普通 文本之间发生了变换
-				if( ("RICHTEXT".equals( wi.getDisplayType() ) && !"RICHTEXT".equals( projectExtFieldRele_old.getDisplayType() ))
-						|| !"RICHTEXT".equals( wi.getDisplayType() ) && "RICHTEXT".equals( projectExtFieldRele_old.getDisplayType() ) ) {
+				if( (StringUtils.equals("RICHTEXT",wi.getDisplayType()) && !StringUtils.equals("RICHTEXT",customExtFieldRele_old.getDisplayType()))
+						|| !StringUtils.equals("RICHTEXT",wi.getDisplayType()) && StringUtils.equals("RICHTEXT",customExtFieldRele_old.getDisplayType())) {
 					//判断当前所需要的类型的备用属性是否足够
 					//判断当前所需要的类型的备用属性是否足够
-					fieldName = projectExtFieldReleQueryService.getNextUseableExtFieldName( projectExtFieldRele.getProjectId(), projectExtFieldRele.getDisplayType() );
+					fieldName = customExtFieldReleQueryService.getNextUseableExtFieldName( customExtFieldRele.getCorrelationId(), customExtFieldRele.getDisplayType() );
 				}else {
 				}else {
-					fieldName = projectExtFieldRele_old.getExtFieldName();
+					fieldName = customExtFieldRele_old.getExtFieldName();
 				}
 				}
 			}
 			}
 		}
 		}
-		
+
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
 			if( StringUtils.isEmpty(  fieldName )) {
 			if( StringUtils.isEmpty(  fieldName )) {
 				//备用属性已经用完了,无法再添加新的属性
 				//备用属性已经用完了,无法再添加新的属性
 				check = false;
 				check = false;
-				Exception exception = new ProjectExtFieldRelePersistException( "扩展属性不足,系统无法为该项目分配["+ projectExtFieldRele.getDisplayType() +"]。"  );
-				result.error(exception);
+				wo.setUseable(false);
+				/*Exception exception = new CustomExtFieldRelePersistException( "扩展属性不足(备用属性已用完),系统无法为该对象分配["+ customExtFieldRele.getDisplayType() +"]。"  );
+				result.error(exception);*/
 			}else {
 			}else {
-				projectExtFieldRele.setExtFieldName( fieldName );
+				customExtFieldRele.setExtFieldName( fieldName );
 			}
 			}
 		}
 		}
 
 
+		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
 			try {
 			try {
 				
 				
-				projectExtFieldRele = projectExtFieldRelePersistService.save( projectExtFieldRele, effectivePerson );
+				customExtFieldRele = customExtFieldRelePersistService.save( customExtFieldRele, effectivePerson );
 				
 				
 				// 更新缓存
 				// 更新缓存
-				ApplicationCache.notify( ProjectExtFieldRele.class );
+				ApplicationCache.notify( CustomExtFieldRele.class );
 				
 				
-				wo.setId( projectExtFieldRele.getId()  );
+				wo.setId( customExtFieldRele.getId()  );
 				
 				
 			} catch (Exception e) {
 			} catch (Exception e) {
 				check = false;
 				check = false;
-				Exception exception = new ProjectExtFieldRelePersistException(e, "项目扩展属性关联信息保存时发生异常。");
+				Exception exception = new CustomExtFieldRelePersistException(e, "扩展属性关联信息保存时发生异常。");
 				result.error(exception);
 				result.error(exception);
 				logger.error(e, effectivePerson, request, null);
 				logger.error(e, effectivePerson, request, null);
 			}			
 			}			
 		}
 		}
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
 			try {					
 			try {					
-				Dynamic dynamic = dynamicPersistService.projectExtFieldReleSaveDynamic(projectExtFieldRele_old, projectExtFieldRele, effectivePerson);
+				Dynamic dynamic = dynamicPersistService.projectExtFieldReleSaveDynamic(customExtFieldRele_old, customExtFieldRele, effectivePerson);
 				if( dynamic != null ) {
 				if( dynamic != null ) {
 					List<WoDynamic> dynamics = new ArrayList<>();
 					List<WoDynamic> dynamics = new ArrayList<>();
 					dynamics.add( WoDynamic.copier.copy( dynamic ) );
 					dynamics.add( WoDynamic.copier.copy( dynamic ) );
@@ -148,23 +166,26 @@ public class ActionSave extends BaseAction {
 		
 		
 		@FieldDescribe("ID,为空时为新建")
 		@FieldDescribe("ID,为空时为新建")
 		private String id;
 		private String id;
-		
-		@FieldDescribe("项目ID(必填)")
-		private String projectId;
 
 
 		@FieldDescribe("显示属性名称(必填)")
 		@FieldDescribe("显示属性名称(必填)")
 		private String displayName;
 		private String displayName;
 
 
 		@FieldDescribe("显示方式:TEXT|RADIO|CHECKBOX|SELECT|MUTISELECT|RICHTEXT(必填)")
 		@FieldDescribe("显示方式:TEXT|RADIO|CHECKBOX|SELECT|MUTISELECT|RICHTEXT(必填)")
 		private String displayType="TEXT";
 		private String displayType="TEXT";
+		
+		@FieldDescribe("类型:project|task(必填)")
+		private String type;
 
 
 		@FieldDescribe("说明信息(非必填)")
 		@FieldDescribe("说明信息(非必填)")
 		private String description;
 		private String description;
+		
+		@FieldDescribe("关联ID((非必填)")
+		private String correlationId;
 
 
 		@FieldDescribe("选择荐的备选数据,数据Json, displayType=RADIO|CHECKBOX|SELECT|MUTISELECT时必须填写,否则无选择项")
 		@FieldDescribe("选择荐的备选数据,数据Json, displayType=RADIO|CHECKBOX|SELECT|MUTISELECT时必须填写,否则无选择项")
 		private String optionsData;
 		private String optionsData;
 		
 		
-		public static WrapCopier<Wi, ProjectExtFieldRele> copier = WrapCopierFactory.wi( Wi.class, ProjectExtFieldRele.class, null, null );
+		public static WrapCopier<Wi, CustomExtFieldRele> copier = WrapCopierFactory.wi( Wi.class, CustomExtFieldRele.class, null, null );
 		
 		
 		public String getDisplayType() {
 		public String getDisplayType() {
 			return displayType;
 			return displayType;
@@ -190,12 +211,12 @@ public class ActionSave extends BaseAction {
 			this.id = id;
 			this.id = id;
 		}
 		}
 
 
-		public String getProjectId() {
-			return projectId;
+		public String getCorrelationId() {
+			return correlationId;
 		}
 		}
 
 
-		public void setProjectId(String projectId) {
-			this.projectId = projectId;
+		public void setCorrelationId(String correlationId) {
+			this.correlationId = correlationId;
 		}
 		}
 
 
 		public String getDisplayName() {
 		public String getDisplayName() {
@@ -205,6 +226,14 @@ public class ActionSave extends BaseAction {
 		public void setDisplayName(String displayName) {
 		public void setDisplayName(String displayName) {
 			this.displayName = displayName;
 			this.displayName = displayName;
 		}
 		}
+		
+		public String getType() {
+			return type;
+		}
+
+		public void setType(String type) {
+			this.type = type;
+		}
 
 
 		public String getDescription() {
 		public String getDescription() {
 			return description;
 			return description;
@@ -219,6 +248,17 @@ public class ActionSave extends BaseAction {
 		
 		
 		@FieldDescribe("操作引起的动态内容")
 		@FieldDescribe("操作引起的动态内容")
 		List<WoDynamic> dynamics = new ArrayList<>();
 		List<WoDynamic> dynamics = new ArrayList<>();
+		
+		@FieldDescribe("备用属性是否可用")
+		Boolean useable = true;
+		
+		public Boolean getUseable(){
+			return useable;
+		}
+		
+		public void setUseable(Boolean useable){
+			this.useable = useable;
+		}
 
 
 		public List<WoDynamic> getDynamics() {
 		public List<WoDynamic> getDynamics() {
 			return dynamics;
 			return dynamics;

+ 8 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/BaseAction.java

@@ -3,23 +3,25 @@ package com.x.teamwork.assemble.control.jaxrs.extfield;
 import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.teamwork.assemble.control.service.DynamicPersistService;
 import com.x.teamwork.assemble.control.service.DynamicPersistService;
-import com.x.teamwork.assemble.control.service.ProjectExtFieldRelePersistService;
-import com.x.teamwork.assemble.control.service.ProjectExtFieldReleQueryService;
+import com.x.teamwork.assemble.control.service.CustomExtFieldRelePersistService;
+import com.x.teamwork.assemble.control.service.CustomExtFieldReleQueryService;
 import com.x.teamwork.assemble.control.service.ProjectQueryService;
 import com.x.teamwork.assemble.control.service.ProjectQueryService;
 import com.x.teamwork.assemble.control.service.SystemConfigQueryService;
 import com.x.teamwork.assemble.control.service.SystemConfigQueryService;
-import com.x.teamwork.core.entity.ProjectExtFieldRele;
+import com.x.teamwork.assemble.control.service.TaskQueryService;
+import com.x.teamwork.core.entity.CustomExtFieldRele;
 
 
 import net.sf.ehcache.Ehcache;
 import net.sf.ehcache.Ehcache;
 
 
 public class BaseAction extends StandardJaxrsAction {
 public class BaseAction extends StandardJaxrsAction {
 
 
-	protected Ehcache projectExtFieldReleCache = ApplicationCache.instance().getCache( ProjectExtFieldRele.class );
+	protected Ehcache customExtFieldReleCache = ApplicationCache.instance().getCache( CustomExtFieldRele.class );
 	
 	
-	protected 	ProjectExtFieldReleQueryService projectExtFieldReleQueryService = new ProjectExtFieldReleQueryService();
+	protected 	CustomExtFieldReleQueryService customExtFieldReleQueryService = new CustomExtFieldReleQueryService();
 	
 	
-	protected 	ProjectExtFieldRelePersistService projectExtFieldRelePersistService = new ProjectExtFieldRelePersistService();
+	protected 	CustomExtFieldRelePersistService customExtFieldRelePersistService = new CustomExtFieldRelePersistService();
 	
 	
 	protected 	ProjectQueryService projectQueryService = new ProjectQueryService();
 	protected 	ProjectQueryService projectQueryService = new ProjectQueryService();
+	protected 	TaskQueryService taskQueryService = new TaskQueryService();
 	
 	
 	protected 	DynamicPersistService dynamicPersistService = new DynamicPersistService();
 	protected 	DynamicPersistService dynamicPersistService = new DynamicPersistService();
 	
 	

+ 37 - 18
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ProjectExtFieldReleAction.java → o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldReleAction.java

@@ -28,12 +28,12 @@ import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 
 
 @Path("extfield")
 @Path("extfield")
-@JaxrsDescribe("项目扩展属性关联信息管理")
-public class ProjectExtFieldReleAction extends StandardJaxrsAction {
+@JaxrsDescribe("扩展属性关联信息管理")
+public class CustomExtFieldReleAction extends StandardJaxrsAction {
 
 
-	private Logger logger = LoggerFactory.getLogger(ProjectExtFieldReleAction.class);
+	private Logger logger = LoggerFactory.getLogger(CustomExtFieldReleAction.class);
 	
 	
-	@JaxrsMethodDescribe(value = "查询所有项目扩展属性信息.", action = ActionListAllExtFields.class)
+	@JaxrsMethodDescribe(value = "查询所有扩展属性信息.", action = ActionListAllExtFields.class)
 	@GET
 	@GET
 	@Path("list/fields/all")
 	@Path("list/fields/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@@ -51,7 +51,7 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
 	
 	
-	@JaxrsMethodDescribe(value = "根据指定ID查询项目扩展属性关联信息.", action = ActionGet.class)
+	@JaxrsMethodDescribe(value = "根据指定ID查询扩展属性关联信息.", action = ActionGet.class)
 	@GET
 	@GET
 	@Path("rele/{id}")
 	@Path("rele/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@@ -69,19 +69,19 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
 	
 	
-	@JaxrsMethodDescribe(value = "根据项目ID,需要的扩展属性类别获取下一个可用的属性名称.", action = ActionGetNextUseableExtFieldName.class)
+	@JaxrsMethodDescribe(value = "根据关联ID,需要的扩展属性类别获取下一个可用的属性名称.", action = ActionGetNextUseableExtFieldName.class)
 	@GET
 	@GET
-	@Path("next/field/{projectId}/{fieldType}")
+	@Path("next/field/{correlationId}/{fieldType}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public void getNextUseableFieldName(@Suspended final AsyncResponse asyncResponse, 
 	public void getNextUseableFieldName(@Suspended final AsyncResponse asyncResponse, 
 			@Context HttpServletRequest request,
 			@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("项目ID") @PathParam("projectId") String projectId,
+			@JaxrsParameterDescribe("关联ID") @PathParam("correlationId") String correlationId,
 			@JaxrsParameterDescribe("属性类别:TEXT|SELECT|MUTISELECT|RICHTEXT|DATE|DATETIME|PERSON|IDENTITY|UNIT|GROUP|") @PathParam("fieldType") String fieldType ) {
 			@JaxrsParameterDescribe("属性类别:TEXT|SELECT|MUTISELECT|RICHTEXT|DATE|DATETIME|PERSON|IDENTITY|UNIT|GROUP|") @PathParam("fieldType") String fieldType ) {
 		ActionResult<ActionGetNextUseableExtFieldName.Wo> result = new ActionResult<>();
 		ActionResult<ActionGetNextUseableExtFieldName.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);	
 		EffectivePerson effectivePerson = this.effectivePerson(request);	
 		try {
 		try {
-			result = new ActionGetNextUseableExtFieldName().execute( request, effectivePerson, projectId, fieldType );
+			result = new ActionGetNextUseableExtFieldName().execute( request, effectivePerson, correlationId, fieldType );
 		} catch (Exception e) {
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 			result.error(e);
@@ -89,18 +89,18 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
 	
 	
-	@JaxrsMethodDescribe(value = "查询用户创建的所有项目扩展属性关联信息列表.", action = ActionListWithProject.class)
+	@JaxrsMethodDescribe(value = "根据关联ID查询用户创建的所有扩展属性关联信息列表.", action = ActionListWithCorrelation.class)
 	@GET
 	@GET
-	@Path("list/{projectId}")
+	@Path("list/{correlationId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void listFieldsWithProject(@Suspended final AsyncResponse asyncResponse, 
+	public void listFieldsWithCorrelation(@Suspended final AsyncResponse asyncResponse, 
 			@Context HttpServletRequest request,
 			@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("项目ID") @PathParam("projectId") String projectId ) {
-		ActionResult<List<ActionListWithProject.Wo>> result = new ActionResult<>();
+			@JaxrsParameterDescribe("关联ID") @PathParam("correlationId") String correlationId ) {
+		ActionResult<List<ActionListWithCorrelation.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);	
 		EffectivePerson effectivePerson = this.effectivePerson(request);	
 		try {
 		try {
-			result = new ActionListWithProject().execute( request, effectivePerson, projectId );
+			result = new ActionListWithCorrelation().execute( request, effectivePerson, correlationId );
 		} catch (Exception e) {
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 			result.error(e);
@@ -108,14 +108,33 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
 	
 	
-	@JaxrsMethodDescribe(value = "创建或者更新一个项目扩展属性关联信息.", action = ActionSave.class)
+	@JaxrsMethodDescribe(value = "根据扩展属性类型查询扩展属性信息列表.", action = ActionListWithType.class)
+	@GET
+	@Path("listPublicFields/{type}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listFieldsWithType(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("扩展属性类型") @PathParam("type") String type ) {
+		ActionResult<List<ActionListWithType.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);	
+		try {
+			result = new ActionListWithType().execute( request, effectivePerson, type );
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "创建或者更新一个扩展属性关联信息.", action = ActionSave.class)
 	@POST
 	@POST
 	@Path("relevance")
 	@Path("relevance")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public void save(@Suspended final AsyncResponse asyncResponse, 
 	public void save(@Suspended final AsyncResponse asyncResponse, 
 			@Context HttpServletRequest request, 
 			@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("需要保存的项目扩展属性关联信息") JsonElement jsonElement ) {
+			@JaxrsParameterDescribe("需要保存的扩展属性关联信息") JsonElement jsonElement ) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
 		try {
@@ -127,7 +146,7 @@ public class ProjectExtFieldReleAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
 	
 	
-	@JaxrsMethodDescribe(value = "根据标识删除项目扩展属性关联信息.", action = ActionDelete.class)
+	@JaxrsMethodDescribe(value = "根据标识删除扩展属性关联信息.", action = ActionDelete.class)
 	@DELETE
 	@DELETE
 	@Path("relevance/{id}")
 	@Path("relevance/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)

+ 12 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldReleFlagForQueryEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.teamwork.assemble.control.jaxrs.extfield;
+
+import com.x.base.core.project.exception.PromptException;
+
+class CustomExtFieldReleFlagForQueryEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	CustomExtFieldReleFlagForQueryEmptyException() {
+		super("查询的扩展属性关联信息ID为空,无法继续查询数据。" );
+	}
+}

+ 12 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldReleNotExistsException.java

@@ -0,0 +1,12 @@
+package com.x.teamwork.assemble.control.jaxrs.extfield;
+
+import com.x.base.core.project.exception.PromptException;
+
+class CustomExtFieldReleNotExistsException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	CustomExtFieldReleNotExistsException( String id ) {
+		super("指定ID的扩展属性关联信息不存在。ID:" + id );
+	}
+}

+ 20 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldRelePersistException.java

@@ -0,0 +1,20 @@
+package com.x.teamwork.assemble.control.jaxrs.extfield;
+
+import com.x.base.core.project.exception.PromptException;
+
+class CustomExtFieldRelePersistException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	CustomExtFieldRelePersistException( Throwable e ) {
+		super("系统在保存扩展属性关联信息时发生异常。" , e );
+	}
+	
+	CustomExtFieldRelePersistException( Throwable e, String message ) {
+		super("系统在保存扩展属性关联信息时发生异常。Message:" + message, e );
+	}
+	
+	CustomExtFieldRelePersistException( String message ) {
+		super("系统在保存扩展属性关联信息时发生异常。Message:" + message );
+	}
+}

+ 20 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/CustomExtFieldReleQueryException.java

@@ -0,0 +1,20 @@
+package com.x.teamwork.assemble.control.jaxrs.extfield;
+
+import com.x.base.core.project.exception.PromptException;
+
+class CustomExtFieldReleQueryException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	CustomExtFieldReleQueryException( Throwable e ) {
+		super("系统在查询扩展属性关联信息时发生异常。" , e );
+	}
+	
+	CustomExtFieldReleQueryException( Throwable e, String message ) {
+		super("系统在查询扩展属性关联信息时发生异常。Message:" + message, e );
+	}
+	
+	CustomExtFieldReleQueryException(  String message ) {
+		super("系统在查询扩展属性关联信息时发生异常。Message:" + message );
+	}
+}

+ 0 - 12
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ProjectExtFieldReleFlagForQueryEmptyException.java

@@ -1,12 +0,0 @@
-package com.x.teamwork.assemble.control.jaxrs.extfield;
-
-import com.x.base.core.project.exception.PromptException;
-
-class ProjectExtFieldReleFlagForQueryEmptyException extends PromptException {
-
-	private static final long serialVersionUID = 1859164370743532895L;
-
-	ProjectExtFieldReleFlagForQueryEmptyException() {
-		super("查询的项目扩展属性关联信息ID为空,无法继续查询数据。" );
-	}
-}

+ 0 - 12
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ProjectExtFieldReleNotExistsException.java

@@ -1,12 +0,0 @@
-package com.x.teamwork.assemble.control.jaxrs.extfield;
-
-import com.x.base.core.project.exception.PromptException;
-
-class ProjectExtFieldReleNotExistsException extends PromptException {
-
-	private static final long serialVersionUID = 1859164370743532895L;
-
-	ProjectExtFieldReleNotExistsException( String id ) {
-		super("指定ID的项目扩展属性关联信息不存在。ID:" + id );
-	}
-}

+ 0 - 20
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ProjectExtFieldRelePersistException.java

@@ -1,20 +0,0 @@
-package com.x.teamwork.assemble.control.jaxrs.extfield;
-
-import com.x.base.core.project.exception.PromptException;
-
-class ProjectExtFieldRelePersistException extends PromptException {
-
-	private static final long serialVersionUID = 1859164370743532895L;
-
-	ProjectExtFieldRelePersistException( Throwable e ) {
-		super("系统在保存项目扩展属性关联信息时发生异常。" , e );
-	}
-	
-	ProjectExtFieldRelePersistException( Throwable e, String message ) {
-		super("系统在保存项目扩展属性关联信息时发生异常。Message:" + message, e );
-	}
-	
-	ProjectExtFieldRelePersistException( String message ) {
-		super("系统在保存项目扩展属性关联信息时发生异常。Message:" + message );
-	}
-}

+ 0 - 20
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/ProjectExtFieldReleQueryException.java

@@ -1,20 +0,0 @@
-package com.x.teamwork.assemble.control.jaxrs.extfield;
-
-import com.x.base.core.project.exception.PromptException;
-
-class ProjectExtFieldReleQueryException extends PromptException {
-
-	private static final long serialVersionUID = 1859164370743532895L;
-
-	ProjectExtFieldReleQueryException( Throwable e ) {
-		super("系统在查询项目扩展属性关联信息时发生异常。" , e );
-	}
-	
-	ProjectExtFieldReleQueryException( Throwable e, String message ) {
-		super("系统在查询项目扩展属性关联信息时发生异常。Message:" + message, e );
-	}
-	
-	ProjectExtFieldReleQueryException(  String message ) {
-		super("系统在查询项目扩展属性关联信息时发生异常。Message:" + message );
-	}
-}

+ 12 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/extfield/TaskNotExistsException.java

@@ -0,0 +1,12 @@
+package com.x.teamwork.assemble.control.jaxrs.extfield;
+
+import com.x.base.core.project.exception.PromptException;
+
+class TaskNotExistsException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	TaskNotExistsException( String id ) {
+		super("指定ID的任务信息不存在。ID:" + id );
+	}
+}

+ 73 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionInitConfig.java

@@ -0,0 +1,73 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoId;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.core.entity.Priority;
+
+public class ActionInitConfig extends BaseAction {
+
+	private static  Logger logger = LoggerFactory.getLogger(ActionInitConfig.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Wo wo = new Wo();
+		List<Priority> prioritys = null;
+		
+		try {
+			prioritys = priorityQueryService.listPriority();
+			if( ListTools.isEmpty( prioritys )) {
+				//初始化默认的优先级配置、默认模板
+				this.initPrioritys(wo,effectivePerson);
+				
+			}
+		} catch (Exception e) {
+			Exception exception = new PriorityQueryException(e, "查询优先级信息列表时发生异常。");
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+		
+		result.setData( wo );
+		return result;
+	}	
+	
+	private void initPrioritys(Wo wo,EffectivePerson effectivePerson) throws Exception{
+		for(int i=0;i<3;i++){
+			Priority priority = new Priority();
+			if(i==0){
+				priority.setPriority("紧急");
+				priority.setPriorityColor("#e62412");
+			}
+			if(i==1){
+				priority.setPriority("优先");
+				priority.setPriorityColor("#fa8c15");
+			}
+			if(i==2){
+				priority.setPriority("普通");
+				priority.setPriorityColor("#15ad31");
+			}
+			priority.setOrder(i);
+			priority.setOwner("系统");
+			try {
+				priority = priorityPersistService.save( priority, effectivePerson );
+				ApplicationCache.notify( Priority.class );	
+				wo.setId( priority.getId() );
+			} catch (Exception e) {
+				Exception exception = new PriorityPersistException(e, "优先级信息保存时发生异常。");
+			}
+		}
+	}
+
+	public static class Wo extends WoId {
+		
+	}
+	
+}

+ 39 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionIsManager.java

@@ -0,0 +1,39 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import javax.servlet.http.HttpServletRequest;
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoId;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.teamwork.assemble.control.Business;
+
+
+
+public class ActionIsManager extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionIsManager.class);
+
+	protected ActionResult<String> execute(HttpServletRequest request, EffectivePerson effectivePerson) throws Exception {
+		ActionResult<String> result = new ActionResult<>();
+		
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()){
+			Business business = new Business(emc);
+			if(business.isManager(effectivePerson)){
+				result.setData( "yes" );
+			}else{
+				result.setData( "no" );
+			}
+		} catch (Exception e) {
+			result.error(e);
+			logger.error(e, effectivePerson, request, null);
+		}
+		
+		return result;
+	}
+	public static class Wo extends WoId {
+
+	}
+}

+ 140 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionListProjectConfigNextWithFilter.java

@@ -0,0 +1,140 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+
+import com.x.teamwork.core.entity.ProjectConfig;
+
+public class ActionListProjectConfigNextWithFilter extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionListProjectConfigNextWithFilter.class);
+
+	protected ActionResult<List<Wo>> execute( HttpServletRequest request, EffectivePerson effectivePerson, String flag, Integer count, JsonElement jsonElement ) throws Exception {
+		ActionResult<List<Wo>> result = new ActionResult<>();
+		ResultObject resultObject = null;
+		List<Wo> wos = new ArrayList<>();
+		Wi wrapIn = null;
+		Boolean check = true;
+		QueryFilter  queryFilter = null;
+		
+		if ( StringUtils.isEmpty( flag ) || "(0)".equals(flag)) {
+			flag = null;
+		}
+
+		try {
+			wrapIn = this.convertToWrapIn(jsonElement, Wi.class);
+		} catch (Exception e) {
+			check = false;
+			Exception exception = new ProjectConfigQueryException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			if( wrapIn == null ) {
+				wrapIn = new Wi();
+			}
+			queryFilter = wrapIn.getQueryFilter();
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			/*采用缓存
+			 * cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
+			element = projectCache.get( cacheKey );
+			
+			if ((null != element) && (null != element.getObjectValue())) {
+				resultObject = (ResultObject) element.getObjectValue();
+				result.setCount( resultObject.getTotal() );
+				result.setData( resultObject.getWos() );
+			} else {*/
+				try {
+					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
+					List<String>  projectConfigIds = projectConfigQueryService.listAllProjectConfigIds( effectivePerson, 2000, queryFilter );
+					if( ListTools.isNotEmpty( projectConfigIds )) {
+						//直接根据可见项目ID列表进行分页查询
+						Long total = Long.parseLong( projectConfigIds.size() + "" );										
+						List<ProjectConfig>  projectConfigList = projectConfigQueryService.listWithProjectConfigIdFilter( count, flag, wrapIn.getOrderField(), wrapIn.getOrderType(), projectConfigIds );
+						
+						if( ListTools.isNotEmpty( projectConfigList )) {
+							for( ProjectConfig projectConfig : projectConfigList ) {
+								Wo wo = Wo.copier.copy(projectConfig);
+								wos.add( wo );
+							}
+						}
+						resultObject = new ResultObject( total, wos );
+						//projectCache.put(new Element( cacheKey, resultObject ));
+						
+						result.setCount( resultObject.getTotal() );
+						result.setData( resultObject.getWos() );
+					}
+				} catch (Exception e) {
+					check = false;
+					logger.warn("系统查询项目配置信息列表时发生异常!");
+					result.error(e);
+					logger.error(e, effectivePerson, request, null);
+				}
+			//}		
+		}
+		return result;
+	}
+
+	public static class Wi extends WrapInQueryProjectConfig{
+		
+	}
+	
+	public static class Wo extends ProjectConfig {
+
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<ProjectConfig, Wo> copier = WrapCopierFactory.wo( ProjectConfig.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+
+	}
+	
+	public static class ResultObject {
+
+		private Long total;
+		
+		private List<Wo> wos;
+
+		public ResultObject() {}
+		
+		public ResultObject(Long count, List<Wo> data) {
+			this.total = count;
+			this.wos = data;
+		}
+
+		public Long getTotal() {
+			return total;
+		}
+
+		public void setTotal(Long total) {
+			this.total = total;
+		}
+
+		public List<Wo> getWos() {
+			return wos;
+		}
+
+		public void setWos(List<Wo> wos) {
+			this.wos = wos;
+		}
+	}
+}

+ 80 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionPriorityDelete.java

@@ -0,0 +1,80 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoId;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.teamwork.core.entity.Dynamic;
+import com.x.teamwork.core.entity.Priority;
+import com.x.teamwork.core.entity.Project;
+import com.x.teamwork.core.entity.ProjectGroup;
+
+public class ActionPriorityDelete extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionPriorityDelete.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String flag) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Priority priority = null;
+		Boolean check = true;
+		Wo wo = new Wo();
+
+		if ( StringUtils.isEmpty( flag ) ) {
+			check = false;
+			Exception exception = new PriorityFlagForQueryEmptyException();
+			result.error( exception );
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				priority = priorityQueryService.get(flag);
+				if ( priority == null) {
+					check = false;
+					Exception exception = new PriorityNotExistsException(flag);
+					result.error( exception );
+				}
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new PriorityQueryException(e, "根据指定flag查询优先级信息对象时发生异常。flag:" + flag);
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				priorityPersistService.delete(flag, effectivePerson );				
+				// 更新缓存
+				ApplicationCache.notify( Priority.class );
+				
+				wo.setId( priority.getId() );
+				
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new PriorityQueryException(e, "根据指定flag删除优先级信息对象时发生异常。flag:" + flag);
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		result.setData( wo );
+		return result;
+	}
+
+	public static class Wo extends WoId {
+		
+	}
+	
+}

+ 78 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionPriorityGet.java

@@ -0,0 +1,78 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+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;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.core.entity.Priority;
+import com.x.teamwork.core.entity.ProjectGroup;
+
+import net.sf.ehcache.Element;
+
+public class ActionPriorityGet extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionPriorityGet.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Wo wo = null;
+		Priority priority = null;
+		Boolean check = true;
+
+		if ( StringUtils.isEmpty( id ) ) {
+			check = false;
+			Exception exception = new PriorityFlagForQueryEmptyException();
+			result.error( exception );
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				priority = priorityQueryService.get( id );
+				if ( priority == null) {
+					check = false;
+					Exception exception = new PriorityNotExistsException( id );
+					result.error( exception );
+				}
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new PriorityQueryException(e, "根据指定flag查询优先级信息对象时发生异常。id:" + id );
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				wo = Wo.copier.copy( priority );					
+				result.setData(wo);
+			} catch (Exception e) {
+				Exception exception = new PriorityQueryException(e, "将查询出来的优先级信息对象转换为可输出的数据信息时发生异常。");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		return result;
+	}
+
+	public static class Wo extends Priority {
+		
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<Priority, Wo> copier = WrapCopierFactory.wo( Priority.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
+
+	}
+}

+ 70 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionPriorityList.java

@@ -0,0 +1,70 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+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;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.base.core.project.tools.SortTools;
+import com.x.teamwork.core.entity.Priority;
+import com.x.teamwork.core.entity.ProjectGroup;
+
+import net.sf.ehcache.Element;
+
+public class ActionPriorityList extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionPriorityList.class);
+
+	@SuppressWarnings("unchecked")
+	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
+		ActionResult<List<Wo>> result = new ActionResult<>();
+		List<Wo> wos = null;
+		List<Priority> prioritys = null;
+
+		try {
+			prioritys = priorityQueryService.listPriority();
+			if( ListTools.isNotEmpty( prioritys )) {
+				wos = Wo.copier.copy( prioritys );
+				
+				//SortTools.asc( wos, "createTime");
+				result.setData(wos);
+			}
+			result.setData(wos);
+		} catch (Exception e) {
+			Exception exception = new PriorityQueryException(e, "查询优先级信息列表时发生异常。");
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+		
+		return result;
+	}
+
+	public static class Wo extends Priority {
+		
+		private Long rank;
+
+		public Long getRank() {
+			return rank;
+		}
+
+		public void setRank(Long rank) {
+			this.rank = rank;
+		}
+
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<Priority, Wo> copier = WrapCopierFactory.wo( Priority.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+
+	}
+}

+ 61 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionPrioritySave.java

@@ -0,0 +1,61 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.project.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoId;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.teamwork.core.entity.Priority;
+
+public class ActionPrioritySave extends BaseAction {
+
+	private static  Logger logger = LoggerFactory.getLogger(ActionPrioritySave.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Priority priority = null;
+		Wi wi = null;
+		Wo wo = new Wo();
+
+		try {
+			wi = this.convertToWrapIn( jsonElement, Wi.class );
+		} catch (Exception e) {
+			Exception exception = new PriorityPersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+		
+		
+		try {					
+			priority = priorityPersistService.save( wi, effectivePerson );
+			// 更新缓存
+			ApplicationCache.notify( Priority.class );		
+			wo.setId( priority.getId() );
+		} catch (Exception e) {
+			Exception exception = new PriorityPersistException(e, "优先级信息保存时发生异常。");
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}			
+		
+		result.setData( wo );
+		return result;
+	}	
+
+	public static class Wi extends Priority {
+		private static final long serialVersionUID = -6314932919066148113L;
+		
+		public static WrapCopier<Wi, Priority> copier = WrapCopierFactory.wi( Wi.class, Priority.class, null, null );
+		
+	}
+
+	public static class Wo extends WoId {
+		
+	}
+	
+}

+ 70 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionProjectConfigDelete.java

@@ -0,0 +1,70 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoId;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.teamwork.core.entity.ProjectConfig;
+
+public class ActionProjectConfigDelete extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionProjectConfigDelete.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String flag) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		ProjectConfig projectConfig = null;
+		Boolean check = true;
+		Wo wo = new Wo();
+
+		if ( StringUtils.isEmpty( flag ) ) {
+			check = false;
+			Exception exception = new ProjectConfigFlagForQueryEmptyException();
+			result.error( exception );
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				projectConfig = projectConfigQueryService.get(flag);
+				if ( projectConfig == null) {
+					check = false;
+					Exception exception = new ProjectConfigNotExistsException(flag);
+					result.error( exception );
+				}
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectConfigQueryException(e, "根据指定flag查询项目配置信息对象时发生异常。flag:" + flag);
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				projectConfigPersistService.delete(flag, effectivePerson );				
+				// 更新缓存
+				ApplicationCache.notify( ProjectConfig.class );
+				
+				wo.setId( projectConfig.getId() );
+				
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectConfigQueryException(e, "根据指定flag删除项目配置信息对象时发生异常。flag:" + flag);
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		result.setData( wo );
+		return result;
+	}
+
+	public static class Wo extends WoId {
+		
+	}
+	
+}

+ 79 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionProjectConfigGet.java

@@ -0,0 +1,79 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+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;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.core.entity.Priority;
+import com.x.teamwork.core.entity.ProjectConfig;
+import com.x.teamwork.core.entity.ProjectGroup;
+
+import net.sf.ehcache.Element;
+
+public class ActionProjectConfigGet extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionProjectConfigGet.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Wo wo = null;
+		ProjectConfig projectConfig = null;
+		Boolean check = true;
+
+		if ( StringUtils.isEmpty( id ) ) {
+			check = false;
+			Exception exception = new PriorityFlagForQueryEmptyException();
+			result.error( exception );
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				projectConfig = projectConfigQueryService.get( id );
+				if ( projectConfig == null) {
+					check = false;
+					Exception exception = new ProjectConfigNotExistsException( id );
+					result.error( exception );
+				}
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectConfigQueryException(e, "根据指定flag查询项目配置信息对象时发生异常。id:" + id );
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				wo = Wo.copier.copy( projectConfig );					
+				result.setData(wo);
+			} catch (Exception e) {
+				Exception exception = new ProjectConfigQueryException(e, "将查询出来的项目配置信息对象转换为可输出的数据信息时发生异常。");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		return result;
+	}
+
+	public static class Wo extends ProjectConfig {
+		
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<ProjectConfig, Wo> copier = WrapCopierFactory.wo( ProjectConfig.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
+
+	}
+}

+ 83 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionProjectConfigGetByProject.java

@@ -0,0 +1,83 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+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.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.core.entity.ProjectConfig;
+
+
+
+
+public class ActionProjectConfigGetByProject extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionProjectConfigGetByProject.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String id ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<Wo>();
+		Wo  wo = null;
+		List<ProjectConfig>  projectConfigs = null;
+		ProjectConfig projectConfig = null;
+		Boolean check = true;
+
+		if ( StringUtils.isEmpty( id ) ) {
+			check = false;
+			Exception exception = new ProjectConfigFlagForQueryEmptyException();
+			result.error( exception );
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				projectConfigs = projectConfigQueryService.getProjectConfigByProject( id );
+				if(ListTools.isNotEmpty(projectConfigs)){
+					projectConfig = projectConfigs.get(0);
+				}
+				/*
+				if ( projectConfig == null) {
+					check = false;
+					Exception exception = new ProjectConfigNotExistsException( id );
+					result.error( exception );
+				}*/
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectConfigQueryException(e, "根据指定flag查询项目配置信息对象时发生异常。id:" + id );
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+					wo = Wo.copier.copy( projectConfig );					
+					result.setData(wo);
+				
+			} catch (Exception e) {
+				Exception exception = new ProjectConfigQueryException(e, "将查询出来的项目配置信息对象转换为可输出的数据信息时发生异常。");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		return result;
+	}
+
+	public static class Wo extends ProjectConfig {
+		
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<ProjectConfig, Wo> copier = WrapCopierFactory.wo( ProjectConfig.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
+
+	}
+}

+ 61 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ActionProjectConfigSave.java

@@ -0,0 +1,61 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.project.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoId;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.teamwork.core.entity.ProjectConfig;
+
+public class ActionProjectConfigSave extends BaseAction {
+
+	private static  Logger logger = LoggerFactory.getLogger(ActionProjectConfigSave.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		ProjectConfig projectConfig = null;
+		Wi wi = null;
+		Wo wo = new Wo();
+
+		try {
+			wi = this.convertToWrapIn( jsonElement, Wi.class );
+		} catch (Exception e) {
+			Exception exception = new PriorityPersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+		
+		
+		try {					
+			projectConfig = projectConfigPersistService.save( wi, effectivePerson );
+			// 更新缓存
+			ApplicationCache.notify( ProjectConfig.class );		
+			wo.setId( projectConfig.getId() );
+		} catch (Exception e) {
+			Exception exception = new PriorityPersistException(e, "项目配置信息保存时发生异常。");
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}			
+		
+		result.setData( wo );
+		return result;
+	}	
+
+	public static class Wi extends ProjectConfig {
+		private static final long serialVersionUID = -6314932919066148113L;
+		
+		public static WrapCopier<Wi, ProjectConfig> copier = WrapCopierFactory.wi( Wi.class, ProjectConfig.class, null, null );
+		
+	}
+
+	public static class Wo extends WoId {
+		
+	}
+	
+}

+ 34 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/BaseAction.java

@@ -0,0 +1,34 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+import com.x.teamwork.assemble.control.service.DynamicPersistService;
+import com.x.teamwork.assemble.control.service.PriorityPersistService;
+import com.x.teamwork.assemble.control.service.PriorityQueryService;
+import com.x.teamwork.assemble.control.service.ProjectConfigPersistService;
+import com.x.teamwork.assemble.control.service.ProjectConfigQueryService;
+import com.x.teamwork.assemble.control.service.SystemConfigQueryService;
+import com.x.teamwork.core.entity.Priority;
+import com.x.teamwork.core.entity.ProjectConfig;
+
+import net.sf.ehcache.Ehcache;
+
+public class BaseAction extends StandardJaxrsAction {
+
+	protected Ehcache priorityCache = ApplicationCache.instance().getCache( Priority.class );
+	
+	protected 	PriorityQueryService priorityQueryService = new PriorityQueryService();
+	
+	protected 	PriorityPersistService priorityPersistService = new PriorityPersistService();
+	
+	protected 	DynamicPersistService dynamicPersistService = new DynamicPersistService();
+	
+	protected 	SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
+	
+	protected Ehcache projectConfigCache = ApplicationCache.instance().getCache( ProjectConfig.class );
+	
+	protected 	ProjectConfigPersistService projectConfigPersistService = new ProjectConfigPersistService();
+	
+	protected 	ProjectConfigQueryService projectConfigQueryService = new ProjectConfigQueryService();
+	
+}

+ 245 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/GlobalAction.java

@@ -0,0 +1,245 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.container.AsyncResponse;
+import javax.ws.rs.container.Suspended;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.project.annotation.JaxrsDescribe;
+import com.x.base.core.project.annotation.JaxrsMethodDescribe;
+import com.x.base.core.project.annotation.JaxrsParameterDescribe;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.http.HttpMediaType;
+import com.x.base.core.project.jaxrs.ResponseFactory;
+import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.teamwork.assemble.control.jaxrs.project.ActionListNextWithFilter;
+
+@Path("global")
+@JaxrsDescribe("全局信息管理")
+public class GlobalAction extends StandardJaxrsAction {
+
+	private Logger logger = LoggerFactory.getLogger(GlobalAction.class);
+	
+	@JaxrsMethodDescribe(value = "查询当前用户是否具有管理员权限.", action = ActionIsManager.class)
+	@GET
+	@Path("isManager")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void isManager(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request ) {
+		ActionResult<String> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);	
+		try {
+			result = new ActionIsManager().execute( request, effectivePerson );
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "根据ID查询优先级信息.", action = ActionPriorityGet.class)
+	@GET
+	@Path("priority/{id}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void priorityGet(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("优先级ID") @PathParam("id") String id ) {
+		ActionResult<ActionPriorityGet.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionPriorityGet().execute( request, effectivePerson, id );
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "查询所有优先级信息列表.", action = ActionPriorityList.class)
+	@GET
+	@Path("priority/list")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void priorityList(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request ) {
+		ActionResult<List<ActionPriorityList.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);	
+		try {
+			result = new ActionPriorityList().execute( request, effectivePerson );
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "创建或者更新一个优先级信息.", action = ActionPrioritySave.class)
+	@POST
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void prioritySave(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("需要保存的优先级信息") JsonElement jsonElement ) {
+		ActionResult<ActionPrioritySave.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionPrioritySave().execute(request, effectivePerson, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "根据标识删除优先级信息.", action = ActionPriorityDelete.class)
+	@DELETE
+	@Path("priority/{id}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void priorityDelete(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("标识") @PathParam("id") String id ) {
+		ActionResult<ActionPriorityDelete.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionPriorityDelete().execute(request, effectivePerson, id);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "根据ID查询项目配置信息.", action = ActionProjectConfigGet.class)
+	@GET
+	@Path("projectConfig/{id}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void projectConfigGet(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("项目配置ID") @PathParam("id") String id ) {
+		ActionResult<ActionProjectConfigGet.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionProjectConfigGet().execute( request, effectivePerson, id );
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "创建或者更新一个项目配置信息.", action = ActionProjectConfigSave.class)
+	@POST
+	@Path("projectConfig")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void projectConfigSave(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("需要保存的优先级信息") JsonElement jsonElement ) {
+		ActionResult<ActionProjectConfigSave.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionProjectConfigSave().execute(request, effectivePerson, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "根据标识删除项目配置信息.", action = ActionProjectConfigDelete.class)
+	@DELETE
+	@Path("projectConfig/{id}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void projectConfigDelete(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("标识") @PathParam("id") String id ) {
+		ActionResult<ActionProjectConfigDelete.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionProjectConfigDelete().execute(request, effectivePerson, id);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "列示项目配置信息,下一页.", action = ActionListProjectConfigNextWithFilter.class)
+	@PUT
+	@Path("listProjectConfig/{id}/next/{count}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listProjectConfigNextWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("最后一条信息数据的ID") @PathParam( "id" ) String id, 
+			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam( "count" ) Integer count, 
+			@JaxrsParameterDescribe("查询过滤条件") JsonElement jsonElement ) {
+		ActionResult<List<ActionListProjectConfigNextWithFilter.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionListProjectConfigNextWithFilter().execute(request, effectivePerson, id, count, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "根据ID查询项目配置信息.", action = ActionProjectConfigGetByProject.class)
+	@GET
+	@Path("projectConfig/project/{id}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void projectConfigGetByProject(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("项目ID") @PathParam("id") String id ) {
+		ActionResult<ActionProjectConfigGetByProject.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionProjectConfigGetByProject().execute( request, effectivePerson, id );
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "初始化优先级信息.", action = ActionInitConfig.class)
+	@GET
+	@Path("initConfig")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void initConfig(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request) {
+		ActionResult<ActionInitConfig.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionInitConfig().execute(request, effectivePerson);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+}

+ 12 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/PriorityFlagForQueryEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import com.x.base.core.project.exception.PromptException;
+
+class PriorityFlagForQueryEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	PriorityFlagForQueryEmptyException() {
+		super("查询的优先级信息ID为空,无法继续查询数据。" );
+	}
+}

+ 12 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/PriorityNotExistsException.java

@@ -0,0 +1,12 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import com.x.base.core.project.exception.PromptException;
+
+class PriorityNotExistsException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	PriorityNotExistsException( String id ) {
+		super("指定ID的优先级信息不存在。ID:" + id );
+	}
+}

+ 20 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/PriorityPersistException.java

@@ -0,0 +1,20 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import com.x.base.core.project.exception.PromptException;
+
+class PriorityPersistException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	PriorityPersistException( Throwable e ) {
+		super("系统在保存项目组信息时发生异常。" , e );
+	}
+	
+	PriorityPersistException( Throwable e, String message ) {
+		super("系统在保存项目组信息时发生异常。Message:" + message, e );
+	}
+	
+	PriorityPersistException( String message ) {
+		super("系统在保存项目组信息时发生异常。Message:" + message );
+	}
+}

+ 16 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/PriorityQueryException.java

@@ -0,0 +1,16 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import com.x.base.core.project.exception.PromptException;
+
+class PriorityQueryException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	PriorityQueryException( Throwable e ) {
+		super("系统在查询优先级信息时发生异常。" , e );
+	}
+	
+	PriorityQueryException( Throwable e, String message ) {
+		super("系统在查询优先级信息时发生异常。Message:" + message, e );
+	}
+}

+ 12 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ProjectConfigFlagForQueryEmptyException.java

@@ -0,0 +1,12 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ProjectConfigFlagForQueryEmptyException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	ProjectConfigFlagForQueryEmptyException() {
+		super("查询的项目配置信息ID为空,无法继续查询数据。" );
+	}
+}

+ 12 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ProjectConfigNotExistsException.java

@@ -0,0 +1,12 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ProjectConfigNotExistsException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	ProjectConfigNotExistsException( String id ) {
+		super("指定ID的项目配置信息不存在。ID:" + id );
+	}
+}

+ 20 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ProjectConfigPersistException.java

@@ -0,0 +1,20 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ProjectConfigPersistException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	ProjectConfigPersistException( Throwable e ) {
+		super("系统在保存项目配置信息时发生异常。" , e );
+	}
+	
+	ProjectConfigPersistException( Throwable e, String message ) {
+		super("系统在保存项目配置信息时发生异常。Message:" + message, e );
+	}
+	
+	ProjectConfigPersistException( String message ) {
+		super("系统在保存项目配置信息时发生异常。Message:" + message );
+	}
+}

+ 16 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/ProjectConfigQueryException.java

@@ -0,0 +1,16 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ProjectConfigQueryException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	ProjectConfigQueryException( Throwable e ) {
+		super("系统在查询项目配置信息时发生异常。" , e );
+	}
+	
+	ProjectConfigQueryException( Throwable e, String message ) {
+		super("系统在查询项目配置信息时发生异常。Message:" + message, e );
+	}
+}

+ 223 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/global/WrapInQueryProjectConfig.java

@@ -0,0 +1,223 @@
+package com.x.teamwork.assemble.control.jaxrs.global;
+
+import javax.persistence.Column;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openjpa.persistence.jdbc.Index;
+
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.entity.annotation.CheckPersist;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+import com.x.teamwork.core.entity.tools.filter.term.EqualsTerm;
+import com.x.teamwork.core.entity.tools.filter.term.LikeTerm;
+
+public class WrapInQueryProjectConfig {
+	@FieldDescribe("用于排列的属性,非必填,默认为createTime.")
+	private String orderField = "createTime";
+
+	@FieldDescribe("排序方式:DESC | ASC,非必填, 默认为DESC.")
+	private String orderType = "DESC";
+	
+	@FieldDescribe("项目ID.")
+	private String project=null;
+	
+	@FieldDescribe("新建任务:true|false.")
+	private String taskCreate = null;
+	
+	@FieldDescribe("复制任务:true|false.")
+	private String taskCopy = null;
+	
+	@FieldDescribe("删除任务:true|false.")
+	private String taskRemove = null;
+	
+	@FieldDescribe("新建泳道:true|false.")
+	private String laneCreate = null;
+	
+	@FieldDescribe("编辑泳道:true|false.")
+	private String laneEdit = null;
+	
+	@FieldDescribe("删除泳道:true|false.")
+	private String laneRemove = null;
+	
+	@FieldDescribe("上传附件:true|false.")
+	private String attachmentUpload = null;
+	
+	@FieldDescribe("允许评论:true|false.")
+	private String comment = null;
+	
+	private Long rank = 0L;
+	
+	public String getProject() {
+		return project;
+	}
+
+	public void setProject(String project) {
+		this.project = project;
+	}
+	
+	public String getTaskCreate() {
+		return taskCreate;
+	}
+
+	public void setTaskCreate(String taskCreate) {
+		this.taskCreate = taskCreate;
+	}
+	
+	public String getTaskCopy() {
+		return taskCopy;
+	}
+
+	public void setTaskCopy(String taskCopy) {
+		this.taskCopy = taskCopy;
+	}
+	
+	public String getTaskRemove() {
+		return taskRemove;
+	}
+
+	public void setTaskRemove(String taskRemove) {
+		this.taskRemove = taskRemove;
+	}
+	
+	public String getLaneCreate() {
+		return laneCreate;
+	}
+
+	public void setLaneCreate(String laneCreate) {
+		this.laneCreate = laneCreate;
+	}
+	
+	public String getLaneEdit() {
+		return laneEdit;
+	}
+
+	public void setLaneEdit(String laneEdit) {
+		this.laneEdit = laneEdit;
+	}
+	
+	public String getLaneRemove() {
+		return laneRemove;
+	}
+
+	public void setLaneRemove(String laneRemove) {
+		this.laneRemove = laneRemove;
+	}
+
+	public String getAttachmentUpload() {
+		return attachmentUpload;
+	}
+
+	public void setAttachmentUpload(String attachmentUpload) {
+		this.attachmentUpload = attachmentUpload;
+	}
+	
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+	
+	public String getOrderField() {
+		return orderField;
+	}
+	public void setOrderField(String orderField) {
+		this.orderField = orderField;
+	}
+	public String getOrderType() {
+		return orderType;
+	}
+
+	public void setOrderType(String orderType) {
+		this.orderType = orderType;
+	}
+	
+	public Long getRank() {
+		return rank;
+	}
+	public void setRank(Long rank) {
+		this.rank = rank;
+	}
+
+
+
+	/**
+	 * 根据传入的查询参数,组织一个完整的QueryFilter对象
+	 * @return
+	 */
+	public QueryFilter getQueryFilter() {
+		QueryFilter queryFilter = new QueryFilter();		
+		queryFilter.setJoinType( "and" );
+		//组织查询条件对象
+		if( StringUtils.isNotEmpty( this.getProject())) {
+			queryFilter.addEqualsTerm( new EqualsTerm( "project", this.getProject() ) );
+		}
+		
+		if( StringUtils.isNotEmpty( this.getTaskCreate() )) {
+			if("true".equalsIgnoreCase( this.getTaskCreate() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "taskCreate", true ) );
+			}else{
+				queryFilter.addEqualsTerm( new EqualsTerm( "taskCreate", false ) );
+			}
+		}
+		if( StringUtils.isNotEmpty( this.getTaskCopy() )) {
+			if("true".equalsIgnoreCase( this.getTaskCopy() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "taskCopy", true ) );
+			}else{
+				queryFilter.addEqualsTerm( new EqualsTerm( "taskCopy", false ) );
+			}
+		}
+		
+		if( StringUtils.isNotEmpty( this.getTaskRemove() )) {
+			if("true".equalsIgnoreCase( this.getTaskRemove() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "taskRemove", true ) );
+			}else{
+				queryFilter.addEqualsTerm( new EqualsTerm( "taskRemove", false ) );
+			}
+		}
+		
+		if( StringUtils.isNotEmpty( this.getLaneCreate() )) {
+			if("true".equalsIgnoreCase( this.getLaneCreate() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "laneCreate", true ) );
+			}else{
+				queryFilter.addEqualsTerm( new EqualsTerm( "laneCreate", false ) );
+			}
+		}
+		
+		if( StringUtils.isNotEmpty( this.getLaneEdit() )) {
+			if("true".equalsIgnoreCase( this.getLaneEdit() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "laneEdit", true ) );
+			}else{
+				queryFilter.addEqualsTerm( new EqualsTerm( "laneEdit", false ) );
+			}
+		}
+		
+		if( StringUtils.isNotEmpty( this.getLaneRemove() )) {
+			if("true".equalsIgnoreCase( this.getLaneRemove() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "laneRemove", true ) );
+			}else{
+				queryFilter.addEqualsTerm( new EqualsTerm( "laneRemove", false ) );
+			}
+		}
+		
+		if( StringUtils.isNotEmpty( this.getAttachmentUpload() )) {
+			if("true".equalsIgnoreCase( this.getAttachmentUpload() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "attachmentUpload", true ) );
+			}else{
+				queryFilter.addEqualsTerm( new EqualsTerm( "attachmentUpload", false ) );
+			}
+		}
+		
+		if( StringUtils.isNotEmpty( this.getComment() )) {
+			if("true".equalsIgnoreCase( this.getComment() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "comment", true ) );
+			}else{
+				queryFilter.addEqualsTerm( new EqualsTerm( "comment", false ) );
+			}
+		}
+		
+		return queryFilter;
+	}
+}

+ 7 - 1
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/list/ActionListWithTaskGroup.java

@@ -14,6 +14,7 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.TaskList;
 import com.x.teamwork.core.entity.TaskList;
 
 
 
 
@@ -32,7 +33,7 @@ public class ActionListWithTaskGroup extends BaseAction {
 
 
 		if ((null != element) && (null != element.getObjectValue())) {
 		if ((null != element) && (null != element.getObjectValue())) {
 			System.out.println("111");
 			System.out.println("111");
-			wos = (List<Wo>) element.getObjectValue();
+			wos = (List<Wo>) element.getObjectValue(); 
 			result.setData( wos );
 			result.setData( wos );
 		} else {*/
 		} else {*/
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
@@ -49,6 +50,11 @@ public class ActionListWithTaskGroup extends BaseAction {
 								}else {
 								}else {
 									wo.setControl( new Control(true, true, true, true ));
 									wo.setControl( new Control(true, true, true, true ));
 								}
 								}
+								Project project = null;
+								project = projectQueryService.get(wo.getProject());
+								if(project != null && (project.getDeleted() || project.getCompleted())){
+									wo.setControl( new Control(false, false, false, false ));
+								}
 							}
 							}
 						}
 						}
 						//taskListCache.put(new Element(cacheKey, wos));
 						//taskListCache.put(new Element(cacheKey, wos));

+ 3 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/list/BaseAction.java

@@ -3,6 +3,7 @@ package com.x.teamwork.assemble.control.jaxrs.list;
 import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.teamwork.assemble.control.service.DynamicPersistService;
 import com.x.teamwork.assemble.control.service.DynamicPersistService;
+import com.x.teamwork.assemble.control.service.ProjectQueryService;
 import com.x.teamwork.assemble.control.service.SystemConfigQueryService;
 import com.x.teamwork.assemble.control.service.SystemConfigQueryService;
 import com.x.teamwork.assemble.control.service.TaskGroupQueryService;
 import com.x.teamwork.assemble.control.service.TaskGroupQueryService;
 import com.x.teamwork.assemble.control.service.TaskListPersistService;
 import com.x.teamwork.assemble.control.service.TaskListPersistService;
@@ -31,4 +32,6 @@ public class BaseAction extends StandardJaxrsAction {
 	
 	
 	protected 	SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
 	protected 	SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
 	
 	
+	protected 	ProjectQueryService projectQueryService = new ProjectQueryService();
+	
 }
 }

+ 92 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionComplete.java

@@ -0,0 +1,92 @@
+package com.x.teamwork.assemble.control.jaxrs.project;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoId;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.teamwork.core.entity.Project;
+
+public class ActionComplete extends BaseAction {
+
+	private static  Logger logger = LoggerFactory.getLogger(ActionComplete.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String projectId, JsonElement jsonElement ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Wi wi = null;
+		Project project = null;
+		Boolean check = true;
+		
+		try {
+			wi = this.convertToWrapIn( jsonElement, Wi.class );
+		} catch (Exception e) {
+			check = false;
+			Exception exception = new ProjectPersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				project = projectQueryService.get( projectId );
+				if ( project == null) {
+					check = false;
+					Exception exception = new ProjectNotExistsException( projectId );
+					result.error( exception );
+				}
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectQueryException(e, "根据指定flag查询应用项目信息对象时发生异常。ID:" + projectId );
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			try {	
+				projectPersistService.completeProject( projectId,wi.getCompleted());
+
+				// 更新缓存
+				ApplicationCache.notify( Project.class );
+				Wo wo = new Wo();
+				wo.setId( project.getId() );
+				result.setData( wo );
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectPersistException(e, "项目状态信息更新时发生异常。");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+			
+			try {					
+				dynamicPersistService.projectCompleteDynamic( project, effectivePerson ,wi.getCompleted()); 
+			} catch (Exception e) {
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		return result;
+	}	
+
+public static class Wi {
+
+		@FieldDescribe("已完成/未完成")
+		private Boolean completed = true;
+
+		public Boolean getCompleted() {
+			return completed;
+		}
+
+		public void setCompleted(Boolean completed) {
+			this.completed = completed;
+		}
+	}
+
+	public static class Wo extends WoId {
+	}
+	
+}

+ 92 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionCreateable.java

@@ -0,0 +1,92 @@
+package com.x.teamwork.assemble.control.jaxrs.project;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoId;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.teamwork.core.entity.Project;
+
+public class ActionCreateable extends BaseAction {
+
+	private static  Logger logger = LoggerFactory.getLogger(ActionCreateable.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String projectId, JsonElement jsonElement ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Wi wi = null;
+		Project project = null;
+		Boolean check = true;
+		
+		try {
+			wi = this.convertToWrapIn( jsonElement, Wi.class );
+		} catch (Exception e) {
+			check = false;
+			Exception exception = new ProjectPersistException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				project = projectQueryService.get( projectId );
+				if ( project == null) {
+					check = false;
+					Exception exception = new ProjectNotExistsException( projectId );
+					result.error( exception );
+				}
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectQueryException(e, "根据指定flag查询应用项目信息对象时发生异常。ID:" + projectId );
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			try {	
+				projectPersistService.createableProject( projectId,wi.getCreateable());
+
+				// 更新缓存
+				ApplicationCache.notify( Project.class );
+				Wo wo = new Wo();
+				wo.setId( project.getId() );
+				result.setData( wo );
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectPersistException(e, "项目状态信息更新时发生异常。");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+			
+			try {					
+				dynamicPersistService.projectCreateableDynamic( project, effectivePerson ,wi.getCreateable()); 
+			} catch (Exception e) {
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		return result;
+	}	
+
+public static class Wi {
+
+		@FieldDescribe("是否可新建任务")
+		private Boolean createable = true;
+
+		public Boolean getCreateable() {
+			return createable;
+		}
+
+		public void setCreateable(Boolean createable) {
+			this.createable = createable;
+		}
+	}
+
+	public static class Wo extends WoId {
+	}
+	
+}

+ 105 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionGet.java

@@ -10,9 +10,9 @@ import org.apache.commons.lang3.StringUtils;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.JpaObject;
 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.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.bean.WrapCopierFactory;
-import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
@@ -20,10 +20,11 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
 import com.x.teamwork.assemble.control.Business;
 import com.x.teamwork.assemble.control.Business;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.Project;
+import com.x.teamwork.core.entity.ProjectConfig;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.ProjectDetail;
 import com.x.teamwork.core.entity.ProjectGroup;
 import com.x.teamwork.core.entity.ProjectGroup;
+import com.x.teamwork.core.entity.Task;
 
 
-import net.sf.ehcache.Element;
 
 
 public class ActionGet extends BaseAction {
 public class ActionGet extends BaseAction {
 
 
@@ -36,8 +37,15 @@ public class ActionGet extends BaseAction {
 		ProjectDetail projectDetail = null;
 		ProjectDetail projectDetail = null;
 		List<String> groupIds = null;
 		List<String> groupIds = null;
 		List<ProjectGroup> groups = null;
 		List<ProjectGroup> groups = null;
+		List<Task>  taskList = null;
+		List<ProjectConfig>  projectConfigs = null;
 		WrapOutControl control = null;
 		WrapOutControl control = null;
 		Boolean check = true;
 		Boolean check = true;
+		
+		Integer taskTotal = 0;
+		Integer progressTotal = 0;
+		Integer completedTotal = 0;
+		Integer overtimeTotal = 0;
 
 
 		if ( StringUtils.isEmpty( flag ) ) {
 		if ( StringUtils.isEmpty( flag ) ) {
 			check = false;
 			check = false;
@@ -45,13 +53,13 @@ public class ActionGet extends BaseAction {
 			result.error( exception );
 			result.error( exception );
 		}
 		}
 
 
-		String cacheKey = ApplicationCache.concreteCacheKey( flag );
+		/*String cacheKey = ApplicationCache.concreteCacheKey( flag,effectivePerson );
 		Element element = projectCache.get( cacheKey );
 		Element element = projectCache.get( cacheKey );
 
 
 		if ((null != element) && (null != element.getObjectValue())) {
 		if ((null != element) && (null != element.getObjectValue())) {
 			wo = (Wo) element.getObjectValue();
 			wo = (Wo) element.getObjectValue();
 			result.setData( wo );
 			result.setData( wo );
-		} else {
+		} else {*/
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
 					project = projectQueryService.get(flag);
 					project = projectQueryService.get(flag);
@@ -68,6 +76,25 @@ public class ActionGet extends BaseAction {
 				}
 				}
 			}
 			}
 			
 			
+			if( Boolean.TRUE.equals( check ) ){				
+				taskList = projectQueryService.listAllTasks(flag , true);
+				if( ListTools.isNotEmpty( taskList )) {
+					for( Task task : taskList ) {
+						taskTotal ++;
+						if( "completed".equalsIgnoreCase(task.getWorkStatus()) ) {
+							completedTotal++;
+						}
+						if( "processing".equalsIgnoreCase(task.getWorkStatus()) ) {
+							progressTotal++;
+						}
+						if( task.getOvertime() ) {
+							overtimeTotal++;
+						}
+					}
+				}
+				
+			}
+			
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
 					wo = Wo.copier.copy( project );
 					wo = Wo.copier.copy( project );
@@ -85,29 +112,56 @@ public class ActionGet extends BaseAction {
 					groups = projectGroupQueryService.list( groupIds );
 					groups = projectGroupQueryService.list( groupIds );
 					wo.setGroups( groups );	
 					wo.setGroups( groups );	
 					
 					
+					//查询项目配置信息
+					projectConfigs = projectConfigQueryService.getProjectConfigByProject( project.getId() );
+					
 					Business business = null;
 					Business business = null;
 					try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
 					try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
 						business = new Business(bc);
 						business = new Business(bc);
 					}
 					}
+					
 					control = new WrapOutControl();
 					control = new WrapOutControl();
+					if(ListTools.isNotEmpty(projectConfigs)){
+						ProjectConfig projectConfig = projectConfigs.get(0);
+						control.setTaskCreate(projectConfig.getTaskCreate());
+						control.setTaskCopy(projectConfig.getTaskCopy());
+						control.setTaskRemove(projectConfig.getTaskRemove());
+						control.setLaneCreate(projectConfig.getLaneCreate());
+						control.setLaneEdit(projectConfig.getLaneEdit());
+						control.setLaneRemove(projectConfig.getLaneRemove());
+						control.setAttachmentUpload(projectConfig.getAttachmentUpload());
+						control.setComment(projectConfig.getComment());
+					}else{
+						control.setTaskCreate(true);
+					}
+					
 					if( business.isManager(effectivePerson)
 					if( business.isManager(effectivePerson)
 							|| effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson() )
 							|| effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson() )
 							|| project.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )) {
 							|| project.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )) {
 						control.setDelete( true );
 						control.setDelete( true );
 						control.setEdit( true );
 						control.setEdit( true );
 						control.setSortable( true );
 						control.setSortable( true );
+						control.setTaskCreate(true);
+						
 					}else{
 					}else{
 						control.setDelete( false );
 						control.setDelete( false );
 						control.setEdit( false );
 						control.setEdit( false );
 						control.setSortable( false );
 						control.setSortable( false );
 					}
 					}
+					if(project.getDeleted() || project.getCompleted()){
+						control.setTaskCreate(false);
+					}
 					if(effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson())){
 					if(effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson())){
 						control.setFounder( true );
 						control.setFounder( true );
 					}else{
 					}else{
 						control.setFounder( false );
 						control.setFounder( false );
 					}
 					}
 					wo.setControl(control);
 					wo.setControl(control);
-					projectCache.put(new Element(cacheKey, wo));
+					
+					wo.setProgressTotal(progressTotal);
+					wo.setCompletedTotal(completedTotal);
+					wo.setOvertimeTotal(overtimeTotal);
+					wo.setTaskTotal(taskTotal);
 					result.setData(wo);
 					result.setData(wo);
 				} catch (Exception e) {
 				} catch (Exception e) {
 					Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
 					Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
@@ -115,13 +169,58 @@ public class ActionGet extends BaseAction {
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
 			}
 			}
-		}
+		//}
 		return result;
 		return result;
 	}
 	}
 
 
 	public static class Wo extends WrapOutProject {
 	public static class Wo extends WrapOutProject {
 		
 		
 		private static final long serialVersionUID = -5076990764713538973L;
 		private static final long serialVersionUID = -5076990764713538973L;
+		
+		@FieldDescribe("所有任务数量")
+		private Integer taskTotal = 0;
+		
+		@FieldDescribe("执行中任务数量")
+		private Integer progressTotal = 0;
+		
+		@FieldDescribe("已完成任务数量")
+		private Integer completedTotal = 0;
+		
+		@FieldDescribe("超时任务数量")
+		private Integer overtimeTotal = 0;
+		
+		public Integer getTaskTotal() {
+			return taskTotal;
+		}
+
+		public void setTaskTotal(Integer taskTotal) {
+			this.taskTotal = taskTotal;
+		}
+		
+		public Integer getProgressTotal() {
+			return progressTotal;
+		}
+
+		public void setProgressTotal(Integer progressTotal) {
+			this.progressTotal = progressTotal;
+		}
+
+		public Integer getCompletedTotal() {
+			return completedTotal;
+		}
+
+		public void setCompletedTotal( Integer completedTotal ) {
+			this.completedTotal = completedTotal;
+		}
+
+		public Integer getOvertimeTotal() {
+			return overtimeTotal;
+		}
+
+		public void setOvertimeTotal( Integer overtimeTotal ) {
+			this.overtimeTotal = overtimeTotal;
+		}
+		
 
 
 		public static List<String> Excludes = new ArrayList<String>();
 		public static List<String> Excludes = new ArrayList<String>();
 
 

+ 6 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListArchiveNextWithFilter.java

@@ -37,8 +37,8 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
 		List<Wo> wos = new ArrayList<>();
 		List<Wo> wos = new ArrayList<>();
 		Wi wrapIn = null;
 		Wi wrapIn = null;
 		Boolean check = true;
 		Boolean check = true;
-		String cacheKey = null;
-		Element element = null;
+		//String cacheKey = null;
+		//Element element = null;
 		QueryFilter  queryFilter = null;		
 		QueryFilter  queryFilter = null;		
 		List<String> queryProjectIds = new ArrayList<>();
 		List<String> queryProjectIds = new ArrayList<>();
 		
 		
@@ -77,7 +77,7 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			cacheKey = ApplicationCache.concreteCacheKey( "ActionListArchiveNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+			/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListArchiveNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
 			
 			
@@ -85,7 +85,7 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {
+			} else {*/
 				try {	
 				try {	
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
@@ -129,7 +129,7 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
 							}
 							}
 						}
 						}
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						
 						
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
@@ -140,7 +140,7 @@ public class ActionListArchiveNextWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 6 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListCompletedNextWithFilter.java

@@ -37,8 +37,8 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
 		List<Wo> wos = new ArrayList<>();
 		List<Wo> wos = new ArrayList<>();
 		Wi wrapIn = null;
 		Wi wrapIn = null;
 		Boolean check = true;
 		Boolean check = true;
-		String cacheKey = null;
-		Element element = null;
+		//String cacheKey = null;
+		//Element element = null;
 		QueryFilter  queryFilter = null;
 		QueryFilter  queryFilter = null;
 		List<String> queryProjectIds = new ArrayList<>();
 		List<String> queryProjectIds = new ArrayList<>();
 		
 		
@@ -77,7 +77,7 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			cacheKey = ApplicationCache.concreteCacheKey( "ActionListCompletedNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+			/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListCompletedNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
 			
 			
@@ -85,7 +85,7 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {
+			} else {*/
 				try {	
 				try {	
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
@@ -129,7 +129,7 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
 							}
 							}
 						}
 						}
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						
 						
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
@@ -140,7 +140,7 @@ public class ActionListCompletedNextWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 6 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListMyNextWithFilter.java

@@ -37,8 +37,8 @@ public class ActionListMyNextWithFilter extends BaseAction {
 		List<Wo> wos = new ArrayList<>();
 		List<Wo> wos = new ArrayList<>();
 		Wi wrapIn = null;
 		Wi wrapIn = null;
 		Boolean check = true;
 		Boolean check = true;
-		String cacheKey = null;
-		Element element = null;
+		//String cacheKey = null;
+		//Element element = null;
 		QueryFilter  queryFilter = null;
 		QueryFilter  queryFilter = null;
 		List<String> queryProjectIds = new ArrayList<>();
 		List<String> queryProjectIds = new ArrayList<>();
 		
 		
@@ -77,7 +77,7 @@ public class ActionListMyNextWithFilter extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			cacheKey = ApplicationCache.concreteCacheKey( "ActionListMyNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+			/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListMyNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
 			
 			
@@ -85,7 +85,7 @@ public class ActionListMyNextWithFilter extends BaseAction {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {
+			} else {*/
 				try {	
 				try {	
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
@@ -129,7 +129,7 @@ public class ActionListMyNextWithFilter extends BaseAction {
 							}
 							}
 						}
 						}
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						
 						
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
@@ -140,7 +140,7 @@ public class ActionListMyNextWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 6 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListNextInGroupWithFilter.java

@@ -36,8 +36,8 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
 		List<Wo> wos = new ArrayList<>();
 		List<Wo> wos = new ArrayList<>();
 		Wi wrapIn = null;
 		Wi wrapIn = null;
 		Boolean check = true;
 		Boolean check = true;
-		String cacheKey = null;
-		Element element = null;
+		//String cacheKey = null;
+		//Element element = null;
 		QueryFilter  queryFilter = null;
 		QueryFilter  queryFilter = null;
 		List<String> queryProjectIds = new ArrayList<>();
 		List<String> queryProjectIds = new ArrayList<>();
 		
 		
@@ -71,7 +71,7 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextInGroupWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+			/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextInGroupWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
 			
 			
@@ -79,7 +79,7 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {
+			} else {*/
 				try {	
 				try {	
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
@@ -123,7 +123,7 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
 							}
 							}
 						}
 						}
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						
 						
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
@@ -134,7 +134,7 @@ public class ActionListNextInGroupWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 30 - 4
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListNextWithFilter.java

@@ -21,6 +21,7 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
 import com.x.teamwork.assemble.control.Business;
 import com.x.teamwork.assemble.control.Business;
 import com.x.teamwork.core.entity.Project;
 import com.x.teamwork.core.entity.Project;
+import com.x.teamwork.core.entity.ProjectConfig;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 import com.x.teamwork.core.entity.tools.filter.QueryFilter;
 import com.x.teamwork.core.entity.tools.filter.term.InTerm;
 import com.x.teamwork.core.entity.tools.filter.term.InTerm;
 
 
@@ -74,7 +75,8 @@ public class ActionListNextWithFilter extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+			/*采用缓存
+			 * cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
 			
 			
@@ -82,7 +84,7 @@ public class ActionListNextWithFilter extends BaseAction {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {
+			} else {*/
 				try {
 				try {
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
@@ -104,13 +106,34 @@ public class ActionListNextWithFilter extends BaseAction {
 								try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
 								try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
 									business = new Business(bc);
 									business = new Business(bc);
 								}
 								}
+								
+								//查询项目配置信息
+								List<ProjectConfig>  projectConfigs = null;
+								projectConfigs = projectConfigQueryService.getProjectConfigByProject( project.getId() );
+								
 								control = new WrapOutControl();
 								control = new WrapOutControl();
+								
+								if(ListTools.isNotEmpty(projectConfigs)){
+									ProjectConfig projectConfig = projectConfigs.get(0);
+									control.setTaskCreate(projectConfig.getTaskCreate());
+									control.setTaskCopy(projectConfig.getTaskCopy());
+									control.setTaskRemove(projectConfig.getTaskRemove());
+									control.setLaneCreate(projectConfig.getLaneCreate());
+									control.setLaneEdit(projectConfig.getLaneEdit());
+									control.setLaneRemove(projectConfig.getLaneRemove());
+									control.setAttachmentUpload(projectConfig.getAttachmentUpload());
+									control.setComment(projectConfig.getComment());
+								}else{
+									control.setTaskCreate(true);
+								}
+								
 								if( business.isManager(effectivePerson) 
 								if( business.isManager(effectivePerson) 
 										|| effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson() )
 										|| effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson() )
 										|| project.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )) {
 										|| project.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )) {
 									control.setDelete( true );
 									control.setDelete( true );
 									control.setEdit( true );
 									control.setEdit( true );
 									control.setSortable( true );
 									control.setSortable( true );
+									control.setTaskCreate(true);
 								}else{
 								}else{
 									control.setDelete( false );
 									control.setDelete( false );
 									control.setEdit( false );
 									control.setEdit( false );
@@ -121,12 +144,15 @@ public class ActionListNextWithFilter extends BaseAction {
 								}else{
 								}else{
 									control.setFounder( false );
 									control.setFounder( false );
 								}
 								}
+								if(project.getDeleted() || project.getCompleted()){
+									control.setTaskCreate(false);
+								}
 								wo.setControl(control);
 								wo.setControl(control);
 								wos.add( wo );
 								wos.add( wo );
 							}
 							}
 						}
 						}
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						
 						
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
@@ -137,7 +163,7 @@ public class ActionListNextWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 6 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListNoGroupNextWithFilter.java

@@ -37,8 +37,8 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
 		List<Wo> wos = new ArrayList<>();
 		List<Wo> wos = new ArrayList<>();
 		Wi wrapIn = null;
 		Wi wrapIn = null;
 		Boolean check = true;
 		Boolean check = true;
-		String cacheKey = null;
-		Element element = null;
+		//String cacheKey = null;
+		//Element element = null;
 		QueryFilter  queryFilter = null;
 		QueryFilter  queryFilter = null;
 		List<String> queryProjectIds = new ArrayList<>();
 		List<String> queryProjectIds = new ArrayList<>();
 		
 		
@@ -77,7 +77,7 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			cacheKey = ApplicationCache.concreteCacheKey( "ActionListNoGroupNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+			/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListNoGroupNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
 			
 			
@@ -85,7 +85,7 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {
+			} else {*/
 				try {	
 				try {	
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
@@ -129,7 +129,7 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
 							}
 							}
 						}
 						}
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						
 						
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
@@ -140,7 +140,7 @@ public class ActionListNoGroupNextWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 8 - 8
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListPageInGroupWithFilter.java

@@ -34,8 +34,8 @@ public class ActionListPageInGroupWithFilter extends BaseAction {
 		ResultObject resultObject = null;
 		ResultObject resultObject = null;
 		Wi wrapIn = null;
 		Wi wrapIn = null;
 		Boolean check = true;
 		Boolean check = true;
-		String cacheKey = null;
-		Element element = null;
+		//String cacheKey = null;
+		//Element element = null;
 		QueryFilter  queryFilter = null;
 		QueryFilter  queryFilter = null;
 		List<String> queryProjectIds = new ArrayList<>();
 		List<String> queryProjectIds = new ArrayList<>();
 
 
@@ -64,19 +64,19 @@ public class ActionListPageInGroupWithFilter extends BaseAction {
 			queryFilter.addInTerm( new InTerm("id", new ArrayList<Object>(queryProjectIds) ));
 			queryFilter.addInTerm( new InTerm("id", new ArrayList<Object>(queryProjectIds) ));
 		}
 		}
 		
 		
-		if( Boolean.TRUE.equals( check ) ){
+		/*if( Boolean.TRUE.equals( check ) ){
 			
 			
 			cacheKey = ApplicationCache.concreteCacheKey( "ActionListPageWithFilter", effectivePerson.getDistinguishedName(), 
 			cacheKey = ApplicationCache.concreteCacheKey( "ActionListPageWithFilter", effectivePerson.getDistinguishedName(), 
 					pageNum, count, wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
 					pageNum, count, wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
-		}
+		}*/
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			if ((null != element) && (null != element.getObjectValue())) {
+			/*if ((null != element) && (null != element.getObjectValue())) {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {				
+			} else {*/				
 				try {
 				try {
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
@@ -120,7 +120,7 @@ public class ActionListPageInGroupWithFilter extends BaseAction {
 						}
 						}
 
 
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
 					}
 					}
@@ -130,7 +130,7 @@ public class ActionListPageInGroupWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 8 - 8
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListPageWithFilter.java

@@ -36,8 +36,8 @@ public class ActionListPageWithFilter extends BaseAction {
 		ResultObject resultObject = null;
 		ResultObject resultObject = null;
 		Wi wrapIn = null;
 		Wi wrapIn = null;
 		Boolean check = true;
 		Boolean check = true;
-		String cacheKey = null;
-		Element element = null;
+		//String cacheKey = null;
+		//Element element = null;
 		QueryFilter  queryFilter = null;
 		QueryFilter  queryFilter = null;
 		List<String> queryProjectIds = new ArrayList<>();
 		List<String> queryProjectIds = new ArrayList<>();
 
 
@@ -71,19 +71,19 @@ public class ActionListPageWithFilter extends BaseAction {
 			}
 			}
 		}
 		}
 		
 		
-		if( Boolean.TRUE.equals( check ) ){
+		/*if( Boolean.TRUE.equals( check ) ){
 			
 			
 			cacheKey = ApplicationCache.concreteCacheKey( "ActionListPageWithFilter", effectivePerson.getDistinguishedName(), 
 			cacheKey = ApplicationCache.concreteCacheKey( "ActionListPageWithFilter", effectivePerson.getDistinguishedName(), 
 					pageNum, count, wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
 					pageNum, count, wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
-		}
+		}*/
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			if ((null != element) && (null != element.getObjectValue())) {
+			/*if ((null != element) && (null != element.getObjectValue())) {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {				
+			} else {	*/			
 				try {					
 				try {					
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
@@ -127,7 +127,7 @@ public class ActionListPageWithFilter extends BaseAction {
 						}
 						}
 
 
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
 					}
 					}
@@ -137,7 +137,7 @@ public class ActionListPageWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 6 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListRecycleNextWithFilter.java

@@ -32,8 +32,8 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
 		List<Wo> wos = new ArrayList<>();
 		List<Wo> wos = new ArrayList<>();
 		Wi wrapIn = null;
 		Wi wrapIn = null;
 		Boolean check = true;
 		Boolean check = true;
-		String cacheKey = null;
-		Element element = null;
+		//String cacheKey = null;
+		//Element element = null;
 		QueryFilter queryFilter = null;
 		QueryFilter queryFilter = null;
 		List<String> queryProjectIds = new ArrayList<>();
 		List<String> queryProjectIds = new ArrayList<>();
 		
 		
@@ -73,7 +73,7 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ) {
 		if( Boolean.TRUE.equals( check ) ) {
-			cacheKey = ApplicationCache.concreteCacheKey( "ActionListRecycleNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
+			/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListRecycleNextWithFilter", effectivePerson.getDistinguishedName(), flag, count,
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
 			
 			
@@ -81,7 +81,7 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {
+			} else {*/
 				try {	
 				try {	
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllProjectIds( effectivePerson, 2000, queryFilter );
@@ -125,7 +125,7 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
 							}
 							}
 						}
 						}
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						
 						
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
@@ -135,7 +135,7 @@ public class ActionListRecycleNextWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}
+			//}
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 6 - 6
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionListStarNextWithFilter.java

@@ -37,8 +37,8 @@ public class ActionListStarNextWithFilter extends BaseAction {
 		List<Wo> wos = new ArrayList<>();
 		List<Wo> wos = new ArrayList<>();
 		Wi wrapIn = null;
 		Wi wrapIn = null;
 		Boolean check = true;
 		Boolean check = true;
-		String cacheKey = null;
-		Element element = null;
+		//String cacheKey = null;
+		//Element element = null;
 		QueryFilter  queryFilter = null;
 		QueryFilter  queryFilter = null;
 		List<String> queryProjectIds = new ArrayList<>();
 		List<String> queryProjectIds = new ArrayList<>();
 		
 		
@@ -77,7 +77,7 @@ public class ActionListStarNextWithFilter extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			cacheKey = ApplicationCache.concreteCacheKey( "ActionListStarNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+			/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListStarNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
 			element = projectCache.get( cacheKey );
 			element = projectCache.get( cacheKey );
 			
 			
@@ -85,7 +85,7 @@ public class ActionListStarNextWithFilter extends BaseAction {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {
+			} else {*/
 				try {	
 				try {	
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
 					List<String>  projectIds = projectQueryService.listAllViewableProjectIds( effectivePerson, 2000, queryFilter );
@@ -129,7 +129,7 @@ public class ActionListStarNextWithFilter extends BaseAction {
 							}
 							}
 						}
 						}
 						resultObject = new ResultObject( total, wos );
 						resultObject = new ResultObject( total, wos );
-						projectCache.put(new Element( cacheKey, resultObject ));
+						//projectCache.put(new Element( cacheKey, resultObject ));
 						
 						
 						result.setCount( resultObject.getTotal() );
 						result.setCount( resultObject.getTotal() );
 						result.setData( resultObject.getWos() );
 						result.setData( resultObject.getWos() );
@@ -140,7 +140,7 @@ public class ActionListStarNextWithFilter extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

+ 74 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionRecovery.java

@@ -0,0 +1,74 @@
+package com.x.teamwork.assemble.control.jaxrs.project;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.jaxrs.WoId;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.teamwork.core.entity.Project;
+
+public class ActionRecovery extends BaseAction {
+
+	private static  Logger logger = LoggerFactory.getLogger(ActionRecovery.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson, String projectId) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Project project = null;
+		Boolean check = true;
+		
+		if ( StringUtils.isEmpty( projectId )) {
+			check = false;
+			Exception exception = new ProjectFlagForQueryEmptyException();
+			result.error( exception );
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			try {
+				project = projectQueryService.get( projectId );
+				if ( project == null) {
+					check = false;
+					Exception exception = new ProjectNotExistsException( projectId );
+					result.error( exception );
+				}
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectQueryException(e, "根据指定flag查询应用项目信息对象时发生异常。ID:" + projectId );
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			try {	
+				projectPersistService.recoveryProject( projectId);
+
+				// 更新缓存
+				ApplicationCache.notify( Project.class );
+				Wo wo = new Wo();
+				wo.setId( project.getId() );
+				result.setData( wo );
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectPersistException(e, "项目恢复时发生异常。");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+			
+			try {					
+				dynamicPersistService.projectRecoveryDynamic( project, effectivePerson);
+			} catch (Exception e) {
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		return result;
+	}	
+
+	public static class Wo extends WoId {
+	}
+	
+}

+ 11 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionSave.java

@@ -136,6 +136,9 @@ public class ActionSave extends BaseAction {
 		@FieldDescribe("执行者|负责人,非必填")
 		@FieldDescribe("执行者|负责人,非必填")
 		private String executor;
 		private String executor;
 		
 		
+		@FieldDescribe("模板id")
+		private String templateId;
+		
 		@FieldDescribe("管理者,非必填")
 		@FieldDescribe("管理者,非必填")
 		private List<String> manageablePersonList;
 		private List<String> manageablePersonList;
 		
 		
@@ -220,6 +223,14 @@ public class ActionSave extends BaseAction {
 		public void setExecutor(String executor) {
 		public void setExecutor(String executor) {
 			this.executor = executor;
 			this.executor = executor;
 		}
 		}
+		
+		public String getTemplateId() {
+			return templateId;
+		}
+
+		public void setTemplateId(String templateId) {
+			this.templateId = templateId;
+		}
 
 
 		public List<String> getManageablePersonList() {
 		public List<String> getManageablePersonList() {
 			return manageablePersonList;
 			return manageablePersonList;

+ 4 - 4
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionStatisticMyProjects.java

@@ -43,13 +43,13 @@ public class ActionStatisticMyProjects extends BaseAction {
 		Integer archiveCount = 0;
 		Integer archiveCount = 0;
 		Integer deleteCount = 0;
 		Integer deleteCount = 0;
 
 
-		String cacheKey = ApplicationCache.concreteCacheKey( "ActionStatisticMyProjects", effectivePerson.getDistinguishedName() );
+		/*String cacheKey = ApplicationCache.concreteCacheKey( "ActionStatisticMyProjects", effectivePerson.getDistinguishedName() );
 		Element element = projectCache.get( cacheKey );
 		Element element = projectCache.get( cacheKey );
 
 
 		if ((null != element) && (null != element.getObjectValue())) {
 		if ((null != element) && (null != element.getObjectValue())) {
 			wo = (Wo) element.getObjectValue();
 			wo = (Wo) element.getObjectValue();
 			result.setData( wo );
 			result.setData( wo );
-		} else {
+		} else {*/
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
 					//查询我参与的所有项目
 					//查询我参与的所有项目
@@ -127,7 +127,7 @@ public class ActionStatisticMyProjects extends BaseAction {
 						SortTools.asc( woGroupList, "createTime");
 						SortTools.asc( woGroupList, "createTime");
 					}	
 					}	
 					wo.setGroups( woGroupList );
 					wo.setGroups( woGroupList );
-					projectCache.put( new Element(cacheKey, wo) );
+					//projectCache.put( new Element(cacheKey, wo) );
 					result.setData(wo);
 					result.setData(wo);
 				} catch (Exception e) {
 				} catch (Exception e) {
 					Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
 					Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
@@ -135,7 +135,7 @@ public class ActionStatisticMyProjects extends BaseAction {
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
 			}
 			}
-		}
+		//}
 		return result;
 		return result;
 	}
 	}
 
 

+ 4 - 4
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ActionStatisticMyProjectsGroups.java

@@ -34,13 +34,13 @@ public class ActionStatisticMyProjectsGroups extends BaseAction {
 		List<WoGroup> woGroupList = null;
 		List<WoGroup> woGroupList = null;
 		Boolean check = true;
 		Boolean check = true;
 		
 		
-		String cacheKey = ApplicationCache.concreteCacheKey( "ActionStatisticMyProjectsGroups", effectivePerson.getDistinguishedName() );
+		/*String cacheKey = ApplicationCache.concreteCacheKey( "ActionStatisticMyProjectsGroups", effectivePerson.getDistinguishedName() );
 		Element element = projectCache.get( cacheKey );
 		Element element = projectCache.get( cacheKey );
 
 
 		if ((null != element) && (null != element.getObjectValue())) {
 		if ((null != element) && (null != element.getObjectValue())) {
 			wo = (Wo) element.getObjectValue();
 			wo = (Wo) element.getObjectValue();
 			result.setData( wo );
 			result.setData( wo );
-		} else {
+		} else {*/
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
 					//查询我参与的所有项目
 					//查询我参与的所有项目
@@ -92,14 +92,14 @@ public class ActionStatisticMyProjectsGroups extends BaseAction {
 					wo.setGroups( woGroupList );
 					wo.setGroups( woGroupList );
 					result.setData(wo);
 					result.setData(wo);
 					
 					
-					projectCache.put( new Element(cacheKey, wo) );					
+					//projectCache.put( new Element(cacheKey, wo) );					
 				} catch (Exception e) {
 				} catch (Exception e) {
 					Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
 					Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
 					result.error(exception);
 					result.error(exception);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
 			}
 			}
-		}
+		//}
 		return result;
 		return result;
 	}
 	}
 
 

+ 3 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/BaseAction.java

@@ -3,6 +3,7 @@ package com.x.teamwork.assemble.control.jaxrs.project;
 import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.teamwork.assemble.control.service.DynamicPersistService;
 import com.x.teamwork.assemble.control.service.DynamicPersistService;
+import com.x.teamwork.assemble.control.service.ProjectConfigQueryService;
 import com.x.teamwork.assemble.control.service.ProjectGroupPersistService;
 import com.x.teamwork.assemble.control.service.ProjectGroupPersistService;
 import com.x.teamwork.assemble.control.service.ProjectGroupQueryService;
 import com.x.teamwork.assemble.control.service.ProjectGroupQueryService;
 import com.x.teamwork.assemble.control.service.ProjectPersistService;
 import com.x.teamwork.assemble.control.service.ProjectPersistService;
@@ -29,4 +30,6 @@ public class BaseAction extends StandardJaxrsAction {
 	
 	
 	protected 	SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
 	protected 	SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
 	
 	
+	protected 	ProjectConfigQueryService projectConfigQueryService = new ProjectConfigQueryService();
+	
 }
 }

+ 59 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/ProjectAction.java

@@ -367,6 +367,65 @@ public class ProjectAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
 	
 	
+	@JaxrsMethodDescribe(value = "根据标识恢复项目.", action = ActionRecovery.class)
+	@GET
+	@Path("{id}/recovery")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void recoveryProject(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("标识") @PathParam("id") String id) {
+		ActionResult<ActionRecovery.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try { 
+			result = new ActionRecovery().execute(request, effectivePerson, id);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "根据标识更改项目状态为已完成或未完成.", action = ActionComplete.class)
+	@PUT
+	@Path("{id}/complete")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void completeProject(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("标识") @PathParam("id") String id,
+			@JaxrsParameterDescribe("需要保存的项目状态信息") JsonElement jsonElement ) {
+		ActionResult<ActionComplete.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionComplete().execute(request, effectivePerson, id, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "根据标识设置项目是否可新建任务.", action = ActionCreateable.class)
+	@PUT
+	@Path("{id}/createable")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void createableProject(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("标识") @PathParam("id") String id,
+			@JaxrsParameterDescribe("需要保存的项目状态信息") JsonElement jsonElement ) {
+		ActionResult<ActionCreateable.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionCreateable().execute(request, effectivePerson, id, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
 	@JaxrsMethodDescribe(value = "根据标识删除项目信息.", action = ActionDelete.class)
 	@JaxrsMethodDescribe(value = "根据标识删除项目信息.", action = ActionDelete.class)
 	@DELETE
 	@DELETE
 	@Path("{id}")
 	@Path("{id}")

+ 88 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/project/WrapOutControl.java

@@ -16,6 +16,31 @@ public class WrapOutControl {
 	@FieldDescribe("是否创始人")
 	@FieldDescribe("是否创始人")
 	private Boolean founder = false;
 	private Boolean founder = false;
 	
 	
+	
+	@FieldDescribe("是否可新建任务")
+	private Boolean taskCreate = true;
+	
+	@FieldDescribe("是否可复制任务")
+	private Boolean taskCopy = true;
+	
+	@FieldDescribe("是否可删除任务")
+	private Boolean taskRemove = true;
+	
+	@FieldDescribe("是否可新建泳道")
+	private Boolean laneCreate = true;
+	
+	@FieldDescribe("是否可编辑泳道")
+	private Boolean laneEdit = true;
+	
+	@FieldDescribe("是否可删除泳道")
+	private Boolean laneRemove = true;
+	
+	@FieldDescribe("是否上传附件")
+	private Boolean attachmentUpload = true;
+	
+	@FieldDescribe("是否允许评论")
+	private Boolean comment = true;
+	
 	public Boolean getDelete() {
 	public Boolean getDelete() {
 		return delete;
 		return delete;
 	}
 	}
@@ -48,4 +73,67 @@ public class WrapOutControl {
 		this.founder = founder;
 		this.founder = founder;
 	}
 	}
 	
 	
+	public Boolean getTaskCreate() {
+		return taskCreate;
+	}
+
+	public void setTaskCreate(Boolean taskCreate) {
+		this.taskCreate = taskCreate;
+	}
+	
+	public Boolean getTaskCopy() {
+		return taskCopy;
+	}
+
+	public void setTaskCopy(Boolean taskCopy) {
+		this.taskCopy = taskCopy;
+	}
+	
+	public Boolean getTaskRemove() {
+		return taskRemove;
+	}
+
+	public void setTaskRemove(Boolean taskRemove) {
+		this.taskRemove = taskRemove;
+	}
+	
+	public Boolean getLaneCreate() {
+		return laneCreate;
+	}
+
+	public void setLaneCreate(Boolean laneCreate) {
+		this.laneCreate = laneCreate;
+	}
+	
+	public Boolean getLaneEdit() {
+		return laneEdit;
+	}
+
+	public void setLaneEdit(Boolean laneEdit) {
+		this.laneEdit = laneEdit;
+	}
+	
+	public Boolean getLaneRemove() {
+		return laneRemove;
+	}
+
+	public void setLaneRemove(Boolean laneRemove) {
+		this.laneRemove = laneRemove;
+	}
+	
+	public Boolean getAttachmentUpload() {
+		return attachmentUpload;
+	}
+
+	public void setAttachmentUpload(Boolean attachmentUpload) {
+		this.attachmentUpload = attachmentUpload;
+	}
+	
+	public Boolean getComment() {
+		return comment;
+	}
+
+	public void setComment(Boolean comment) {
+		this.comment = comment;
+	}
 }
 }

+ 3 - 3
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionDelete.java

@@ -70,9 +70,9 @@ public class ActionDelete extends BaseAction {
 				logger.error(e, effectivePerson, request, null);
 				logger.error(e, effectivePerson, request, null);
 			}
 			}
 		}
 		}
-		/*if( Boolean.TRUE.equals( check ) ){
+		if( Boolean.TRUE.equals( check ) ){
 			try {					
 			try {					
-				Dynamic dynamic = dynamicPersistService.projectGroupDeleteDynamic( projectGroup, effectivePerson );
+				Dynamic dynamic = dynamicPersistService.projectTemplateDeleteDynamic( projectTemplate, effectivePerson );
 				if( dynamic != null ) {
 				if( dynamic != null ) {
 					List<WoDynamic> dynamics = new ArrayList<>();
 					List<WoDynamic> dynamics = new ArrayList<>();
 					dynamics.add( WoDynamic.copier.copy( dynamic ) );
 					dynamics.add( WoDynamic.copier.copy( dynamic ) );
@@ -83,7 +83,7 @@ public class ActionDelete extends BaseAction {
 			} catch (Exception e) {
 			} catch (Exception e) {
 				logger.error(e, effectivePerson, request, null);
 				logger.error(e, effectivePerson, request, null);
 			}	
 			}	
-		}*/
+		}
 		result.setData( wo );
 		result.setData( wo );
 		return result;
 		return result;
 	}
 	}

+ 80 - 5
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionGet.java

@@ -7,7 +7,10 @@ import javax.servlet.http.HttpServletRequest;
 
 
 import org.apache.commons.lang3.StringUtils;
 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.entity.JpaObject;
 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.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.cache.ApplicationCache;
 import com.x.base.core.project.cache.ApplicationCache;
@@ -16,7 +19,9 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.assemble.control.Business;
 import com.x.teamwork.core.entity.ProjectTemplate;
 import com.x.teamwork.core.entity.ProjectTemplate;
+import com.x.teamwork.core.entity.TaskListTemplate;
 
 
 import net.sf.ehcache.Element;
 import net.sf.ehcache.Element;
 
 
@@ -29,6 +34,8 @@ public class ActionGet extends BaseAction {
 		Wo wo = null;
 		Wo wo = null;
 		ProjectTemplate projectTemplate = null;
 		ProjectTemplate projectTemplate = null;
 		Boolean check = true;
 		Boolean check = true;
+		List<TaskListTemplate> taskListTemplate = null;
+		WrapOutControl control = null;
 
 
 		if ( StringUtils.isEmpty( id ) ) {
 		if ( StringUtils.isEmpty( id ) ) {
 			check = false;
 			check = false;
@@ -36,13 +43,13 @@ public class ActionGet extends BaseAction {
 			result.error( exception );
 			result.error( exception );
 		}
 		}
 
 
-		String cacheKey = ApplicationCache.concreteCacheKey( id ,effectivePerson);
+		/*String cacheKey = ApplicationCache.concreteCacheKey( id ,effectivePerson);
 		Element element = projectTemplateCache.get( cacheKey );
 		Element element = projectTemplateCache.get( cacheKey );
 
 
 		if ((null != element) && (null != element.getObjectValue())) {
 		if ((null != element) && (null != element.getObjectValue())) {
 			wo = (Wo) element.getObjectValue();
 			wo = (Wo) element.getObjectValue();
 			result.setData( wo );
 			result.setData( wo );
-		} else {
+		} else {*/
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
 					projectTemplate = projectTemplateQueryService.get( id );
 					projectTemplate = projectTemplateQueryService.get( id );
@@ -61,8 +68,45 @@ public class ActionGet extends BaseAction {
 			
 			
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
-					wo = Wo.copier.copy( projectTemplate );					
-					projectTemplateCache.put(new Element(cacheKey, wo));
+					wo = Wo.copier.copy( projectTemplate );
+					taskListTemplate = projectTemplateQueryService.getTaskListTemplateWithTemplateId(wo.getId());
+					if( ListTools.isNotEmpty( taskListTemplate )) {
+						wo.setTaskListTemplate( WoTaskListTemplate.copier.copy( taskListTemplate ));
+					}
+					
+					//计算权限
+					if( Boolean.TRUE.equals( check ) ){
+						Business business = null;
+						try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
+							business = new Business(bc);
+						}
+						try {
+							control = new WrapOutControl();
+							if( business.isManager(effectivePerson) 
+									|| effectivePerson.getDistinguishedName().equalsIgnoreCase( projectTemplate.getOwner() )){
+								control.setDelete( true );
+								control.setEdit( true );
+								control.setSortable( true );								
+							}else{
+								control.setDelete( false );
+								control.setEdit( false );
+								control.setSortable( false );								
+							}
+							if(effectivePerson.getDistinguishedName().equalsIgnoreCase( projectTemplate.getOwner() )){
+								control.setFounder( true );
+							}else{
+								control.setFounder( false );
+							}
+							wo.setControl(control);
+						} catch (Exception e) {
+							check = false;
+							Exception exception = new ProjectTemplateQueryException(e, "根据指定flag查询工作任务权限信息时发生异常。id:" + id);
+							result.error(exception);
+							logger.error(e, effectivePerson, request, null);
+						}
+					}
+					
+					//projectTemplateCache.put(new Element(cacheKey, wo));
 					result.setData(wo);
 					result.setData(wo);
 				} catch (Exception e) {
 				} catch (Exception e) {
 					Exception exception = new ProjectTemplateQueryException(e, "将查询出来的项目模板信息对象转换为可输出的数据信息时发生异常。");
 					Exception exception = new ProjectTemplateQueryException(e, "将查询出来的项目模板信息对象转换为可输出的数据信息时发生异常。");
@@ -70,11 +114,33 @@ public class ActionGet extends BaseAction {
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
 			}
 			}
-		}
+		//}
 		return result;
 		return result;
 	}
 	}
 
 
 	public static class Wo extends ProjectTemplate {
 	public static class Wo extends ProjectTemplate {
+		@FieldDescribe("项目模板权限")
+		private WrapOutControl control = null;	
+		
+		@FieldDescribe("模板对应的泳道信息")
+		private List<WoTaskListTemplate> taskListTemplate = null;
+		
+		public WrapOutControl getControl() {
+			return control;
+		}
+
+		public void setControl(WrapOutControl control) {
+			this.control = control;
+		}
+		
+		public List<WoTaskListTemplate> getTaskListTemplate() {
+			return taskListTemplate;
+		}
+
+		public void setTaskListTemplate(List<WoTaskListTemplate> taskListTemplate) {
+			this.taskListTemplate = taskListTemplate;
+		}
+		
 		
 		
 		private static final long serialVersionUID = -5076990764713538973L;
 		private static final long serialVersionUID = -5076990764713538973L;
 
 
@@ -83,4 +149,13 @@ public class ActionGet extends BaseAction {
 		static WrapCopier<ProjectTemplate, Wo> copier = WrapCopierFactory.wo( ProjectTemplate.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
 		static WrapCopier<ProjectTemplate, Wo> copier = WrapCopierFactory.wo( ProjectTemplate.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
 
 
 	}
 	}
+	public static class WoTaskListTemplate extends TaskListTemplate {
+		
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<TaskListTemplate, WoTaskListTemplate> copier = WrapCopierFactory.wo( TaskListTemplate.class, WoTaskListTemplate.class, null, ListTools.toList(JpaObject.FieldsInvisible));		
+
+	}
 }
 }

+ 19 - 26
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionList.java

@@ -16,6 +16,7 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.SortTools;
 import com.x.base.core.project.tools.SortTools;
 import com.x.teamwork.core.entity.ProjectGroup;
 import com.x.teamwork.core.entity.ProjectGroup;
+import com.x.teamwork.core.entity.TaskListTemplate;
 
 
 import net.sf.ehcache.Element;
 import net.sf.ehcache.Element;
 
 
@@ -27,39 +28,31 @@ public class ActionList extends BaseAction {
 	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
 	protected ActionResult<List<Wo>> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
 		ActionResult<List<Wo>> result = new ActionResult<>();
 		ActionResult<List<Wo>> result = new ActionResult<>();
 		List<Wo> wos = null;
 		List<Wo> wos = null;
-		List<ProjectGroup> projectGroups = null;
+		List<TaskListTemplate> projectGroups = null;
 		Boolean check = true;
 		Boolean check = true;
 
 
-		String cacheKey = ApplicationCache.concreteCacheKey( "list.my", effectivePerson.getDistinguishedName() );
-		/*Element element = projectGroupCache.get( cacheKey );
-		
-		if ((null != element) && (null != element.getObjectValue())) {
-			wos = (List<Wo>) element.getObjectValue();
-			result.setData( wos );
-		} else {
-			if( Boolean.TRUE.equals( check ) ){
-				try {
-					projectGroups = projectGroupQueryService.listGroupByPerson( effectivePerson.getDistinguishedName() );
-					if( ListTools.isNotEmpty( projectGroups )) {
-						wos = Wo.copier.copy( projectGroups );
-						
-						SortTools.asc( wos, "createTime");
-						
-						projectGroupCache.put(new Element(cacheKey, wos));
-						result.setData(wos);
-					}
-				} catch (Exception e) {
-					check = false;
-					Exception exception = new ProjectTemplateQueryException(e, "根据用户拥有的项目组信息列表时发生异常。");
-					result.error(exception);
-					logger.error(e, effectivePerson, request, null);
+		/*if( Boolean.TRUE.equals( check ) ){
+			try {
+				projectGroups = projectGroupQueryService.listGroupByPerson( effectivePerson.getDistinguishedName() );
+				if( ListTools.isNotEmpty( projectGroups )) {
+					wos = Wo.copier.copy( projectGroups );
+					
+					SortTools.asc( wos, "createTime");
+					
+					result.setData(wos);
 				}
 				}
+			} catch (Exception e) {
+				check = false;
+				Exception exception = new ProjectTemplateQueryException(e, "根据用户拥有的项目组信息列表时发生异常。");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
 			}
 			}
 		}*/
 		}*/
+		
 		return result;
 		return result;
 	}
 	}
 
 
-	public static class Wo extends ProjectGroup {
+	public static class Wo extends TaskListTemplate {
 		
 		
 		private Long rank;
 		private Long rank;
 
 
@@ -75,7 +68,7 @@ public class ActionList extends BaseAction {
 
 
 		public static List<String> Excludes = new ArrayList<String>();
 		public static List<String> Excludes = new ArrayList<String>();
 
 
-		static WrapCopier<ProjectGroup, Wo> copier = WrapCopierFactory.wo( ProjectGroup.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+		static WrapCopier<TaskListTemplate, Wo> copier = WrapCopierFactory.wo( TaskListTemplate.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
 
 
 	}
 	}
 }
 }

+ 173 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionListNextWithFilter.java

@@ -0,0 +1,173 @@
+package com.x.teamwork.assemble.control.jaxrs.projectTemplate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+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;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.assemble.control.Business;
+import com.x.teamwork.core.entity.Project;
+import com.x.teamwork.core.entity.ProjectTemplate;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+import com.x.teamwork.core.entity.tools.filter.term.InTerm;
+
+import net.sf.ehcache.Element;
+
+public class ActionListNextWithFilter extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionListNextWithFilter.class);
+
+	protected ActionResult<List<Wo>> execute( HttpServletRequest request, EffectivePerson effectivePerson, String flag, Integer count, JsonElement jsonElement ) throws Exception {
+		ActionResult<List<Wo>> result = new ActionResult<>();
+		ResultObject resultObject = null;
+		List<Wo> wos = new ArrayList<>();
+		Wi wrapIn = null;
+		Boolean check = true;
+		String cacheKey = null;
+		Element element = null;
+		QueryFilter  queryFilter = null;
+		List<String> queryProjectIds = new ArrayList<>();
+		
+		if ( StringUtils.isEmpty( flag ) || "(0)".equals(flag)) { 
+			flag = null;
+		}
+
+		try {
+			wrapIn = this.convertToWrapIn(jsonElement, Wi.class);
+		} catch (Exception e) {
+			check = false;
+			Exception exception = new ProjectTemplateQueryException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			if( wrapIn == null ) {
+				wrapIn = new Wi();
+			}
+			queryFilter = wrapIn.getQueryFilter();
+			
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListNextWithFilter", effectivePerson.getDistinguishedName(), flag, count, 
+					wrapIn.getOrderField(), wrapIn.getOrderType(), 	queryFilter.getContentSHA1() );
+			element = projectTemplateCache.get( cacheKey );
+			
+			if ((null != element) && (null != element.getObjectValue())) {
+				resultObject = (ResultObject) element.getObjectValue();
+				result.setCount( resultObject.getTotal() );
+				result.setData( resultObject.getWos() );
+			} else {*/
+				try {
+					//获取用户能查看的所有的项目信息ID列表,最多查询2000条数据
+					List<String>  projectIds = projectTemplateQueryService.listAllProjectTemplateIds( effectivePerson, 2000, queryFilter );
+					if( ListTools.isNotEmpty( projectIds )) {
+						//直接根据可见项目ID列表进行分页查询
+						Long total = Long.parseLong( projectIds.size() + "" );										
+						List<ProjectTemplate>  projectList = projectTemplateQueryService.listWithProjectIdFilter( count, flag, wrapIn.getOrderField(), wrapIn.getOrderType(), projectIds );
+						
+						if( ListTools.isNotEmpty( projectList )) { 
+							WrapOutControl control = null;
+							for( ProjectTemplate project : projectList ) {
+								Wo wo = Wo.copier.copy(project);
+								
+								/*Business business = null;
+								try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
+									business = new Business(bc);
+								}
+								control = new WrapOutControl();
+								if( business.isManager(effectivePerson) 
+										|| effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson() )
+										|| project.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )) {
+									control.setDelete( true );
+									control.setEdit( true );
+									control.setSortable( true );
+								}else{
+									control.setDelete( false );
+									control.setEdit( false );
+									control.setSortable( false );
+								}
+								if(effectivePerson.getDistinguishedName().equalsIgnoreCase( project.getCreatorPerson())){
+									control.setFounder( true );
+								}else{
+									control.setFounder( false );
+								}
+								wo.setControl(control);*/
+								wos.add( wo );
+							}
+						}
+						resultObject = new ResultObject( total, wos );
+						//projectTemplateCache.put(new Element( cacheKey, resultObject ));
+						
+						result.setCount( resultObject.getTotal() );
+						result.setData( resultObject.getWos() );
+					}
+				} catch (Exception e) {
+					check = false;
+					logger.warn("系统查询项目信息列表时发生异常!");
+					result.error(e);
+					logger.error(e, effectivePerson, request, null);
+				}
+			//}		
+		}
+		return result;
+	}
+
+	public static class Wi extends WrapInQueryProjectTemplate{
+	}
+	
+	public static class Wo extends ProjectTemplate {
+
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<ProjectTemplate, Wo> copier = WrapCopierFactory.wo( ProjectTemplate.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+
+	}
+	
+	public static class ResultObject {
+
+		private Long total;
+		
+		private List<Wo> wos;
+
+		public ResultObject() {}
+		
+		public ResultObject(Long count, List<Wo> data) {
+			this.total = count;
+			this.wos = data;
+		}
+
+		public Long getTotal() {
+			return total;
+		}
+
+		public void setTotal(Long total) {
+			this.total = total;
+		}
+
+		public List<Wo> getWos() {
+			return wos;
+		}
+
+		public void setWos(List<Wo> wos) {
+			this.wos = wos;
+		}
+	}
+}

+ 220 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ActionStatisticProjectTemplates.java

@@ -0,0 +1,220 @@
+package com.x.teamwork.assemble.control.jaxrs.projectTemplate;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+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;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.assemble.control.Business;
+import com.x.teamwork.core.entity.ProjectTemplate;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+
+
+import net.sf.ehcache.Element;
+
+public class ActionStatisticProjectTemplates extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionStatisticProjectTemplates.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Wo wo = null;
+		List<String> projectTemplateIds = null;
+		List<ProjectTemplate> projectTemplateList = null;
+		List<String>  projectGroupList = null;
+		List<WoGroup> woGroupList = new ArrayList<>();
+		Business business = null;
+		Boolean check = true;
+		
+		Integer allCount = 0;
+		Integer myCount = 0;
+
+		String cacheKey = ApplicationCache.concreteCacheKey( "ActionStatisticProjectTemplates", effectivePerson.getDistinguishedName() );
+		Element element = projectTemplateCache.get( cacheKey );
+
+		if ((null != element) && (null != element.getObjectValue())) {
+			wo = (Wo) element.getObjectValue();
+			result.setData( wo );
+		} else {
+			if( Boolean.TRUE.equals( check ) ){
+				try {
+					//查询所有模板
+					projectTemplateIds = projectTemplateQueryService.listAllProjectTemplateIds( effectivePerson, 2000,  new QueryFilter() );
+					if( ListTools.isNotEmpty( projectTemplateIds )) {
+						projectTemplateList = projectTemplateQueryService.list( projectTemplateIds );
+					}
+				} catch (Exception e) {
+					check = false;
+					Exception exception = new ProjectTemplateQueryException( e, "查询所有项目模板信息列表时发生异常。" );
+					result.error(exception);
+					logger.error(e, effectivePerson, request, null);
+				}
+			}
+			
+			if( Boolean.TRUE.equals( check ) ){
+				try {
+					//查询我所有的项目组列表
+					//projectGroupList = projectGroupQueryService.listGroupByPerson( effectivePerson.getDistinguishedName() );
+					try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+						business = new Business(emc);
+						projectGroupList = business.projectTemplateFactory().fetchAllGroupType(effectivePerson.getDistinguishedName());
+					}
+					
+				} catch (Exception e) {
+					check = false;
+					Exception exception = new ProjectTemplateQueryException( e, "查询用户所有项目模板信息列表时发生异常。" );
+					result.error(exception);
+					logger.error(e, effectivePerson, request, null);
+				}
+			}	
+			
+			if( Boolean.TRUE.equals( check ) ){
+				if( ListTools.isNotEmpty( projectTemplateList )) {
+					for(  ProjectTemplate projectTemplate : projectTemplateList ) {
+							allCount++;						
+							if( projectTemplate.getOwner().equalsIgnoreCase(effectivePerson.getDistinguishedName()  )) {
+								myCount++;
+							}
+					}
+				}
+			}
+			
+			if(Boolean.TRUE.equals( check )){
+				if( ListTools.isNotEmpty( projectGroupList )) {
+					for(  String projectGroup : projectGroupList ) {						
+						List<ProjectTemplate> templateLists = business.projectTemplateFactory().ListProjectTemplateWithType(projectGroup);
+						if(ListTools.isNotEmpty(templateLists)){
+							List<WoTemplate> woTemplate = new ArrayList<>();
+							WoGroup woGroup = new WoGroup();
+							String type = "";
+							woTemplate = WoTemplate.copier.copy( templateLists );
+							for(ProjectTemplate templateList : templateLists){
+								woGroup.addProjectTemplateTypeCount(1);
+								type = templateList.getType();								
+							}
+							woGroup.setProjecTemplatetTypeName(type);
+							woGroup.setWoTemplate(woTemplate);
+							woGroupList.add(woGroup);
+						}
+					}
+				}
+			}
+			
+			if( Boolean.TRUE.equals( check ) ){
+				try {
+					wo = new Wo();
+					wo.setAllCount( allCount );
+					wo.setMyCount(myCount);				
+					//SortTools.asc( woGroupList, "projectTemplateTypeCount");
+					wo.setGroups( woGroupList );
+					projectTemplateCache.put( new Element(cacheKey, wo) );
+					result.setData(wo);
+				} catch (Exception e) {
+					Exception exception = new ProjectTemplateQueryException(e, "将查询出来的应用项目模板信息对象转换为可输出的数据信息时发生异常。");
+					result.error(exception);
+					logger.error(e, effectivePerson, request, null);
+				}
+			}
+		}
+		return result;
+	}
+
+	public static class Wo{
+
+		@FieldDescribe("所有项目数量")
+		private Integer allCount = 0;
+		
+		@FieldDescribe("所有项目数量")
+		private Integer myCount = 0;
+		
+		@FieldDescribe("所有分组信息")
+		private List<WoGroup> groups = null;
+		
+		public List<WoGroup> getGroups() {
+			return groups;
+		}
+
+		public void setGroups(List<WoGroup> groups) {
+			this.groups = groups;
+		}
+
+		public Integer getAllCount() {
+			return allCount;
+		}
+
+		public void setAllCount(Integer allCount) {
+			this.allCount = allCount;
+		}
+
+		public Integer getMyCount() {
+			return myCount;
+		}
+
+		public void setMyCount(Integer myCount) {
+			this.myCount = myCount;
+		}
+
+	}
+	
+	public static class WoTemplate extends ProjectTemplate{
+		
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static WrapCopier<ProjectTemplate, WoTemplate> copier = WrapCopierFactory.wo( ProjectTemplate.class, WoTemplate.class, null, JpaObject.FieldsInvisible);
+	}
+
+	public static class WoGroup{
+		
+		@FieldDescribe("分组项目数量")
+		private Integer projectTemplateTypeCount = 0;
+		
+		@FieldDescribe("分组名称")
+		private String projecTemplatetTypeName;
+		
+		public String getProjecTemplatetName() {
+			return projecTemplatetTypeName;
+		}
+		
+		public void setProjecTemplatetTypeName(String projecTemplatetTypeName) {
+			this.projecTemplatetTypeName = projecTemplatetTypeName;
+		}
+		
+		public Integer getProjectTemplateTypeCount() {
+			return projectTemplateTypeCount;
+		}
+
+		public void setProjectTemplateTypeCount(Integer projectTemplateTypeCount) {
+			this.projectTemplateTypeCount = projectTemplateTypeCount;
+		}
+
+		public void addProjectTemplateTypeCount( Integer count ) {
+			if( this.projectTemplateTypeCount == null ) {
+				this.projectTemplateTypeCount =0;
+			}
+			this.projectTemplateTypeCount += count;
+	   }
+		
+		@FieldDescribe("所有分组信息")
+		private List<WoTemplate> woTemplate = null;
+		
+		public List<WoTemplate> getWoTemplate() {
+			return woTemplate;
+		}
+
+		public void setWoTemplate(List<WoTemplate> woTemplate) {
+			this.woTemplate = woTemplate;
+		}
+	}
+}

+ 23 - 20
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/ProjectTemplateAction.java

@@ -28,24 +28,24 @@ import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.logger.LoggerFactory;
 
 
+
 @Path("projectTemplate")
 @Path("projectTemplate")
 @JaxrsDescribe("项目模板信息管理")
 @JaxrsDescribe("项目模板信息管理")
 public class ProjectTemplateAction extends StandardJaxrsAction {
 public class ProjectTemplateAction extends StandardJaxrsAction {
 
 
 	private Logger logger = LoggerFactory.getLogger(ProjectTemplateAction.class);
 	private Logger logger = LoggerFactory.getLogger(ProjectTemplateAction.class);
 	
 	
-	@JaxrsMethodDescribe(value = "根据ID查询项目模板信息.", action = ActionGet.class)
+	@JaxrsMethodDescribe(value = "查询项目模板统计信息.", action = ActionStatisticProjectTemplates.class)
 	@GET
 	@GET
-	@Path("{id}")
+	@Path("statitic/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void get(@Suspended final AsyncResponse asyncResponse, 
-			@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("项目组ID") @PathParam("id") String id ) {
-		ActionResult<ActionGet.Wo> result = new ActionResult<>();
+	public void statiticMyProject(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request ) {
+		ActionResult<ActionStatisticProjectTemplates.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
 		try {
-			result = new ActionGet().execute( request, effectivePerson, id );
+			result = new ActionStatisticProjectTemplates().execute( request, effectivePerson );
 		} catch (Exception e) {
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 			result.error(e);
@@ -53,17 +53,18 @@ public class ProjectTemplateAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
 	
 	
-	@JaxrsMethodDescribe(value = "查询用户创建的所有项目组信息列表.", action = ActionList.class)
+	@JaxrsMethodDescribe(value = "根据ID查询项目模板信息.", action = ActionGet.class)
 	@GET
 	@GET
-	@Path("list/my")
+	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void listGroups(@Suspended final AsyncResponse asyncResponse, 
-			@Context HttpServletRequest request ) {
-		ActionResult<List<ActionList.Wo>> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson(request);	
+	public void get(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request, 
+			@JaxrsParameterDescribe("项目组ID") @PathParam("id") String id ) {
+		ActionResult<ActionGet.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
 		try {
-			result = new ActionList().execute( request, effectivePerson );
+			result = new ActionGet().execute( request, effectivePerson, id );
 		} catch (Exception e) {
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 			result.error(e);
@@ -71,17 +72,19 @@ public class ProjectTemplateAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	}
 	
 	
-	@JaxrsMethodDescribe(value = "根据ID列表查询项目组信息列表.", action = ActionListWithFilter.class)
+	@JaxrsMethodDescribe(value = "列示项目信息,下一页.", action = ActionListNextWithFilter.class)
 	@PUT
 	@PUT
+	@Path("list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void listWithIds(@Suspended final AsyncResponse asyncResponse, 
-			@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("传入的ID列表") JsonElement jsonElement ) {
-		ActionResult<List<ActionListWithFilter.Wo>> result = new ActionResult<>();
+	public void listNextWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("最后一条信息数据的ID") @PathParam( "id" ) String id, 
+			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam( "count" ) Integer count, 
+			@JaxrsParameterDescribe("查询过滤条件") JsonElement jsonElement ) {
+		ActionResult<List<ActionListNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
 		try {
-			result = new ActionListWithFilter().execute(request, effectivePerson, jsonElement);
+			result = new ActionListNextWithFilter().execute(request, effectivePerson, id, count, jsonElement);
 		} catch (Exception e) {
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 			result.error(e);

+ 103 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/WrapInQueryProjectTemplate.java

@@ -0,0 +1,103 @@
+package com.x.teamwork.assemble.control.jaxrs.projectTemplate;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+import com.x.teamwork.core.entity.tools.filter.term.EqualsTerm;
+import com.x.teamwork.core.entity.tools.filter.term.LikeTerm;
+
+public class WrapInQueryProjectTemplate {
+	@FieldDescribe("用于排列的属性,非必填,默认为createTime.")
+	private String orderField = "createTime";
+
+	@FieldDescribe("排序方式:DESC | ASC,非必填, 默认为DESC.")
+	private String orderType = "DESC";
+	
+	@FieldDescribe("用于搜索的标题,非必填.")
+	private String title = null;
+	
+	@FieldDescribe("用于搜索的项目模板类型,非必填.")
+	private String type = null;			
+	
+	@FieldDescribe("是否已经删除,非必填")
+	private String deleted = null;
+	
+	@FieldDescribe("创建者,非必填")
+	private String owner = null;		
+	
+	private Long rank = 0L;
+	
+	public String getOrderField() {
+		return orderField;
+	}
+	public void setOrderField(String orderField) {
+		this.orderField = orderField;
+	}
+	public String getOrderType() {
+		return orderType;
+	}
+
+	public void setOrderType(String orderType) {
+		this.orderType = orderType;
+	}
+	public String getTitle() {
+		return title;
+	}
+	public void setTitle(String title) {
+		this.title = title;
+	}
+	public String getType() {
+		return type;
+	}
+	public void setType(String type) {
+		this.type = type;
+	}
+	public String getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(String deleted) {
+		this.deleted = deleted;
+	}
+	public String getOwner() {
+		return owner;
+	}
+	public void setOwner(String owner) {
+		this.owner = owner;
+	}
+	public Long getRank() {
+		return rank;
+	}
+	public void setRank(Long rank) {
+		this.rank = rank;
+	}
+
+
+
+	/**
+	 * 根据传入的查询参数,组织一个完整的QueryFilter对象
+	 * @return
+	 */
+	public QueryFilter getQueryFilter() {
+		QueryFilter queryFilter = new QueryFilter();		
+		queryFilter.setJoinType( "and" );
+		//组织查询条件对象
+		if( StringUtils.isNotEmpty( this.getTitle() )) {
+			queryFilter.addLikeTerm( new LikeTerm( "title", this.getTitle() ) );
+		}
+		if( StringUtils.isNotEmpty( this.getType())) {
+			queryFilter.addEqualsTerm( new EqualsTerm( "type", this.getType() ) );
+		}
+		if( StringUtils.isNotEmpty( this.getOwner())) {
+			queryFilter.addEqualsTerm( new EqualsTerm( "owner", this.getOwner() ) );
+		}
+		if( StringUtils.isNotEmpty( this.getDeleted() )) {
+			if( "true".equalsIgnoreCase( this.getDeleted() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "deleted", true ) );
+			}else {
+				queryFilter.addEqualsTerm( new EqualsTerm( "deleted", false ) );
+			}
+		}
+		return queryFilter;
+	}
+}

+ 51 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/projectTemplate/WrapOutControl.java

@@ -0,0 +1,51 @@
+package com.x.teamwork.assemble.control.jaxrs.projectTemplate;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+
+public class WrapOutControl {
+	
+	@FieldDescribe("是否可删除")
+	private Boolean delete = false;
+	
+	@FieldDescribe("是否可编辑")
+	private Boolean edit = false;
+	
+	@FieldDescribe("是否可排序")
+	private Boolean sortable = true;
+	
+	@FieldDescribe("是否创始人")
+	private Boolean founder = false;
+	
+	public Boolean getDelete() {
+		return delete;
+	}
+
+	public void setDelete(Boolean delete) {
+		this.delete = delete;
+	}
+	
+	public Boolean getEdit() {
+		return edit;
+	}
+
+	public void setEdit(Boolean edit) {
+		this.edit = edit;
+	}
+	
+	public Boolean getSortable() {
+		return sortable;
+	}
+
+	public void setSortable(Boolean sortable) {
+		this.sortable = sortable;
+	}
+	
+	public Boolean getFounder() {
+		return founder;
+	}
+
+	public void setFounder(Boolean founder) {
+		this.founder = founder;
+	}
+	
+}

+ 272 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/ActionStatisticMyProjects.java

@@ -0,0 +1,272 @@
+package com.x.teamwork.assemble.control.jaxrs.statistics;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.base.core.project.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.base.core.project.tools.SortTools;
+import com.x.teamwork.core.entity.Project;
+import com.x.teamwork.core.entity.ProjectGroup;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+import com.x.teamwork.core.entity.tools.filter.term.EqualsTerm;
+
+import net.sf.ehcache.Element;
+
+public class ActionStatisticMyProjects extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionStatisticMyProjects.class);
+
+	protected ActionResult<Wo> execute(HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
+		ActionResult<Wo> result = new ActionResult<>();
+		Wo wo = null;
+		List<String> projectIds = null;
+		List<Project> projectList = null;
+		List<ProjectGroup>  projectGroupList = null;
+		List<WoGroup> woGroupList = null;
+		Boolean check = true;
+		
+		Integer allCount = 0;
+		Integer starCount = 0;
+		Integer myCount = 0;
+		Integer unGroupCount = 0;
+		Integer completedCount = 0;
+		Integer archiveCount = 0;
+		Integer deleteCount = 0;
+
+
+			if( Boolean.TRUE.equals( check ) ){
+				try {
+					//查询我参与的所有项目
+					projectIds = projectQueryService.listAllProjectIds( effectivePerson, 2000,  new QueryFilter() );
+					if( ListTools.isNotEmpty( projectIds )) {
+						projectList = projectQueryService.list( projectIds );
+					}
+				} catch (Exception e) {
+					check = false;
+					Exception exception = new ProjectQueryException( e, "查询用户参与的所有项目信息列表时发生异常。" );
+					result.error(exception);
+					logger.error(e, effectivePerson, request, null);
+				}
+			}
+			
+			if( Boolean.TRUE.equals( check ) ){
+				try {
+					//查询我所有的项目组列表
+					projectGroupList = projectGroupQueryService.listGroupByPerson( effectivePerson.getDistinguishedName() );
+				} catch (Exception e) {
+					check = false;
+					Exception exception = new ProjectQueryException( e, "查询用户所有项目组信息列表时发生异常。" );
+					result.error(exception);
+					logger.error(e, effectivePerson, request, null);
+				}
+			}
+			
+			if( Boolean.TRUE.equals( check ) ){
+				if( ListTools.isNotEmpty( projectGroupList )) {
+					woGroupList = WoGroup.copier.copy( projectGroupList );
+					SortTools.asc( woGroupList, "createTime");
+				}
+			}			
+			
+			if( Boolean.TRUE.equals( check ) ){
+				if( ListTools.isNotEmpty( projectList )) {
+					for(  Project project : projectList ) {
+						if(project.getDeleted() != null && project.getDeleted() ){
+							deleteCount++;
+						}else{
+							allCount++;						
+							if( project.getStarPersonList() != null  && project.getStarPersonList().contains( effectivePerson.getDistinguishedName() ) ) {
+								starCount++;
+							}
+							if( project.getCreatorPerson().equalsIgnoreCase(effectivePerson.getDistinguishedName()  )) {
+								myCount++;
+							}
+							if( project.getGroupCount() == null || project.getGroupCount() == 0 ) {
+								unGroupCount++;
+							}
+							if( project.getCompleted() != null && project.getCompleted() ) {
+								completedCount++;
+							}
+							if( project.getArchive() != null && project.getArchive() ) {
+								archiveCount++;
+							}
+							woGroupList = checkGroup( project, woGroupList );
+						}
+						
+					}
+				}
+			}
+			
+			if( Boolean.TRUE.equals( check ) ){
+				try {
+					wo = new Wo();
+					wo.setAllCount( allCount );
+					wo.setMyCount(myCount);
+					wo.setStarCount(starCount);
+					wo.setUnGroupCount(unGroupCount);
+					wo.setCompletedCount(completedCount);
+					wo.setArchiveCount(archiveCount);
+					wo.setDeleteCount(deleteCount);					
+					if( ListTools.isNotEmpty( woGroupList )) {
+						SortTools.asc( woGroupList, "createTime");
+					}	
+					wo.setGroups( woGroupList );
+					result.setData(wo);
+				} catch (Exception e) {
+					Exception exception = new ProjectQueryException(e, "将查询出来的应用项目信息对象转换为可输出的数据信息时发生异常。");
+					result.error(exception);
+					logger.error(e, effectivePerson, request, null);
+				}
+			}
+		return result;
+	}
+
+	private List<WoGroup> checkGroup( Project project, List<WoGroup> woGroupList) throws Exception {
+		if( ListTools.isEmpty( woGroupList )) {
+			return null;
+		}
+		for( WoGroup woGroup : woGroupList ) {
+			if( projectGroupQueryService.existsWithProjectAndGroup( woGroup.getId(), project.getId() ) ) {
+				woGroup.addProjectCount(1);
+				break;
+			}
+		}
+		return woGroupList;
+	}
+
+	public static class Wo{
+
+		@FieldDescribe("所有项目数量")
+		private Integer allCount = 0;
+		
+		@FieldDescribe("所有项目数量")
+		private Integer starCount = 0;
+		
+		@FieldDescribe("所有项目数量")
+		private Integer myCount = 0;
+		
+		@FieldDescribe("所有项目数量")
+		private Integer unGroupCount = 0;
+		
+		@FieldDescribe("所有项目数量")
+		private Integer completedCount = 0;
+		
+		@FieldDescribe("所有项目数量")
+		private Integer archiveCount = 0;
+		
+		@FieldDescribe("所有项目数量")
+		private Integer deleteCount = 0;
+		
+		@FieldDescribe("所有分组信息")
+		private List<WoGroup> groups = null;
+		
+		public List<WoGroup> getGroups() {
+			return groups;
+		}
+
+		public void setGroups(List<WoGroup> groups) {
+			this.groups = groups;
+		}
+
+		public Integer getAllCount() {
+			return allCount;
+		}
+
+		public void setAllCount(Integer allCount) {
+			this.allCount = allCount;
+		}
+
+		public Integer getStarCount() {
+			return starCount;
+		}
+
+		public void setStarCount(Integer starCount) {
+			this.starCount = starCount;
+		}
+
+		public Integer getMyCount() {
+			return myCount;
+		}
+
+		public void setMyCount(Integer myCount) {
+			this.myCount = myCount;
+		}
+
+		public Integer getUnGroupCount() {
+			return unGroupCount;
+		}
+
+		public void setUnGroupCount(Integer unGroupCount) {
+			this.unGroupCount = unGroupCount;
+		}
+
+		public Integer getCompletedCount() {
+			return completedCount;
+		}
+
+		public void setCompletedCount(Integer completedCount) {
+			this.completedCount = completedCount;
+		}
+
+		public Integer getArchiveCount() {
+			return archiveCount;
+		}
+
+		public void setArchiveCount(Integer archiveCount) {
+			this.archiveCount = archiveCount;
+		}
+
+		public Integer getDeleteCount() {
+			return deleteCount;
+		}
+
+		public void setDeleteCount(Integer deleteCount) {
+			this.deleteCount = deleteCount;
+		}
+	}
+	
+	public static class WoGroup extends ProjectGroup{
+		
+		@FieldDescribe("分组项目数量")
+		private Integer projectCount = 0;
+		
+		public Integer getProjectCount() {
+			return projectCount;
+		}
+
+		public void setProjectCount(Integer projectCount) {
+			this.projectCount = projectCount;
+		}
+
+		public void addProjectCount( Integer count ) {
+			if( this.projectCount == null ) {
+				this.projectCount =0;
+			}
+			this.projectCount += count;
+		}
+		
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+		
+		static {
+			Excludes.add("creatorPerson");
+			Excludes.add("owner");
+			Excludes.add("updateTime");
+			Excludes.add("distributeFactor");
+			Excludes.add("sequence");
+		}
+		
+		static WrapCopier<ProjectGroup, WoGroup> copier = WrapCopierFactory.wo( ProjectGroup.class, WoGroup.class, null, Excludes);
+	}
+}

+ 132 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/ActionStatisticTaskWithFilter.java

@@ -0,0 +1,132 @@
+package com.x.teamwork.assemble.control.jaxrs.statistics;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+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;
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.ListTools;
+import com.x.teamwork.assemble.control.Business;
+import com.x.teamwork.core.entity.Task;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+import com.x.teamwork.core.entity.tools.filter.term.InTerm;
+
+import net.sf.ehcache.Element;
+
+public class ActionStatisticTaskWithFilter extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionStatisticTaskWithFilter.class);
+
+	protected ActionResult<List<Wo>> execute( HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
+		ActionResult<List<Wo>> result = new ActionResult<>();
+		ResultObject resultObject = null;
+		List<Wo> wos = new ArrayList<>();
+		Wi wrapIn = null;		
+		Boolean check = true;
+		QueryFilter  queryFilter = null;
+		String flag = null;
+		Integer count = 2000;
+		
+		
+		
+		try {
+			wrapIn = this.convertToWrapIn(jsonElement, Wi.class);
+		} catch (Exception e) {
+			check = false;
+			Exception exception = new StatisticQueryException(e, "系统在将JSON信息转换为对象时发生异常。JSON:" + jsonElement.toString());
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+
+		if( Boolean.TRUE.equals( check ) ){
+			wrapIn.setDeleted("false");
+			queryFilter = wrapIn.getQueryFilter();
+		}
+		
+		if( Boolean.TRUE.equals( check ) ){
+			
+				try {
+					Long total = statisticQueryService.countWithFilter( effectivePerson, queryFilter );
+					List<Task>  taskList = statisticQueryService.listWithFilter( effectivePerson, count, flag, wrapIn.getOrderField(), wrapIn.getOrderType(), queryFilter );
+					wos = Wo.copier.copy(taskList);
+					resultObject = new ResultObject( total, wos );
+					
+					result.setCount( resultObject.getTotal() );
+					result.setData( resultObject.getWos() );
+				} catch (Exception e) {
+					check = false;
+					logger.warn("系统查询项目信息列表时发生异常!");
+					result.error(e);
+					logger.error(e, effectivePerson, request, null);
+				}
+			}		
+		return result;
+	}
+	
+	public static class Wi extends WrapInQueryTask{
+	}
+	
+	public static class Wo extends Task {
+		
+		private Long rank;
+
+		public Long getRank() {
+			return rank;
+		}
+
+		public void setRank(Long rank) {
+			this.rank = rank;
+		}
+
+		private static final long serialVersionUID = -5076990764713538973L;
+
+		public static List<String> Excludes = new ArrayList<String>();
+
+		static WrapCopier<Task, Wo> copier = WrapCopierFactory.wo( Task.class, Wo.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+
+	}
+	
+	public static class ResultObject {
+
+		private Long total;
+		
+		private List<Wo> wos;
+
+		public ResultObject() {}
+		
+		public ResultObject(Long count, List<Wo> data) {
+			this.total = count;
+			this.wos = data;
+		}
+
+		public Long getTotal() {
+			return total;
+		}
+
+		public void setTotal(Long total) {
+			this.total = total;
+		}
+
+		public List<Wo> getWos() {
+			return wos;
+		}
+
+		public void setWos(List<Wo> wos) {
+			this.wos = wos;
+		}
+	}
+}

+ 28 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/BaseAction.java

@@ -0,0 +1,28 @@
+package com.x.teamwork.assemble.control.jaxrs.statistics;
+
+import com.x.base.core.project.cache.ApplicationCache;
+import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+import com.x.teamwork.assemble.control.service.ProjectGroupPersistService;
+import com.x.teamwork.assemble.control.service.ProjectGroupQueryService;
+import com.x.teamwork.assemble.control.service.ProjectQueryService;
+import com.x.teamwork.assemble.control.service.StatisticQueryService;
+import com.x.teamwork.assemble.control.service.SystemConfigQueryService;
+import com.x.teamwork.core.entity.Project;
+
+import net.sf.ehcache.Ehcache;
+
+public class BaseAction extends StandardJaxrsAction {
+
+	protected Ehcache projectCache = ApplicationCache.instance().getCache( Project.class );
+	
+	protected 	ProjectQueryService projectQueryService = new ProjectQueryService();
+	
+	protected ProjectGroupQueryService projectGroupQueryService = new ProjectGroupQueryService();
+	
+	protected ProjectGroupPersistService projectGroupPersistService = new ProjectGroupPersistService();	
+	
+	protected 	SystemConfigQueryService systemConfigQueryService = new SystemConfigQueryService();
+	
+	protected 	StatisticQueryService statisticQueryService = new StatisticQueryService();
+	
+}

+ 16 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/ProjectQueryException.java

@@ -0,0 +1,16 @@
+package com.x.teamwork.assemble.control.jaxrs.statistics;
+
+import com.x.base.core.project.exception.PromptException;
+
+class ProjectQueryException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	ProjectQueryException( Throwable e ) {
+		super("系统在查询项目信息时发生异常。" , e );
+	}
+	
+	ProjectQueryException( Throwable e, String message ) {
+		super("系统在查询项目信息时发生异常。Message:" + message, e );
+	}
+}

+ 16 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/StatisticQueryException.java

@@ -0,0 +1,16 @@
+package com.x.teamwork.assemble.control.jaxrs.statistics;
+
+import com.x.base.core.project.exception.PromptException;
+
+class StatisticQueryException extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	StatisticQueryException( Throwable e ) {
+		super("统计查询工作任务信息时发生异常。" , e );
+	}
+	
+	StatisticQueryException( Throwable e, String message ) {
+		super("统计查询工作任务信息时发生异常。Message:" + message, e );
+	}
+}

+ 73 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/StatisticsAction.java

@@ -0,0 +1,73 @@
+package com.x.teamwork.assemble.control.jaxrs.statistics;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.container.AsyncResponse;
+import javax.ws.rs.container.Suspended;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+
+import com.google.gson.JsonElement;
+import com.x.base.core.project.annotation.JaxrsDescribe;
+import com.x.base.core.project.annotation.JaxrsMethodDescribe;
+import com.x.base.core.project.annotation.JaxrsParameterDescribe;
+import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.http.HttpMediaType;
+import com.x.base.core.project.jaxrs.ResponseFactory;
+import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+
+
+@Path("statistics")
+@JaxrsDescribe("统计管理")
+public class StatisticsAction extends StandardJaxrsAction {
+
+	private Logger logger = LoggerFactory.getLogger(StatisticsAction.class);
+
+	@JaxrsMethodDescribe(value = "查询我的项目统计信息.", action = ActionStatisticMyProjects.class)
+	@GET
+	@Path("statitic/my")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void statiticMyProject(@Suspended final AsyncResponse asyncResponse, 
+			@Context HttpServletRequest request ) {
+		ActionResult<ActionStatisticMyProjects.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionStatisticMyProjects().execute( request, effectivePerson );
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+	
+	@JaxrsMethodDescribe(value = "列示工作任务信息,下一页.", action = ActionStatisticTaskWithFilter.class)
+	@PUT
+	@Path("statitic/{id}/next/{count}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listNextWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("查询过滤条件") JsonElement jsonElement ) {
+		ActionResult<List<ActionStatisticTaskWithFilter.Wo>> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionStatisticTaskWithFilter().execute(request, effectivePerson,jsonElement); 
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
+}

+ 139 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/statistics/WrapInQueryTask.java

@@ -0,0 +1,139 @@
+package com.x.teamwork.assemble.control.jaxrs.statistics;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+import com.x.teamwork.core.entity.tools.filter.QueryFilter;
+import com.x.teamwork.core.entity.tools.filter.term.EqualsTerm;
+import com.x.teamwork.core.entity.tools.filter.term.IsFalseTerm;
+import com.x.teamwork.core.entity.tools.filter.term.LikeTerm;
+
+public class WrapInQueryTask {
+	
+	@FieldDescribe("用于排列的属性,非必填,默认为createTime.")
+	private String orderField = "createTime";
+
+	@FieldDescribe("排序方式:DESC | ASC,非必填,默认为DESC.")
+	private String orderType = "DESC";
+	
+	@FieldDescribe("用于搜索的项目ID,单值,非必填.")
+	private String project = null;
+	
+	@FieldDescribe("用于搜索的上级工作任务ID,单值,非必填.")
+	private String parentId = null;	
+	
+	@FieldDescribe("用于搜索的工作状态:草稿- draft  | 执行中- processing | 已完成- completed | 已归档- archived,单值,非必填")
+	private String workStatus = null;
+		
+	
+	@FieldDescribe("是否已经删除,true|false,非必填")
+	private String deleted = null;		
+	
+	@FieldDescribe("执行者或者负责人,单值,非必填")
+	private String executor = null;		
+
+	private Long rank = 0L;
+
+	public Long getRank() {
+		return rank;
+	}
+
+	public void setRank(Long rank) {
+		this.rank = rank;
+	}
+	
+	public String getOrderField() {
+		return orderField;
+	}
+
+	public void setOrderField(String orderField) {
+		this.orderField = orderField;
+	}
+
+	public String getOrderType() {
+		return orderType;
+	}
+
+	public void setOrderType(String orderType) {
+		this.orderType = orderType;
+	}
+
+	public String getProject() {
+		return project;
+	}
+
+	public void setProject(String project) {
+		this.project = project;
+	}
+
+	public String getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+
+	public String getWorkStatus() {
+		return workStatus;
+	}
+
+	public void setWorkStatus(String workStatus) {
+		this.workStatus = workStatus;
+	}
+	
+	public String getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(String deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getExecutor() {
+		return executor;
+	}
+
+	public void setExecutor(String executor) {
+		this.executor = executor;
+	}
+	
+	/**
+	 * 根据传入的查询参数,组织一个完整的QueryFilter对象
+	 * @return
+	 */
+	public QueryFilter getQueryFilter() {
+		QueryFilter queryFilter = new QueryFilter();
+		//组织查询条件对象
+		if( StringUtils.isNotEmpty( this.getProject() )) {
+			queryFilter.addEqualsTerm( new EqualsTerm( "project", this.getProject() ) );
+		}
+		if( StringUtils.isNotEmpty( this.getParentId() )) {
+			queryFilter.addEqualsTerm( new EqualsTerm( "parent", this.getParentId() ) );
+		}
+		if( StringUtils.isNotEmpty( this.getWorkStatus() )) {
+			queryFilter.addEqualsTerm( new EqualsTerm( "workStatus", this.getWorkStatus() ) );
+		}else {
+			//默认查询所有的未归档的工作任务
+			queryFilter.addIsFalseTerm( new IsFalseTerm("archive"));
+		}
+		if( StringUtils.isNotEmpty( this.getExecutor())) {
+			queryFilter.addEqualsTerm( new EqualsTerm( "executor", this.getExecutor() ) );
+		}
+		/*if( StringUtils.isNotEmpty( this.getCompleted() )) {
+			if( "true".equalsIgnoreCase( this.getCompleted() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "completed", true ) );
+			}else {
+				queryFilter.addEqualsTerm( new EqualsTerm( "completed", false ) );
+			}
+		}*/
+		if( StringUtils.isNotEmpty( this.getDeleted() )) {
+			if( "true".equalsIgnoreCase( this.getDeleted() )) {
+				queryFilter.addEqualsTerm( new EqualsTerm( "deleted", true ) );
+			}else {
+				queryFilter.addEqualsTerm( new EqualsTerm( "deleted", false ) );
+			}
+		}
+		return queryFilter;
+	}
+}

+ 3 - 0
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionCopyTask.java

@@ -115,6 +115,9 @@ public class ActionCopyTask extends BaseAction {
 			//调整负责人为当前用户
 			//调整负责人为当前用户
 			newTask.setExecutor(effectivePerson.getDistinguishedName());
 			newTask.setExecutor(effectivePerson.getDistinguishedName());
 			newTask.setExecutorIdentity(userManagerService.getIdentityWithPerson( newTask.getExecutor(), "min"));
 			newTask.setExecutorIdentity(userManagerService.getIdentityWithPerson( newTask.getExecutor(), "min"));
+			
+			//调整创建人为当前用户
+			newTask.setCreatorPerson(effectivePerson.getDistinguishedName());
 
 
 			//调整ID
 			//调整ID
 			newTask.setId( Task.createId() );
 			newTask.setId( Task.createId() );

+ 34 - 14
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionGet.java

@@ -34,7 +34,7 @@ public class ActionGet extends BaseAction {
 		Task task = null;
 		Task task = null;
 		TaskDetail taskDetail = null;
 		TaskDetail taskDetail = null;
 		TaskExtField taskExtField = null;
 		TaskExtField taskExtField = null;
-		List<ProjectExtFieldRele> extFieldReleList = null;
+		List<CustomExtFieldRele> extFieldReleList = null;
 		List<TaskTag> tags = null;
 		List<TaskTag> tags = null;
 		Boolean check = true;
 		Boolean check = true;
 		WrapOutControl control = null;
 		WrapOutControl control = null;
@@ -92,10 +92,10 @@ public class ActionGet extends BaseAction {
 			
 			
 			if( Boolean.TRUE.equals( check ) ){
 			if( Boolean.TRUE.equals( check ) ){
 				try {
 				try {
-					extFieldReleList = projectExtFieldReleQueryService.listReleWithProject( task.getProject() );
+					extFieldReleList = customExtFieldReleQueryService.listReleWithCorrelation( task.getId() ); 
 				} catch (Exception e) {
 				} catch (Exception e) {
 					check = false;
 					check = false;
-					Exception exception = new TaskQueryException(e, "根据指定projectId查询项目扩展列配置信息对象时发生异常。projectId:" + task.getProject());
+					Exception exception = new TaskQueryException(e, "根据指定taskId查询任务扩展列配置信息对象时发生异常。taskId:" + task.getId());
 					result.error(exception);
 					result.error(exception);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
@@ -144,17 +144,16 @@ public class ActionGet extends BaseAction {
 					control = new WrapOutControl();
 					control = new WrapOutControl();
 					if( business.isManager(effectivePerson) 
 					if( business.isManager(effectivePerson) 
 							|| effectivePerson.getDistinguishedName().equalsIgnoreCase( task.getCreatorPerson() )
 							|| effectivePerson.getDistinguishedName().equalsIgnoreCase( task.getCreatorPerson() )
-							|| task.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )){
-						control.setDelete( true );
-						control.setEdit( true );
+							|| (ListTools.isNotEmpty(task.getManageablePersonList()) && task.getManageablePersonList().contains( effectivePerson.getDistinguishedName() ))){
+						control.setDelete( true );					
 						control.setSortable( true );
 						control.setSortable( true );
 						control.setChangeExecutor( true );
 						control.setChangeExecutor( true );
 					}else{
 					}else{
 						control.setDelete( false );
 						control.setDelete( false );
-						control.setEdit( false );
 						control.setSortable( false );
 						control.setSortable( false );
 						control.setChangeExecutor( false );
 						control.setChangeExecutor( false );
 					}
 					}
+					control.setEdit( true );
 					if(effectivePerson.getDistinguishedName().equalsIgnoreCase( task.getExecutor())){
 					if(effectivePerson.getDistinguishedName().equalsIgnoreCase( task.getExecutor())){
 						control.setChangeExecutor( true );
 						control.setChangeExecutor( true );
 					}
 					}
@@ -163,6 +162,16 @@ public class ActionGet extends BaseAction {
 					}else{
 					}else{
 						control.setFounder( false );
 						control.setFounder( false );
 					}
 					}
+					
+					Project project = null;
+					project = projectQueryService.get(wo.getProject());
+					if(project != null && (project.getDeleted() || project.getCompleted())){
+						control.setEdit( false );
+						control.setDelete( false );					
+						control.setSortable( false );
+						control.setChangeExecutor( false );
+					}
+					
 					wo.setControl(control);
 					wo.setControl(control);
 				} catch (Exception e) {
 				} catch (Exception e) {
 					check = false;
 					check = false;
@@ -348,14 +357,17 @@ public class ActionGet extends BaseAction {
 	
 	
 	public static class WoExtFieldRele{
 	public static class WoExtFieldRele{
 
 
-		@FieldDescribe("项目ID(必填)")
-		private String projectId;
+		@FieldDescribe("关联ID(必填)")
+		private String correlationId;
 
 
 		@FieldDescribe("备用列名(必填)")
 		@FieldDescribe("备用列名(必填)")
 		private String extFieldName;
 		private String extFieldName;
 
 
 		@FieldDescribe("显示属性名称(必填)")
 		@FieldDescribe("显示属性名称(必填)")
 		private String displayName;
 		private String displayName;
+		
+		@FieldDescribe("类型:project|task(必填)")
+		private String type;
 
 
 		@FieldDescribe("显示方式:TEXT|SELECT|MUTISELECT|RICHTEXT|DATE|DATETIME|PERSON|IDENTITY|UNIT|GROUP|(必填)")
 		@FieldDescribe("显示方式:TEXT|SELECT|MUTISELECT|RICHTEXT|DATE|DATETIME|PERSON|IDENTITY|UNIT|GROUP|(必填)")
 		private String displayType="TEXT";
 		private String displayType="TEXT";
@@ -377,7 +389,7 @@ public class ActionGet extends BaseAction {
 
 
 		public static List<String> Excludes = new ArrayList<String>();
 		public static List<String> Excludes = new ArrayList<String>();
 
 
-		static WrapCopier<ProjectExtFieldRele, WoExtFieldRele> copier = WrapCopierFactory.wo( ProjectExtFieldRele.class, WoExtFieldRele.class, null, ListTools.toList(JpaObject.FieldsInvisible));
+		static WrapCopier<CustomExtFieldRele, WoExtFieldRele> copier = WrapCopierFactory.wo( CustomExtFieldRele.class, WoExtFieldRele.class, null, ListTools.toList(JpaObject.FieldsInvisible));
 
 
 		public String getExtFieldName() {
 		public String getExtFieldName() {
 			return extFieldName;
 			return extFieldName;
@@ -394,13 +406,21 @@ public class ActionGet extends BaseAction {
 		public void setDisplayName(String displayName) {
 		public void setDisplayName(String displayName) {
 			this.displayName = displayName;
 			this.displayName = displayName;
 		}
 		}
+		
+		public String getType() {
+			return type;
+		}
+
+		public void setType(String type) {
+			this.type = type;
+		}
 
 
-		public String getProjectId() {
-			return projectId;
+		public String getCorrelationId() {
+			return correlationId;
 		}
 		}
 
 
-		public void setProjectId(String projectId) {
-			this.projectId = projectId;
+		public void setCorrelationId(String correlationId) {
+			this.correlationId = correlationId;
 		}
 		}
 
 
 		public String getDisplayType() {
 		public String getDisplayType() {

+ 6 - 7
o2server/x_teamwork_assemble_control/src/main/java/com/x/teamwork/assemble/control/jaxrs/task/ActionListMyTaskWithTaskList.java

@@ -48,14 +48,14 @@ public class ActionListMyTaskWithTaskList extends BaseAction {
 		}
 		}
 		
 		
 		if( Boolean.TRUE.equals( check ) ){
 		if( Boolean.TRUE.equals( check ) ){
-			cacheKey = ApplicationCache.concreteCacheKey( "ActionListMyTaskWithTaskList", taskListId );
+			/*cacheKey = ApplicationCache.concreteCacheKey( "ActionListMyTaskWithTaskList", taskListId );
 			element = taskCache.get( cacheKey );
 			element = taskCache.get( cacheKey );
 			
 			
 			if ((null != element) && (null != element.getObjectValue())) {
 			if ((null != element) && (null != element.getObjectValue())) {
 				resultObject = (ResultObject) element.getObjectValue();
 				resultObject = (ResultObject) element.getObjectValue();
 				result.setCount( resultObject.getTotal() );
 				result.setCount( resultObject.getTotal() );
 				result.setData( resultObject.getWos() );
 				result.setData( resultObject.getWos() );
-			} else {
+			} else {*/
 				Business business = null;
 				Business business = null;
 				try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
 				try (EntityManagerContainer bc = EntityManagerContainerFactory.instance().create()) {
 					business = new Business(bc);
 					business = new Business(bc);
@@ -80,17 +80,16 @@ public class ActionListMyTaskWithTaskList extends BaseAction {
 								control = new WrapOutControl();
 								control = new WrapOutControl();
 								if( business.isManager(effectivePerson) 
 								if( business.isManager(effectivePerson) 
 										|| effectivePerson.getDistinguishedName().equalsIgnoreCase( wo.getCreatorPerson() )
 										|| effectivePerson.getDistinguishedName().equalsIgnoreCase( wo.getCreatorPerson() )
-										|| wo.getManageablePersonList().contains( effectivePerson.getDistinguishedName() )){
+										|| (ListTools.isNotEmpty(wo.getManageablePersonList()) && wo.getManageablePersonList().contains( effectivePerson.getDistinguishedName() ))){
 									control.setDelete( true );
 									control.setDelete( true );
-									control.setEdit( true );
 									control.setSortable( true );
 									control.setSortable( true );
 									control.setChangeExecutor(true);
 									control.setChangeExecutor(true);
 								}else{
 								}else{
 									control.setDelete( false );
 									control.setDelete( false );
-									control.setEdit( false );
 									control.setSortable( false );
 									control.setSortable( false );
 									control.setChangeExecutor(false);
 									control.setChangeExecutor(false);
 								}
 								}
+								control.setEdit( true );
 								if(effectivePerson.getDistinguishedName().equalsIgnoreCase( wo.getExecutor())){
 								if(effectivePerson.getDistinguishedName().equalsIgnoreCase( wo.getExecutor())){
 									control.setChangeExecutor( true );
 									control.setChangeExecutor( true );
 								}
 								}
@@ -110,7 +109,7 @@ public class ActionListMyTaskWithTaskList extends BaseAction {
 					}
 					}
 					
 					
 					resultObject = new ResultObject( total, wos );
 					resultObject = new ResultObject( total, wos );
-					taskCache.put(new Element( cacheKey, resultObject ));
+					//taskCache.put(new Element( cacheKey, resultObject ));
 					
 					
 					result.setCount( resultObject.getTotal() );
 					result.setCount( resultObject.getTotal() );
 					result.setData( resultObject.getWos() );
 					result.setData( resultObject.getWos() );
@@ -120,7 +119,7 @@ public class ActionListMyTaskWithTaskList extends BaseAction {
 					result.error(e);
 					result.error(e);
 					logger.error(e, effectivePerson, request, null);
 					logger.error(e, effectivePerson, request, null);
 				}
 				}
-			}		
+			//}		
 		}
 		}
 		return result;
 		return result;
 	}
 	}

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff