roo00 6 năm trước cách đây
mục cha
commit
43928721e9
100 tập tin đã thay đổi với 4841 bổ sung2489 xóa
  1. 4 4
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attachment/FileImportExportAction.java
  2. 41 38
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminAction.java
  3. 23 22
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/ActionAppealCreate.java
  4. 81 80
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealInfoAction.java
  5. 146 138
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAction.java
  6. 52 56
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileAction.java
  7. 51 47
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceemployeeconfig/AttendanceEmployeeConfigAction.java
  8. 38 34
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceimportfileinfo/AttendanceImportFileInfoAction.java
  9. 71 69
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceschedulesetting/AttendanceScheduleSettingAction.java
  10. 60 55
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancesetting/AttendanceSettingAction.java
  11. 15 14
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/AttendanceStatisticAction.java
  12. 263 262
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/AttendanceStatisticShowAction.java
  13. 54 49
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatisticalcycle/AttendanceStatisticalCycleAction.java
  14. 51 47
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatisticrequirelog/AttendanceStatisticRequireLogAction.java
  15. 53 47
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceworkdayconfig/AttendanceWorkDayConfigAction.java
  16. 39 82
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/fileimport/AttendanceDetailFileImportAction.java
  17. 58 58
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/AttendanceSelfHolidayAction.java
  18. 23 20
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/AttendanceSelfHolidaySimpleAction.java
  19. 4 3
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/uuid/UUIDAction.java
  20. 42 39
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/workplace/AttendanceWorkPlaceAction.java
  21. 17 10
      o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceAppealInfoServiceAdv.java
  22. 442 70
      o2server/x_attendance_assemble_control/src/main/webapp/jest/describe.js
  23. 19 1
      o2server/x_attendance_assemble_control/src/main/webapp/jest/index.html
  24. 1 0
      o2server/x_base_core_project/pom.xml
  25. 103 20
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/Applications.java
  26. 11 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/annotation/AuditLog.java
  27. 71 3
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/annotation/DescribeBuilder.java
  28. 20 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/annotation/FieldTypeDescribe.java
  29. 0 55
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/bean/WrapCopierFactory.java
  30. 12 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckAssemble.java
  31. 12 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckService.java
  32. 1 28
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/cache/ApplicationCache.java
  33. 29 13
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ApplicationServer.java
  34. 32 17
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/CenterServer.java
  35. 159 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ClientInit.java
  36. 24 6
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Communicate.java
  37. 18 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Config.java
  38. 61 11
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataServer.java
  39. 42 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ExternalDataSource.java
  40. 4 4
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Messages.java
  41. 0 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Person.java
  42. 10 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ProcessPlatform.java
  43. 26 14
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/WebServer.java
  44. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/exception/ExceptionEntityFieldEmpty.java
  45. 2 20
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/http/ActionResult.java
  46. 0 18
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/http/CacheControlFactory.java
  47. 5 10
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/AnonymousCipherManagerUserJaxrsFilter.java
  48. 8 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/DruidFilter.java
  49. 155 52
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/ResponseFactory.java
  50. 2 2
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/cache/CacheAction.java
  51. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/echo/EchoAction.java
  52. 1 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/fireschedule/FireScheduleAction.java
  53. 5 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/logger/LoggerAction.java
  54. 50 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/metrics/MetricsTimer.java
  55. 194 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/metrics/MetricsTimerReport.java
  56. 164 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/metrics/StandardJaxrsActionReporter.java
  57. 144 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/proxy/StandardJaxrsActionProxy.java
  58. 5 5
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/logger/Audit.java
  59. 47 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/script/AbstractResources.java
  60. 171 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/script/ScriptFactory.java
  61. 2 0
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/scripting/ScriptingEngine.java
  62. 0 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/DateTools.java
  63. 10 1
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/ListTools.java
  64. 5 3
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/StringTools.java
  65. 5 3
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/x_query_assemble_surface.java
  66. 19 1
      o2server/x_base_core_project/src/test/java/com/x/base/core/project/test/CryptoTest.java
  67. 37 12
      o2server/x_base_core_project/src/test/java/com/x/base/core/project/test/gson/TestClient.java
  68. 66 0
      o2server/x_base_core_project/src/test/java/test/com/x/base/core/project/HeapDumper.java
  69. 60 0
      o2server/x_base_core_project/src/test/java/test/com/x/base/core/project/TestClient.java
  70. 7 7
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/attachment/AttachmentAction.java
  71. 2 2
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/attachment/PictureAction.java
  72. 50 46
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/configsetting/BBSConfigSettingAction.java
  73. 16 13
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/configsetting/BBSConfigSettingAnonymousAction.java
  74. 28 24
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/foruminfo/ForumInfoAction.java
  75. 40 34
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/foruminfo/ForumInfoManagerUserAction.java
  76. 19 16
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/image/ImageBase64Action.java
  77. 13 11
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/login/LoginAction.java
  78. 13 11
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/login/LogoutAction.java
  79. 15 12
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/login/MobileIndexAction.java
  80. 64 60
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/permissioninfo/PermissionInfoAction.java
  81. 52 47
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/permissioninfo/PermissionInfoAdminAction.java
  82. 38 37
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/replyinfo/ReplyInfoAction.java
  83. 61 58
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/replyinfo/ReplyInfoManagerUserAction.java
  84. 116 106
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/roleinfo/RoleInfoAction.java
  85. 48 45
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/sectioninfo/SectionInfoAction.java
  86. 74 69
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/sectioninfo/SectionInfoManagerUserAction.java
  87. 42 40
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/subjectinfo/SubjectAttachmentAction.java
  88. 125 117
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/subjectinfo/SubjectInfoAction.java
  89. 56 55
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/subjectinfo/SubjectInfoManagerUserAction.java
  90. 14 11
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/userinfo/UserInfoAction.java
  91. 12 9
      o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/uuid/UUIDAction.java
  92. 442 70
      o2server/x_bbs_assemble_control/src/main/webapp/jest/describe.js
  93. 19 1
      o2server/x_bbs_assemble_control/src/main/webapp/jest/index.html
  94. 2 3
      o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/ThisApplication.java
  95. 0 2
      o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/ActionApplication.java
  96. 6 5
      o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionDelete.java
  97. 6 5
      o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionFollowCalendar.java
  98. 6 5
      o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionFollowCalendarCancel.java
  99. 5 6
      o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionListWhatICanView.java
  100. 8 8
      o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionSave.java

+ 4 - 4
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attachment/FileImportExportAction.java

@@ -50,7 +50,7 @@ public class FileImportExportAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe(value = "根据文件ID下载附件,设定是否使用stream输出", action = ActionImportFileDownload.class)
@@ -69,7 +69,7 @@ public class FileImportExportAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe(value = "按指定月份导出非正常打卡数据,设定是否使用stream输出", action = ActionExportAbnormalDetail.class)
@@ -89,7 +89,7 @@ public class FileImportExportAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe(value = "按时间区间导出请假数据,设定是否使用stream输出", action = ActionExportHolidayDetail.class)
@@ -109,6 +109,6 @@ public class FileImportExportAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 41 - 38
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceadmin/AttendanceAdminAction.java

@@ -10,9 +10,10 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.attendanceadmin.exception.ExceptionAttendanceAdminProcess;
@@ -31,97 +32,99 @@ import com.x.base.core.project.logger.LoggerFactory;
 @JaxrsDescribe("考勤管理员信息配置管理服务")
 public class AttendanceAdminAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(AttendanceAdminAction.class);
+	private static Logger logger = LoggerFactory.getLogger(AttendanceAdminAction.class);
 
-	@JaxrsMethodDescribe( value = "获取所有的考勤管理员信息", action = ActionListAll.class )
+	@JaxrsMethodDescribe(value = "获取所有的考勤管理员信息", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllAttendanceAdmin(@Context HttpServletRequest request) {
+	public void listAllAttendanceAdmin(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAdminProcess( e, "根据ID获取信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAdminProcess(e, "根据ID获取信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID获取指定的考勤管理员信息", action = ActionGet.class )
+	@JaxrsMethodDescribe(value = "根据ID获取指定的考勤管理员信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest 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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAdminProcess( e, "根据ID获取信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAdminProcess(e, "根据ID获取信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "新建或者更新考勤管理员信息", action = ActionSave.class )
+	@JaxrsMethodDescribe(value = "新建或者更新考勤管理员信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAdminProcess( e, "保存信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAdminProcess(e, "保存信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除考勤管理员信息", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除考勤管理员信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("考勤管理员配置信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAdminProcess( e, "根据ID删除信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAdminProcess(e, "根据ID删除信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 23 - 22
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/ActionAppealCreate.java

@@ -1,12 +1,5 @@
 package com.x.attendance.assemble.control.jaxrs.attendanceappealinfo;
 
-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.attendance.assemble.control.ExceptionWrapInConvert;
 import com.x.attendance.assemble.control.jaxrs.AppealConfig;
@@ -20,6 +13,11 @@ 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 org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
 
 public class ActionAppealCreate extends BaseAction {
 	
@@ -89,13 +87,15 @@ public class ActionAppealCreate extends BaseAction {
 		if (check) {
 			if( StringUtils.isNotEmpty( appeal_auditor_type ) ) {
 				try {
-					System.out.println("personName:" + personName );
-					System.out.println("attendanceAppealInfo.getUnitName():" + attendanceAppealInfo.getUnitName() );
-					System.out.println("wrapIn.getIdentity():" + wrapIn.getIdentity() );
+//					System.out.println("personName:" + personName );
+//					System.out.println("attendanceAppealInfo.getUnitName():" + attendanceAppealInfo.getUnitName() );
+//					System.out.println("wrapIn.getIdentity():" + wrapIn.getIdentity() );
 					appealAuditPersonName = attendanceAppealInfoServiceAdv.getAppealAuditPerson( personName, attendanceAppealInfo.getUnitName(), wrapIn.getIdentity() );
-					appealAuditPersonName = userManagerService.getPersonNameByIdentity(appealAuditPersonName);
-					attendanceAppealInfo.setProcessPerson1( appealAuditPersonName );
-					attendanceAppealInfo.setCurrentProcessor( appealAuditPersonName );// 将第一个处理人设置为当前处理人
+					if( StringUtils.isNotEmpty( appealAuditPersonName )){
+						appealAuditPersonName = userManagerService.getPersonNameByIdentity(appealAuditPersonName);
+						attendanceAppealInfo.setProcessPerson1( appealAuditPersonName );
+						attendanceAppealInfo.setCurrentProcessor( appealAuditPersonName );// 将第一个处理人设置为当前处理人
+					}
 				}catch( Exception e ) {
 					check = false;
 					Exception exception = new ExceptionAttendanceAppealProcess(e, "系统在根据根据考勤人员查询申诉审核人信息时发生异常!personName:"+personName );
@@ -107,12 +107,12 @@ public class ActionAppealCreate extends BaseAction {
 		}
 		
 		if (check) {
-			if( appealAuditPersonName == null || appealAuditPersonName.isEmpty() ) {
+			if( StringUtils.isEmpty(appealAuditPersonName) ) {
 				//申诉审核人不存在
 				check = false;
 				String message = null;
 				String unitLevelName = null;
-				if( appeal_auditor_type == null || appeal_auditor_type.isEmpty() ) {
+				if( StringUtils.isEmpty(appeal_auditor_type)) {
 					message = "申诉审核人类别未配置!";
 				}else if( "无".equals( appeal_auditor_type.trim() )){//当前人处理
 					attendanceAppealInfo.setProcessPerson1( effectivePerson.getDistinguishedName() );
@@ -150,13 +150,13 @@ public class ActionAppealCreate extends BaseAction {
 			}
 		}
 		if (check) {
-			if( StringUtils.isNotEmpty( appeal_checker_type ) && !"无".equals( appeal_checker_type ) ) {
-				if( appealCheckPersonName == null || appealCheckPersonName.isEmpty() ) {
+			if( StringUtils.isNotEmpty( appeal_checker_type ) && !StringUtils.equals( appeal_checker_type, "无" ) ) {
+				if( StringUtils.isEmpty(appealCheckPersonName) ) {
 					//申诉复核人不存在
 					check = false;
 					String message = null;
 					String unitLevelName = null;
-					if( appeal_checker_type == null || appeal_checker_type.isEmpty() ) {
+					if( StringUtils.isEmpty( appeal_checker_type )) {
 						message = "申诉复核人类别未配置!";
 					}else if( AppealConfig.APPEAL_AUDITTYPE_UNITDUTY.equals( appeal_checker_type )){
 						unitLevelName = userManagerService.getUnitLevelNameWithName( attendanceDetail.getUnitName() );
@@ -180,10 +180,11 @@ public class ActionAppealCreate extends BaseAction {
 		//查询申诉审核人所属组织
 		if (check) {
 			if( AppealConfig.APPEAL_AUDITTYPE_UNITDUTY.equalsIgnoreCase( appeal_auditor_type ) ) {
-				attendanceAppealInfo.setProcessPersonUnit1( attendanceAppealInfoServiceAdv.getPersonUnitName( appealAuditPersonName, attendanceDetail.getUnitName(), wrapIn.getIdentity() ) );
+				attendanceAppealInfo.setProcessPersonUnit1(
+						attendanceAppealInfoServiceAdv.getPersonUnitName( appealAuditPersonName, attendanceDetail.getUnitName(), wrapIn.getIdentity() ) );
 			}else {
 				//汇报对象,指定人以及人员属性中指定的人员,根据人员姓名取首选组织(第一个)
-				if( appealAuditPersonName != null  && !appealAuditPersonName.isEmpty() ) {
+				if( StringUtils.isNotEmpty( appealAuditPersonName ) ) {
 					try {//获取审核人组织信息
 						attendanceAppealInfo.setProcessPersonUnit1( userManagerService.getUnitNameWithPersonName( appealAuditPersonName ));
 					}catch( Exception e ) {
@@ -198,7 +199,7 @@ public class ActionAppealCreate extends BaseAction {
 		}
 		//根据所属组织名称查询申诉审核人所属顶层组织
 		if (check) {
-			if( attendanceAppealInfo.getProcessPersonUnit1() != null  && !attendanceAppealInfo.getProcessPersonUnit1().isEmpty() ) {
+			if( StringUtils.isNotEmpty( attendanceAppealInfo.getProcessPersonUnit1() )) {
 				try {
 					attendanceAppealInfo.setProcessPersonTopUnit1( userManagerService.getTopUnitNameWithUnitName( attendanceAppealInfo.getProcessPersonUnit1() ) );
 				}catch( Exception e ) {
@@ -232,7 +233,7 @@ public class ActionAppealCreate extends BaseAction {
 		}
 		//根据所属组织名称查询申诉复核人所属顶层组织
 		if (check) {
-			if( attendanceAppealInfo.getProcessPersonUnit2() != null  && !attendanceAppealInfo.getProcessPersonUnit2().isEmpty() ) {
+			if( StringUtils.isNotEmpty(attendanceAppealInfo.getProcessPersonUnit2())) {
 				try {//获取复核人顶层组织信息
 					attendanceAppealInfo.setProcessPersonTopUnit2(  userManagerService.getTopUnitNameWithUnitName( attendanceAppealInfo.getProcessPersonUnit2()) );
 				}catch( Exception e ) {

+ 81 - 80
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceappealinfo/AttendanceAppealInfoAction.java

@@ -10,9 +10,10 @@ 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.attendanceappealinfo.exception.ExceptionAttendanceAppealProcess;
@@ -31,53 +32,53 @@ import com.x.base.core.project.logger.LoggerFactory;
 @JaxrsDescribe("考勤结果申诉信息管理服务")
 public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(AttendanceAppealInfoAction.class);
-	
-	@JaxrsMethodDescribe( value = "根据ID获取考勤结果申诉信息", action = ActionGet.class )
+	private static Logger logger = LoggerFactory.getLogger(AttendanceAppealInfoAction.class);
+
+	@JaxrsMethodDescribe(value = "根据ID获取考勤结果申诉信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest 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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAppealProcess( e, "根据ID获取信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAppealProcess(e, "根据ID获取信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除考勤结果申诉信息", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除考勤结果申诉信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("考勤申诉信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAppealProcess( e, "根据ID删除信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAppealProcess(e, "根据ID删除信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	/**
@@ -88,143 +89,143 @@ public class AttendanceAppealInfoAction extends StandardJaxrsAction {
 	 * @param wrapIn
 	 * @return
 	 */
-	@JaxrsMethodDescribe( value = "根据ID对考勤结果申诉信息提起申诉", action = ActionAppealCreate.class )
+	@JaxrsMethodDescribe(value = "根据ID对考勤结果申诉信息提起申诉", action = ActionAppealCreate.class)
 	@PUT
 	@Path("appeal/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response create(@Context HttpServletRequest request, 
+	public void create(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("考勤申诉信息ID") @PathParam("id") String id, JsonElement jsonElement) {
 		ActionResult<ActionAppealCreate.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAppealCreate().execute( request, effectivePerson, id, jsonElement );
-			} catch ( Exception e ) {
+				result = new ActionAppealCreate().execute(request, effectivePerson, id, jsonElement);
+			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAppealProcess( e, "根据ID对打卡结果进行申诉时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAppealProcess(e, "根据ID对打卡结果进行申诉时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID列表对考勤申诉信息进行审核操作, 参数:ids(申诉ID列表),opinion(审核意见), status(审核状态:1-通过;2-需要进行复核;-1-不通过)", action = ActionAppealAudit.class )
+	@JaxrsMethodDescribe(value = "根据ID列表对考勤申诉信息进行审核操作, 参数:ids(申诉ID列表),opinion(审核意见), status(审核状态:1-通过;2-需要进行复核;-1-不通过)", action = ActionAppealAudit.class)
 	@PUT
 	@Path("audit")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response audit(@Context HttpServletRequest request, JsonElement jsonElement ) {
+	public void audit(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionAppealAudit.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAppealAudit().execute( request, effectivePerson, jsonElement );
+				result = new ActionAppealAudit().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAppealProcess( e, "根据ID殂对申诉信息进行审核时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAppealProcess(e, "根据ID殂对申诉信息进行审核时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID列表对考勤申诉信息进行复核操作, 参数:ids(申诉ID列表),opinion2(审核意见), status(审核状态:1-通过;-1-不通过)", action = ActionAppealCheck.class )
+	@JaxrsMethodDescribe(value = "根据ID列表对考勤申诉信息进行复核操作, 参数:ids(申诉ID列表),opinion2(审核意见), status(审核状态:1-通过;-1-不通过)", action = ActionAppealCheck.class)
 	@PUT
 	@Path("check ")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response check ( @Context HttpServletRequest request,  JsonElement jsonElement ) {
+	public void check(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionAppealCheck.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAppealCheck().execute( request, effectivePerson, jsonElement );
+				result = new ActionAppealCheck().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAppealProcess( e, "根据ID列表对申诉信息进行复核时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAppealProcess(e, "根据ID列表对申诉信息进行复核时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据根据过滤条件对考勤申诉信息进行下一页查询", action = ActionListNextWithFilter.class )
+	@JaxrsMethodDescribe(value = "根据根据过滤条件对考勤申诉信息进行下一页查询", action = ActionListNextWithFilter.class)
 	@PUT
 	@Path("filter/list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listNextWithFilter(@Context HttpServletRequest request, 
+	public void listNextWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("最后一条信息ID") @PathParam("id") String id,
-			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListNextWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListNextWithFilter().execute(request, effectivePerson, id, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAppealProcess( e, "根据条件对申诉信息进行下一页查询时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAppealProcess(e, "根据条件对申诉信息进行下一页查询时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据根据过滤条件对考勤申诉信息进行上一页查询", action = ActionListPrevWithFilter.class )
+	@JaxrsMethodDescribe(value = "根据根据过滤条件对考勤申诉信息进行上一页查询", action = ActionListPrevWithFilter.class)
 	@PUT
 	@Path("filter/list/{id}/prev/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listPrevWithFilter(@Context HttpServletRequest request, 
+	public void listPrevWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("最后一条信息ID") @PathParam("id") String id,
-			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListPrevWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListPrevWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListPrevWithFilter().execute(request, effectivePerson, id, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAppealProcess( e, "根据条件对申诉信息进行上一页查询时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAppealProcess(e, "根据条件对申诉信息进行上一页查询时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID对考勤申诉信息进行归档", action = ActionAppealArchive.class )
+	@JaxrsMethodDescribe(value = "根据ID对考勤申诉信息进行归档", action = ActionAppealArchive.class)
 	@GET
 	@Path("archive/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response archive(@Context HttpServletRequest request, 
+	public void archive(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("考勤申诉信息ID") @PathParam("id") String id) {
 		ActionResult<ActionAppealArchive.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAppealArchive().execute( request, effectivePerson, id );
+				result = new ActionAppealArchive().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceAppealProcess( e, "根据ID对打卡结果进行归档时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceAppealProcess(e, "根据ID对打卡结果进行归档时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 146 - 138
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailAction.java

@@ -11,9 +11,10 @@ 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.attendancedetail.exception.ExceptionAttendanceDetailProcess;
@@ -32,292 +33,297 @@ import com.x.base.core.project.logger.LoggerFactory;
 @JaxrsDescribe("考勤打卡信息管理服务")
 public class AttendanceDetailAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(AttendanceDetailAction.class);
+	private static Logger logger = LoggerFactory.getLogger(AttendanceDetailAction.class);
 
-	@JaxrsMethodDescribe( value = "根据ID获取考勤打卡信息", action = ActionGet.class )
+	@JaxrsMethodDescribe(value = "根据ID获取考勤打卡信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest 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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "根据ID获取信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "根据ID获取信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "获取数据库中指定导入文件名称的数据列表", action = ActionListImportByFileName.class )
+	@JaxrsMethodDescribe(value = "获取数据库中指定导入文件名称的数据列表", action = ActionListImportByFileName.class)
 	@GET
 	@Path("list/{file_id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAttendanceDetailByBatchName(@Context HttpServletRequest request, 
+	public void listAttendanceDetailByBatchName(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
 			@JaxrsParameterDescribe("导入文件信息ID") @PathParam("file_id") String file_id) {
 		ActionResult<List<ActionListImportByFileName.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListImportByFileName().execute( request, effectivePerson, file_id );
+				result = new ActionListImportByFileName().execute(request, effectivePerson, file_id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "获取数据库中指定导入文件名称的数据列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "获取数据库中指定导入文件名称的数据列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "获取指定年月的打卡数据列表", action = ActionListWithFilter.class )
+	@JaxrsMethodDescribe(value = "获取指定年月的打卡数据列表", action = ActionListWithFilter.class)
 	@PUT
 	@Path("filter/list")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAttendanceDetail( @Context HttpServletRequest request, JsonElement jsonElement ) {
+	public void listAttendanceDetail(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<List<ActionListWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListWithFilter().execute( request, effectivePerson, jsonElement );
+				result = new ActionListWithFilter().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "获取指定年月的打卡数据列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "获取指定年月的打卡数据列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "获取用户指定年月的打卡数据列表", action = ActionListWithEmployee.class )
+	@JaxrsMethodDescribe(value = "获取用户指定年月的打卡数据列表", action = ActionListWithEmployee.class)
 	@PUT
 	@Path("filter/list/user")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listUserAttendanceDetail(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void listUserAttendanceDetail(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, JsonElement jsonElement) {
 		ActionResult<List<ActionListWithEmployee.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListWithEmployee().execute( request, effectivePerson, jsonElement );
+				result = new ActionListWithEmployee().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "获取员工指定年月的打卡数据列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "获取员工指定年月的打卡数据列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "获取顶层组织指定年月的打卡数据列表", action = ActionListWithTopUnit.class )
+	@JaxrsMethodDescribe(value = "获取顶层组织指定年月的打卡数据列表", action = ActionListWithTopUnit.class)
 	@PUT
 	@Path("filter/list/topUnit")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listTopUnitAttendanceDetail(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void listTopUnitAttendanceDetail(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, JsonElement jsonElement) {
 		ActionResult<List<ActionListWithTopUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListWithTopUnit().execute( request, effectivePerson, jsonElement );
+				result = new ActionListWithTopUnit().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "获取顶层组织指定年月的打卡数据列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "获取顶层组织指定年月的打卡数据列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "获取组织指定年月的打卡数据列表", action = ActionListWithUnit.class )
+	@JaxrsMethodDescribe(value = "获取组织指定年月的打卡数据列表", action = ActionListWithUnit.class)
 	@PUT
 	@Path("filter/list/unit")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listUnitAttendanceDetail(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void listUnitAttendanceDetail(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, JsonElement jsonElement) {
 		ActionResult<List<ActionListWithUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListWithUnit().execute( request, effectivePerson, jsonElement );
+				result = new ActionListWithUnit().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "获取组织指定年月的打卡数据列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "获取组织指定年月的打卡数据列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据周期的年份月份,以及需要考勤人员的名单,检查人员在周期内每天的考核数据是否存在,如果不存在,则进行补齐", action = ActionCheckWithPersonByCycle.class )
+	@JaxrsMethodDescribe(value = "根据周期的年份月份,以及需要考勤人员的名单,检查人员在周期内每天的考核数据是否存在,如果不存在,则进行补齐", action = ActionCheckWithPersonByCycle.class)
 	@GET
 	@Path("checkDetailWithPersonByCycle/{cycleYear}/{cycleMonth}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response checkDetailWithPersonByCycle( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("cycleYear") String cycleYear, 
-			@JaxrsParameterDescribe("统计周期月份") @PathParam("cycleMonth") String cycleMonth ) {
+	public void checkDetailWithPersonByCycle(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("cycleYear") String cycleYear,
+			@JaxrsParameterDescribe("统计周期月份") @PathParam("cycleMonth") String cycleMonth) {
 		ActionResult<ActionCheckWithPersonByCycle.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionCheckWithPersonByCycle().execute( request, effectivePerson, cycleYear, cycleMonth );
+				result = new ActionCheckWithPersonByCycle().execute(request, effectivePerson, cycleYear, cycleMonth);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "根据周期检查打卡信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "根据周期检查打卡信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "分析打卡数据", action = ActionAnalyseAttendanceDetails.class )
+	@JaxrsMethodDescribe(value = "分析打卡数据", action = ActionAnalyseAttendanceDetails.class)
 	@GET
 	@Path("analyse/{startDate}/{endDate}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response analyseAttendanceDetails(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("开始日期") @PathParam("startDate") String startDate, 
+	public void analyseAttendanceDetails(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("开始日期") @PathParam("startDate") String startDate,
 			@JaxrsParameterDescribe("结束日期") @PathParam("endDate") String endDate) {
 		ActionResult<ActionAnalyseAttendanceDetails.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAnalyseAttendanceDetails().execute( request, effectivePerson, startDate, endDate );
+				result = new ActionAnalyseAttendanceDetails().execute(request, effectivePerson, startDate, endDate);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "根据时间区间分析所有员工打卡信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "根据时间区间分析所有员工打卡信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "分析打卡数据", action = ActionAnalyseAttendanceDetail.class )
+	@JaxrsMethodDescribe(value = "分析打卡数据", action = ActionAnalyseAttendanceDetail.class)
 	@GET
 	@Path("analyse/id/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response analyseAttendanceDetail(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("移动考勤打卡信息ID") @PathParam("id") String id) {
+	public void analyseAttendanceDetail(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("移动考勤打卡信息ID") @PathParam("id") String id) {
 		ActionResult<ActionAnalyseAttendanceDetail.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAnalyseAttendanceDetail().execute( request, effectivePerson, id );
+				result = new ActionAnalyseAttendanceDetail().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "根据ID分析打卡信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "根据ID分析打卡信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "将指定的打卡记录归档", action = ActionArchiveAttendanceDetail.class )
+	@JaxrsMethodDescribe(value = "将指定的打卡记录归档", action = ActionArchiveAttendanceDetail.class)
 	@GET
 	@Path("archive/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response archiveAttendanceDetail(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("移动考勤打卡信息ID") @PathParam("id") String id) {
+	public void archiveAttendanceDetail(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("移动考勤打卡信息ID") @PathParam("id") String id) {
 		ActionResult<ActionArchiveAttendanceDetail.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionArchiveAttendanceDetail().execute( request, effectivePerson, id );
+				result = new ActionArchiveAttendanceDetail().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "根据ID归档打卡信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "根据ID归档打卡信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示符合过滤条件的打卡记录归档", action = ActionListNextWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示符合过滤条件的打卡记录归档", action = ActionListNextWithFilter.class)
 	@PUT
 	@Path("filter/list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listNextWithFilter(@Context HttpServletRequest request, 
+	public void listNextWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("最后一条信息ID") @PathParam("id") String id,
-			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListNextWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListNextWithFilter().execute(request, effectivePerson, id, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "列示根据过滤条件的打卡数据列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "列示根据过滤条件的打卡数据列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示符合过滤条件的打卡记录归档", action = ActionListPrevWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示符合过滤条件的打卡记录归档", action = ActionListPrevWithFilter.class)
 	@PUT
 	@Path("filter/list/{id}/prev/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listPrevWithFilter(@Context HttpServletRequest request, 
+	public void listPrevWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("最后一条信息ID") @PathParam("id") String id,
-			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListPrevWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListPrevWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListPrevWithFilter().execute(request, effectivePerson, id, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "列示根据过滤条件的打卡数据列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "列示根据过滤条件的打卡数据列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	/**
@@ -326,47 +332,49 @@ public class AttendanceDetailAction extends StandardJaxrsAction {
 	 * 
 	 * @author liyi_
 	 */
-	@JaxrsMethodDescribe( value = "接入完成的上下班打卡信息记录,接入完成后直接分析", action = ActionReciveAttendance.class )
+	@JaxrsMethodDescribe(value = "接入完成的上下班打卡信息记录,接入完成后直接分析", action = ActionReciveAttendance.class)
 	@Path("recive")
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response recive(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void recive(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionReciveAttendance.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionReciveAttendance().execute( request, effectivePerson, jsonElement );
+				result = new ActionReciveAttendance().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "接入上下班打卡信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "接入上下班打卡信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除打卡信息记录", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除打卡信息记录", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, @JaxrsParameterDescribe("移动考勤打卡信息ID") @PathParam("id") String id) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("移动考勤打卡信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
-			} catch (Exception e) {
+				result = new ActionDelete().execute(request, effectivePerson, id);
+			} catch (Exception e) {	
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "根据ID删除信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "根据ID删除信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 52 - 56
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/AttendanceDetailMobileAction.java

@@ -11,9 +11,10 @@ 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.attendancedetail.exception.ExceptionAttendanceDetailProcess;
@@ -28,116 +29,111 @@ 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("attendancedetail/mobile")
 @JaxrsDescribe("移动考勤打卡信息管理服务")
-public class AttendanceDetailMobileAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( AttendanceDetailMobileAction.class );
+public class AttendanceDetailMobileAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(AttendanceDetailMobileAction.class);
 
-	@JaxrsMethodDescribe( value = "根据ID获取移动打卡信息记录", action = ActionGetMobile.class )
+	@JaxrsMethodDescribe(value = "根据ID获取移动打卡信息记录", action = ActionGetMobile.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("移动考勤打卡信息ID") @PathParam("id") String id ) {
+	public void get(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("移动考勤打卡信息ID") @PathParam("id") String id) {
 		ActionResult<ActionGetMobile.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGetMobile().execute( request, effectivePerson, id );
+				result = new ActionGetMobile().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "根据ID获取信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "根据ID获取信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "移动打卡信息记录明细查询", action = ActionListMobileWithFilter.class )
+
+	@JaxrsMethodDescribe(value = "移动打卡信息记录明细查询", action = ActionListMobileWithFilter.class)
 	@Path("filter/list/page/{page}/count/{count}")
 	@PUT
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listDataForMobile(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("需要显示的页码") @PathParam("page") Integer page, 
-			@JaxrsParameterDescribe("每页需要显示的条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement ) {
+	public void listDataForMobile(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("需要显示的页码") @PathParam("page") Integer page,
+			@JaxrsParameterDescribe("每页需要显示的条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListMobileWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListMobileWithFilter().execute( request, effectivePerson, page, count, jsonElement );
+				result = new ActionListMobileWithFilter().execute(request, effectivePerson, page, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "根据ID获取信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "根据ID获取信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
+
 	/**
-	 * 打卡信息接入,移动端特点,会多次接入,部分接入,一次接入的信息不完整
-	 * 接入后只保存 ,由定时代理定期进行数据整合,入库并且 分析
-	 * 1-员工姓名 EmployeeName	
-	   2-员工号   EmployeeNo
-	   3-日期	RecordDateString
-	   4-打卡时间 SignTime
-	   6-打卡位置 
-	   7-打卡坐标
+	 * 打卡信息接入,移动端特点,会多次接入,部分接入,一次接入的信息不完整 接入后只保存 ,由定时代理定期进行数据整合,入库并且 分析 1-员工姓名
+	 * EmployeeName 2-员工号 EmployeeNo 3-日期 RecordDateString 4-打卡时间 SignTime 6-打卡位置
+	 * 7-打卡坐标
+	 * 
 	 * @author liyi_
 	 */
-	@JaxrsMethodDescribe( value = "移动打卡信息接入,移动端特点,会多次接入,部分接入,一次接入的信息不完整,接入完成后不直接进行分析", action = ActionReciveAttendanceMobile.class )
+	@JaxrsMethodDescribe(value = "移动打卡信息接入,移动端特点,会多次接入,部分接入,一次接入的信息不完整,接入完成后不直接进行分析", action = ActionReciveAttendanceMobile.class)
 	@Path("recive")
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response reciveForMobile( @Context HttpServletRequest request, JsonElement jsonElement ) {
+	public void reciveForMobile(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionReciveAttendanceMobile.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionReciveAttendanceMobile().execute( request, effectivePerson, jsonElement );
+				result = new ActionReciveAttendanceMobile().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "接入上下班打卡信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "接入上下班打卡信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID删除移动打卡信息", action = ActionDeleteMobile.class )
+
+	@JaxrsMethodDescribe(value = "根据ID删除移动打卡信息", action = ActionDeleteMobile.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("移动考勤打卡信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDeleteMobile.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDeleteMobile().execute( request, effectivePerson, id );
+				result = new ActionDeleteMobile().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceDetailProcess( e, "根据ID删除下班打卡信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceDetailProcess(e, "根据ID删除下班打卡信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 51 - 47
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceemployeeconfig/AttendanceEmployeeConfigAction.java

@@ -10,9 +10,10 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.attendanceemployeeconfig.exception.ExceptionAttendanceEmployeeProcess;
@@ -27,101 +28,104 @@ 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("attendanceemployeeconfig")
 @JaxrsDescribe("考勤人员配置信息管理服务")
-public class AttendanceEmployeeConfigAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( AttendanceEmployeeConfigAction.class );
-	
-	@JaxrsMethodDescribe( value = "获取所有考勤人员配置信息", action = ActionListAll.class )
+public class AttendanceEmployeeConfigAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(AttendanceEmployeeConfigAction.class);
+
+	@JaxrsMethodDescribe(value = "获取所有考勤人员配置信息", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
-	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8 )
-	@Consumes( MediaType.APPLICATION_JSON )
-	public Response listAllAttendanceEmployeeConfig( @Context HttpServletRequest request ) {
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listAllAttendanceEmployeeConfig(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceEmployeeProcess( e, "查询所有配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceEmployeeProcess(e, "查询所有配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID获取考勤人员配置信息", action = ActionGet.class )
+
+	@JaxrsMethodDescribe(value = "根据ID获取考勤人员配置信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, @JaxrsParameterDescribe("考勤人员配置信息ID") @PathParam("id") String id) {
+	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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceEmployeeProcess( e, "根据ID获取信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceEmployeeProcess(e, "根据ID获取信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "新建或者更新考勤人员配置信息", action = ActionSave.class )
+
+	@JaxrsMethodDescribe(value = "新建或者更新考勤人员配置信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement ) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceEmployeeProcess( e, "保存信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceEmployeeProcess(e, "保存信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID删除考勤人员配置信息", action = ActionDelete.class )
+
+	@JaxrsMethodDescribe(value = "根据ID删除考勤人员配置信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, @JaxrsParameterDescribe("考勤人员配置信息ID") @PathParam("id") String id) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("考勤人员配置信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceEmployeeProcess( e, "根据ID删除信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceEmployeeProcess(e, "根据ID删除信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 38 - 34
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceimportfileinfo/AttendanceImportFileInfoAction.java

@@ -9,9 +9,10 @@ import javax.ws.rs.GET;
 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 javax.ws.rs.core.Response;
 
 import com.x.attendance.assemble.control.jaxrs.attendanceimportfileinfo.exception.ExceptionAttendanceImportFileProcess;
 import com.x.base.core.project.annotation.JaxrsDescribe;
@@ -27,76 +28,79 @@ import com.x.base.core.project.logger.LoggerFactory;
 
 @Path("attendanceimportfileinfo")
 @JaxrsDescribe("导入文件信息管理服务")
-public class AttendanceImportFileInfoAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( AttendanceImportFileInfoAction.class );
-	
-	@JaxrsMethodDescribe( value = "获取所有已经上传成功的文件列表", action = ActionListAll.class )
+public class AttendanceImportFileInfoAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(AttendanceImportFileInfoAction.class);
+
+	@JaxrsMethodDescribe(value = "获取所有已经上传成功的文件列表", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllAttendanceImportFileInfo(@Context HttpServletRequest request ) {
+	public void listAllAttendanceImportFileInfo(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceImportFileProcess( e, "获取所有已经上传成功的文件时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceImportFileProcess(e, "获取所有已经上传成功的文件时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID获取已经上传成功的文件信息", action = ActionListAll.class )
+
+	@JaxrsMethodDescribe(value = "根据ID获取已经上传成功的文件信息", action = ActionListAll.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, @JaxrsParameterDescribe("导入文件信息ID") @PathParam("id") String id) {
+	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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceImportFileProcess( e, "根据ID获取已经上传成功的文件信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceImportFileProcess(e, "根据ID获取已经上传成功的文件信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID删除已经上传成功的文件以及文件信息", action = ActionDelete.class )
+
+	@JaxrsMethodDescribe(value = "根据ID删除已经上传成功的文件以及文件信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, @JaxrsParameterDescribe("导入文件信息ID") @PathParam("id") String id) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("导入文件信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceImportFileProcess( e, "根据ID删除已经上传成功的文件以及文件信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceImportFileProcess(e, "根据ID删除已经上传成功的文件以及文件信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 71 - 69
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceschedulesetting/AttendanceScheduleSettingAction.java

@@ -10,9 +10,10 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.attendanceschedulesetting.exception.ExceptionAttendanceScheduleProcess;
@@ -27,151 +28,152 @@ 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("attendanceschedulesetting")
 @JaxrsDescribe("考勤时间配置信息管理服务")
-public class AttendanceScheduleSettingAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( AttendanceScheduleSettingAction.class );
-	
-	@JaxrsMethodDescribe( value = "获取所有考勤时间配置信息列表", action = ActionListAll.class )
+public class AttendanceScheduleSettingAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(AttendanceScheduleSettingAction.class);
+
+	@JaxrsMethodDescribe(value = "获取所有考勤时间配置信息列表", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllAttendanceScheduleSetting(@Context HttpServletRequest request ) {
+	public void listAllAttendanceScheduleSetting(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceScheduleProcess( e, "获取考勤时间配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceScheduleProcess(e, "获取考勤时间配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据组织名称获取所有考勤时间配置信息", action = ActionListByUnit.class )
+
+	@JaxrsMethodDescribe(value = "根据组织名称获取所有考勤时间配置信息", action = ActionListByUnit.class)
 	@GET
 	@Path("list/unit/{name}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAttendanceScheduleSettingByUnit(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("组织名称") @PathParam("name") String name ) {
+	public void listAttendanceScheduleSettingByUnit(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("组织名称") @PathParam("name") String name) {
 		ActionResult<List<ActionListByUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListByUnit().execute( request, effectivePerson, name );
+				result = new ActionListByUnit().execute(request, effectivePerson, name);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceScheduleProcess( e, "按顶层组织获取所有考勤时间配置信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceScheduleProcess(e, "按顶层组织获取所有考勤时间配置信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据顶层组织名称获取所有考勤时间配置信息列表", action = ActionListByTopUnit.class )
+
+	@JaxrsMethodDescribe(value = "根据顶层组织名称获取所有考勤时间配置信息列表", action = ActionListByTopUnit.class)
 	@GET
 	@Path("list/topUnit/{name}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAttendanceScheduleSettingByTopUnit(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("顶层组织名称") @PathParam("name") String name ) {
+	public void listAttendanceScheduleSettingByTopUnit(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("顶层组织名称") @PathParam("name") String name) {
 		ActionResult<List<ActionListByTopUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListByTopUnit().execute( request, effectivePerson, name );
+				result = new ActionListByTopUnit().execute(request, effectivePerson, name);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceScheduleProcess( e, "按顶层组织获取所有考勤时间配置信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceScheduleProcess(e, "按顶层组织获取所有考勤时间配置信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID获取考勤时间配置信息", action = ActionGet.class )
+
+	@JaxrsMethodDescribe(value = "根据ID获取考勤时间配置信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("考勤时间配置信息ID") @PathParam("id") String id ) {
+	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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceScheduleProcess( e, "根据ID获取考勤时间配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceScheduleProcess(e, "根据ID获取考勤时间配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "新建或者更新考勤时间配置信息", action = ActionSave.class )
+
+	@JaxrsMethodDescribe(value = "新建或者更新考勤时间配置信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceScheduleProcess( e, "新建或者更新考勤时间配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceScheduleProcess(e, "新建或者更新考勤时间配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID删除考勤时间配置信息", action = ActionDelete.class )
+
+	@JaxrsMethodDescribe(value = "根据ID删除考勤时间配置信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("考勤时间配置信息ID") @PathParam("id") String id ) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("考勤时间配置信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceScheduleProcess( e, "根据ID删除考勤时间配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceScheduleProcess(e, "根据ID删除考勤时间配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 60 - 55
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancesetting/AttendanceSettingAction.java

@@ -10,9 +10,10 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.attendancesetting.exception.ExceptionAttendanceSettingProcess;
@@ -27,124 +28,128 @@ 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("attendancesetting")
 @JaxrsDescribe("系统配置信息管理服务")
-public class AttendanceSettingAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( AttendanceSettingAction.class );
-	
-	@JaxrsMethodDescribe( value = "获取所有系统配置信息列表", action = ActionListAll.class )
+public class AttendanceSettingAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(AttendanceSettingAction.class);
+
+	@JaxrsMethodDescribe(value = "获取所有系统配置信息列表", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllAttendanceSetting(@Context HttpServletRequest request ) {
+	public void listAllAttendanceSetting(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有系统配置信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有系统配置信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID获取系统配置信息", action = ActionGet.class )
+
+	@JaxrsMethodDescribe(value = "根据ID获取系统配置信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, @JaxrsParameterDescribe("系统配置信息ID") @PathParam("id") String id) {
+	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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "根据ID获取系统配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "根据ID获取系统配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据Code获取系统配置信息", action = ActionGetWithCode.class )
+
+	@JaxrsMethodDescribe(value = "根据Code获取系统配置信息", action = ActionGetWithCode.class)
 	@GET
 	@Path("code/{code}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response getWithCode(@Context HttpServletRequest request, @JaxrsParameterDescribe("系统配置信息编码") @PathParam("code") String code) {
+	public void getWithCode(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("系统配置信息编码") @PathParam("code") String code) {
 		ActionResult<ActionGetWithCode.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGetWithCode().execute( request, effectivePerson, code );
+				result = new ActionGetWithCode().execute(request, effectivePerson, code);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "根据Code获取系统配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "根据Code获取系统配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "新建或者更新系统配置信息", action = ActionSave.class )
+
+	@JaxrsMethodDescribe(value = "新建或者更新系统配置信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response save(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void save(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "新建或者更新系统配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "新建或者更新系统配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID删除系统配置信息", action = ActionDelete.class )
+
+	@JaxrsMethodDescribe(value = "根据ID删除系统配置信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, @JaxrsParameterDescribe("系统配置信息ID") @PathParam("id") String id) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("系统配置信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "根据ID删除系统配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "根据ID删除系统配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 15 - 14
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/AttendanceStatisticAction.java

@@ -5,6 +5,8 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 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 javax.ws.rs.core.Response;
@@ -20,33 +22,32 @@ 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("statistic")
 @JaxrsDescribe("数据统计执行服务")
-public class AttendanceStatisticAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( AttendanceStatisticAction.class );
-	
-	@JaxrsMethodDescribe( value = "驱动系统主动进行一次数据统计", action = ActionStatisticCaculate.class )
+public class AttendanceStatisticAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(AttendanceStatisticAction.class);
+
+	@JaxrsMethodDescribe(value = "驱动系统主动进行一次数据统计", action = ActionStatisticCaculate.class)
 	@GET
 	@Path("do")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response doStatistic(@Context HttpServletRequest request ) {
+	public void doStatistic(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<ActionStatisticCaculate.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionStatisticCaculate().execute( request, effectivePerson );
+				result = new ActionStatisticCaculate().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "驱动系统主动进行数据统计时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "驱动系统主动进行数据统计时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 263 - 262
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/AttendanceStatisticShowAction.java

@@ -9,9 +9,10 @@ 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.attendancesetting.exception.ExceptionAttendanceSettingProcess;
@@ -30,576 +31,576 @@ import com.x.base.core.project.logger.LoggerFactory;
 @JaxrsDescribe("考勤数据统计信息管理服务")
 public class AttendanceStatisticShowAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger( AttendanceStatisticShowAction.class );
-	
+	private static Logger logger = LoggerFactory.getLogger(AttendanceStatisticShowAction.class);
 
-	@JaxrsMethodDescribe( value = "查询员工指定月份的统计数据", action = ActionShowStmForPerson.class )
+	@JaxrsMethodDescribe(value = "查询员工指定月份的统计数据", action = ActionShowStmForPerson.class)
 	@GET
 	@Path("person/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStmForPerson(@Context HttpServletRequest request, 
+	public void showStmForPerson(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("统计员工姓名") @PathParam("name") String name,
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<List<ActionShowStmForPerson.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStmForPerson().execute( request, effectivePerson, name, year, month );
+				result = new ActionShowStmForPerson().execute(request, effectivePerson, name, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "查询指定组织所有员工指定月份的统计数据", action = ActionShowStForPersonInUnit.class )
+	@JaxrsMethodDescribe(value = "查询指定组织所有员工指定月份的统计数据", action = ActionShowStForPersonInUnit.class)
 	@GET
 	@Path("persons/unit/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStForPersonInUnit( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计员工姓名") @PathParam("name") String name, 
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+	public void showStForPersonInUnit(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计员工姓名") @PathParam("name") String name,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<List<ActionShowStForPersonInUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStForPersonInUnit().execute( request, effectivePerson, name, year, month );
+				result = new ActionShowStForPersonInUnit().execute(request, effectivePerson, name, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "查询指定组织所有员工指定月份的统计数据,包括下级组织", action = ActionShowStForPersonInUnitSubNested.class )
+
+	@JaxrsMethodDescribe(value = "查询指定组织所有员工指定月份的统计数据,包括下级组织", action = ActionShowStForPersonInUnitSubNested.class)
 	@GET
-	@Path( "persons/unit/subnested/{name}/{year}/{month}" )
+	@Path("persons/unit/subnested/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStForPersonInUnitSubNested( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计员工姓名") @PathParam("name") String name, 
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+	public void showStForPersonInUnitSubNested(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("统计员工姓名") @PathParam("name") String name,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<List<ActionShowStForPersonInUnitSubNested.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStForPersonInUnitSubNested().execute( request, effectivePerson, name, year, month );
+				result = new ActionShowStForPersonInUnitSubNested().execute(request, effectivePerson, name, year,
+						month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "查询组织指定月份的统计数据", action = ActionShowStmForUnitSubnested.class )
+	@JaxrsMethodDescribe(value = "查询组织指定月份的统计数据", action = ActionShowStmForUnitSubnested.class)
 	@GET
 	@Path("unit/subnested/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStmForUnitSubnested(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name, 
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+	public void showStmForUnitSubnested(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<List<ActionShowStmForUnitSubnested.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStmForUnitSubnested().execute( request, effectivePerson, name, year, month );
+				result = new ActionShowStmForUnitSubnested().execute(request, effectivePerson, name, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "查询顶层组织指定月份的统计数据", action = ActionShowStForUnitInTopUnit.class )
+
+	@JaxrsMethodDescribe(value = "查询顶层组织指定月份的统计数据", action = ActionShowStForUnitInTopUnit.class)
 	@GET
-	@Path( "unit/topUnit/{name}/{year}/{month}" )
+	@Path("unit/topUnit/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStForUnitInTopUnit(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计顶层组织名称") @PathParam("name") String name,
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+	public void showStForUnitInTopUnit(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("统计顶层组织名称") @PathParam("name") String name,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<List<ActionShowStForUnitInTopUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStForUnitInTopUnit().execute( request, effectivePerson, name, year, month );
+				result = new ActionShowStForUnitInTopUnit().execute(request, effectivePerson, name, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "查询组织指定月份的统计数据", action = ActionShowStmForUnit.class )
+
+	@JaxrsMethodDescribe(value = "查询组织指定月份的统计数据", action = ActionShowStmForUnit.class)
 	@GET
 	@Path("unit/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStmForUnit(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name, 
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+	public void showStmForUnit(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<List<ActionShowStmForUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStmForUnit().execute( request, effectivePerson, name, year, month );
+				result = new ActionShowStmForUnit().execute(request, effectivePerson, name, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "查询组织指定月份的统计数据", action = ActionSumStForUnit.class )
+
+	@JaxrsMethodDescribe(value = "查询组织指定月份的统计数据", action = ActionSumStForUnit.class)
 	@GET
-	@Path( "unit/sum/{name}/{year}/{month}" )
+	@Path("unit/sum/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response sumUnitStatistic( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name, 
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+	public void sumUnitStatistic(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<ActionSumStForUnit.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSumStForUnit().execute( request, effectivePerson, name, year, month );
+				result = new ActionSumStForUnit().execute(request, effectivePerson, name, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "查询顶层组织指定月份的统计数据", action = ActionShowStmForTopUnit.class )
+	@JaxrsMethodDescribe(value = "查询顶层组织指定月份的统计数据", action = ActionShowStmForTopUnit.class)
 	@GET
 	@Path("topUnit/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStmForTopUnit(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计顶层组织名称") @PathParam("name") String name, 
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+	public void showStmForTopUnit(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计顶层组织名称") @PathParam("name") String name,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<List<ActionShowStmForTopUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStmForTopUnit().execute( request, effectivePerson, name, year, month );
+				result = new ActionShowStmForTopUnit().execute(request, effectivePerson, name, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "查询组织指定月份每日的统计数据", action = ActionShowStmForTopUnit.class )
+	@JaxrsMethodDescribe(value = "查询组织指定月份每日的统计数据", action = ActionShowStmForTopUnit.class)
 	@GET
 	@Path("unit/day/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStdForUnit(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name, 
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+	public void showStdForUnit(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<List<ActionShowStdForUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStdForUnit().execute( request, effectivePerson, name, year, month );
+				result = new ActionShowStdForUnit().execute(request, effectivePerson, name, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "查询顶层组织指定月份每日的统计数据", action = ActionShowStdForTopUnit.class )
+	@JaxrsMethodDescribe(value = "查询顶层组织指定月份每日的统计数据", action = ActionShowStdForTopUnit.class)
 	@GET
 	@Path("topUnit/day/{name}/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStdForTopUnit(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计顶层组织名称") @PathParam("name") String name, 
-			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year, 
+	public void showStdForTopUnit(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计顶层组织名称") @PathParam("name") String name,
+			@JaxrsParameterDescribe("统计周期年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计周期月份") @PathParam("month") String month) {
 		ActionResult<List<ActionShowStdForTopUnit.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStdForTopUnit().execute( request, effectivePerson, name, year, month );
+				result = new ActionShowStdForTopUnit().execute(request, effectivePerson, name, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "查询组织指定日期的统计数据", action = ActionShowStdForUnitWithDate.class )
+	@JaxrsMethodDescribe(value = "查询组织指定日期的统计数据", action = ActionShowStdForUnitWithDate.class)
 	@GET
 	@Path("unit/day/{name}/{date}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStdForUnitWithDate(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name, 
+	public void showStdForUnitWithDate(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name,
 			@JaxrsParameterDescribe("统计日期") @PathParam("date") String date) {
 		ActionResult<List<ActionShowStdForUnitWithDate.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStdForUnitWithDate().execute( request, effectivePerson, name, date );
+				result = new ActionShowStdForUnitWithDate().execute(request, effectivePerson, name, date);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "查询组织指定日期的统计数据", action = ActionShowStdForUnitInTopUnitWithDate.class )
+
+	@JaxrsMethodDescribe(value = "查询组织指定日期的统计数据", action = ActionShowStdForUnitInTopUnitWithDate.class)
 	@GET
 	@Path("unit/day/topUnit/{name}/{date}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response showStdForUnitInTopUnitWithDate(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name, 
+	public void showStdForUnitInTopUnitWithDate(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("统计组织名称") @PathParam("name") String name,
 			@JaxrsParameterDescribe("统计日期") @PathParam("date") String date) {
 		ActionResult<List<ActionShowStdForUnitInTopUnitWithDate.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionShowStdForUnitInTopUnitWithDate().execute( request, effectivePerson, name, date );
+				result = new ActionShowStdForUnitInTopUnitWithDate().execute(request, effectivePerson, name, date);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的个人月份统计数据,下一页", action = ActionListStmForPersonNextWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的个人月份统计数据,下一页", action = ActionListStmForPersonNextWithFilter.class)
 	@PUT
 	@Path("filter/personMonth/list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStmForPersonNextWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStmForPersonNextWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStmForPersonNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStmForPersonNextWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStmForPersonNextWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的个人月份统计数据,上一页", action = ActionListStmForPersonPrevWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的个人月份统计数据,上一页", action = ActionListStmForPersonPrevWithFilter.class)
 	@PUT
 	@Path("filter/personMonth/list/{id}/prev/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStmForPersonPrevWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStmForPersonPrevWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStmForPersonPrevWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStmForPersonPrevWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStmForPersonPrevWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的组织月份统计数据,下一页", action = ActionListStmForUnitNextWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的组织月份统计数据,下一页", action = ActionListStmForUnitNextWithFilter.class)
 	@PUT
 	@Path("filter/unitMonth/list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStmForUnitNextWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStmForUnitNextWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStmForUnitNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStmForUnitNextWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStmForUnitNextWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的组织月份统计数据,上一页", action = ActionListStmForUnitPrevWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的组织月份统计数据,上一页", action = ActionListStmForUnitPrevWithFilter.class)
 	@PUT
 	@Path("filter/unitMonth/list/{id}/prev/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStmForUnitPrevWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStmForUnitPrevWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStmForUnitPrevWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStmForUnitPrevWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStmForUnitPrevWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的顶层组织月份统计数据,下一页", action = ActionListStmForTopUnitNextWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的顶层组织月份统计数据,下一页", action = ActionListStmForTopUnitNextWithFilter.class)
 	@PUT
 	@Path("filter/topUnitMonth/list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStmForTopUnitNextWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStmForTopUnitNextWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStmForTopUnitNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStmForTopUnitNextWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStmForTopUnitNextWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的顶层组织月份统计数据,上一页", action = ActionListStmForTopUnitPrevWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的顶层组织月份统计数据,上一页", action = ActionListStmForTopUnitPrevWithFilter.class)
 	@PUT
-	@Path( "filter/topUnitMonth/list/{id}/prev/{count}" )
+	@Path("filter/topUnitMonth/list/{id}/prev/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStmForTopUnitPrevWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStmForTopUnitPrevWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStmForTopUnitPrevWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStmForTopUnitPrevWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStmForTopUnitPrevWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的组织每日统计数据,下一页", action = ActionListStdForUnitNextWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的组织每日统计数据,下一页", action = ActionListStdForUnitNextWithFilter.class)
 	@PUT
 	@Path("filter/unitDay/list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStdForUnitNextWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStdForUnitNextWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStdForUnitNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStdForUnitNextWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStdForUnitNextWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的组织每日统计数据,上一页", action = ActionListStdForUnitPrevWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的组织每日统计数据,上一页", action = ActionListStdForUnitPrevWithFilter.class)
 	@PUT
 	@Path("filter/unitDay/list/{id}/prev/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStdForUnitPrevWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStdForUnitPrevWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStdForUnitPrevWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStdForUnitPrevWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStdForUnitPrevWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的顶层组织每日统计数据,下一页", action = ActionListStdForTopUnitNextWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的顶层组织每日统计数据,下一页", action = ActionListStdForTopUnitNextWithFilter.class)
 	@PUT
 	@Path("filter/topUnitDay/list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStdForTopUnitNextWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStdForTopUnitNextWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStdForTopUnitNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStdForTopUnitNextWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStdForTopUnitNextWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的顶层组织每日统计数据,上一页", action = ActionListStdForTopUnitPrevWithFilter.class )
+
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的顶层组织每日统计数据,上一页", action = ActionListStdForTopUnitPrevWithFilter.class)
 	@PUT
 	@Path("filter/topUnitDay/list/{id}/prev/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listStdForTopUnitPrevWithFilter(@Context HttpServletRequest request,
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listStdForTopUnitPrevWithFilter(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示信息条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListStdForTopUnitPrevWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListStdForTopUnitPrevWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListStdForTopUnitPrevWithFilter().execute(request, effectivePerson, id, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceSettingProcess( e, "获取所有数据统计信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceSettingProcess(e, "获取所有数据统计信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 54 - 49
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatisticalcycle/AttendanceStatisticalCycleAction.java

@@ -10,9 +10,10 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.ExceptionAttendanceProcess;
@@ -31,121 +32,125 @@ import com.x.base.core.project.logger.LoggerFactory;
 @JaxrsDescribe("考勤统计周期信息管理服务")
 public class AttendanceStatisticalCycleAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(AttendanceStatisticalCycleAction.class);
-	
-	@JaxrsMethodDescribe( value = "获取所有考勤统计周期信息", action = ActionListAll.class )
+	private static Logger logger = LoggerFactory.getLogger(AttendanceStatisticalCycleAction.class);
+
+	@JaxrsMethodDescribe(value = "获取所有考勤统计周期信息", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllAttendanceStatisticalCycle(@Context HttpServletRequest request) {
+	public void listAllAttendanceStatisticalCycle(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有考勤统计周期信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有考勤统计周期信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID获取考勤统计周期信息", action = ActionGet.class )
+	@JaxrsMethodDescribe(value = "根据ID获取考勤统计周期信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, @JaxrsParameterDescribe("统计周期信息ID") @PathParam("id") String id) {
+	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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "根据ID获取考勤统计周期信息发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "根据ID获取考勤统计周期信息发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据登录的用户查询合适的考勤统计周期信息", action = ActionCycleDetail.class )
+	@JaxrsMethodDescribe(value = "根据登录的用户查询合适的考勤统计周期信息", action = ActionCycleDetail.class)
 	@GET
 	@Path("cycleDetail/{year}/{month}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response cycleDetail(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("统计年份") @PathParam("year") String year, 
+	public void cycleDetail(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计年份") @PathParam("year") String year,
 			@JaxrsParameterDescribe("统计月份") @PathParam("month") String month) {
 		ActionResult<ActionCycleDetail.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionCycleDetail().execute( request, effectivePerson, year, month );
+				result = new ActionCycleDetail().execute(request, effectivePerson, year, month);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有系统配置信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有系统配置信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "新建或者更新考勤统计周期信息", action = ActionSave.class )
+	@JaxrsMethodDescribe(value = "新建或者更新考勤统计周期信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有系统配置信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有系统配置信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除考勤统计周期信息", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除考勤统计周期信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, @JaxrsParameterDescribe("统计周期信息ID") @PathParam("id") String id) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计周期信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有系统配置信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有系统配置信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 51 - 47
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatisticrequirelog/AttendanceStatisticRequireLogAction.java

@@ -10,9 +10,10 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.ExceptionAttendanceProcess;
@@ -27,101 +28,104 @@ 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("attendancestatisticrequirelog")
 @JaxrsDescribe("考勤统计需求信息管理服务")
-public class AttendanceStatisticRequireLogAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( AttendanceStatisticRequireLogAction.class );
-	
-	@JaxrsMethodDescribe( value = "获取所有考勤统计需求信息", action = ActionListAll.class )
+public class AttendanceStatisticRequireLogAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(AttendanceStatisticRequireLogAction.class);
+
+	@JaxrsMethodDescribe(value = "获取所有考勤统计需求信息", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
-	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8 )
-	@Consumes( MediaType.APPLICATION_JSON )
-	public Response listAllAttendanceStatisticRequireLog(@Context HttpServletRequest request ) {
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listAllAttendanceStatisticRequireLog(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有考勤统计需求信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有考勤统计需求信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID获取考勤统计需求信息", action = ActionGet.class )
+
+	@JaxrsMethodDescribe(value = "根据ID获取考勤统计需求信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, @JaxrsParameterDescribe("统计需求信息ID") @PathParam("id") String id) {
+	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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "根据ID获取考勤统计需求信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "根据ID获取考勤统计需求信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "新建或者更新考勤统计需求信息", action = ActionSave.class )
+
+	@JaxrsMethodDescribe(value = "新建或者更新考勤统计需求信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "新建或者更新考勤统计需求信息发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "新建或者更新考勤统计需求信息发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID删除考勤统计需求信息", action = ActionDelete.class )
+
+	@JaxrsMethodDescribe(value = "根据ID删除考勤统计需求信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, @JaxrsParameterDescribe("统计需求信息ID") @PathParam("id") String id) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("统计需求信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "根据ID删除考勤统计需求信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "根据ID删除考勤统计需求信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 53 - 47
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendanceworkdayconfig/AttendanceWorkDayConfigAction.java

@@ -11,9 +11,10 @@ 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.ExceptionAttendanceProcess;
@@ -32,119 +33,124 @@ import com.x.base.core.project.logger.LoggerFactory;
 @JaxrsDescribe("节假日工作日配置信息管理服务")
 public class AttendanceWorkDayConfigAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(AttendanceWorkDayConfigAction.class);
+	private static Logger logger = LoggerFactory.getLogger(AttendanceWorkDayConfigAction.class);
 
-	@JaxrsMethodDescribe( value = "获取所有节假日配置列表信息", action = ActionListAll.class )
+	@JaxrsMethodDescribe(value = "获取所有节假日配置列表信息", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllAttendanceWorkDayConfig(@Context HttpServletRequest request) {
+	public void listAllAttendanceWorkDayConfig(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有节假日配置列表信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有节假日配置列表信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据条件获取节假日配置列表", action = ActionListWithFilter.class )
+	@JaxrsMethodDescribe(value = "根据条件获取节假日配置列表", action = ActionListWithFilter.class)
 	@PUT
 	@Path("filter")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listWithFilter(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void listWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<List<ActionListWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListWithFilter().execute( request, effectivePerson, jsonElement );
+				result = new ActionListWithFilter().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "新建或者更新考勤统计需求信息发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "新建或者更新考勤统计需求信息发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID获取节假日配置信息", action = ActionGet.class )
+	@JaxrsMethodDescribe(value = "根据ID获取节假日配置信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, @JaxrsParameterDescribe("节假日配置信息ID") @PathParam("id") String id) {
+	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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "根据ID获取考勤统计需求信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "根据ID获取考勤统计需求信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "新建或者更新节假日配置信息", action = ActionSave.class )
+	@JaxrsMethodDescribe(value = "新建或者更新节假日配置信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "新建或者更新考勤统计需求信息发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "新建或者更新考勤统计需求信息发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除节假日配置信息", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除节假日配置信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, @JaxrsParameterDescribe("节假日配置信息ID") @PathParam("id") String id) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("节假日配置信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "根据ID删除考勤统计需求信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "根据ID删除考勤统计需求信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 39 - 82
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/fileimport/AttendanceDetailFileImportAction.java

@@ -6,6 +6,8 @@ import javax.ws.rs.GET;
 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 javax.ws.rs.core.Response;
@@ -27,122 +29,77 @@ import com.x.base.core.project.logger.LoggerFactory;
 @JaxrsDescribe("考勤数据导入服务")
 public class AttendanceDetailFileImportAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(AttendanceDetailFileImportAction.class);
+	private static Logger logger = LoggerFactory.getLogger(AttendanceDetailFileImportAction.class);
 
-	@JaxrsMethodDescribe( value = "获取指定导入文件的操作状态", action = ActionGetFileOptStatusWithFile.class )
+	@JaxrsMethodDescribe(value = "获取指定导入文件的操作状态", action = ActionGetFileOptStatusWithFile.class)
 	@GET
-	@Path( "getStatus/{file_id}" )
+	@Path("getStatus/{file_id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response getStatus(@Context HttpServletRequest request, @JaxrsParameterDescribe("导入文件信息ID") @PathParam("file_id") String file_id) {
+	public void getStatus(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("导入文件信息ID") @PathParam("file_id") String file_id) {
 		ActionResult<StatusImportFileDetail> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGetFileOptStatusWithFile().execute( request, effectivePerson, file_id );
-				if( result.getData() != null ) {
-					result.getData().setDetailList( null );
+				result = new ActionGetFileOptStatusWithFile().execute(request, effectivePerson, file_id);
+				if (result.getData() != null) {
+					result.getData().setDetailList(null);
 				}
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有节假日配置列表信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有节假日配置列表信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "获取指定导入文件的操作状态,包括检查数据列表", action = ActionGetFileOptStatusWithFile.class )
+
+	@JaxrsMethodDescribe(value = "获取指定导入文件的操作状态,包括检查数据列表", action = ActionGetFileOptStatusWithFile.class)
 	@GET
-	@Path( "getStatus/{file_id}/detail" )
+	@Path("getStatus/{file_id}/detail")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response getStatusDetail(@Context HttpServletRequest request, @JaxrsParameterDescribe("导入文件信息ID") @PathParam("file_id") String file_id) {
+	public void getStatusDetail(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("导入文件信息ID") @PathParam("file_id") String file_id) {
 		ActionResult<StatusImportFileDetail> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGetFileOptStatusWithFile().execute( request, effectivePerson, file_id );
+				result = new ActionGetFileOptStatusWithFile().execute(request, effectivePerson, file_id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有节假日配置列表信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有节假日配置列表信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "获取系统的导入文件操作状态", action = ActionGetSystemImportOptStatus.class )
+
+	@JaxrsMethodDescribe(value = "获取系统的导入文件操作状态", action = ActionGetSystemImportOptStatus.class)
 	@GET
 	@Path("getStatus/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response getStatusAll(@Context HttpServletRequest request ) {
+	public void getStatusAll(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<ActionGetSystemImportOptStatus.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGetSystemImportOptStatus().execute( request, effectivePerson );
+				result = new ActionGetSystemImportOptStatus().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有节假日配置列表信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有节假日配置列表信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-//	@HttpMethodDescribe(value = "检查需要导入的数据文件", response = CacheImportFileStatus.class)
-//	@GET
-//	@Path("check/{file_id}")
-//	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
-//	@Consumes(MediaType.APPLICATION_JSON)
-//	public Response checkDataFile(@Context HttpServletRequest request, 
-//			@JaxrsParameterDescribe("导入文件信息ID") @PathParam("file_id") String file_id) {
-//		ActionResult<CacheImportFileStatus> result = new ActionResult<>();
-//		EffectivePerson effectivePerson = this.effectivePerson(request);
-//		Boolean check = true;
-//
-//		if(check){
-//			try {
-//				result = new ActionCheckDataImportFile().execute( request, effectivePerson, file_id );
-//			} catch (Exception e) {
-//				result = new ActionResult<>();
-//				Exception exception = new ExceptionAttendanceProcess( e, "系统检查需要导入的数据文件时发生异常!" );
-//				result.error( exception );
-//				logger.error( e, effectivePerson, request, null);
-//			}	
-//		}
-//		return ResponseFactory.getDefaultActionResultResponse(result);
-//	}
-//
-//	@HttpMethodDescribe(value = "导入数据文件", response = WrapOutId.class)
-//	@GET
-//	@Path("import/{file_id}")
-//	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
-//	@Consumes(MediaType.APPLICATION_JSON)
-//	public Response importDataFile(@Context HttpServletRequest request, 
-//			@JaxrsParameterDescribe("导入文件信息ID") @PathParam("file_id") String file_id) {
-//		ActionResult<List<DateRecord>> result = new ActionResult<>();
-//		EffectivePerson effectivePerson = this.effectivePerson(request);
-//		Boolean check = true;
-//
-//		if(check){
-//			try {
-//				result = new ActionImportDateInFile().execute( request, effectivePerson, file_id );
-//			} catch (Exception e) {
-//				result = new ActionResult<>();
-//				Exception exception = new ExceptionAttendanceProcess( e, "系统导入数据文件时发生异常!" );
-//				result.error( exception );
-//				logger.error( e, effectivePerson, request, null);
-//			}	
-//		}
-//		return ResponseFactory.getDefaultActionResultResponse(result);
-//	}
+
 }

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

@@ -11,9 +11,10 @@ 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.ExceptionAttendanceProcess;
@@ -28,131 +29,130 @@ 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("attendanceselfholiday")
 @JaxrsDescribe("员工休假申请信息管理服务")
-public class AttendanceSelfHolidayAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( AttendanceSelfHolidayAction.class );
+public class AttendanceSelfHolidayAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(AttendanceSelfHolidayAction.class);
 
-	@JaxrsMethodDescribe( value = "获取所有员工休假申请信息信息", action = ActionListAll.class )
+	@JaxrsMethodDescribe(value = "获取所有员工休假申请信息信息", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllAttendanceSelfHoliday(@Context HttpServletRequest request ) {
+	public void listAllAttendanceSelfHoliday(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有员工休假申请信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有员工休假申请信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "新建或者更新员工休假申请信息", action = ActionSave.class )
+
+	@JaxrsMethodDescribe(value = "新建或者更新员工休假申请信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "新建或者更新员工休假申请信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "新建或者更新员工休假申请信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除员工休假申请信息信息", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除员工休假申请信息信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("员工请假信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "根据ID删除员工休假申请信息信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "根据ID删除员工休假申请信息信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "列示满足过滤条件员工休假申请信息信息,下一页", action = ActionListNextWithFilter.class )
+
+	@JaxrsMethodDescribe(value = "列示满足过滤条件员工休假申请信息信息,下一页", action = ActionListNextWithFilter.class)
 	@PUT
 	@Path("filter/list/{id}/next/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listNextWithFilter(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listNextWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListNextWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListNextWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListNextWithFilter().execute(request, effectivePerson, id, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "列示满足过滤条件员工休假申请信息信息,下一页时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "列示满足过滤条件员工休假申请信息信息,下一页时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示满足过滤条件员工休假申请信息信息,上一页", action = ActionListPrevWithFilter.class )
+	@JaxrsMethodDescribe(value = "列示满足过滤条件员工休假申请信息信息,上一页", action = ActionListPrevWithFilter.class)
 	@PUT
 	@Path("filter/list/{id}/prev/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listPrevWithFilter(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id, 
-			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement) {
+	public void listPrevWithFilter(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("上一页最后一条信息ID") @PathParam("id") String id,
+			@JaxrsParameterDescribe("每页显示的条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListPrevWithFilter.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListPrevWithFilter().execute( request, effectivePerson, id, count, jsonElement );
+				result = new ActionListPrevWithFilter().execute(request, effectivePerson, id, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "列示满足过滤条件员工休假申请信息信息,上一页时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "列示满足过滤条件员工休假申请信息信息,上一页时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 23 - 20
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/selfholiday/AttendanceSelfHolidaySimpleAction.java

@@ -7,9 +7,10 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.ExceptionAttendanceProcess;
@@ -27,50 +28,52 @@ import com.x.base.core.project.logger.LoggerFactory;
 @JaxrsDescribe("员工休假申请信息管理服务")
 public class AttendanceSelfHolidaySimpleAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(AttendanceSelfHolidaySimpleAction.class);
+	private static Logger logger = LoggerFactory.getLogger(AttendanceSelfHolidaySimpleAction.class);
 
-	@JaxrsMethodDescribe( value = "新建或者更新员工休假申请信息", action = ActionSave.class )
+	@JaxrsMethodDescribe(value = "新建或者更新员工休假申请信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "新建或者更新员工休假申请信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "新建或者更新员工休假申请信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据流程文档ID删除员工休假申请数据对象", action = ActionDeleteByWfDocId.class )
+	@JaxrsMethodDescribe(value = "根据流程文档ID删除员工休假申请数据对象", action = ActionDeleteByWfDocId.class)
 	@DELETE
 	@Path("docId/{docId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response deleteByWfDocId(@Context HttpServletRequest request, @PathParam("docId") String docId) {
+	public void deleteByWfDocId(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@PathParam("docId") String docId) {
 		ActionResult<ActionDeleteByWfDocId.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDeleteByWfDocId().execute( request, effectivePerson, docId );
+				result = new ActionDeleteByWfDocId().execute(request, effectivePerson, docId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "根据流程文档ID删除员工休假申请信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "根据流程文档ID删除员工休假申请信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 4 - 3
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/uuid/UUIDAction.java

@@ -9,9 +9,10 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 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 javax.ws.rs.core.Response;
 
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
@@ -37,7 +38,7 @@ public class UUIDAction extends StandardJaxrsAction {
 	@Path("random")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response getUUID(@Context HttpServletRequest request) {
+	public void getUUID(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<List<String>> result = new ActionResult<>();
 		List<String> data = new ArrayList<String>();
 		String uuid = null;
@@ -50,6 +51,6 @@ public class UUIDAction extends StandardJaxrsAction {
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 42 - 39
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/workplace/AttendanceWorkPlaceAction.java

@@ -10,9 +10,10 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.attendance.assemble.control.jaxrs.ExceptionAttendanceProcess;
@@ -31,98 +32,100 @@ import com.x.base.core.project.logger.LoggerFactory;
 @JaxrsDescribe("工作区域信息管理服务")
 public class AttendanceWorkPlaceAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(AttendanceWorkPlaceAction.class);
-	
-	@JaxrsMethodDescribe( value = "新建或者更新工作区域信息", action = ActionSave.class )
+	private static Logger logger = LoggerFactory.getLogger(AttendanceWorkPlaceAction.class);
+
+	@JaxrsMethodDescribe(value = "新建或者更新工作区域信息", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "新建或者更新工作区域信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "新建或者更新工作区域信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "获取所有工作区域信息列表", action = ActionListAll.class )
+	@JaxrsMethodDescribe(value = "获取所有工作区域信息列表", action = ActionListAll.class)
 	@GET
 	@Path("list/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllAttendanceWorkPlace(@Context HttpServletRequest request) {
+	public void listAllAttendanceWorkPlace(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionListAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListAll().execute( request, effectivePerson );
+				result = new ActionListAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "获取所有工作区域信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "获取所有工作区域信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID获取指定工作区域信息", action = ActionGet.class )
+	@JaxrsMethodDescribe(value = "根据ID获取指定工作区域信息", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest 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);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "根据ID获取指定工作区域信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "根据ID获取指定工作区域信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除指定工作区域信息", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除指定工作区域信息", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("工作区域配置信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionAttendanceProcess( e, "根据ID删除指定工作区域信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionAttendanceProcess(e, "根据ID删除指定工作区域信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 17 - 10
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceAppealInfoServiceAdv.java

@@ -1,10 +1,5 @@
 package com.x.attendance.assemble.control.service;
 
-import java.util.Date;
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-
 import com.x.attendance.assemble.common.date.DateOperation;
 import com.x.attendance.assemble.control.Business;
 import com.x.attendance.assemble.control.jaxrs.AppealConfig;
@@ -16,6 +11,10 @@ import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.annotation.CheckPersistType;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Date;
+import java.util.List;
 
 public class AttendanceAppealInfoServiceAdv {
 	
@@ -58,7 +57,9 @@ public class AttendanceAppealInfoServiceAdv {
 
 	/**
 	 * 根据打卡信息以及系统相关配置,获取申诉信息处理人
-	 * @param attendanceAppealInfo
+	 * @param personName
+	 * @param personUnitName
+	 * @param identity
 	 * @return
 	 * @throws Exception
 	 */
@@ -88,10 +89,12 @@ public class AttendanceAppealInfoServiceAdv {
 		}
 		return getAppealProcessPerson( personName, appeal_auditor_type, appeal_auditor_value, personUnitName, identity );
 	}
-	
+
 	/**
 	 * 根据打卡信息以及系统相关配置,获取申诉信息复核人
-	 * @param attendanceAppealInfo
+	 * @param personName
+	 * @param personUnitName
+	 * @param identity
 	 * @return
 	 * @throws Exception
 	 */
@@ -121,10 +124,14 @@ public class AttendanceAppealInfoServiceAdv {
 		}
 		return getAppealProcessPerson( personName, appeal_checker_type, appeal_checker_value, personUnitName, identity );
 	}
-	
+
 	/**
 	 * 根据打卡信息以及系统相关配置,获取申诉信息处理人
-	 * @param attendanceAppealInfo
+	 * @param personName
+	 * @param auditorType
+	 * @param auditorTypeValue
+	 * @param personUnitName
+	 * @param identity
 	 * @return
 	 * @throws Exception
 	 */

+ 442 - 70
o2server/x_attendance_assemble_control/src/main/webapp/jest/describe.js

@@ -183,23 +183,31 @@ Describe.createSampleMootools = function(m) {
 		        strSample =  "var data = {};" + "\n";
 			if (m.ins && m.ins.length > 0) {
 				$.each(m.ins, function(ii, i) {
-					switch (i.type) {
-					default:
-						if (i.isBaseType) {
-							if (i.isCollection) {
-								  strSample += 'data["'+i.name+'"] = ["参数1"];' + "\n";
+							switch (i.type) {
+						default:
+							if (i.isBaseType) {
+								if (i.isCollection) {
+									  strSample += '       data["'+i.name+'"] = ["参数1"];' + "\n";
+								} else {
+									  strSample += '       data["'+i.name+'"] = "参数";' + "\n";
+								}
 							} else {
-								  strSample += 'data["'+i.name+'"] = "参数";' + "\n";
+									if(i.isCollection){
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   strSample += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+										  }else{
+											   strSample += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+										  }
+										  
+										}else{
+										  strSample += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
+									}else{
+										strSample += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
+									}
 							}
-						} else {
-							     // strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								 if(i.isCollection){
-									strSample += 'data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
-								}else{
-									strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								}
 						}
-					}
 				});
 			} else if (m.useJsonElementParameter) {
 				strSample += 'data = {"参数1":"value1","参数2":"value2"};' +"\n";
@@ -285,22 +293,30 @@ Describe.createSampleJSO2= function(m) {
 			if (m.ins && m.ins.length > 0) {
 				$.each(m.ins, function(ii, i) {
 					switch (i.type) {
-					default:
-						if (i.isBaseType) {
-							if (i.isCollection) {
-								  strSample += 'data["'+i.name+'"] = ["参数1"];' + "\n";
+						default:
+							if (i.isBaseType) {
+								if (i.isCollection) {
+									  strSample += '       data["'+i.name+'"] = ["参数1"];' + "\n";
+								} else {
+									  strSample += '       data["'+i.name+'"] = "参数";' + "\n";
+								}
 							} else {
-								  strSample += 'data["'+i.name+'"] = "参数";' + "\n";
+									if(i.isCollection){
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   strSample += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+										  }else{
+											   strSample += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+										  }
+										  
+										}else{
+										  strSample += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
+									}else{
+										strSample += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
+									}
 							}
-						} else {
-							           // strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								if(i.isCollection){
-									strSample += 'data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
-								}else{
-									strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								}
 						}
-					}
 				});
 			} else if (m.useJsonElementParameter) {
 				strSample += 'data = {"参数1":"value1","参数2":"value2"};' +"\n";
@@ -365,23 +381,31 @@ Describe.createSampleO2= function(m) {
 		  strSample =  "var data = {};" + "\n";
 			if (m.ins && m.ins.length > 0) {
 				$.each(m.ins, function(ii, i) {
-					switch (i.type) {
-					default:
-						if (i.isBaseType) {
-							if (i.isCollection) {
-								  strSample += 'data["'+i.name+'"] = ["参数1"];' + "\n";
+						switch (i.type) {
+						default:
+							if (i.isBaseType) {
+								if (i.isCollection) {
+									  strSample += '       data["'+i.name+'"] = ["参数1"];' + "\n";
+								} else {
+									  strSample += '       data["'+i.name+'"] = "参数";' + "\n";
+								}
 							} else {
-								  strSample += 'data["'+i.name+'"] = "参数";' + "\n";
+									if(i.isCollection){
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   strSample += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+										  }else{
+											   strSample += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+										  }
+										  
+										}else{
+										  strSample += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
+									}else{
+										strSample += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
+									}
 							}
-						} else {
-							           // strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								if(i.isCollection){
-									strSample += 'data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
-								}else{
-									strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								}
 						}
-					}
 				});
 			} else if (m.useJsonElementParameter) {
 				strSample += 'data = {"参数1":"value1","参数2":"value2"};' +"\n";
@@ -449,24 +473,31 @@ Describe.createSample= function(m) {
 			if (m.ins && m.ins.length > 0) {
 				strSample =  "var data = {};" + "\n";
 				$.each(m.ins, function(ii, i) {
-					switch (i.type) {
-					default:
-						if (i.isBaseType) {
-							if (i.isCollection) {
-								  strSample += '   data["'+i.name+'"] = ["参数1"];' + "\n";
+						switch (i.type) {
+						default:
+							if (i.isBaseType) {
+								if (i.isCollection) {
+									  strSample += '       data["'+i.name+'"] = ["参数1"];' + "\n";
+								} else {
+									  strSample += '       data["'+i.name+'"] = "参数";' + "\n";
+								}
 							} else {
-								  strSample += '   data["'+i.name+'"] = "参数";' + "\n";
+									if(i.isCollection){
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   strSample += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+										  }else{
+											   strSample += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+										  }
+										  
+										}else{
+										  strSample += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
+									}else{
+										strSample += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
+									}
 							}
-						} else {
-								if(i.isCollection){
-									strSample += '   data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
-								}else{
-									strSample += '   data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								}
-														
-						
 						}
-					}
 				});
 			} else if (m.useJsonElementParameter) {
 				strSample += '    data = {"参数1":"value1","参数2":"value2"};' +"\n";
@@ -561,12 +592,21 @@ Describe.createSampleCommon= function(m,className) {
 								}
 							} else {
 									if(i.isCollection){
-										body += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   body += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+											   body +=(i.fieldSample ? "  "+'<span style="color:red">//注解:'+i.fieldSample +'</span>\n':"");
+										  }else{
+											   body += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+											   body +=(i.fieldSample ? "  "+'<span style="color:red">//注解:'+i.fieldSample +'</span>\n':"");
+										  }
+										  
+										}else{
+										  body += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
 									}else{
 										body += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
 									}
-															
-							
 							}
 						}
 					});
@@ -627,14 +667,16 @@ Describe.createSampleCommon= function(m,className) {
 		} 
    return  strSample ;		
    }
+   
 Describe.prototype = {
 	"load" : function() {
 		var str = '<ul>';
 		$.getJSON('../describe/describe.json?rd=' + Math.random(), function(json) {
+			Describe.json = json;
 			$.each(json.jaxrs, function(ji, j) {
 				str += '<li xtype="menu" ' + 'style="margin-top: 30px;font-size:14px;font-weight:bold;"title="' +'" >' + j.name + ' <span style="font-style:italic">(' + j.description+ ')</span>';
 				$.each(j.methods, function(mi, m) {
-					str += '<ul><li xtype="li"  style="margin-top: 10px;margin-left:-24px;font-size:12px; font-weight:normal;line-height:18px" ><a id ="' + j.name + '_' + m.name + '" href="#"><b>' + m.name+'</b><br/><span style="color: #666666;">-'+ m.description + '</span>' + '</a></li></ul>';
+					str += '<ul><li xtype="li"  style="margin-top: 10px;margin-left:-24px;font-size:12px; font-weight:normal;line-height:18px" ><a  title="' + m.path + '"id ="' + j.name + '_' + m.name + '" href="#"><b>' + m.name+'</b><br/><span style="color: #666666;">-'+ m.description + '</span>' + '</a></li></ul>';
 				});
 				str += '</li>'
 			});
@@ -712,12 +754,13 @@ Describe.prototype = {
 									txt += '</fieldset>';
 								}
 								
-								if (m.ins && m.ins.length > 0) {
+							  if (m.ins && m.ins.length > 0) {
 									txt += '<fieldset id="ins"><legend>In</legend>';
 									txt += '<table>';
 									$.each(m.ins, function(ii, i) {
 										if (i.isCollection) {
-											txt += '<tr><td><textarea id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':' + i.description
+											
+											txt += '<tr><td><textarea id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':' + i.description +(i.fieldValue ? "  "+'。数据格式:<span style="color:red">'+i.fieldValue +'</span>':"") + (i.fieldSample ? "  "+'<span style="color:red">'+i.fieldSample +'</span>':"") 
 											'</td></tr>';
 										} else {
 											txt += '<tr><td><input type="text" id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':'
@@ -730,6 +773,7 @@ Describe.prototype = {
 								}
 								
 								
+								
 								if (m.useJsonElementParameter) {
 									txt += '<fieldset><legend>JsonElement</legend>';
 									txt += '<table><tr><td>';
@@ -898,10 +942,7 @@ Describe.prototype = {
 								
 								debugger;
 							$('#Sample').html("<div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;color: #1E7ACE;\">\n平台推荐脚本样例</span>\n\n"+ Describe.createSampleCommon(m,j.name)+ "</div><div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n前台脚本样例</span>\n\n"+ Describe.createSampleJSO2(m)+ "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\n后台脚本样例</span>\n\n" + Describe.createSampleO2(m) + "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\nmootools样例</span>\n\n"+Describe.createSampleMootools(m)+"</div><div  style=\"line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\njquery样例</span>\n\n<span style=\"\">"+ Describe.createSample(m)+"</span></div>");
-							
-							 /*
-							 $('#Sample').html("<div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n前台脚本样例</span>\n\n"+ Describe.createSampleJSO2(m)+ "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\n后台脚本样例</span>\n\n" + Describe.createSampleO2(m) + "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\nmootools样例</span>\n\n"+Describe.createSampleMootools(m)+"</div><div  style=\"line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\njquery样例</span>\n\n<span style=\"\">"+ Describe.createSample(m)+"</span></div>");
-							 */
+
 							});
 				});
 			});
@@ -932,7 +973,7 @@ Describe.prototype = {
 			if(i!=0){
 			  // $(this).children().toggle();
 			  $(this).children().each(function(i){
-							debugger;
+					
 							if(this.tagName != "SPAN"){
 							$(this).toggle();
 							}
@@ -941,7 +982,338 @@ Describe.prototype = {
 			}
 			);
 		});
-		
-	
+	},
+  "search":function(strKey) {
+	var str = '<ul>';
+	var strTemp = "";
+	    $.each(Describe.json.jaxrs, function(ji, j) {
+			    var flag = false;
+				strTemp = '<li xtype="menu" ' + 'style="margin-top: 30px;font-size:14px;font-weight:bold;"title="' +'" >' + j.name + ' <span style="font-style:italic">(' + j.description+ ')</span>';
+				$.each(j.methods, function(mi, m) {
+					if((m.name.toUpperCase().indexOf(strKey.toUpperCase())>-1) || (m.description.toUpperCase().indexOf(strKey.toUpperCase())>-1) || (m.path.toUpperCase().indexOf(strKey.toUpperCase())>-1)){
+					flag = true;
+					
+					var tempKey =  strKey;
+					var tempReplace = "<span style='color: #f31313'>"+ strKey + "</span>";
+					 debugger;
+					var strDescripthion = m.description.replace(tempKey, tempReplace);
+					var strName = m.name.replace(tempKey, tempReplace);
+					var strPath = m.path;
+					var startPost = m.name.toUpperCase().indexOf(strKey.toUpperCase());
+					if(startPost>-1){
+						tempReplace = m.name.substr(startPost,tempKey.length);
+						tempKey = tempReplace;
+						tempReplace = "<span style='color: #f31313'>"+ tempReplace + "</span>";
+						strName = m.name.replace(tempKey, tempReplace);
+					}
+					tempKey =  strKey;
+					startPost = m.description.toUpperCase().indexOf(strKey.toUpperCase());
+					if(startPost>-1){
+						tempReplace = m.description.substr(startPost,tempKey.length);
+						tempKey =  tempReplace;
+						tempReplace = "<span style='color: #f31313'>"+ tempReplace + "</span>";
+						strDescripthion = m.description.replace(tempKey, tempReplace);
+					}
+					
+					
+					strTemp += '<ul><li xtype="li"  style="margin-top: 10px;margin-left:-24px;font-size:12px; font-weight:normal;line-height:18px" ><a title = "' + strPath+ '"  id ="' + j.name + '_' + m.name + '" href="#"><b>' + strName+'</b><br/><span style="color: #666666;">-'+strDescripthion + '</span>' + '</a></li></ul>';
+					}
+				});
+				strTemp += '</li>';
+				
+				if(flag == true){
+				   str += strTemp;
+				}
+			});
+			str += '</ul>';
+			$("#menu").html(str);
+			this.display(Describe.json);
+  },
+   "display":function(json) {
+			$.each(json.jaxrs, function(ji, j) {
+				$.each(j.methods, function(mi, m) {
+					$('#' + j.name + '_' + m.name).click(
+							function() {
+								$('#result').html('');
+								var sample = "";
+								var txt = '<fieldset id="method"><legend>Method</legend>';
+								txt += '<table>';
+								txt += '<tr><td style="width:100px;">name:</td><td><a href="../describe/sources/' + m.className.replace(/\./g, '/') + '.java">' + m.name + '</a></td></tr>';
+								txt += '<tr><td>path:</td><td>' + m.path + '</td></tr>';
+								txt += '<tr><td>type:</td><td>' + m.type + '</td></tr>';
+								txt += '<tr><td>description:</td><td>' + m.description + '</td></tr>';
+								txt += '</table>';
+								txt += '<button id="' + m.name + "_" + m.type + '">' + m.type + '</button>';
+								txt += '<div id="url">&nbsp;</div>';
+								txt += '</fieldset>';
+								if (m.pathParameters && m.pathParameters.length > 0) {
+									txt += '<fieldset id="pathParameters"><legend>Path Parameter</legend>';
+									txt += '<table >';
+									$.each(m.pathParameters, function(pi, p) {
+										if (m.name == 'listNext' || m.name == 'listPrev') {
+											switch (p.name) {
+											case 'flag':
+											case 'id':
+												txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid" value="(0)"/></td><td>' + p.name
+														+ ':' + p.description + '</td></tr>';
+												break;
+											case 'count':
+												txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid" value="20"/></td><td>' + p.name + ':'
+														+ p.description + '</td></tr>';
+												break;
+											default:
+												txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + p.name + ':'
+														+ p.description + '</td></tr>';
+												break
+											}
+										} else {
+											txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + p.name + ':'
+													+ p.description + '</td></tr>';
+										}
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								if (m.formParameters && m.formParameters.length > 0) {
+									txt += '<fieldset id="formParameters"><legend>Form Parameter</legend>';
+									txt += '<table >';
+									$.each(m.formParameters, function(pi, p) {
+										if (p.type == "File") {
+											txt += '<tr><td><input type="file" name="' + p.name + '" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>'
+													+ p.name + ':' + p.description + '</td></tr>';
+										} else {
+											txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + p.name + ':'
+													+ p.description + '</td></tr>';
+										}
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								if (m.queryParameters && m.queryParameters.length > 0) {
+									txt += '<fieldset id="queryParameters"><legend>Query Parameter</legend>';
+									txt += '<table >';
+									$.each(m.queryParameters, function(pi, p) {
+										txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + p.name + ':' + p.description
+												+ '</td></tr>';
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+							  if (m.ins && m.ins.length > 0) {
+									txt += '<fieldset id="ins"><legend>In</legend>';
+									txt += '<table>';
+									$.each(m.ins, function(ii, i) {
+										if (i.isCollection) {
+											
+											txt += '<tr><td><textarea id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':' + i.description +(i.fieldValue ? "  "+'。数据格式:<span style="color:red">'+i.fieldValue +'</span>':"") + (i.fieldSample ? "  "+'<span style="color:red">'+i.fieldSample +'</span>':"") 
+											'</td></tr>';
+										} else {
+											txt += '<tr><td><input type="text" id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':'
+													+ i.description
+											'</td></tr>';
+										}
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								
+								
+								if (m.useJsonElementParameter) {
+									txt += '<fieldset><legend>JsonElement</legend>';
+									txt += '<table><tr><td>';
+									txt += '<textarea id="jsonElement" style="height:300px; width:600px; padding:1px; border:1px #000000 solid"/>';
+									txt += '</td><td>json</td></tr>';
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								if (m.useStringParameter) {
+									txt += '<fieldset><legend>String</legend>';
+									txt += '<table><tr><td>';
+									txt += '<textarea id="string" style="height:300px; width:600px; padding:1px; border:1px #000000 solid"/>';
+									txt += '</td><td>string</td></tr>';
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								if (m.outs && m.outs.length > 0) {
+									txt += '<fieldset id="outs"><legend>Out</legend>';
+									txt += '<table>';
+									$.each(m.outs, function(oi, o) {
+										txt += '<tr><td style="width: 160px;">' + o.name + '</td><td style="width: 90px;">' + o.type + '</td><td style="width: 90px;">' + (o.isCollection ? 'multi' : 'single') + '</td><td style="width: 90px;">' + o.description + '</td><td id="out_'
+												+ o.name + '_out">&nbsp;</td></tr>';
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								$('#content').html(txt);
+								
+								$('#' + m.name + '_' + m.type, '#method').click(function() {
+									var address = '../' + m.path;
+									if (m.pathParameters && m.pathParameters.length > 0) {
+										$.each(m.pathParameters, function(pi, p) {
+											address = address.replace('{' + p.name + '}', encodeURIComponent($('#' + p.name, '#pathParameters').val()));
+										});
+									}
+									if (m.queryParameters && m.queryParameters.length > 0) {
+										$.each(m.queryParameters, function(pi, p) {
+											var query = p.name + '=' + encodeURIComponent($('#' + p.name, '#queryParameters').val());
+											if (address.indexOf("?") > 0) {
+												address += '&' + query;
+											} else {
+												address += '?' + query;
+											}
+										});
+									}
+									if (m.contentType.indexOf('application/json') > -1) {
+										switch (m.type) {
+										case 'POST':
+											var data = {};
+											if (m.ins && m.ins.length > 0) {
+												$.each(m.ins, function(ii, i) {
+													switch (i.type) {
+													default:
+														if (i.isBaseType) {
+															if (i.isCollection) {
+																data[i.name] = Describe.splitValue($('#' + i.name, '#ins').val());
+															} else {
+																data[i.name] = $('#' + i.name, '#ins').val();
+															}
+														} else {
+															//data[i.name] = $.parseJSON($('#' + i.name, '#ins').val());
+															if($('#' + i.name, '#ins').val() == ""){
+																if(i.isCollection){
+																	data[i.name] = [{}];
+																}else{
+																	data[i.name] = {};
+																}
+															}else{
+																data[i.name] = $.parseJSON($('#' + i.name, '#ins').val());
+															}
+														}
+													}
+												});
+											} else if (m.useJsonElementParameter) {
+												data = $.parseJSON($('#jsonElement').val());
+											} else if (m.useStringParameter) {
+												data = $('#string').val();
+											}
+											Describe.doPost(address, m, data);
+											break;
+										case 'PUT':
+											var data = {};
+											if (m.ins && m.ins.length > 0) {
+												$.each(m.ins, function(ii, i) {
+													switch (i.type) {
+													default:
+														if (i.isBaseType) {
+															if (i.isCollection) {
+																data[i.name] = Describe.splitValue($('#' + i.name, '#ins').val());
+															} else {
+																data[i.name] = $('#' + i.name, '#ins').val();
+															}
+														} else {
+															if($('#' + i.name, '#ins').val() == ""){
+																if(i.isCollection){
+																	data[i.name] = [{}];
+																}else{
+																	data[i.name] = {};
+																}
+															}else{
+																data[i.name] = $.parseJSON($('#' + i.name, '#ins').val());
+															}
+														
+														}
+													}
+												});
+											} else if (m.useJsonElementParameter) {
+												data = $.parseJSON($('#jsonElement').val());
+											} else if (m.useStringParameter) {
+												data = $('#string').val();
+											}
+											Describe.doPut(address, m, data);
+											break;
+										case 'GET':
+											Describe.doGet(address, m);
+											break;
+										case 'DELETE':
+											Describe.doDelete(address, m);
+											break;
+										default:
+											break;
+										}
+										
+									} else {
+										switch (m.type) {
+										case 'POST':
+											var formData = new FormData();
+											if (m.formParameters && m.formParameters.length > 0) {
+												$.each(m.formParameters, function(pi, p) {
+													if (p.type == "File") {
+														formData.append(p.name, $('input[type=file]', '#formParameters')[0].files[0]);
+													} else {
+														formData.append(p.name, $('#' + p.name, '#formParameters').val());
+													}
+												});
+											}
+											Describe.doPost(address, m, formData);
+											break;
+										case 'PUT':
+											var formData = new FormData();
+											if (m.formParameters && m.formParameters.length > 0) {
+												$.each(m.formParameters, function(pi, p) {
+													if (p.type == "File") {
+														formData.append(p.name, $('input[type=file]', '#formParameters')[0].files[0]);
+													} else {
+														formData.append(p.name, $('#' + p.name, '#formParameters').val());
+													}
+												});
+											}
+											Describe.doPut(address, m, formData);
+											break;
+										case 'GET':
+											Describe.doGet(address, m);
+											break;
+										case 'DELETE':
+											Describe.doDelete(address, m);
+											break;
+										default:
+											break;
+										}
+									}
+								})
+								
+								debugger;
+							$('#Sample').html("<div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;color: #1E7ACE;\">\n平台推荐脚本样例</span>\n\n"+ Describe.createSampleCommon(m,j.name)+ "</div><div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n前台脚本样例</span>\n\n"+ Describe.createSampleJSO2(m)+ "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\n后台脚本样例</span>\n\n" + Describe.createSampleO2(m) + "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\nmootools样例</span>\n\n"+Describe.createSampleMootools(m)+"</div><div  style=\"line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\njquery样例</span>\n\n<span style=\"\">"+ Describe.createSample(m)+"</span></div>");
+							});
+				});
+			});
+		 
+		  $("[xtype='menu']").click(
+				  function(event) {
+					    if(event.stopPropagation){
+						    event.stopPropagation();
+						  }else{
+						     event.cancelBubble = true;
+						  }
+						$(this).children().each(function(i){
+							debugger;
+							if(this.tagName != "SPAN"){
+							$(this).toggle();
+							}
+						});
+					});
+		  $("[xtype='li']").click( function(event) {
+			    if(event.stopPropagation){
+				    event.stopPropagation();
+				  }else{
+				     event.cancelBubble = true;
+				  }
+			})
 	}
-}
+}

+ 19 - 1
o2server/x_attendance_assemble_control/src/main/webapp/jest/index.html

@@ -68,8 +68,9 @@
 </style>
 	
 <script>
+    var describe;
     $.getScript('./describe.js?rd=' + Math.random()).then(function() {
-		var describe = new Describe();
+		describe = new Describe();
 		describe.load();
     }).catch( function() {
 		alert('get describe error.'); 
@@ -77,6 +78,19 @@
 	
 	$(document).ready(function(){
         var clipboard = new Clipboard("#btn_copy");
+		$('#butSearch').click(function() {
+		var  strKey = $('#inpSearch').val();
+		  if(strKey == ""){
+		  window.location.reload();
+		  }else{
+		   describe.search(strKey);
+		  }
+		})
+		$('#inpSearch').bind('keyup', function(event) {
+       if (event.keyCode == "13") {
+         $('#butSearch').click();
+         }
+       });
 	});	
 </script>
 </head>
@@ -85,6 +99,10 @@
 	<table style="width: 1800px; margin: 0 auto">
 		<tr>
 			<td style="width: 350px;" valign="top">
+				<fieldset>
+					<legend>search</legend>
+					<div><input id="inpSearch" style="width:70%;height: 23px; overflow: auto;"/>&nbsp; <button id="butSearch">search</button></div>
+				</fieldset>
 				<fieldset>
 					<legend>API Menu</legend>
 					<div id="menu" style="height: 850px; overflow: auto;">&nbsp;</div>

+ 1 - 0
o2server/x_base_core_project/pom.xml

@@ -12,6 +12,7 @@
 	<artifactId>x_base_core_project</artifactId>
 	<packaging>jar</packaging>
 	<dependencies>
+
 	</dependencies>
 	<build>
 		<plugins>

+ 103 - 20
o2server/x_base_core_project/src/main/java/com/x/base/core/project/Applications.java

@@ -11,6 +11,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import java.util.zip.CRC32;
 
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -71,11 +72,20 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
 	}
 
 	public ActionResponse getQuery(Class<?> applicationClass, String uri) throws Exception {
-		return this.getQuery(false, applicationClass.getName(), uri);
+		return this.getQuery(false, applicationClass.getName(), uri, null);
+	}
+
+	public ActionResponse getQuery(Class<?> applicationClass, String uri, String seed) throws Exception {
+		return this.getQuery(false, applicationClass.getName(), uri, seed);
 	}
 
 	public ActionResponse getQuery(Boolean xdebugger, Class<?> applicationClass, String uri) throws Exception {
-		return this.getQuery(xdebugger, applicationClass.getName(), uri);
+		return this.getQuery(xdebugger, applicationClass.getName(), uri, null);
+	}
+
+	public ActionResponse getQuery(Boolean xdebugger, Class<?> applicationClass, String uri, String seed)
+			throws Exception {
+		return this.getQuery(xdebugger, applicationClass.getName(), uri, seed);
 	}
 
 	public ActionResponse getQuery(Application application, String uri) throws Exception {
@@ -87,24 +97,43 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
 	}
 
 	public ActionResponse getQuery(String applicationName, String uri) throws Exception {
-		return getQuery(false, applicationName, uri);
+		return getQuery(false, applicationName, uri, null);
 	}
 
-	public ActionResponse getQuery(Boolean xdebugger, String applicationName, String uri) throws Exception {
+	public ActionResponse getQuery(String applicationName, String uri, String seed) throws Exception {
+		return getQuery(false, applicationName, uri, seed);
+	}
+
+	public ActionResponse getQuery(Boolean xdebugger, String applicationName, String uri, String seed)
+			throws Exception {
 		String name = this.findApplicationName(applicationName);
 		if (StringUtils.isEmpty(name)) {
 			throw new Exception("getQuery can not find application with name:" + applicationName + ".");
 		}
-		Application application = this.randomWithWeight(name);
+		Application application = null;
+		if (StringUtils.isEmpty(seed)) {
+			application = this.randomWithWeight(name);
+		} else {
+			application = this.randomWithSeed(name, seed);
+		}
 		return CipherConnectionAction.get(xdebugger, application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri));
 	}
 
 	public ActionResponse deleteQuery(Class<?> applicationClass, String uri) throws Exception {
-		return this.deleteQuery(false, applicationClass.getName(), uri);
+		return this.deleteQuery(false, applicationClass.getName(), uri, null);
+	}
+
+	public ActionResponse deleteQuery(Class<?> applicationClass, String uri, String seed) throws Exception {
+		return this.deleteQuery(false, applicationClass.getName(), uri, seed);
 	}
 
 	public ActionResponse deleteQuery(Boolean xdebugger, Class<?> applicationClass, String uri) throws Exception {
-		return this.deleteQuery(xdebugger, applicationClass.getName(), uri);
+		return this.deleteQuery(xdebugger, applicationClass.getName(), uri, null);
+	}
+
+	public ActionResponse deleteQuery(Boolean xdebugger, Class<?> applicationClass, String uri, String seed)
+			throws Exception {
+		return this.deleteQuery(xdebugger, applicationClass.getName(), uri, seed);
 	}
 
 	public ActionResponse deleteQuery(Application application, String uri) throws Exception {
@@ -117,26 +146,45 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
 	}
 
 	public ActionResponse deleteQuery(String applicationName, String uri) throws Exception {
-		return deleteQuery(false, applicationName, uri);
+		return deleteQuery(false, applicationName, uri, null);
 	}
 
-	public ActionResponse deleteQuery(Boolean xdebugger, String applicationName, String uri) throws Exception {
+	public ActionResponse deleteQuery(String applicationName, String uri, String seed) throws Exception {
+		return deleteQuery(false, applicationName, uri, seed);
+	}
+
+	public ActionResponse deleteQuery(Boolean xdebugger, String applicationName, String uri, String seed)
+			throws Exception {
 		String name = this.findApplicationName(applicationName);
 		if (StringUtils.isEmpty(name)) {
 			throw new Exception("deleteQuery can not find application with name:" + applicationName + ".");
 		}
-		Application application = this.randomWithWeight(name);
+		Application application = null;
+		if (StringUtils.isEmpty(seed)) {
+			application = this.randomWithWeight(name);
+		} else {
+			application = this.randomWithSeed(name, seed);
+		}
 		return CipherConnectionAction.delete(xdebugger,
 				application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri));
 	}
 
 	public ActionResponse postQuery(Class<?> applicationClass, String uri, Object body) throws Exception {
-		return this.postQuery(false, applicationClass.getName(), uri, body);
+		return this.postQuery(false, applicationClass.getName(), uri, body, null);
+	}
+
+	public ActionResponse postQuery(Class<?> applicationClass, String uri, Object body, String seed) throws Exception {
+		return this.postQuery(false, applicationClass.getName(), uri, body, seed);
 	}
 
 	public ActionResponse postQuery(Boolean xdebugger, Class<?> applicationClass, String uri, Object body)
 			throws Exception {
-		return this.postQuery(xdebugger, applicationClass.getName(), uri, body);
+		return this.postQuery(xdebugger, applicationClass.getName(), uri, body, null);
+	}
+
+	public ActionResponse postQuery(Boolean xdebugger, Class<?> applicationClass, String uri, Object body, String seed)
+			throws Exception {
+		return this.postQuery(xdebugger, applicationClass.getName(), uri, body, seed);
 	}
 
 	public ActionResponse postQuery(Application application, String uri, Object body) throws Exception {
@@ -150,27 +198,45 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
 	}
 
 	public ActionResponse postQuery(String applicationName, String uri, Object body) throws Exception {
-		return this.postQuery(false, applicationName, uri, body);
+		return this.postQuery(false, applicationName, uri, body, null);
 	}
 
-	public ActionResponse postQuery(Boolean xdebugger, String applicationName, String uri, Object body)
+	public ActionResponse postQuery(String applicationName, String uri, Object body, String seed) throws Exception {
+		return this.postQuery(false, applicationName, uri, body, seed);
+	}
+
+	public ActionResponse postQuery(Boolean xdebugger, String applicationName, String uri, Object body, String seed)
 			throws Exception {
 		String name = this.findApplicationName(applicationName);
 		if (StringUtils.isEmpty(name)) {
 			throw new Exception("postQuery can not find application with name:" + applicationName + ".");
 		}
-		Application application = this.randomWithWeight(name);
+		Application application = null;
+		if (StringUtils.isEmpty(seed)) {
+			application = this.randomWithWeight(name);
+		} else {
+			application = this.randomWithSeed(name, seed);
+		}
 		return CipherConnectionAction.post(xdebugger, application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri),
 				body);
 	}
 
 	public ActionResponse putQuery(Class<?> applicationClass, String uri, Object body) throws Exception {
-		return this.putQuery(false, applicationClass.getName(), uri, body);
+		return this.putQuery(false, applicationClass.getName(), uri, body, null);
+	}
+
+	public ActionResponse putQuery(Class<?> applicationClass, String uri, Object body, String seed) throws Exception {
+		return this.putQuery(false, applicationClass.getName(), uri, body, seed);
 	}
 
 	public ActionResponse putQuery(Boolean xdebugger, Class<?> applicationClass, String uri, Object body)
 			throws Exception {
-		return this.putQuery(xdebugger, applicationClass.getName(), uri, body);
+		return this.putQuery(xdebugger, applicationClass.getName(), uri, body, null);
+	}
+
+	public ActionResponse putQuery(Boolean xdebugger, Class<?> applicationClass, String uri, Object body, String seed)
+			throws Exception {
+		return this.putQuery(xdebugger, applicationClass.getName(), uri, body, seed);
 	}
 
 	public ActionResponse putQuery(Application application, String uri, Object body) throws Exception {
@@ -184,16 +250,25 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
 	}
 
 	public ActionResponse putQuery(String applicationName, String uri, Object body) throws Exception {
-		return this.putQuery(false, applicationName, uri, body);
+		return this.putQuery(false, applicationName, uri, body, null);
+	}
+
+	public ActionResponse putQuery(String applicationName, String uri, Object body, String seed) throws Exception {
+		return this.putQuery(false, applicationName, uri, body, seed);
 	}
 
-	public ActionResponse putQuery(Boolean xdebugger, String applicationName, String uri, Object body)
+	public ActionResponse putQuery(Boolean xdebugger, String applicationName, String uri, Object body, String seed)
 			throws Exception {
 		String name = this.findApplicationName(applicationName);
 		if (StringUtils.isEmpty(name)) {
 			throw new Exception("putQuery can not find application with name:" + applicationName + ".");
 		}
-		Application application = this.randomWithWeight(name);
+		Application application = null;
+		if (StringUtils.isEmpty(seed)) {
+			application = this.randomWithWeight(name);
+		} else {
+			application = this.randomWithSeed(name, seed);
+		}
 		return CipherConnectionAction.put(xdebugger, application.getUrlJaxrsRoot() + CipherConnectionAction.trim(uri),
 				body);
 	}
@@ -247,6 +322,14 @@ public class Applications extends ConcurrentHashMap<String, CopyOnWriteArrayList
 		throw new Exception("randomWithScheduleWeight error: " + className + ".");
 	}
 
+	public Application randomWithSeed(String className, String seed) throws Exception {
+		List<Application> list = this.get(className);
+		CRC32 crc32 = new CRC32();
+		crc32.update(seed.getBytes(DefaultCharset.charset));
+		int idx = (int) crc32.getValue() % list.size();
+		return list.get(idx);
+	}
+
 	public static String joinQueryUri(String... parts) {
 		return Stream.of(parts).map(s -> {
 			try {

+ 11 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/annotation/AuditLog.java

@@ -0,0 +1,11 @@
+package com.x.base.core.project.annotation;
+
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@Inherited
+@Documented
+public @interface AuditLog {
+    String operation();
+}

+ 71 - 3
o2server/x_base_core_project/src/main/java/com/x/base/core/project/annotation/DescribeBuilder.java

@@ -59,9 +59,9 @@ public class DescribeBuilder {
 	public static void main(String[] args) throws IOException {
 
 		File basedir = new File(args[0]);
-
+        System.out.println(args[0]);
 		File sourcesdir = new File(args[1]);
-
+		 System.out.println(args[1]);
 		File dir = new File(basedir, "src/main/webapp/describe");
 
 		FileUtils.forceMkdir(dir);
@@ -84,8 +84,10 @@ public class DescribeBuilder {
 				}
 			}
 			LinkedHashMap<String, List<?>> map = new LinkedHashMap<>();
+			
 			jaxrsClasses = jaxrsClasses.stream().sorted(Comparator.comparing(JaxrsClass::getName))
 					.collect(Collectors.toList());
+			
 			map.put("jaxrs", jaxrsClasses);
 			File file = new File(dir, "describe.json");
 			FileUtils.writeStringToFile(file, XGsonBuilder.toJson(map), DefaultCharset.charset);
@@ -127,6 +129,7 @@ public class DescribeBuilder {
 		}
 		jaxrsClass.setMethods(jaxrsClass.getMethods().stream().sorted(Comparator.comparing(JaxrsMethod::getName))
 				.collect(Collectors.toList()));
+		
 		return jaxrsClass;
 	}
 
@@ -202,12 +205,20 @@ public class DescribeBuilder {
 		jaxrsMethod.setFormParameters(jaxrsMethod.getFormParameters().stream().filter(Objects::nonNull)
 				.sorted(Comparator.comparing(JaxrsFormParameter::getName, Comparator.nullsLast(String::compareTo)))
 				.collect(Collectors.toList()));
-		jaxrsMethod.setQueryParameters(jaxrsMethod.getQueryParameters().stream().filter(Objects::nonNull)
+		/*
+		 jaxrsMethod.setQueryParameters(jaxrsMethod.getQueryParameters().stream().filter(Objects::nonNull)
 				.sorted(Comparator.comparing(JaxrsQueryParameter::getName, Comparator.nullsLast(String::compareTo)))
 				.collect(Collectors.toList()));
+		*/
+		jaxrsMethod.setQueryParameters(jaxrsMethod.getQueryParameters().stream().filter(Objects::nonNull)
+                                      .collect(Collectors.toList()));
+		/*
 		jaxrsMethod.setPathParameters(jaxrsMethod.getPathParameters().stream().filter(Objects::nonNull)
 				.sorted(Comparator.comparing(JaxrsPathParameter::getName, Comparator.nullsLast(String::compareTo)))
 				.collect(Collectors.toList()));
+		*/
+		jaxrsMethod.setPathParameters(jaxrsMethod.getPathParameters().stream().filter(Objects::nonNull)
+				.collect(Collectors.toList()));
 		return jaxrsMethod;
 	}
 
@@ -339,6 +350,16 @@ public class DescribeBuilder {
 					if (StringUtils.containsAny(jaxrsField.getType(), "<String>", "<Boolean>", "<Date>", "<Integer>",
 							"<Double>", "<Long>", "<Float>")) {
 						jaxrsField.setIsBaseType(true);
+					}else {
+						//wwx add 获取类信息
+						FieldTypeDescribe fieldTypeDescribe = o.getAnnotation(FieldTypeDescribe.class);
+						if(null !=fieldTypeDescribe) {
+							jaxrsField.setFieldType(fieldTypeDescribe.fieldType());
+							jaxrsField.setFieldValue(fieldTypeDescribe.fieldValue());
+							jaxrsField.setFieldTypeName(fieldTypeDescribe.fieldTypeName());
+							jaxrsField.setFieldSample(fieldTypeDescribe.fieldSample());
+						}
+
 					}
 				} else {
 					// O2LEE,String[]未被判断为collection导致组织的JSON格式不符合wrapIn要求
@@ -350,6 +371,14 @@ public class DescribeBuilder {
 					if (StringUtils.startsWithAny(jaxrsField.getType(), "String", "Boolean", "Date", "Integer",
 							"Double", "Long", "Float")) {
 						jaxrsField.setIsBaseType(true);
+					}else {
+						FieldTypeDescribe fieldTypeDescribe = o.getAnnotation(FieldTypeDescribe.class);
+						if(null !=fieldTypeDescribe) {
+							jaxrsField.setFieldType(fieldTypeDescribe.fieldType());
+							jaxrsField.setFieldValue(fieldTypeDescribe.fieldValue());
+							jaxrsField.setFieldTypeName(fieldTypeDescribe.fieldTypeName());
+						}
+						
 					}
 				}
 				list.add(jaxrsField);
@@ -622,6 +651,14 @@ public class DescribeBuilder {
 		private Boolean isCollection;
 		private String description;
 		private Boolean isBaseType;
+		
+        //当参数不是基础类型时,记录类型信息
+		private String fieldType;
+		private String fieldValue;
+		private String fieldTypeName;
+		private String fieldSample;
+
+
 
 		public String getName() {
 			return name;
@@ -663,6 +700,37 @@ public class DescribeBuilder {
 			this.isBaseType = isBaseType;
 		}
 
+		public String getFieldType() {
+			return fieldType;
+		}
+
+		public void setFieldType(String fieldTyp) {
+			this.fieldType = fieldTyp;
+		}
+
+		public String getFieldValue() {
+			return fieldValue;
+		}
+
+		public void setFieldValue(String fieldValue) {
+			this.fieldValue = fieldValue;
+		}
+		
+		public String getFieldTypeName() {
+			return fieldTypeName;
+		}
+
+		public void setFieldTypeName(String fieldTypeName) {
+			this.fieldTypeName = fieldTypeName;
+		}
+		
+		public String getFieldSample() {
+			return fieldSample;
+		}
+
+		public void setFieldSample(String fieldSample) {
+			this.fieldSample = fieldSample;
+		}
 	}
 
 	public class JaxrsPathParameter {

+ 20 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/annotation/FieldTypeDescribe.java

@@ -0,0 +1,20 @@
+package com.x.base.core.project.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+@Inherited
+public @interface FieldTypeDescribe {
+	String fieldType();
+	String fieldTypeName();
+	String fieldValue();
+	String fieldSample() default "";
+	
+}

+ 0 - 55
o2server/x_base_core_project/src/main/java/com/x/base/core/project/bean/WrapCopierFactory.java

@@ -18,61 +18,6 @@ public class WrapCopierFactory {
 	private static String SET_PREFIX = "set";
 	private static String IS_PREFIX = "is";
 
-	// public static <T> WrapCopier<T, T> wo(Class<T> origClass, List<String>
-	// includes, List<String> excludes,
-	// boolean ingoreNull) {
-	// try {
-	// List<String> origFieldNames = getAllFieldNames(origClass);
-	// List<String> copyFieldNames = new ArrayList<>();
-	// ListTools.includesExcludes(origFieldNames, includes,
-	// excludes).stream().forEach(s -> {
-	// try {
-	// Field origField = FieldUtils.getField(origClass, s, true);
-	// if (null != origField) {
-	// if (null != MethodUtils.getAccessibleMethod(origClass,
-	// getGetterName(origField),
-	// new Class<?>[] {})) {
-	// if (null != MethodUtils.getAccessibleMethod(origClass,
-	// getSetterName(origField),
-	// new Class<?>[] { origField.getType() })) {
-	// copyFieldNames.add(s);
-	// }
-	// }
-	// }
-	// } catch (Exception e) {
-	// e.printStackTrace();
-	// }
-	// });
-	// List<String> eraseFieldNames = new ArrayList<>();
-	// ListUtils.subtract(origFieldNames, copyFieldNames).stream().forEach(s ->
-	// {
-	// try {
-	// Field origField = FieldUtils.getField(origClass, s, true);
-	// if (null != origField) {
-	// if (null != MethodUtils.getAccessibleMethod(origClass,
-	// getGetterName(origField),
-	// new Class<?>[] {})) {
-	// if (null != MethodUtils.getAccessibleMethod(origClass,
-	// getSetterName(origField),
-	// new Class<?>[] { origField.getType() })) {
-	// eraseFieldNames.add(s);
-	// }
-	// }
-	// }
-	// } catch (Exception e) {
-	// e.printStackTrace();
-	// }
-	// });
-	// WrapCopier<T, T> copier = new WrapCopier<T, T>(new PropertyUtilsBean(),
-	// origClass, origClass,
-	// copyFieldNames, eraseFieldNames, ingoreNull);
-	// return copier;
-	// } catch (Exception e) {
-	// e.printStackTrace();
-	// return null;
-	// }
-	// }
-
 	public static <T, W> WrapCopier<T, W> wo(Class<T> origClass, Class<W> destClass, List<String> includes,
 			List<String> excludes) {
 		return wo(origClass, destClass, includes, excludes, true);

+ 12 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckAssemble.java

@@ -3,6 +3,8 @@ package com.x.base.core.project.build;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.servlet.annotation.WebFilter;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
 
@@ -31,5 +33,15 @@ public class CheckAssemble {
 				System.err.println(String.format("%s not set FieldDescribe", info.getName()));
 			}
 		}
+		try (ScanResult scanResult = new ClassGraph().disableJarScanning().enableAllInfo().scan()) {
+			ClassInfoList classInfoList = scanResult.getClassesWithAnnotation(WebFilter.class.getName());
+			for (ClassInfo info : classInfoList) {
+				Class cls = Class.forName(info.getName());
+				WebFilter webFilter = (WebFilter) cls.getAnnotation(WebFilter.class);
+				if (webFilter.asyncSupported() == false) {
+					System.err.println("webFilter not set asyncSupported:" + info.getName());
+				}
+			}
+		}
 	}
 }

+ 12 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CheckService.java

@@ -3,6 +3,8 @@ package com.x.base.core.project.build;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.servlet.annotation.WebFilter;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
 
@@ -31,5 +33,15 @@ public class CheckService {
 				System.err.println(String.format("%s not set FieldDescribe", info.getName()));
 			}
 		}
+		try (ScanResult scanResult = new ClassGraph().disableJarScanning().enableAllInfo().scan()) {
+			ClassInfoList classInfoList = scanResult.getClassesWithAnnotation(WebFilter.class.getName());
+			for (ClassInfo info : classInfoList) {
+				Class cls = Class.forName(info.getName());
+				WebFilter webFilter = (WebFilter) cls.getAnnotation(WebFilter.class);
+				if (webFilter.asyncSupported() == false) {
+					System.err.println("webFilter not set asyncSupported:" + info.getName());
+				}
+			}
+		}
 	}
 }

+ 1 - 28
o2server/x_base_core_project/src/main/java/com/x/base/core/project/cache/ApplicationCache.java

@@ -23,13 +23,11 @@ public class ApplicationCache extends AbstractApplicationCache {
 
 	private NotifyThread notifyThread;
 	private ReceiveThread receiveThread;
-	// private static ConcurrentHashMap<String, List<Class<?>>> incidenceMap = new
-	// ConcurrentHashMap<>();
 
 	private volatile static ApplicationCache INSTANCE;
 	private CacheManager manager;
 
-	private static Integer defaultSize = 2000;
+	private static Integer defaultSize = 1000;
 
 	private static Integer defaultTimeToIdle = MINUTES_20;
 	private static Integer defaultTimeToLive = MINUTES_30;
@@ -113,31 +111,6 @@ public class ApplicationCache extends AbstractApplicationCache {
 		return cache;
 	}
 
-//	private ApplicationCache() {
-//		try (ScanResult scanResult = new ClassGraph().enableAnnotationInfo().scan()) {
-//			List<ClassInfo> list = new ArrayList<>();
-//			list.addAll(scanResult.getSubclasses(Deployable.class.getName()));
-//			for (ClassInfo info : list) {
-//				Class<?> clz = Class.forName(info.getName());
-//				for (String str : clz.getAnnotation(Module.class).containerEntities()) {
-//					List<Class<?>> os = incidenceMap.get(str);
-//					if (null == os) {
-//						os = new ArrayList<Class<?>>();
-//						incidenceMap.put(str, os);
-//					}
-//					os.add(clz);
-//				}
-//			}
-//			manager = createCacheManager();
-//			this.notifyThread = new NotifyThread();
-//			notifyThread.start();
-//			this.receiveThread = new ReceiveThread();
-//			receiveThread.start();
-//		} catch (Exception e) {
-//			e.printStackTrace();
-//		}
-//	}
-
 	private ApplicationCache() {
 		try {
 			manager = createCacheManager();

+ 29 - 13
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ApplicationServer.java

@@ -15,23 +15,27 @@ public class ApplicationServer extends ConfigObject {
 
 	public ApplicationServer() {
 		this.enable = true;
-		this.port = default_port;
+		this.port = DEFAULT_PORT;
 		this.sslEnable = false;
 		this.proxyHost = "";
-		this.proxyPort = default_port;
+		this.proxyPort = DEFAULT_PORT;
 		this.redeploy = true;
-		this.scanInterval = default_scanInterval;
+		this.scanInterval = DEFAULT_SCANINTERVAL;
 		this.includes = new CopyOnWriteArrayList<String>();
 		this.excludes = new CopyOnWriteArrayList<String>();
 		this.weights = new CopyOnWriteArrayList<NameWeightPair>();
 		this.scheduleWeights = new CopyOnWriteArrayList<NameWeightPair>();
+		this.statEnable = DEFAULT_STATENABLE;
+		this.statExclusions = DEFAULT_STATEXCLUSIONS;
 
 	}
 
-	private static final Integer default_port = 20020;
-	private static final Integer default_scanInterval = 0;
-	public static final Integer default_weight = 100;
-	public static final Integer default_scheduleWeight = 100;
+	private static final Integer DEFAULT_PORT = 20020;
+	private static final Integer DEFAULT_SCANINTERVAL = 0;
+	private static final Integer DEFAULT_WEIGHT = 100;
+	private static final Integer DEFAULT_SCHEDULEWEIGHT = 100;
+	private static final Boolean DEFAULT_STATENABLE = true;
+	private static final String DEFAULT_STATEXCLUSIONS = "*.js,*.gif,*.jpg,*.png,*.css,*.ico";
 
 	@FieldDescribe("是否启用")
 	private Boolean enable;
@@ -55,12 +59,24 @@ public class ApplicationServer extends ConfigObject {
 	private CopyOnWriteArrayList<NameWeightPair> weights;
 	@FieldDescribe("设置应用的定时任务权重,在集群环境中,一个应用可以部署多个实例提供负载均衡.通过合计占比来分配应用占比.")
 	private CopyOnWriteArrayList<NameWeightPair> scheduleWeights;
+	@FieldDescribe("启用统计,默认启用统计.")
+	private Boolean statEnable;
+	@FieldDescribe("统计忽略路径,默认忽略*.js,*.gif,*.jpg,*.png,*.css,*.ico")
+	private String statExclusions;
+
+	public String getStatExclusions() {
+		return (StringUtils.isEmpty(statExclusions) ? DEFAULT_STATEXCLUSIONS : this.statExclusions) + ",/druid/*";
+	}
+
+	public Boolean getStatEnable() {
+		return BooleanUtils.isNotFalse(statEnable);
+	}
 
 	public Integer getScanInterval() {
 		if (null != this.scanInterval && this.scanInterval > 0) {
 			return this.scanInterval;
 		}
-		return default_scanInterval;
+		return DEFAULT_SCANINTERVAL;
 	}
 
 	public CopyOnWriteArrayList<NameWeightPair> getWeights() {
@@ -79,14 +95,14 @@ public class ApplicationServer extends ConfigObject {
 
 	public Integer weight(Class<?> clazz) {
 		NameWeightPair pair = this.weights.stream().filter(p -> StringUtils.equals(p.getName(), clazz.getName()))
-				.findFirst().orElse(new NameWeightPair(clazz.getName(), default_weight));
+				.findFirst().orElse(new NameWeightPair(clazz.getName(), DEFAULT_WEIGHT));
 		return pair.getWeight();
 	}
 
 	public Integer scheduleWeight(Class<?> clazz) {
 		NameWeightPair pair = this.scheduleWeights.stream()
 				.filter(p -> StringUtils.equals(p.getName(), clazz.getName())).findFirst()
-				.orElse(new NameWeightPair(clazz.getName(), default_scheduleWeight));
+				.orElse(new NameWeightPair(clazz.getName(), DEFAULT_SCHEDULEWEIGHT));
 		return pair.getWeight();
 	}
 
@@ -94,7 +110,7 @@ public class ApplicationServer extends ConfigObject {
 
 		private String name;
 
-		private Integer weight = default_weight;
+		private Integer weight = DEFAULT_WEIGHT;
 
 		public NameWeightPair() {
 		}
@@ -116,7 +132,7 @@ public class ApplicationServer extends ConfigObject {
 			if ((null != this.weight) && (this.weight > 0)) {
 				return this.weight;
 			}
-			return default_weight;
+			return DEFAULT_WEIGHT;
 		}
 
 		public void setWeight(Integer weight) {
@@ -133,7 +149,7 @@ public class ApplicationServer extends ConfigObject {
 		if (null != this.port && this.port > 0 && this.port < 65535) {
 			return this.port;
 		}
-		return default_port;
+		return DEFAULT_PORT;
 	}
 
 	public Boolean getSslEnable() {

+ 32 - 17
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/CenterServer.java

@@ -13,27 +13,31 @@ import com.x.base.core.project.tools.DefaultCharset;
 
 public class CenterServer extends ConfigObject {
 
-	private static final Boolean default_enable = true;
-	private static final Integer default_port = 20030;
-	private static final Integer default_scanInterval = 0;
-	private static final Boolean default_configApiEnable = true;
-	private static final Integer default_order = 0;
+	private static final Boolean DEFAULT_ENABLE = true;
+	private static final Integer DEFAULT_PORT = 20030;
+	private static final Integer DEFAULT_SCANINTERVAL = 0;
+	private static final Boolean DEFAULT_CONFIGAPIENABLE = true;
+	private static final Integer DEFAULT_ORDER = 0;
+	private static final Boolean DEFAULT_STATENABLE = true;
+	private static final String DEFAULT_STATEXCLUSIONS = "*.js,*.gif,*.jpg,*.png,*.css,*.ico";
 
 	public static CenterServer defaultInstance() {
 		return new CenterServer();
 	}
 
 	public CenterServer() {
-		this.enable = default_enable;
+		this.enable = DEFAULT_ENABLE;
 		this.sslEnable = false;
 		this.redeploy = true;
-		this.order = default_order;
-		this.port = default_port;
+		this.order = DEFAULT_ORDER;
+		this.port = DEFAULT_PORT;
 		this.httpProtocol = "";
 		this.proxyHost = "";
-		this.proxyPort = default_port;
-		this.scanInterval = default_scanInterval;
-		this.configApiEnable = default_configApiEnable;
+		this.proxyPort = DEFAULT_PORT;
+		this.scanInterval = DEFAULT_SCANINTERVAL;
+		this.configApiEnable = DEFAULT_CONFIGAPIENABLE;
+		this.statEnable = DEFAULT_STATENABLE;
+		this.statExclusions = DEFAULT_STATEXCLUSIONS;
 	}
 
 	@FieldDescribe("是否启用")
@@ -46,7 +50,6 @@ public class CenterServer extends ConfigObject {
 	private Boolean redeploy;
 	@FieldDescribe("端口,center服务器端口,默认20030")
 	private Integer port;
-
 	@FieldDescribe("对外http访问协议,http/https")
 	private String httpProtocol;
 	@FieldDescribe("代理主机,当服务器是通过apache/nginx等代理服务器映射到公网或者通过路由器做端口映射,在这样的情况下需要设置此地址以标明公网访问地址.")
@@ -59,13 +62,25 @@ public class CenterServer extends ConfigObject {
 	private LinkedHashMap<String, Object> config;
 	@FieldDescribe("允许通过Api修改config")
 	private Boolean configApiEnable;
+	@FieldDescribe("启用统计,默认启用统计.")
+	private Boolean statEnable;
+	@FieldDescribe("统计忽略路径,默认忽略*.js,*.gif,*.jpg,*.png,*.css,*.ico")
+	private String statExclusions;
+
+	public String getStatExclusions() {
+		return (StringUtils.isEmpty(statExclusions) ? DEFAULT_STATEXCLUSIONS : this.statExclusions) + ",/druid/*";
+	}
+
+	public Boolean getStatEnable() {
+		return BooleanUtils.isNotFalse(statEnable);
+	}
 
 	public Boolean getConfigApiEnable() {
-		return configApiEnable == null ? default_configApiEnable : this.configApiEnable;
+		return configApiEnable == null ? DEFAULT_CONFIGAPIENABLE : this.configApiEnable;
 	}
 
 	public Boolean getEnable() {
-		return enable == null ? default_enable : this.enable;
+		return enable == null ? DEFAULT_ENABLE : this.enable;
 	}
 
 	public String getHttpProtocol() {
@@ -76,7 +91,7 @@ public class CenterServer extends ConfigObject {
 		if (null != this.scanInterval && this.scanInterval > 0) {
 			return this.scanInterval;
 		}
-		return default_scanInterval;
+		return DEFAULT_SCANINTERVAL;
 	}
 
 	public Boolean getRedeploy() {
@@ -91,7 +106,7 @@ public class CenterServer extends ConfigObject {
 		if (null != this.port && this.port > 0 && this.port < 65535) {
 			return this.port;
 		}
-		return default_port;
+		return DEFAULT_PORT;
 	}
 
 	public String getProxyHost() throws Exception {
@@ -113,7 +128,7 @@ public class CenterServer extends ConfigObject {
 	}
 
 	public Integer getOrder() {
-		return order == null ? default_order : this.order;
+		return order == null ? DEFAULT_ORDER : this.order;
 	}
 
 	public void save() throws Exception {

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

@@ -0,0 +1,159 @@
+package com.x.base.core.project.config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.BooleanUtils;
+
+import com.x.base.core.project.annotation.FieldDescribe;
+
+public class ClientInit extends ConfigObject {
+
+	@FieldDescribe("是否启用.")
+	private Boolean enable;
+
+	@FieldDescribe("center节点信息.")
+	private List<CenterAddress> center;
+
+	@FieldDescribe("网页底部说明.")
+	private String footer = "";
+
+	@FieldDescribe("网页头部说明.")
+	private String title = "";
+
+	@FieldDescribe("APP使用协议,auto,http,https.")
+	private String app_protocol = "auto";
+
+	@FieldDescribe("登录页面配置.")
+	private LoginPage loginPage;
+
+	@FieldDescribe("是否启用webSocket")
+	private String webSocketEnable;
+
+	public ClientInit() {
+		this.enable = DEFAULT_ENABLE;
+		this.center = new ArrayList<>();
+		this.loginPage = new LoginPage();
+	}
+
+	public static ClientInit defaultInstance() {
+		return new ClientInit();
+	}
+
+	public static final Boolean DEFAULT_ENABLE = false;
+
+	public static class LoginPage extends ConfigObject {
+
+		@FieldDescribe("是否启用定制的登录页面.")
+		private Boolean enable;
+		@FieldDescribe("登录的门户.")
+		private String portal;
+		@FieldDescribe("登录页面.")
+		private String page;
+
+		public Boolean getEnable() {
+			return enable;
+		}
+
+		public void setEnable(Boolean enable) {
+			this.enable = enable;
+		}
+
+		public String getPortal() {
+			return portal;
+		}
+
+		public void setPortal(String portal) {
+			this.portal = portal;
+		}
+
+		public String getPage() {
+			return page;
+		}
+
+		public void setPage(String page) {
+			this.page = page;
+		}
+	}
+
+	public static class CenterAddress extends ConfigObject {
+
+		private String port;
+
+		private String host;
+
+		public String getPort() {
+			return port;
+		}
+
+		public void setPort(String port) {
+			this.port = port;
+		}
+
+		public String getHost() {
+			return host;
+		}
+
+		public void setHost(String host) {
+			this.host = host;
+		}
+
+	}
+
+	public Boolean getEnable() {
+		return BooleanUtils.isTrue(this.enable);
+	}
+
+	public void setEnable(Boolean enable) {
+		this.enable = enable;
+	}
+
+	public List<CenterAddress> getCenter() {
+		return center;
+	}
+
+	public void setCenter(List<CenterAddress> center) {
+		this.center = center;
+	}
+
+	public String getFooter() {
+		return footer;
+	}
+
+	public void setFooter(String footer) {
+		this.footer = footer;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getApp_protocol() {
+		return app_protocol;
+	}
+
+	public void setApp_protocol(String app_protocol) {
+		this.app_protocol = app_protocol;
+	}
+
+	public LoginPage getLoginPage() {
+		return loginPage;
+	}
+
+	public void setLoginPage(LoginPage loginPage) {
+		this.loginPage = loginPage;
+	}
+
+	public String getWebSocketEnable() {
+		return webSocketEnable;
+	}
+
+	public void setWebSocketEnable(String webSocketEnable) {
+		this.webSocketEnable = webSocketEnable;
+	}
+
+}

+ 24 - 6
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Communicate.java

@@ -8,21 +8,39 @@ import com.x.base.core.project.annotation.FieldDescribe;
 
 public class Communicate extends ConfigObject {
 
-	public static final Boolean DEFAULT_WEBSOCKETENABLE = true;
+	public static final Boolean DEFAULT_WSENABLE = true;
+	public static final Boolean DEFAULT_PMSENABLE = true;
+	public static final Boolean DEFAULT_CALENDARENABLE = true;
 
 	public Communicate() {
-		this.webSocketEnable = DEFAULT_WEBSOCKETENABLE;
+		this.wsEnable = DEFAULT_WSENABLE;
+		this.pmsEnable = DEFAULT_PMSENABLE;
+		this.calendarEnable = DEFAULT_CALENDARENABLE;
 	}
 
 	public static Communicate defaultInstance() {
 		return new Communicate();
 	}
 
-	@FieldDescribe("是否启用webSocket推送消息.")
-	private Boolean webSocketEnable;
+	@FieldDescribe("是否启用ws消息.")
+	private Boolean wsEnable;
 
-	public Boolean webSocketEnable() {
-		return BooleanUtils.isTrue(webSocketEnable);
+	@FieldDescribe("是否启用pms消息.")
+	private Boolean pmsEnable;
+
+	@FieldDescribe("是否启用calendar消息.")
+	private Boolean calendarEnable;
+
+	public Boolean wsEnable() {
+		return BooleanUtils.isTrue(wsEnable);
+	}
+
+	public Boolean pmsEnable() {
+		return BooleanUtils.isTrue(pmsEnable);
+	}
+
+	public Boolean calendarEnable() {
+		return BooleanUtils.isTrue(calendarEnable);
 	}
 
 	@FieldDescribe("清理设置.")

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

@@ -62,6 +62,7 @@ public class Config {
 	public static final String PATH_CONFIG_LOGLEVEL = "config/logLevel.json";
 	public static final String PATH_CONFIG_BINDLOGO = "config/bindLogo.png";
 	public static final String PATH_CONFIG_SLICE = "config/slice.json";
+	public static final String PATH_CONFIG_CLIENTINIT = "config/clientInit.json";
 	public static final String PATH_COMMONS_INITIALSCRIPTTEXT = "commons/initialScriptText.js";
 	public static final String PATH_COMMONS_INITIALSERVICESCRIPTTEXT = "commons/initialServiceScriptText.js";
 	public static final String PATH_COMMONS_MOOTOOLSSCRIPTTEXT = "commons/mooToolsScriptText.js";
@@ -1089,6 +1090,23 @@ public class Config {
 		return instance().logLevel;
 	}
 
+	private ClientInit clientInit;
+
+	public static ClientInit clientInit() throws Exception {
+		if (null == instance().clientInit) {
+			synchronized (Config.class) {
+				if (null == instance().clientInit) {
+					ClientInit obj = BaseTools.readConfigObject(PATH_CONFIG_CLIENTINIT, ClientInit.class);
+					if (null == obj) {
+						obj = ClientInit.defaultInstance();
+					}
+					instance().clientInit = obj;
+				}
+			}
+		}
+		return instance().clientInit;
+	}
+
 	private byte[] bindLogo;
 
 	public static byte[] bindLogo() throws Exception {

+ 61 - 11
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/DataServer.java

@@ -4,16 +4,22 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.container.LogLevel;
 import com.x.base.core.project.annotation.FieldDescribe;
 
 public class DataServer extends ConfigObject {
 
-	private static final Integer default_tcpPort = 20050;
-	private static final Integer default_webPort = 20051;
-	private static final Integer default_cacheSize = 512;
-	private static final Boolean default_jmxEnable = false;
+	private static final Integer DEFAULT_TCPPORT = 20050;
+	private static final Integer DEFAULT_WEBPORT = 20051;
+	private static final Integer DEFAULT_CACHESIZE = 512;
+	private static final Boolean DEFAULT_JMXENABLE = false;
+	private static final Integer DEFAULT_MAXTOTAL = 50;
+	private static final Integer DEFAULT_MAXIDLE = 0;
+	private static final Boolean DEFAULT_STATENABLE = true;
+	private static final String DEFAULT_STATFILTER = "mergeStat";
+	private static final Integer DEFAULT_SLOWSQLMILLIS = 2000;
 
 	public static DataServer defaultInstance() {
 		return new DataServer();
@@ -21,12 +27,18 @@ public class DataServer extends ConfigObject {
 
 	public DataServer() {
 		this.enable = true;
-		this.tcpPort = default_tcpPort;
-		this.webPort = default_webPort;
+		this.tcpPort = DEFAULT_TCPPORT;
+		this.webPort = DEFAULT_WEBPORT;
 		this.includes = new ArrayList<>();
 		this.excludes = new ArrayList<>();
-		this.cacheSize = default_cacheSize;
-		this.jmxEnable = default_jmxEnable;
+		this.cacheSize = DEFAULT_CACHESIZE;
+		this.jmxEnable = DEFAULT_JMXENABLE;
+		this.maxTotal = DEFAULT_MAXTOTAL;
+		this.maxIdle = DEFAULT_MAXIDLE;
+		this.logLevel = LogLevel.WARN;
+		this.statEnable = DEFAULT_STATENABLE;
+		this.statFilter = DEFAULT_STATFILTER;
+		this.slowSqlMillis = DEFAULT_SLOWSQLMILLIS;
 	}
 
 	@FieldDescribe("是否启用,如果没有可用的externalDataSources.json文件,那么默认会在节点中启用本地的H2数据库作为默认的数据库.")
@@ -45,31 +57,69 @@ public class DataServer extends ConfigObject {
 	private Integer cacheSize;
 	@FieldDescribe("默认日志级别")
 	private LogLevel logLevel = LogLevel.WARN;
+	@FieldDescribe("最大使用连接数")
+	private Integer maxTotal;
+	@FieldDescribe("最大空闲连接数")
+	private Integer maxIdle;
+	@FieldDescribe("启用统计,默认启用")
+	private Boolean statEnable;
+	@FieldDescribe("统计方式配置,默认mergeStat")
+	private String statFilter;
+	@FieldDescribe("执行缓慢sql毫秒数,默认2000毫秒,执行缓慢的sql将被单独记录.")
+	private Integer slowSqlMillis;
 
 	public LogLevel getLogLevel() {
 		return this.logLevel == null ? LogLevel.WARN : this.logLevel;
 	}
 
+	public Integer getSlowSqlMillis() {
+		return (null == this.slowSqlMillis || this.slowSqlMillis < 1) ? DEFAULT_SLOWSQLMILLIS : this.slowSqlMillis;
+	}
+
+	public String getStatFilter() {
+		return StringUtils.isEmpty(this.statFilter) ? DEFAULT_STATFILTER : this.statFilter;
+	}
+
+	public Boolean getStatEnable() {
+		return BooleanUtils.isNotFalse(this.statEnable);
+	}
+
+	public Integer getMaxIdle() {
+		if ((this.maxIdle == null) || (this.maxIdle < 1)) {
+			return DEFAULT_MAXIDLE;
+		} else {
+			return this.maxTotal;
+		}
+	}
+
+	public Integer getMaxTotal() {
+		if ((this.maxTotal == null) || (this.maxTotal < 0)) {
+			return DEFAULT_MAXTOTAL;
+		} else {
+			return this.maxTotal;
+		}
+	}
+
 	public Boolean getJmxEnable() {
 		return BooleanUtils.isTrue(this.jmxEnable);
 	}
 
 	public Integer getCacheSize() {
-		return (this.cacheSize == null || this.cacheSize < default_cacheSize) ? default_cacheSize : this.cacheSize;
+		return (this.cacheSize == null || this.cacheSize < DEFAULT_CACHESIZE) ? DEFAULT_CACHESIZE : this.cacheSize;
 	}
 
 	public Integer getTcpPort() {
 		if (null != this.tcpPort && this.tcpPort > 0) {
 			return this.tcpPort;
 		}
-		return default_tcpPort;
+		return DEFAULT_TCPPORT;
 	}
 
 	public Integer getWebPort() {
 		if (null != this.webPort && this.webPort > 0) {
 			return this.webPort;
 		}
-		return default_webPort;
+		return DEFAULT_WEBPORT;
 	}
 
 	public Boolean getEnable() {

+ 42 - 2
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ExternalDataSource.java

@@ -22,7 +22,11 @@ public class ExternalDataSource extends ConfigObject {
 		this.driverClassName = "";
 		this.dictionary = "";
 		this.maxTotal = DEFAULT_MAXTOTAL;
+		this.maxIdle = DEFAULT_MAXIDLE;
 		this.logLevel = LogLevel.WARN;
+		this.statEnable = DEFAULT_STATENABLE;
+		this.statFilter = DEFAULT_STATFILTER;
+		this.slowSqlMillis = DEFAULT_SLOWSQLMILLIS;
 	}
 
 	public static ExternalDataSource defaultInstance() {
@@ -41,8 +45,16 @@ public class ExternalDataSource extends ConfigObject {
 	private String driverClassName;
 	@FieldDescribe("方言")
 	private String dictionary;
-	@FieldDescribe("最大连接数")
+	@FieldDescribe("最大使用连接数")
 	private Integer maxTotal;
+	@FieldDescribe("最大空闲连接数")
+	private Integer maxIdle;
+	@FieldDescribe("启用统计,默认启用")
+	private Boolean statEnable;
+	@FieldDescribe("统计方式配置,默认mergeStat")
+	private String statFilter;
+	@FieldDescribe("执行缓慢sql毫秒数,默认2000毫秒,执行缓慢的sql将被单独记录.")
+	private Integer slowSqlMillis;
 
 	@FieldDescribe("设置此数据库存储的类,默认情况下存储所有类型,如果需要对每个类进行单独的控制以达到高性能,可以将不同的类存储到不同的节点上提高性能.可以使用通配符*")
 	private List<String> includes;
@@ -53,6 +65,14 @@ public class ExternalDataSource extends ConfigObject {
 
 	public static final Integer DEFAULT_MAXTOTAL = 50;
 
+	public static final Integer DEFAULT_MAXIDLE = 0;
+
+	public static final Boolean DEFAULT_STATENABLE = true;
+
+	public static final String DEFAULT_STATFILTER = "mergeStat";
+
+	public static final Integer DEFAULT_SLOWSQLMILLIS = 2000;
+
 	public LogLevel getLogLevel() {
 		return this.logLevel == null ? LogLevel.WARN : this.logLevel;
 	}
@@ -67,8 +87,28 @@ public class ExternalDataSource extends ConfigObject {
 				: this.dictionary;
 	}
 
+	public Integer getSlowSqlMillis() {
+		return (null == this.slowSqlMillis || this.slowSqlMillis < 1) ? DEFAULT_SLOWSQLMILLIS : this.slowSqlMillis;
+	}
+
+	public String getStatFilter() {
+		return StringUtils.isEmpty(this.statFilter) ? DEFAULT_STATFILTER : this.statFilter;
+	}
+
+	public Boolean getStatEnable() {
+		return BooleanUtils.isNotFalse(this.statEnable);
+	}
+
+	public Integer getMaxIdle() {
+		if ((this.maxIdle == null) || (this.maxIdle < 1)) {
+			return DEFAULT_MAXIDLE;
+		} else {
+			return this.maxTotal;
+		}
+	}
+
 	public Integer getMaxTotal() {
-		if ((this.maxTotal == null) || (this.maxTotal < 1)) {
+		if ((this.maxTotal == null) || (this.maxTotal < 0)) {
 			return DEFAULT_MAXTOTAL;
 		} else {
 			return this.maxTotal;

+ 4 - 4
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Messages.java

@@ -101,18 +101,18 @@ public class Messages extends ConcurrentSkipListMap<String, Message> {
 
 		/* 社区新贴发布消息通知 */
 		o.put(MessageConnector.TYPE_BBS_SUBJECTCREATE,
-				new Message( MessageConnector.CONSUME_WS, MessageConnector.CONSUME_PMS ));
+				new Message(MessageConnector.CONSUME_WS, MessageConnector.CONSUME_PMS));
 
 		/* 社区新回复发布消息通知 */
 		o.put(MessageConnector.TYPE_BBS_REPLYCREATE,
-				new Message( MessageConnector.CONSUME_WS, MessageConnector.CONSUME_PMS ));
+				new Message(MessageConnector.CONSUME_WS, MessageConnector.CONSUME_PMS));
 		/* 脑图分享消息通知 */
 		o.put(MessageConnector.TYPE_MIND_FILESHARE,
-				new Message( MessageConnector.CONSUME_WS, MessageConnector.CONSUME_PMS ));
+				new Message(MessageConnector.CONSUME_WS, MessageConnector.CONSUME_PMS));
 
 		/* 脑图发送消息通知 */
 		o.put(MessageConnector.TYPE_MIND_FILESEND,
-				new Message( MessageConnector.CONSUME_WS, MessageConnector.CONSUME_PMS ));
+				new Message(MessageConnector.CONSUME_WS, MessageConnector.CONSUME_PMS));
 
 		return o;
 	}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Person.java


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

@@ -34,6 +34,8 @@ public class ProcessPlatform extends ConfigObject {
 
 	public final static String DEFAULT_DOCTOWORDDEFAULTSITE = "$doc";
 
+	public final static Integer DEFAULT_EXECUTORCOUNT = 32;
+
 	public static ProcessPlatform defaultInstance() {
 		return new ProcessPlatform();
 	}
@@ -54,6 +56,7 @@ public class ProcessPlatform extends ConfigObject {
 		this.docToWordType = DEFAULT_DOCTOWORDTYPE;
 		this.docToWordDefaultFileName = DEFAULT_DOCTOWORDDEFAULTFILENAME;
 		this.docToWordDefaultSite = DEFAULT_DOCTOWORDDEFAULTSITE;
+		this.executorCount = DEFAULT_EXECUTORCOUNT;
 	}
 
 	@FieldDescribe("提醒设置,设置提醒间隔.")
@@ -104,6 +107,13 @@ public class ProcessPlatform extends ConfigObject {
 	@FieldDescribe("HTML版式公文转换成Word文件缺省site.")
 	private String docToWordDefaultSite;
 
+	@FieldDescribe("执行器数量")
+	private Integer executorCount;
+
+	public Integer getExecutorCount() {
+		return ((null == executorCount) || (executorCount < 1)) ? DEFAULT_EXECUTORCOUNT : this.executorCount;
+	}
+
 	public Integer getFormVersionCount() {
 		return formVersionCount == null ? DEFAULT_FORMVERSIONCOUNT : this.formVersionCount;
 	}

+ 26 - 14
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/WebServer.java

@@ -17,14 +17,18 @@ public class WebServer extends ConfigObject {
 		this.sslEnable = false;
 		this.proxyHost = "";
 		this.proxyPort = null;
-		this.weight = default_weight;
-		this.dirAllowed = default_dirAllowed;
+		this.weight = DEFAULT_WEIGHT;
+		this.dirAllowed = DEFAULT_DIRALLOWED;
+		this.statEnable = DEFAULT_STATENABLE;
+		this.statExclusions = DEFAULT_STATEXCLUSIONS;
 	}
 
-	private static final Integer default_http_port = 80;
-	private static final Integer default_https_port = 443;
-	private static final Integer default_weight = 100;
-	private static final Boolean default_dirAllowed = false;
+	private static final Integer DEFAULT_HTTP_PORT = 80;
+	private static final Integer DEFAULT_HTTPS_PORT = 443;
+	private static final Integer DEFAULT_WEIGHT = 100;
+	private static final Boolean DEFAULT_DIRALLOWED = false;
+	private static final Boolean DEFAULT_STATENABLE = false;
+	private static final String DEFAULT_STATEXCLUSIONS = "*.gif,*.jpg,*.png,*.ico";
 
 	@FieldDescribe("是否启用")
 	private Boolean enable;
@@ -40,14 +44,26 @@ public class WebServer extends ConfigObject {
 	private Integer weight;
 	@FieldDescribe("允许浏览目录,")
 	private Boolean dirAllowed;
+	@FieldDescribe("启用统计,默认启用统计.")
+	private Boolean statEnable;
+	@FieldDescribe("统计忽略路径,默认忽略*.gif,*.jpg,*.png,*.ico")
+	private String statExclusions;
+
+	public String getStatExclusions() {
+		return (StringUtils.isEmpty(statExclusions) ? DEFAULT_STATEXCLUSIONS : this.statExclusions) + ",/druid/*";
+	}
+
+	public Boolean getStatEnable() {
+		return BooleanUtils.isNotFalse(statEnable);
+	}
 
 	public Boolean getDirAllowed() {
-		return dirAllowed == null ? default_dirAllowed : dirAllowed;
+		return dirAllowed == null ? DEFAULT_DIRALLOWED : dirAllowed;
 	}
 
 	public Integer getWeight() {
 		if (weight == null || weight < 0) {
-			return default_weight;
+			return DEFAULT_WEIGHT;
 		}
 		return weight;
 	}
@@ -61,9 +77,9 @@ public class WebServer extends ConfigObject {
 			return this.port;
 		} else {
 			if (this.getSslEnable()) {
-				return default_https_port;
+				return DEFAULT_HTTPS_PORT;
 			} else {
-				return default_http_port;
+				return DEFAULT_HTTP_PORT;
 			}
 
 		}
@@ -109,8 +125,4 @@ public class WebServer extends ConfigObject {
 		this.weight = weight;
 	}
 
-	// public void setHost(String host) {
-	// this.host = host;
-	// }
-
 }

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

@@ -10,7 +10,7 @@ public class ExceptionEntityFieldEmpty extends PromptException {
 		
 		
 		
-		super("实体类: {} , 字段: {} 不能为空.", cls.getName(), field);
+		super("实体类: {} , 字段: {} 值无效.", cls.getName(), field);
 	}
 
 }

+ 2 - 20
o2server/x_base_core_project/src/main/java/com/x/base/core/project/http/ActionResult.java

@@ -3,12 +3,14 @@ package com.x.base.core.project.http;
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.Date;
+import java.util.zip.CRC32;
 
 import org.apache.commons.lang3.StringUtils;
 
 import com.google.gson.Gson;
 import com.x.base.core.project.exception.PromptException;
 import com.x.base.core.project.gson.XGsonBuilder;
+import com.x.base.core.project.tools.DefaultCharset;
 
 public class ActionResult<T> implements Serializable {
 
@@ -32,10 +34,6 @@ public class ActionResult<T> implements Serializable {
 
 	protected Long size = -1L;
 
-//	protected Long page = -1L;
-//
-//	protected Long pageSize = -1L;
-
 	protected Long count = 0L;
 
 	protected Long position = 0L;
@@ -167,20 +165,4 @@ public class ActionResult<T> implements Serializable {
 		return message;
 	}
 
-//	public Long getPage() {
-//		return page;
-//	}
-//
-//	public void setPage(Long page) {
-//		this.page = page;
-//	}
-
-//	public Long getPageSize() {
-//		return pageSize;
-//	}
-//
-//	public void setPageSize(Long pageSize) {
-//		this.pageSize = pageSize;
-//	}
-
 }

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

@@ -1,18 +0,0 @@
-package com.x.base.core.project.http;
-
-import javax.ws.rs.core.CacheControl;
-
-public class CacheControlFactory {
-	public static CacheControl getDefault() {
-		CacheControl cc = new CacheControl();
-		cc.setNoCache(true);
-		return cc;
-	}
-
-	public static CacheControl getMaxAge(Integer max) {
-		CacheControl cc = new CacheControl();
-		cc.setMaxAge(max);
-		return cc;
-	}
-
-}

+ 5 - 10
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/AnonymousCipherManagerUserJaxrsFilter.java

@@ -1,19 +1,14 @@
 package com.x.base.core.project.jaxrs;
 
-import java.io.IOException;
-
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import com.x.base.core.project.config.Config;
 import com.x.base.core.project.http.FilterTools;
 import com.x.base.core.project.http.HttpToken;
 
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
 /**
  * 必须由前台已经登陆的用户访问
  */

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

@@ -0,0 +1,8 @@
+package com.x.base.core.project.jaxrs;
+
+import javax.servlet.annotation.WebFilter;
+
+@WebFilter(urlPatterns = { "/druid/*" }, asyncSupported = true)
+public class DruidFilter extends CipherManagerJaxrsFilter {
+
+}

+ 155 - 52
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/ResponseFactory.java

@@ -2,105 +2,208 @@ package com.x.base.core.project.jaxrs;
 
 import java.net.URI;
 import java.util.Objects;
+import java.util.zip.CRC32;
 
-import javax.ws.rs.core.CacheControl;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+
+import org.apache.commons.lang3.StringUtils;
+import org.eclipse.jetty.http.HttpHeader;
 
 import com.x.base.core.project.exception.CallbackPromptException;
+import com.x.base.core.project.gson.XGsonBuilder;
 import com.x.base.core.project.http.ActionResult;
-import com.x.base.core.project.http.CacheControlFactory;
 import com.x.base.core.project.http.HttpMediaType;
 import com.x.base.core.project.tools.DefaultCharset;
 
 public class ResponseFactory {
 
-	private static CacheControl defaultCacheControl = CacheControlFactory.getDefault();
+	// private static CacheControl defaultCacheControl =
+	// CacheControlFactory.getDefault();
 
 	public static final String Content_Disposition = "Content-Disposition";
 	// public static final String Content_Length = "Content-Length";
 	public static final String Accept_Ranges = "Accept-Ranges";
 	public static final String Content_Type = "Content-Type";
 
-	public static <T> Response getDefaultActionResultResponse(ActionResult<T> result) {
+//	public static <T> Response getDefaultActionResultResponse(ActionResult<T> result) {
+//		if (result.getType().equals(ActionResult.Type.error)) {
+//			if ((result.throwable instanceof CallbackPromptException)) {
+//				return Response.ok(callbackError(result)).build();
+//			} else {
+//				return Response.serverError().entity(result.toJson()).build();
+//			}
+//		} else {
+//			if ((null != result.getData()) && (result.getData() instanceof WoFile)) {
+//				/* 附件,二进制流文件 */
+//				WoFile wo = (WoFile) result.getData();
+//				return Response.ok(wo.getBytes()).header(Content_Disposition, wo.getContentDisposition())
+//						.header(Content_Type, wo.getContentType()).header(Accept_Ranges, "bytes").tag(etagWoFile(wo))
+//						.build();
+//			} else if ((null != result.getData()) && (result.getData() instanceof WoText)) {
+//				/* 纯文本text */
+//				WoText wo = (WoText) result.getData();
+//				return Response.ok(wo.getText()).type(HttpMediaType.TEXT_PLAIN_UTF_8).tag(etagWoText(wo)).build();
+//			} else if ((null != result.getData()) && (result.getData() instanceof WoCallback)) {
+//				/* jsonp callback */
+//				return Response.ok(callback((WoCallback) result.getData())).build();
+//			} else if ((null != result.getData()) && (result.getData() instanceof WoSeeOther)) {
+//				/* 303 */
+//				WoSeeOther wo = (WoSeeOther) result.getData();
+//				try {
+//					return Response.seeOther(new URI(wo.getUrl())).build();
+//				} catch (Exception e) {
+//					return Response.serverError().entity(Objects.toString(wo.getUrl(), "")).build();
+//				}
+//			} else if ((null != result.getData()) && (result.getData() instanceof WoTemporaryRedirect)) {
+//				/* 304 */
+//				WoTemporaryRedirect wo = (WoTemporaryRedirect) result.getData();
+//				try {
+//					return Response.temporaryRedirect(new URI(wo.getUrl())).build();
+//				} catch (Exception e) {
+//					return Response.serverError().entity(Objects.toString(wo.getUrl(), "")).build();
+//				}
+//			} else {
+//				/* default */
+//				return Response.ok(result.toJson()).tag(etagDefault(result.getData())).build();
+//			}
+//		}
+//	}
+
+	public static <T> Response getEntityTagActionResultResponse(HttpServletRequest request, ActionResult<T> result) {
 		if (result.getType().equals(ActionResult.Type.error)) {
 			if ((result.throwable instanceof CallbackPromptException)) {
-				return Response.ok(callbackError(result)).cacheControl(defaultCacheControl).build();
+				return Response.ok(callbackError(result)).build();
 			} else {
-				return Response.serverError().entity(result.toJson()).cacheControl(defaultCacheControl).build();
+				return Response.serverError().entity(result.toJson()).build();
 			}
 		} else {
 			if ((null != result.getData()) && (result.getData() instanceof WoFile)) {
+				/* 附件,二进制流文件 */
 				WoFile wo = (WoFile) result.getData();
+				EntityTag tag = new EntityTag(etagWoFile(wo));
+				if (notModified(request, tag)) {
+					return Response.notModified().tag(tag).build();
+				}
 				return Response.ok(wo.getBytes()).header(Content_Disposition, wo.getContentDisposition())
-						.header(Content_Type, wo.getContentType()).header(Accept_Ranges, "bytes").build();
+						.header(Content_Type, wo.getContentType()).header(Accept_Ranges, "bytes").tag(etagWoFile(wo))
+						.build();
 			} else if ((null != result.getData()) && (result.getData() instanceof WoText)) {
+				/* 纯文本text */
 				WoText wo = (WoText) result.getData();
-				return Response.ok(wo.getText()).cacheControl(defaultCacheControl).type(HttpMediaType.TEXT_PLAIN_UTF_8)
-						.build();
+				EntityTag tag = new EntityTag(etagWoText(wo));
+				if (notModified(request, tag)) {
+					return Response.notModified().tag(tag).build();
+				}
+				return Response.ok(wo.getText()).type(HttpMediaType.TEXT_PLAIN_UTF_8).tag(etagWoText(wo)).build();
 			} else if ((null != result.getData()) && (result.getData() instanceof WoCallback)) {
-				return Response.ok(callback((WoCallback) result.getData())).cacheControl(defaultCacheControl).build();
+				/* jsonp callback */
+				return Response.ok(callback((WoCallback) result.getData())).build();
 			} else if ((null != result.getData()) && (result.getData() instanceof WoSeeOther)) {
+				/* 303 */
 				WoSeeOther wo = (WoSeeOther) result.getData();
 				try {
 					return Response.seeOther(new URI(wo.getUrl())).build();
 				} catch (Exception e) {
-					return Response.serverError().entity(Objects.toString(wo.getUrl(), ""))
-							.cacheControl(defaultCacheControl).build();
+					return Response.serverError().entity(Objects.toString(wo.getUrl(), "")).build();
 				}
 			} else if ((null != result.getData()) && (result.getData() instanceof WoTemporaryRedirect)) {
+				/* 304 */
 				WoTemporaryRedirect wo = (WoTemporaryRedirect) result.getData();
 				try {
 					return Response.temporaryRedirect(new URI(wo.getUrl())).build();
 				} catch (Exception e) {
-					return Response.serverError().entity(Objects.toString(wo.getUrl(), ""))
-							.cacheControl(defaultCacheControl).build();
+					return Response.serverError().entity(Objects.toString(wo.getUrl(), "")).build();
 				}
 			} else {
-				return Response.ok(result.toJson()).cacheControl(defaultCacheControl).build();
+				/* default */
+				EntityTag tag = new EntityTag(etagDefault(result.getData()));
+				if (notModified(request, tag)) {
+					return Response.notModified().tag(tag).build();
+				}
+				return Response.ok(result.toJson()).tag(tag).build();
 			}
 		}
 	}
 
-	private static CacheControl maxAgeCacheControl = CacheControlFactory.getMaxAge(259200);
+//	private static CacheControl maxAgeCacheControl = CacheControlFactory.getMaxAge(259200);
+//
+//	public static <T> Response getMaxAgeActionResultResponse(ActionResult<T> result) {
+//		if (result.getType().equals(ActionResult.Type.error)) {
+//			if ((result.throwable instanceof CallbackPromptException)) {
+//				return Response.ok(callbackError(result)).cacheControl(maxAgeCacheControl).build();
+//			} else {
+//				return Response.serverError().entity(result.toJson()).cacheControl(maxAgeCacheControl).build();
+//			}
+//		} else {
+//			if ((null != result.getData()) && (result.getData() instanceof WoFile)) {
+//				/* 附件,二进制流文件 */
+//				WoFile wo = (WoFile) result.getData();
+//				return Response.ok(wo.getBytes()).header(Content_Disposition, wo.getContentDisposition())
+//						.header(Content_Type, wo.getContentType()).header(Accept_Ranges, "bytes")
+//						.cacheControl(maxAgeCacheControl).tag(etagWoFile(wo)).build();
+//			} else if ((null != result.getData()) && (result.getData() instanceof WoText)) {
+//				/* 纯文本text */
+//				WoText wo = (WoText) result.getData();
+//				return Response.ok(wo.getText()).type(HttpMediaType.TEXT_PLAIN_UTF_8).cacheControl(maxAgeCacheControl)
+//						.tag(etagWoText(wo)).build();
+//			} else if ((null != result.getData()) && (result.getData() instanceof WoCallback)) {
+//				/* jsonp callback */
+//				return Response.ok(callback((WoCallback) result.getData())).cacheControl(maxAgeCacheControl).build();
+//			} else if ((null != result.getData()) && (result.getData() instanceof WoSeeOther)) {
+//				/* 303 */
+//				WoSeeOther wo = (WoSeeOther) result.getData();
+//				try {
+//					return Response.seeOther(new URI(wo.getUrl())).cacheControl(maxAgeCacheControl).build();
+//				} catch (Exception e) {
+//					return Response.serverError().entity(Objects.toString(wo.getUrl(), ""))
+//							.cacheControl(maxAgeCacheControl).build();
+//				}
+//			} else if ((null != result.getData()) && (result.getData() instanceof WoTemporaryRedirect)) {
+//				/* 304 */
+//				WoTemporaryRedirect wo = (WoTemporaryRedirect) result.getData();
+//				try {
+//					return Response.temporaryRedirect(new URI(wo.getUrl())).cacheControl(maxAgeCacheControl).build();
+//				} catch (Exception e) {
+//					return Response.serverError().entity(Objects.toString(wo.getUrl(), ""))
+//							.cacheControl(maxAgeCacheControl).build();
+//				}
+//			} else {
+//				/* default */
+//				return Response.ok(result.toJson()).cacheControl(maxAgeCacheControl).tag(etagDefault(result.getData()))
+//						.build();
+//			}
+//		}
+//	}
 
-	public static <T> Response getMaxAgeActionResultResponse(ActionResult<T> result) {
-		if (result.getType().equals(ActionResult.Type.error)) {
-			if ((result.throwable instanceof CallbackPromptException)) {
-				return Response.ok(callbackError(result)).cacheControl(maxAgeCacheControl).build();
-			} else {
-				return Response.serverError().entity(result.toJson()).cacheControl(maxAgeCacheControl).build();
-			}
-		} else {
-			if ((null != result.getData()) && (result.getData() instanceof WoFile)) {
-				WoFile wo = (WoFile) result.getData();
-				return Response.ok(wo.getBytes()).header(Content_Disposition, wo.getContentDisposition())
-						.header(Content_Type, wo.getContentType()).header(Accept_Ranges, "bytes").build();
-			} else if ((null != result.getData()) && (result.getData() instanceof WoText)) {
-				WoText wo = (WoText) result.getData();
-				return Response.ok(wo.getText()).cacheControl(maxAgeCacheControl).type(HttpMediaType.TEXT_PLAIN_UTF_8)
-						.build();
-			} else if ((null != result.getData()) && (result.getData() instanceof WoCallback)) {
-				return Response.ok(callback((WoCallback) result.getData())).cacheControl(maxAgeCacheControl).build();
-			} else if ((null != result.getData()) && (result.getData() instanceof WoSeeOther)) {
-				WoSeeOther wo = (WoSeeOther) result.getData();
-				try {
-					return Response.seeOther(new URI(wo.getUrl())).build();
-				} catch (Exception e) {
-					return Response.serverError().entity(Objects.toString(wo.getUrl(), ""))
-							.cacheControl(defaultCacheControl).build();
-				}
-			} else if ((null != result.getData()) && (result.getData() instanceof WoTemporaryRedirect)) {
-				WoTemporaryRedirect wo = (WoTemporaryRedirect) result.getData();
-				try {
-					return Response.temporaryRedirect(new URI(wo.getUrl())).build();
-				} catch (Exception e) {
-					return Response.serverError().entity(Objects.toString(wo.getUrl(), ""))
-							.cacheControl(defaultCacheControl).build();
-				}
-			} else {
-				return Response.ok(result.toJson()).cacheControl(defaultCacheControl).build();
+	private static boolean notModified(HttpServletRequest request, EntityTag tag) {
+		String If_None_Match = request.getHeader(HttpHeader.IF_NONE_MATCH.toString());
+		if (StringUtils.isNotEmpty(If_None_Match)) {
+			if (StringUtils.equals(If_None_Match, "\"" + tag.getValue() + "\"")) {
+				return true;
 			}
 		}
+		return false;
+	}
+
+	private static String etagWoFile(WoFile wo) {
+		CRC32 crc = new CRC32();
+		crc.update(wo.getBytes());
+		return crc.getValue() + "";
+	}
+
+	private static String etagWoText(WoText wo) {
+		CRC32 crc = new CRC32();
+		crc.update(wo.getText().getBytes(DefaultCharset.charset_utf_8));
+		return crc.getValue() + "";
+	}
+
+	private static String etagDefault(Object o) {
+		CRC32 crc = new CRC32();
+		crc.update(XGsonBuilder.toJson(o).getBytes(DefaultCharset.charset_utf_8));
+		return crc.getValue() + "";
 	}
 
 	private static String callback(WoCallback woCallback) {

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

@@ -43,7 +43,7 @@ public class CacheAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, jsonElement);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@GET
@@ -61,6 +61,6 @@ public class CacheAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/echo/EchoAction.java

@@ -36,6 +36,6 @@ public class EchoAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 1 - 1
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/fireschedule/FireScheduleAction.java

@@ -30,7 +30,7 @@ public class FireScheduleAction extends StandardJaxrsAction {
 			@JaxrsParameterDescribe("运行类") @PathParam("className") String className) throws Exception {
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		ActionResult<ActionExecute.Wo> result = new ActionExecute().execute(effectivePerson, servletContext, className);
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	public static class Wo extends WrapBoolean {

+ 5 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/logger/LoggerAction.java

@@ -40,7 +40,7 @@ public class LoggerAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@GET
@@ -58,7 +58,7 @@ public class LoggerAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@GET
@@ -76,7 +76,7 @@ public class LoggerAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@GET
@@ -94,7 +94,7 @@ public class LoggerAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@GET
@@ -112,7 +112,7 @@ public class LoggerAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 }

+ 50 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/metrics/MetricsTimer.java

@@ -0,0 +1,50 @@
+package com.x.base.core.project.jaxrs.metrics;
+
+public class MetricsTimer {
+    private String timerName;
+    private double rate;
+    private String unit;
+    private String showMessage;
+
+    public MetricsTimer() {
+    }
+
+    public MetricsTimer(final String timerName, final double rate, final String unit, String showMessage) {
+        this.timerName = timerName;
+        this.rate = rate;
+        this.unit = unit;
+        this.showMessage = showMessage;
+    }
+
+    public String getTimerName() {
+        return this.timerName;
+    }
+
+    public void setTimerName(final String timerName) {
+        this.timerName = timerName;
+    }
+
+    public double getRate() {
+        return this.rate;
+    }
+
+    public void setRate(final double rate) {
+        this.rate = rate;
+    }
+
+    public String getUnit() {
+        return this.unit;
+    }
+
+    public void setUnit(final String unit) {
+        this.unit = unit;
+    }
+
+    public String getShowMessage() {
+        return this.showMessage;
+    }
+
+    public void setShowMessage(final String showMessage) {
+        this.showMessage = showMessage;
+    }
+}

+ 194 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/metrics/MetricsTimerReport.java

@@ -0,0 +1,194 @@
+package com.x.base.core.project.jaxrs.metrics;
+
+public class MetricsTimerReport {
+
+    private String targetClassName;
+
+    private String targetContextName;
+
+    private String targetContextCNName;
+
+    private String dateTime;
+
+    private Long count;
+
+    private MetricsTimer mean_rate;
+
+    private MetricsTimer m1_rate;
+
+    private MetricsTimer m5_rate;
+
+    private MetricsTimer m15_rate;
+
+    private MetricsTimer min;
+
+    private MetricsTimer max;
+
+    private MetricsTimer mean;
+
+    private MetricsTimer stddev;
+
+    private MetricsTimer p50;
+
+    private MetricsTimer p75;
+
+    private MetricsTimer p95;
+
+    private MetricsTimer p98;
+
+    private MetricsTimer p99;
+
+    private MetricsTimer p999;
+
+    public String getTargetContextCNName() {
+        return this.targetContextCNName;
+    }
+
+    public void setTargetContextCNName(final String targetContextCNName) {
+        this.targetContextCNName = targetContextCNName;
+    }
+
+    public String getDateTime() {
+        return this.dateTime;
+    }
+
+    public void setDateTime(final String dateTime) {
+        this.dateTime = dateTime;
+    }
+
+    public String getTargetClassName() {
+        return this.targetClassName;
+    }
+
+    public void setTargetClassName(final String targetClassName) {
+        this.targetClassName = targetClassName;
+    }
+
+    public String getTargetContextName() {
+        return this.targetContextName;
+    }
+
+    public void setTargetContextName(final String targetContextName) {
+        this.targetContextName = targetContextName;
+    }
+
+    public Long getCount() {
+        return this.count;
+    }
+
+    public void setCount(final Long count) {
+        this.count = count;
+    }
+
+    public MetricsTimer getMean_rate() {
+        return this.mean_rate;
+    }
+
+    public void setMean_rate(final MetricsTimer mean_rate) {
+        this.mean_rate = mean_rate;
+    }
+
+    public MetricsTimer getM1_rate() {
+        return this.m1_rate;
+    }
+
+    public void setM1_rate(final MetricsTimer m1_rate) {
+        this.m1_rate = m1_rate;
+    }
+
+    public MetricsTimer getM5_rate() {
+        return this.m5_rate;
+    }
+
+    public void setM5_rate(final MetricsTimer m5_rate) {
+        this.m5_rate = m5_rate;
+    }
+
+    public MetricsTimer getM15_rate() {
+        return this.m15_rate;
+    }
+
+    public void setM15_rate(final MetricsTimer m15_rate) {
+        this.m15_rate = m15_rate;
+    }
+
+    public MetricsTimer getMin() {
+        return this.min;
+    }
+
+    public void setMin(final MetricsTimer min) {
+        this.min = min;
+    }
+
+    public MetricsTimer getMax() {
+        return this.max;
+    }
+
+    public void setMax(final MetricsTimer max) {
+        this.max = max;
+    }
+
+    public MetricsTimer getMean() {
+        return this.mean;
+    }
+
+    public void setMean(final MetricsTimer mean) {
+        this.mean = mean;
+    }
+
+    public MetricsTimer getStddev() {
+        return this.stddev;
+    }
+
+    public void setStddev(final MetricsTimer stddev) {
+        this.stddev = stddev;
+    }
+
+    public MetricsTimer getP50() {
+        return this.p50;
+    }
+
+    public void setP50(final MetricsTimer p50) {
+        this.p50 = p50;
+    }
+
+    public MetricsTimer getP75() {
+        return this.p75;
+    }
+
+    public void setP75(final MetricsTimer p75) {
+        this.p75 = p75;
+    }
+
+    public MetricsTimer getP95() {
+        return this.p95;
+    }
+
+    public void setP95(final MetricsTimer p95) {
+        this.p95 = p95;
+    }
+
+    public MetricsTimer getP98() {
+        return this.p98;
+    }
+
+    public void setP98(final MetricsTimer p98) {
+        this.p98 = p98;
+    }
+
+    public MetricsTimer getP99() {
+        return this.p99;
+    }
+
+    public void setP99(final MetricsTimer p99) {
+        this.p99 = p99;
+    }
+
+    public MetricsTimer getP999() {
+        return this.p999;
+    }
+
+    public void setP999(final MetricsTimer p999) {
+        this.p999 = p999;
+    }
+}

+ 164 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/metrics/StandardJaxrsActionReporter.java

@@ -0,0 +1,164 @@
+package com.x.base.core.project.jaxrs.metrics;
+
+import com.codahale.metrics.Timer;
+import com.codahale.metrics.*;
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.x.base.core.project.Context;
+import com.x.base.core.project.config.Config;
+import com.x.base.core.project.connection.ActionResponse;
+import com.x.base.core.project.connection.CipherConnectionAction;
+import com.x.base.core.project.gson.XGsonBuilder;
+
+import java.io.PrintStream;
+import java.text.DateFormat;
+import java.util.*;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+public class StandardJaxrsActionReporter extends ScheduledReporter {
+    private Gson gson = XGsonBuilder.instance();
+    private static final int CONSOLE_WIDTH = 80;
+    private final PrintStream output;
+    private final Locale locale;
+    private final Clock clock;
+    private final DateFormat dateFormat;
+    private Context context;
+
+    public static StandardJaxrsActionReporter.Builder forRegistry( MetricRegistry registry ) {
+        return new StandardJaxrsActionReporter.Builder(registry);
+    }
+
+    private StandardJaxrsActionReporter(MetricRegistry registry, PrintStream output, Locale locale, Clock clock, TimeZone timeZone, TimeUnit rateUnit, TimeUnit durationUnit, MetricFilter filter, ScheduledExecutorService executor, boolean shutdownExecutorOnStop, Set<MetricAttribute> disabledMetricAttributes, Context context) {
+        super(registry, "jaxrs-action-reporter", filter, rateUnit, durationUnit, executor, shutdownExecutorOnStop, disabledMetricAttributes);
+        this.context = context;
+        this.output = output;
+        this.locale = locale;
+        this.clock = clock;
+        this.dateFormat = DateFormat.getDateTimeInstance(3, 2, locale);
+        this.dateFormat.setTimeZone(timeZone);
+    }
+
+    public void report( SortedMap<String, Gauge> gauges, SortedMap<String, Counter> counters, SortedMap<String, Histogram> histograms, SortedMap<String, Meter> meters, SortedMap<String, Timer> timers) {
+        String nodeName = null;
+        JsonElement jsonData = null;
+
+        //将timers数据全部转为Json发送到center指定接口
+        try {
+            nodeName = Config.node();
+            jsonData = gson.toJsonTree( getMetricsTimers(timers) );
+            ActionResponse respone = CipherConnectionAction.put(false,
+                    Config.url_x_program_center_jaxrs("center", "metrics" ) + "/" + nodeName, jsonData);
+        } catch (Exception e) {
+            System.out.println("metrics report to center server got an error!" + e.getMessage() );
+        }
+    }
+
+    private Map<String , MetricsTimerReport> getMetricsTimers(SortedMap<String, Timer> timers ){
+        String dateTime = this.dateFormat.format(new Date(this.clock.getTime()));
+        Map<String, MetricsTimerReport> timerReportMap = new HashMap<>();
+        MetricsTimerReport metricsTimerReport = null;
+        if (!timers.isEmpty()) {
+            Map.Entry entry;
+            Iterator var7 = timers.entrySet().iterator();
+            while(var7.hasNext()) {
+                try{
+                    entry = (Map.Entry)var7.next();
+                    metricsTimerReport = getMetricsTimerReport((Timer)entry.getValue());
+                    metricsTimerReport.setTargetContextName( context.servletContextName() );
+                    metricsTimerReport.setTargetContextCNName( context.name() );
+                    metricsTimerReport.setTargetClassName( (String)entry.getKey() );
+                    metricsTimerReport.setDateTime( dateTime );
+                    timerReportMap.put( (String)entry.getKey(), metricsTimerReport );
+                }catch(Exception e ){
+                    e.printStackTrace();
+                }
+            }
+        }
+        return timerReportMap;
+    }
+
+    private MetricsTimerReport getMetricsTimerReport(Timer timer) {
+        Snapshot snapshot = timer.getSnapshot();
+
+        MetricsTimerReport metricsTimerReport = new MetricsTimerReport();
+        metricsTimerReport.setCount(timer.getCount());
+        metricsTimerReport.setMean_rate(new MetricsTimer( MetricAttribute.MEAN_RATE.name(), this.convertRate(timer.getMeanRate()), this.getRateUnit(),
+                        String.format(this.locale, "mean rate = %2.2f calls/%s", this.convertRate(timer.getMeanRate()), this.getRateUnit())));
+        metricsTimerReport.setM1_rate(new MetricsTimer( MetricAttribute.M1_RATE.name(), this.convertRate(timer.getOneMinuteRate()), this.getRateUnit(),
+                String.format(this.locale, "1-minute rate = %2.2f calls/%s", this.convertRate(timer.getOneMinuteRate()), this.getRateUnit())));
+        metricsTimerReport.setM5_rate(new MetricsTimer( MetricAttribute.M5_RATE.name(), this.convertRate(timer.getFiveMinuteRate()), this.getRateUnit(),
+                String.format(this.locale, "5-minute rate = %2.2f calls/%s", this.convertRate(timer.getFiveMinuteRate()), this.getRateUnit())));
+        metricsTimerReport.setM15_rate(new MetricsTimer( MetricAttribute.M15_RATE.name(), this.convertRate(timer.getFifteenMinuteRate()), this.getRateUnit(),
+                String.format(this.locale, "15-minute rate = %2.2f calls/%s", this.convertRate(timer.getFifteenMinuteRate()), this.getRateUnit())));
+        metricsTimerReport.setMin(new MetricsTimer( MetricAttribute.MIN.name(), this.convertDuration((double)snapshot.getMin()), this.getDurationUnit(),
+                String.format(this.locale, "min = %2.2f %s", this.convertDuration((double)snapshot.getMin()), this.getDurationUnit())));
+        metricsTimerReport.setMax(new MetricsTimer( MetricAttribute.MAX.name(), this.convertDuration((double)snapshot.getMax()), this.getDurationUnit(),
+                String.format(this.locale, "max = %2.2f %s", this.convertDuration((double)snapshot.getMax()), this.getDurationUnit())));
+        metricsTimerReport.setMean(new MetricsTimer( MetricAttribute.MEAN.name(), this.convertDuration((double)snapshot.getMean()), this.getDurationUnit(),
+                String.format(this.locale, "mean = %2.2f %s", this.convertDuration((double)snapshot.getMean()), this.getDurationUnit())));
+        metricsTimerReport.setStddev(new MetricsTimer( MetricAttribute.STDDEV.name(), this.convertDuration((double)snapshot.getStdDev()), this.getDurationUnit(),
+                String.format(this.locale, "stddev = %2.2f %s", this.convertDuration((double)snapshot.getStdDev()), this.getDurationUnit())));
+        metricsTimerReport.setP50(new MetricsTimer( MetricAttribute.P50.name(), this.convertDuration((double)snapshot.getMedian()), this.getDurationUnit(),
+                String.format(this.locale, "median = %2.2f %s", this.convertDuration((double)snapshot.getMedian()), this.getDurationUnit())));
+        metricsTimerReport.setP75(new MetricsTimer( MetricAttribute.P75.name(), this.convertDuration((double)snapshot.get75thPercentile()), this.getDurationUnit(),
+                String.format(this.locale, "75%% <= %2.2f %s", this.convertDuration((double)snapshot.get75thPercentile()), this.getDurationUnit())));
+        metricsTimerReport.setP95(new MetricsTimer( MetricAttribute.P95.name(), this.convertDuration((double)snapshot.get95thPercentile()), this.getDurationUnit(),
+                String.format(this.locale, "95%% <= %2.2f %s", this.convertDuration((double)snapshot.get95thPercentile()), this.getDurationUnit())));
+        metricsTimerReport.setP98(new MetricsTimer( MetricAttribute.P98.name(), this.convertDuration((double)snapshot.get98thPercentile()), this.getDurationUnit(),
+                String.format(this.locale, "98%% <= %2.2f %s", this.convertDuration((double)snapshot.get98thPercentile()), this.getDurationUnit())));
+        metricsTimerReport.setP99(new MetricsTimer( MetricAttribute.P99.name(), this.convertDuration((double)snapshot.get99thPercentile()), this.getDurationUnit(),
+                String.format(this.locale, "99%% <= %2.2f %s", this.convertDuration((double)snapshot.get99thPercentile()), this.getDurationUnit())));
+        metricsTimerReport.setP999(new MetricsTimer( MetricAttribute.P999.name(), this.convertDuration((double)snapshot.get999thPercentile()), this.getDurationUnit(),
+                String.format(this.locale, "99.9%% <= %2.2f %s", this.convertDuration((double)snapshot.get999thPercentile()), this.getDurationUnit())));
+        return metricsTimerReport;
+    }
+
+    public static class Builder {
+        private final MetricRegistry registry;
+        private PrintStream output;
+        private Locale locale;
+        private Clock clock;
+        private TimeZone timeZone;
+        private TimeUnit rateUnit;
+        private TimeUnit durationUnit;
+        private MetricFilter filter;
+        private ScheduledExecutorService executor;
+        private boolean shutdownExecutorOnStop;
+        private Set<MetricAttribute> disabledMetricAttributes;
+
+        private Builder(MetricRegistry registry) {
+            this.registry = registry;
+            this.output = System.out;
+            this.locale = Locale.getDefault();
+            this.clock = Clock.defaultClock();
+            this.timeZone = TimeZone.getDefault();
+            this.rateUnit = TimeUnit.SECONDS;
+            this.durationUnit = TimeUnit.MILLISECONDS;
+            this.filter = MetricFilter.ALL;
+            this.executor = null;
+            this.shutdownExecutorOnStop = true;
+            this.disabledMetricAttributes = Collections.emptySet();
+        }
+
+        public StandardJaxrsActionReporter.Builder convertRatesTo(TimeUnit rateUnit) {
+            this.rateUnit = rateUnit;
+            return this;
+        }
+
+        public StandardJaxrsActionReporter.Builder convertDurationsTo(TimeUnit durationUnit) {
+            this.durationUnit = durationUnit;
+            return this;
+        }
+
+        public StandardJaxrsActionReporter.Builder filter(MetricFilter filter) {
+            this.filter = filter;
+            return this;
+        }
+
+        public StandardJaxrsActionReporter build( Context context ) {
+            return new StandardJaxrsActionReporter(this.registry, this.output, this.locale, this.clock, this.timeZone, this.rateUnit,
+                    this.durationUnit, this.filter, this.executor, this.shutdownExecutorOnStop, this.disabledMetricAttributes, context);
+        }
+    }
+}

+ 144 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/proxy/StandardJaxrsActionProxy.java

@@ -0,0 +1,144 @@
+package com.x.base.core.project.jaxrs.proxy;
+
+import com.x.base.core.project.Context;
+import com.x.base.core.project.annotation.AuditLog;
+import com.x.base.core.project.annotation.JaxrsMethodDescribe;
+import com.x.base.core.project.config.Config;
+import com.x.base.core.project.http.EffectivePerson;
+import com.x.base.core.project.logger.Audit;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import net.sf.cglib.proxy.Enhancer;
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+
+public class StandardJaxrsActionProxy implements MethodInterceptor {
+// 2019-11-29 注释所有metrics相关的汇报能力,排查占用内存过大,导致OOM的问题
+//    private static MetricRegistry metricRegistry = new MetricRegistry();
+//    private static StandardJaxrsActionReporter reporter = null;
+    private Enhancer enhancer = new Enhancer();
+    private Context context;
+
+    public StandardJaxrsActionProxy(Context context) {
+//        if( reporter == null) {
+//            reporter = StandardJaxrsActionReporter.forRegistry(metricRegistry)
+//                    .convertRatesTo(TimeUnit.SECONDS)
+//                    .convertDurationsTo(TimeUnit.MILLISECONDS)
+//                    .build(context);
+//            reporter.start(15, TimeUnit.SECONDS);
+//        }
+    }
+
+    public Object getProxy(Class clazz){
+        enhancer.setSuperclass(clazz);
+        enhancer.setCallback(this);
+        return enhancer.create();
+    }
+
+    @Override
+    public Object intercept( Object o, Method method, Object[] objects, MethodProxy methodProxy ) throws Throwable {
+//        Timer timer = null;
+//        Timer.Context ctx = null;
+//        try{
+//            timer = metricRegistry.timer(MetricRegistry.name(method.getDeclaringClass(),method.getName(), ""));
+//            ctx = timer.time();
+//        }catch(Exception e){
+//            e.printStackTrace();
+//        }
+
+        //执行真实的服务方法
+        Object result = methodProxy.invokeSuper(o, objects);
+
+//        try{
+//            ctx.stop();
+//        }catch(Exception e){
+//            e.printStackTrace();
+//        }
+        try{
+            //尝试记录审计日志
+            if( Config.logLevel().audit().enable() ){
+                tryToRecordAuditLog( o, method, objects, methodProxy );
+            }
+        }catch(Exception e){
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * 根据调用方法的注释判断该类的操作是否需要记录到审计日志
+     * 如果需要记录,则执行审计日志记录方法
+     * @param o
+     * @param method
+     * @param objects
+     * @param methodProxy
+     * @throws ClassNotFoundException
+     */
+    private void tryToRecordAuditLog(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws ClassNotFoundException {
+
+        //分析调用过程,记录审计日志
+        Annotation[] annotations_auditLog = method.getAnnotationsByType(AuditLog.class);
+        //该方法是否有AuditLog注解,如果有,则需要记录审计日志
+        if( ArrayUtils.isNotEmpty( annotations_auditLog )){
+            //获取操作名称,首选AuditLog的value属性属性,如果没有,则选择JaxrsMethodDescribe的value属性
+            String operationName = getOperationName( method, annotations_auditLog );
+            //有AuditLog注解,说明需要记录审计日志
+            doRecordAuditLog( method, objects, operationName );
+        }
+    }
+
+    /**
+     * 获取方法的操作名称,首选AuditLog的value属性属性,如果没有,则选择JaxrsMethodDescribe的value属性
+     * @param method
+     * @param annotations_auditLog
+     * @return
+     */
+    private String getOperationName( Method method, Annotation[] annotations_auditLog ) {
+        String operationName = ((AuditLog)annotations_auditLog[0]).operation();
+        Annotation[] annotations_jaxrsMethodDescribe = null;
+        if( StringUtils.isEmpty(operationName)){
+            //取JaxrsMethodDescribe
+            annotations_jaxrsMethodDescribe = method.getAnnotationsByType(JaxrsMethodDescribe.class);
+            if( ArrayUtils.isNotEmpty( annotations_jaxrsMethodDescribe )){
+                operationName = ((JaxrsMethodDescribe)annotations_auditLog[0]).value();
+            }
+        }
+        return operationName;
+    }
+
+    /**
+     * 记录审计日志执行方法
+     * @param method
+     * @param objects
+     * @param operationName
+     */
+    private void doRecordAuditLog( Method method, Object[] objects, String operationName ) throws ClassNotFoundException {
+        if( StringUtils.isEmpty(operationName)){
+            operationName = method.getName();
+        }
+        int parameterCount = method.getParameterCount();
+        Class<?>[] parameterClasses = method.getParameterTypes();
+        EffectivePerson effectivePerson = null;
+        if( parameterCount > 0 && ArrayUtils.isNotEmpty( parameterClasses ) && ArrayUtils.isNotEmpty( objects ) ){
+            //解析出参数effectivePerson
+            int effectivePersonParamIndex = 99;
+            for( int i = 0 ; i< parameterClasses.length; i++ ){
+                if(StringUtils.equals( "com.x.base.core.project.http.EffectivePerson", parameterClasses[i].getName() )){
+                    effectivePersonParamIndex = i;
+                    break;
+                }
+            }
+            if( effectivePersonParamIndex < 99 ){
+                effectivePerson = (EffectivePerson) objects[effectivePersonParamIndex];
+                Logger logger = LoggerFactory.getLogger(Class.forName( method.getDeclaringClass().getName() ));
+                Audit audit = logger.audit(effectivePerson);
+                audit.log(null, operationName);
+            }
+        }
+    }
+}

+ 5 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/logger/Audit.java

@@ -69,8 +69,8 @@ public class Audit {
 	}
 
 	/**
-	 * 移动集团审计日志格式:
-	 * 默认时间戳之类的信息|日志版本号|请求ID|请求深度|请求链|OA账号(OA&合同不为空)|员工工号(报账不为空)
+	 * 审计日志格式:
+	 * 默认时间戳之类的信息|日志版本号|请求ID|请求深度|请求链|登录账号|员工工号
 	 * |系统归属|系统名称|模块名称|表单类型|操作名称|是否统计上报|扩展信息|时间戳|耗时|请求结果|主机IP
 	 * |主机名|终端类型|终端IP |终端型号|终端IMEI|错误堆栈
 	 * @throws Exception
@@ -97,16 +97,16 @@ public class Audit {
 				String system = Objects.toString(Config.logLevel().audit().getSystem(), "OA");
 				String systemName = Objects.toString(Config.logLevel().audit().getSystemName(), "OA系统");
 				String companycode = Objects.toString(Config.logLevel().audit().getCompanycode(), "");
-				String mode = this.uri;
+				/*String mode = this.uri;
 				if(this.uri!=null) {
 					String[] uris = this.uri.split("/");
 					if (uris.length > 1) {
 						mode = uris[1];
 					}
-				}
+				}*/
 				PrintStream stream = (PrintStream) Config.resource(Config.RESOURCE_AUDITLOGPRINTSTREAM);
 				stream.printf("%tF %tT|2.0||1||%s|%s|%s|%s|%s||%s|true|%s|%d|%d|true|%s|%s|%s|%s|%s||", end, end, this.userId,
-						this.userId, systemName, system, mode, op, this.getParameter(op, system, companycode), end.getTime(), elapsed, hostAddress, hostName,
+						this.userId, systemName, system, this.uri, op, this.getParameter(op, system, companycode), end.getTime(), elapsed, hostAddress, hostName,
 						getTerminal(), this.remoteAddress, this.userAgent);
 				stream.println();
 			}

+ 47 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/script/AbstractResources.java

@@ -0,0 +1,47 @@
+package com.x.base.core.project.script;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.project.AbstractContext;
+import com.x.base.core.project.Applications;
+import com.x.base.core.project.webservices.WebservicesClient;
+
+public abstract class AbstractResources {
+
+	private EntityManagerContainer entityManagerContainer;
+	private AbstractContext context;
+	private Applications applications;
+	private WebservicesClient webservicesClient;
+
+	public WebservicesClient getWebservicesClient() {
+		return webservicesClient;
+	}
+
+	public void setWebservicesClient(WebservicesClient webservicesClient) {
+		this.webservicesClient = webservicesClient;
+	}
+
+	public EntityManagerContainer getEntityManagerContainer() {
+		return entityManagerContainer;
+	}
+
+	public void setEntityManagerContainer(EntityManagerContainer entityManagerContainer) {
+		this.entityManagerContainer = entityManagerContainer;
+	}
+
+	public Applications getApplications() {
+		return applications;
+	}
+
+	public void setApplications(Applications applications) {
+		this.applications = applications;
+	}
+
+	public AbstractContext getContext() {
+		return context;
+	}
+
+	public void setContext(AbstractContext context) {
+		this.context = context;
+	}
+
+}

+ 171 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/script/ScriptFactory.java

@@ -0,0 +1,171 @@
+package com.x.base.core.project.script;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Objects;
+
+import javax.script.Compilable;
+import javax.script.CompiledScript;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.lang3.BooleanUtils;
+
+import com.x.base.core.entity.JpaObject;
+import com.x.base.core.project.config.Config;
+
+import jdk.nashorn.api.scripting.ScriptObjectMirror;
+
+public class ScriptFactory {
+
+	public static final ScriptEngine scriptEngine = (new ScriptEngineManager())
+			.getEngineByName(Config.SCRIPTING_ENGINE_NAME);
+
+	private static CompiledScript COMPILEDSCRIPT_INITIALSERVICESCRIPTTEXT;
+	private static CompiledScript COMPILEDSCRIPT_INITIALSCRIPTTEXT;
+
+	public static final String BINDING_NAME_RESOURCES = "resources";
+	public static final String BINDING_NAME_EFFECTIVEPERSON = "effectivePerson";
+	public static final String BINDING_NAME_PARAMETERS = "parameters";
+
+	public static CompiledScript initialServiceScriptText() throws Exception {
+		if (COMPILEDSCRIPT_INITIALSERVICESCRIPTTEXT == null) {
+			synchronized (ScriptFactory.class) {
+				if (COMPILEDSCRIPT_INITIALSERVICESCRIPTTEXT == null) {
+					String text = Config.initialServiceScriptText();
+					COMPILEDSCRIPT_INITIALSERVICESCRIPTTEXT = ((Compilable) scriptEngine).compile(text);
+				}
+			}
+		}
+		return COMPILEDSCRIPT_INITIALSERVICESCRIPTTEXT;
+	}
+
+	public static CompiledScript compile(String text) throws Exception {
+		return ((Compilable) scriptEngine).compile(text);
+	}
+
+	public static CompiledScript initialScriptText() throws Exception {
+		if (COMPILEDSCRIPT_INITIALSCRIPTTEXT == null) {
+			synchronized (ScriptFactory.class) {
+				if (COMPILEDSCRIPT_INITIALSCRIPTTEXT == null) {
+					String text = Config.initialScriptText();
+					COMPILEDSCRIPT_INITIALSCRIPTTEXT = ((Compilable) scriptEngine).compile(text);
+				}
+			}
+		}
+		return COMPILEDSCRIPT_INITIALSCRIPTTEXT;
+	}
+
+	public static String functionalization(String text) {
+		StringBuffer sb = new StringBuffer();
+		sb.append("(function(){").append(System.lineSeparator());
+		sb.append(Objects.toString(text, "")).append(System.lineSeparator());
+		sb.append("})();");
+		return sb.toString();
+	}
+
+	public static List<String> asStringList(Object o) throws Exception {
+		return readAsStringList(o);
+	}
+
+	public static String asString(Object o) throws Exception {
+		return Objects.toString(o);
+	}
+
+	public static Boolean asBoolean(Object o) throws Exception {
+		return BooleanUtils.toBooleanObject(Objects.toString(o));
+	}
+
+	public static List<String> asDistinguishedName(Object o) throws Exception {
+		List<String> list = new ArrayList<>();
+		if (null != o) {
+			if (o instanceof CharSequence) {
+				list.add(Objects.toString(o));
+			} else if (o instanceof Iterable) {
+				for (Object obj : (Iterable<?>) o) {
+					if (null != obj) {
+						if (obj instanceof CharSequence) {
+							list.add(Objects.toString(obj));
+						} else {
+							Object d = PropertyUtils.getProperty(obj, JpaObject.DISTINGUISHEDNAME);
+							if (null != d) {
+								list.add(Objects.toString(d));
+							}
+						}
+					}
+				}
+			} else if (o instanceof ScriptObjectMirror) {
+				ScriptObjectMirror som = (ScriptObjectMirror) o;
+				if (som.isArray()) {
+					Object[] objs = (som.to(Object[].class));
+					for (Object obj : objs) {
+						if (null != obj) {
+							if (obj instanceof CharSequence) {
+								list.add(Objects.toString(obj));
+							} else {
+								Object d = PropertyUtils.getProperty(obj, JpaObject.DISTINGUISHEDNAME);
+								if (null != d) {
+									list.add(Objects.toString(d));
+								}
+							}
+						}
+					}
+				} else {
+					Object d = PropertyUtils.getProperty(o, JpaObject.DISTINGUISHEDNAME);
+					if (null != d) {
+						list.add(Objects.toString(d));
+					}
+				}
+			}
+		}
+		return list;
+	}
+
+	private static List<String> readAsStringList(Object obj) throws Exception {
+		List<String> list = new ArrayList<>();
+		for (Object o : iterator(obj)) {
+			list.add(Objects.toString(o));
+		}
+		return list;
+	}
+
+	private static List<Object> iterator(Object obj) throws Exception {
+		List<Object> results = new ArrayList<>();
+		iterator(obj, results);
+		return results;
+	}
+
+	private static void iterator(Object obj, List<Object> results) throws Exception {
+		if (null == obj) {
+			return;
+		}
+		List<Object> list = new ArrayList<>();
+		if (obj.getClass().isArray()) {
+			for (Object o : (Object[]) obj) {
+				list.add(o);
+			}
+		} else if (obj instanceof Collection) {
+			for (Object o : (Collection<?>) obj) {
+				list.add(o);
+			}
+		} else if (obj instanceof ScriptObjectMirror) {
+			ScriptObjectMirror som = (ScriptObjectMirror) obj;
+			if (som.isArray()) {
+				Object[] os = (som.to(Object[].class));
+				for (Object o : os) {
+					list.add(o);
+				}
+			} else {
+				results.add(som);
+			}
+		} else {
+			results.add(obj);
+		}
+		for (Object o : list) {
+			iterator(o, results);
+		}
+	}
+}

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

@@ -41,6 +41,8 @@ public class ScriptingEngine {
 	public static final String BINDINGNAME_ROUTES = "routes";
 	public static final String BINDINGNAME_ROUTE = "route";
 
+	public static final String BINDINGNAME_RESOURCES = "resources";
+
 	public ScriptingEngine(ScriptEngine scriptEngine) {
 		this.scriptEngine = scriptEngine;
 	}

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

@@ -1,6 +1,5 @@
 package com.x.base.core.project.tools;
 
-import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Objects;

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

@@ -1,5 +1,6 @@
 package com.x.base.core.project.tools;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
@@ -394,7 +395,15 @@ public class ListTools {
 		if (isEmpty(sourceList) || isEmpty(groupList)) {
 			return sourceList;
 		}
-		Map<Object, List<W>> map = groupList.stream().collect(Collectors.groupingBy(o -> {
+		/* 不过滤的情况下 null 值导致 element cannot be mapped to a null key */
+		Map<Object, List<W>> map = groupList.stream().filter(o -> {
+			try {
+				return (null != PropertyUtils.getProperty(o, groupProperty));
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+			return false;
+		}).collect(Collectors.groupingBy(o -> {
 			try {
 				return PropertyUtils.getProperty(o, groupProperty);
 			} catch (Exception e) {

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

@@ -31,9 +31,9 @@ import org.slf4j.helpers.MessageFormatter;
 public class StringTools {
 	public static final Pattern MOBILE_REGEX = Pattern.compile(
 			"(^(\\+)?0{0,2}852\\d{8}$)|(^(\\+)?0{0,2}853\\d{8}$)|(^(\\+)?0{0,2}886\\d{9}$)|(^1(3|4|5|6|7|8|9)\\d{9}$)");
-	/** 中文,英文,数字,-,. 【】() */
+	/** 中文,英文,数字,-,.· 【】() */
 	public static final Pattern SIMPLY_REGEX = Pattern
-			.compile("^[\u4e00-\u9fa5a-zA-Z0-9\\_\\(\\)\\-\\ \\.\\【\\】\\(\\)]*$");
+			.compile("^[\u4e00-\u9fa5a-zA-Z0-9\\_\\(\\)\\-\\ \\.\\ \\·\\【\\】\\(\\)]*$");
 	public static final Pattern FILENAME_REGEX = Pattern.compile("[^/\\\\<>*?|\"]+(\\.?)[^/\\\\<>*?|\"]+");
 	/**
 	 * RFC822 compliant regex adapted for Java
@@ -47,7 +47,9 @@ public class StringTools {
 
 	public static final String[] SQL_LIKE = new String[] { "_", "%" };
 
-	public static final String[] SQL_LIKE_SHIFT = new String[] { "\\\\_", "\\\\%" };
+	public static final String[] SQL_LIKE_SHIFT = new String[] { "^_", "^%" };
+
+	public static final char SQL_ESCAPE_CHAR = '^';
 
 	private static final Random random = new Random();
 

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

@@ -12,10 +12,12 @@ import com.x.base.core.project.annotation.ModuleType;
 		"com.x.query.core.entity.neural.InText", "com.x.query.core.entity.neural.OutText",
 		"com.x.query.core.entity.neural.InValue", "com.x.query.core.entity.neural.OutValue",
 		"com.x.query.core.entity.neural.Model", "com.x.query.core.entity.schema.Table",
-		"com.x.query.core.entity.schema.Statement", "com.x.processplatform.core.entity.content.Review",
+		"com.x.query.core.entity.schema.Statement", "com.x.processplatform.core.entity.content.Task",
+		"com.x.processplatform.core.entity.content.TaskCompleted", "com.x.processplatform.core.entity.content.Read",
+		"com.x.processplatform.core.entity.content.ReadCompleted", "com.x.processplatform.core.entity.content.Review",
 		"com.x.processplatform.core.entity.content.Work", "com.x.processplatform.core.entity.content.WorkCompleted",
-		"com.x.processplatform.core.entity.content.Attachment", "com.x.cms.core.entity.Document","com.x.cms.core.entity.Review",
-		"com.x.cms.core.entity.AppInfo", "com.x.cms.core.entity.CategoryInfo",
+		"com.x.processplatform.core.entity.content.Attachment", "com.x.cms.core.entity.Document",
+		"com.x.cms.core.entity.Review", "com.x.cms.core.entity.AppInfo", "com.x.cms.core.entity.CategoryInfo",
 		"com.x.query.dynamic.entity.*" }, storageTypes = { StorageType.processPlatform, StorageType.cms }, storeJars = {
 				"x_query_core_entity", "x_organization_core_entity", "x_organization_core_express",
 				"x_processplatform_core_entity", "x_cms_core_entity",

+ 19 - 1
o2server/x_base_core_project/src/test/java/com/x/base/core/project/test/CryptoTest.java

@@ -1,18 +1,36 @@
 package com.x.base.core.project.test;
 
+import java.util.Random;
+
 import javax.crypto.Cipher;
 import javax.crypto.spec.SecretKeySpec;
 
 import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.ClassUtils;
 import org.junit.Test;
 
 public class CryptoTest {
 
 	@Test
 	public void test() throws Exception {
+	
 		System.out.println(CryptoClass.encrypt("password", "12345678"));
 	}
-
+	public static void main(String[] args) {
+		String javaType = "List<WorkStatus>";
+		String className = javaType.substring(javaType.indexOf("<")+1, javaType.indexOf(">"));
+		System.out.println(className);
+		Class clazz = null;
+		try {
+			//clazz = Class.forName(className);
+		Class<?> ss = ClassUtils.getClass(className);
+		System.out.println(ss);
+		} catch (ClassNotFoundException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		System.out.println(clazz);
+	}
 	@Test
 	public void test1() throws Exception {
 		System.out.println(CryptoClass.decrypt("imXg6AUytfr+uVm31GQvyw==", "12345678"));

+ 37 - 12
o2server/x_base_core_project/src/test/java/com/x/base/core/project/test/gson/TestClient.java

@@ -1,25 +1,50 @@
 package com.x.base.core.project.test.gson;
 
+import java.util.Map.Entry;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
 import org.junit.Test;
 
-import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.x.base.core.project.gson.XGsonBuilder;
 
 public class TestClient {
 
-	@Test
-	public void test() {
-		Foo foo = new Foo();
-		Gson gson = new Gson();
-		System.out.println(gson.toJson(foo));
+	public JsonElement mergeSection(JsonElement data, String[] paths, String key, JsonElement source) throws Exception {
+		JsonObject data_part_object = this.navigateElseEmptyObject(data, paths).getAsJsonObject();
+		JsonObject source_part_object = this.navigateElseEmptyObject(source, paths).getAsJsonObject();
+		for (Entry<String, JsonElement> entry : source_part_object.entrySet()) {
+			if (!StringUtils.equals(key, entry.getKey())) {
+				data_part_object.add(entry.getKey(), entry.getValue());
+			}
+		}
+		return data;
+	}
 
+	private JsonElement navigateElseEmptyObject(JsonElement jsonElement, String[] paths) throws Exception {
+		if (paths.length == 0) {
+			return jsonElement;
+		}
+		if (jsonElement.isJsonPrimitive() || jsonElement.isJsonNull()) {
+			return new JsonObject();
+		}
+		if (jsonElement.isJsonArray()) {
+			return navigateElseEmptyObject(jsonElement.getAsJsonArray().get(NumberUtils.toInt(paths[0])),
+					ArrayUtils.remove(paths, 0));
+		}
+		return navigateElseEmptyObject(jsonElement.getAsJsonObject().get(paths[0]), ArrayUtils.remove(paths, 0));
 	}
 
 	@Test
-	public void test2() {
-		String value = "{\"aaa\":\"aaa\",\"bbb\":\"bbb\"}";
-		Gson gson = new Gson();
-		Foo foo = gson.fromJson(value, Foo.class);
-		System.out.println(foo.aaa);
-		//System.out.println(foo.bbb);
+	public void test2() throws Exception {
+		String json1 = "{'level':'aaaa','city':{'area1':'hangzhou'},'cat':[{'tj':{'a1':true,'a2':false}},{'qt':111}]}";
+		String json2 = "{'city':{'area2':'ningbo'},'cat':[{'tj':{'a2':true,'a3':'ggg'}},{'qt':222}]}";
+		JsonElement data1 = XGsonBuilder.instance().fromJson(json1, JsonElement.class);
+		JsonElement data2 = XGsonBuilder.instance().fromJson(json2, JsonElement.class);
+		System.out.println(mergeSection(data1, new String[] { "cat", "0", "tj" }, "", data2));
 	}
+
 }

+ 66 - 0
o2server/x_base_core_project/src/test/java/test/com/x/base/core/project/HeapDumper.java

@@ -0,0 +1,66 @@
+package test.com.x.base.core.project;
+
+import javax.management.MBeanServer;
+import java.lang.management.ManagementFactory;
+import com.sun.management.HotSpotDiagnosticMXBean;
+
+public class HeapDumper {
+	// This is the name of the HotSpot Diagnostic MBean
+	private static final String HOTSPOT_BEAN_NAME = "com.sun.management:type=HotSpotDiagnostic";
+	// field to store the hotspot diagnostic MBean
+	private static volatile HotSpotDiagnosticMXBean hotspotMBean;
+
+	static void dumpHeap(String fileName, boolean live) {
+		// initialize hotspot diagnostic MBean
+		initHotspotMBean();
+		try {
+			hotspotMBean.dumpHeap(fileName, live);
+		} catch (RuntimeException re) {
+			throw re;
+		} catch (Exception exp) {
+			throw new RuntimeException(exp);
+		}
+	}
+
+	// initialize the hotspot diagnostic MBean field
+	private static void initHotspotMBean() {
+		if (hotspotMBean == null) {
+			synchronized (HeapDumper.class) {
+				if (hotspotMBean == null) {
+					hotspotMBean = getHotspotMBean();
+				}
+			}
+		}
+	}
+
+	// get the hotspot diagnostic MBean from the
+	// platform MBean server
+	private static HotSpotDiagnosticMXBean getHotspotMBean() {
+		try {
+			MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+			HotSpotDiagnosticMXBean bean = ManagementFactory.newPlatformMXBeanProxy(server, HOTSPOT_BEAN_NAME,
+					HotSpotDiagnosticMXBean.class);
+			return bean;
+		} catch (RuntimeException re) {
+			throw re;
+		} catch (Exception exp) {
+			throw new RuntimeException(exp);
+		}
+	}
+
+	public static void main(String[] args) {
+		// default heap dump file name
+		String fileName = "d:/heap.hprof1";
+		// by default dump only the live objects
+		boolean live = true;
+		// simple command line options
+		switch (args.length) {
+		case 2:
+			live = args[1].equals("true");
+		case 1:
+			fileName = args[0];
+		}
+		// dump the heap
+		dumpHeap(fileName, live);
+	}
+}

+ 60 - 0
o2server/x_base_core_project/src/test/java/test/com/x/base/core/project/TestClient.java

@@ -1,13 +1,24 @@
 package test.com.x.base.core.project;
 
+import java.io.File;
 import java.lang.reflect.Field;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
+import javax.script.Bindings;
+import javax.script.Compilable;
+import javax.script.CompiledScript;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.SimpleScriptContext;
+
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.junit.Test;
 
 import com.x.base.core.project.tools.StringTools;
+import com.x.base.core.project.utils.time.ClockStamp;
 
 import test.com.x.base.connection.Foo;
 
@@ -36,4 +47,53 @@ public class TestClient {
 		ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
 
 	}
+
+	@Test
+	public void test3() throws Exception {
+		File file = new File("D:/O2/o2oa/o2server/commons/mooToolsScriptText.js");
+		String text = FileUtils.readFileToString(file, "utf-8");
+		for (int i = 0; i < 10; i++) {
+			ClockStamp.INIT(i, "1");
+			ScriptContext scriptContext = new SimpleScriptContext();
+			ClockStamp.STAMP("2");
+			Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
+			ClockStamp.STAMP("3");
+			ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
+			ClockStamp.STAMP("4");
+			//ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
+			ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("Nashorn");
+			ClockStamp.STAMP("5");
+			scriptEngine.eval(text, scriptContext);
+			ClockStamp.STAMP("6");
+			ClockStamp.TRACE();
+		}
+	}
+
+	@Test
+	public void test4() throws Exception {
+		ClockStamp.INIT(-1, "1");
+		File file = new File("D:/O2/o2oa/o2server/commons/mooToolsScriptText.js");
+		ClockStamp.STAMP("2");
+		String text = FileUtils.readFileToString(file, "utf-8");
+		ClockStamp.STAMP("3");
+		ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
+		ClockStamp.STAMP("4");
+		//		ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
+		ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("Nashorn");
+		ClockStamp.STAMP("5");
+		CompiledScript script = ((Compilable) scriptEngine).compile(text);
+		ClockStamp.STAMP("6");
+		ClockStamp.TRACE();
+		for (int i = 0; i < 10; i++) {
+			ClockStamp.INIT(i, "1");
+			ScriptContext scriptContext = new SimpleScriptContext();
+			ClockStamp.STAMP("2");
+			Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
+			ClockStamp.STAMP("3");
+			//scriptEngine.eval(text, scriptContext);
+			script.eval(scriptContext);
+			ClockStamp.STAMP("4");
+			ClockStamp.TRACE();
+		}
+	}
 }

+ 7 - 7
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/attachment/AttachmentAction.java

@@ -53,7 +53,7 @@ public class AttachmentAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe(value = "上传附件(带回调).", action = ActionUploadCallback.class)
@@ -76,7 +76,7 @@ public class AttachmentAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe(value = "根据附件Id获取单个附件信息.", action = ActionAttachmentGet.class)
@@ -95,7 +95,7 @@ public class AttachmentAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe(value = "根据Subject获取Attachment列表.", action = ActionAttachmentListBySubjectId.class)
@@ -114,7 +114,7 @@ public class AttachmentAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe(value = "根据ID下载指定附件", action = StandardJaxrsAction.class)
@@ -132,7 +132,7 @@ public class AttachmentAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe(value = "根据Work下载附件,设定是否使用stream输出", action = ActionDownloadWithIdStream.class)
@@ -151,7 +151,7 @@ public class AttachmentAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe(value = "删除指定subject下指定的附件.", action = ActionAttachmentDelete.class)
@@ -169,7 +169,7 @@ public class AttachmentAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 }

+ 2 - 2
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/attachment/PictureAction.java

@@ -50,7 +50,7 @@ public class PictureAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe(value = "更新版块图标.", action = ActionSectionIconUpdate.class)
@@ -71,6 +71,6 @@ public class PictureAction extends StandardJaxrsAction {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
 		}
-		asyncResponse.resume(ResponseFactory.getDefaultActionResultResponse(result));
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 50 - 46
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/configsetting/BBSConfigSettingAction.java

@@ -1,4 +1,5 @@
 package com.x.bbs.assemble.control.jaxrs.configsetting;
+
 import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
@@ -8,6 +9,8 @@ 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 javax.ws.rs.core.Response;
@@ -26,99 +29,100 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.bbs.assemble.control.jaxrs.configsetting.exception.ExceptionConfigSettingIdEmpty;
 import com.x.bbs.assemble.control.jaxrs.configsetting.exception.ExceptionConfigSettingProcess;
 
-
-@Path( "user/setting" )
+@Path("user/setting")
 @JaxrsDescribe("论坛设置操作")
-public class BBSConfigSettingAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( BBSConfigSettingAction.class );	
+public class BBSConfigSettingAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(BBSConfigSettingAction.class);
 
 	@JaxrsMethodDescribe(value = "更新论坛设置对象, 配置信息不允许新建和删除操作.", action = ActionUpdate.class)
 	@PUT
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response update(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void update(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionUpdate.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionUpdate().execute( request, effectivePerson, jsonElement );
+				result = new ActionUpdate().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionConfigSettingProcess( e, "系统在更新配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionConfigSettingProcess(e, "系统在更新配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe(value = "根据ID获取论坛设置对象.", action = ActionGet.class)
 	@GET
-	@Path( "{id}" )
+	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("配置信息ID") @PathParam( "id" ) String id) {
+	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);
-		if( id == null || id.isEmpty() ){
+		if (id == null || id.isEmpty()) {
 			Exception exception = new ExceptionConfigSettingIdEmpty();
-			result.error( exception );
-		}else{
+			result.error(exception);
+		} else {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionConfigSettingProcess( e, "系统在更新配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
-		}			
-		return ResponseFactory.getDefaultActionResultResponse(result);
+				Exception exception = new ExceptionConfigSettingProcess(e, "系统在更新配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
+
 	@JaxrsMethodDescribe(value = "获取所有论坛设置信息列表.", action = ActionGetAll.class)
 	@GET
-	@Path( "all" )
+	@Path("all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAll(@Context HttpServletRequest request ) {
+	public void listAll(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<List<ActionGetAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
-			result = new ActionGetAll().execute( request, effectivePerson );
+			result = new ActionGetAll().execute(request, effectivePerson);
 		} catch (Exception e) {
 			result = new ActionResult<>();
-			Exception exception = new ExceptionConfigSettingProcess( e, "系统在更新配置信息时发生异常!" );
-			result.error( exception );
-			logger.error( e, effectivePerson, request, null);
+			Exception exception = new ExceptionConfigSettingProcess(e, "系统在更新配置信息时发生异常!");
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
+
 	@JaxrsMethodDescribe(value = "根据编码获取论坛设置对象.", action = ActionGetWithCode.class)
-	@Path( "code" )
+	@Path("code")
 	@PUT
-	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8 )
-	@Consumes( MediaType.APPLICATION_JSON )
-	public Response getByCode( @Context HttpServletRequest request, JsonElement jsonElement ) {
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void getByCode(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionGetWithCode.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if( check ){
+		if (check) {
 			try {
-				result = new ActionGetWithCode().execute( request, effectivePerson, jsonElement );
+				result = new ActionGetWithCode().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionConfigSettingProcess( e, "系统在更新配置信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
+				Exception exception = new ExceptionConfigSettingProcess(e, "系统在更新配置信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
 			}
-		}			
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 16 - 13
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/configsetting/BBSConfigSettingAnonymousAction.java

@@ -1,9 +1,12 @@
 package com.x.bbs.assemble.control.jaxrs.configsetting;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 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 javax.ws.rs.core.Response;
@@ -19,28 +22,28 @@ import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.bbs.assemble.control.jaxrs.configsetting.exception.ExceptionConfigSettingProcess;
 
-@Path( "setting" )
+@Path("setting")
 @JaxrsDescribe("论坛配置查询(匿名)")
-public class BBSConfigSettingAnonymousAction extends StandardJaxrsAction{
-	
-	private static  Logger logger = LoggerFactory.getLogger( BBSConfigSettingAnonymousAction.class );
-	
+public class BBSConfigSettingAnonymousAction extends StandardJaxrsAction {
+
+	private static Logger logger = LoggerFactory.getLogger(BBSConfigSettingAnonymousAction.class);
+
 	@JaxrsMethodDescribe(value = "获取BBS系统名称配置的论坛设置对象.", action = ActionGetBBSName.class)
 	@GET
-	@Path( "bbsName" )
+	@Path("bbsName")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response getBBSName(@Context HttpServletRequest request ) {
+	public void getBBSName(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<ActionGetBBSName.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
-			result = new ActionGetBBSName().execute( request, effectivePerson );
+			result = new ActionGetBBSName().execute(request, effectivePerson);
 		} catch (Exception e) {
 			result = new ActionResult<>();
-			Exception exception = new ExceptionConfigSettingProcess( e, "系统在更新配置信息时发生异常!" );
-			result.error( exception );
-			logger.error( e, effectivePerson, request, null);
-		}		
-		return ResponseFactory.getDefaultActionResultResponse(result);
+			Exception exception = new ExceptionConfigSettingProcess(e, "系统在更新配置信息时发生异常!");
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 28 - 24
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/foruminfo/ForumInfoAction.java

@@ -8,6 +8,8 @@ import javax.ws.rs.GET;
 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 javax.ws.rs.core.Response;
@@ -29,10 +31,11 @@ import com.x.bbs.assemble.control.jaxrs.foruminfo.exception.ExceptionForumInfoPr
 @JaxrsDescribe("论坛信息管理")
 public class ForumInfoAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger( ForumInfoAction.class );
-	
+	private static Logger logger = LoggerFactory.getLogger(ForumInfoAction.class);
+
 	/**
 	 * 访问论坛信息,匿名用户可以访问
+	 * 
 	 * @param request
 	 * @return
 	 */
@@ -41,22 +44,23 @@ public class ForumInfoAction extends StandardJaxrsAction {
 	@Path("view/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response viewAllWithMyPermission( @Context HttpServletRequest request ) {
+	public void viewAllWithMyPermission(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
 		ActionResult<List<ActionGetAllWithPermission.Wo>> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson( request );
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGetAllWithPermission().execute( request, effectivePerson );
+				result = new ActionGetAllWithPermission().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionForumInfoProcess( e, "获取登录者可以访问到的所有ForumInfo的信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionForumInfoProcess(e, "获取登录者可以访问到的所有ForumInfo的信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe(value = "根据指定ID获取论坛信息.", action = ActionGet.class)
@@ -64,28 +68,28 @@ public class ForumInfoAction extends StandardJaxrsAction {
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("表单ID") @PathParam("id") String id ) {
+	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 );
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if( check ){
-			if( id == null || id.isEmpty() ){
+		if (check) {
+			if (id == null || id.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionForumInfoIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionForumInfoProcess( e, "根据指定ID获取论坛信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionForumInfoProcess(e, "根据指定ID获取论坛信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 40 - 34
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/foruminfo/ForumInfoManagerUserAction.java

@@ -10,6 +10,8 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
@@ -32,10 +34,11 @@ import com.x.bbs.assemble.control.jaxrs.foruminfo.exception.ExceptionForumInfoPr
 @JaxrsDescribe("论坛信息查询(匿名)")
 public class ForumInfoManagerUserAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger( ForumInfoManagerUserAction.class );	
+	private static Logger logger = LoggerFactory.getLogger(ForumInfoManagerUserAction.class);
 
 	/**
 	 * 访问论坛信息,登录用户访问
+	 * 
 	 * @param request
 	 * @return
 	 */
@@ -44,53 +47,56 @@ public class ForumInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAll( @Context HttpServletRequest request ) {
+	public void listAll(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<List<ActionGetAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionGetAll().execute( request, effectivePerson );
+				result = new ActionGetAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionForumInfoProcess( e, "获取所有ForumInfo的信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionForumInfoProcess(e, "获取所有ForumInfo的信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		
-		return ResponseFactory.getDefaultActionResultResponse(result);
+
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	/**
 	 * 保存论坛信息,登录用户访问
+	 * 
 	 * @param request
 	 * @return
 	 */
 	@JaxrsMethodDescribe(value = "创建新的论坛信息或者更新论坛信息.", action = ActionSave.class)
 	@POST
-	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post( @Context HttpServletRequest request, JsonElement jsonElement ) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		Boolean check = true;
-		EffectivePerson effectivePerson = this.effectivePerson( request );
-		if(check){
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionForumInfoProcess( e, "创建新的论坛信息或者更新论坛信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionForumInfoProcess(e, "创建新的论坛信息或者更新论坛信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
+
 	/**
 	 * 删除论坛信息,登录用户访问
+	 * 
 	 * @param request
 	 * @return
 	 */
@@ -99,29 +105,29 @@ public class ForumInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("表单ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		Boolean check = true;
 		EffectivePerson effectivePerson = this.effectivePerson(request);
-		
-		if( check ){
-			if( id == null || id.isEmpty() ){
+
+		if (check) {
+			if (id == null || id.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionForumInfoIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionForumInfoProcess( e, "系统在删除论坛信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionForumInfoProcess(e, "系统在删除论坛信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse( result );
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 19 - 16
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/image/ImageBase64Action.java

@@ -5,6 +5,8 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 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 javax.ws.rs.core.Response;
@@ -24,30 +26,31 @@ import com.x.bbs.assemble.control.jaxrs.foruminfo.exception.ExceptionForumInfoPr
 @Path("image/encode")
 @JaxrsDescribe("图片编码服务")
 public class ImageBase64Action extends StandardJaxrsAction {
-	
-	private static  Logger logger = LoggerFactory.getLogger( ImageBase64Action.class );	
-	
+
+	private static Logger logger = LoggerFactory.getLogger(ImageBase64Action.class);
+
 	@Path("base64")
-	@JaxrsMethodDescribe( value = "将URL指向的图片转换成base64String.", action = ActionImageBase64.class )
+	@JaxrsMethodDescribe(value = "将URL指向的图片转换成base64String.", action = ActionImageBase64.class)
 	@POST
-	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8 )
-	@Consumes( MediaType.APPLICATION_JSON )
-	public Response convert( @Context HttpServletRequest request, JsonElement jsonElement ) { 
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void convert(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<String> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionImageBase64().execute( request, effectivePerson, jsonElement );
+				result = new ActionImageBase64().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionForumInfoProcess( e, "获取所有ForumInfo的信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionForumInfoProcess(e, "获取所有ForumInfo的信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		
-		return ResponseFactory.getDefaultActionResultResponse(result);	
+
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 13 - 11
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/login/LoginAction.java

@@ -5,6 +5,8 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 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 javax.ws.rs.core.Response;
@@ -25,27 +27,27 @@ import com.x.bbs.assemble.control.service.bean.RoleAndPermission;
 @JaxrsDescribe("登入信息服务")
 public class LoginAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(LoginAction.class);
+	private static Logger logger = LoggerFactory.getLogger(LoginAction.class);
 
-	@JaxrsMethodDescribe( value = "用户进入系统,获取并且更新用户权限角色信息.", action = ActionLogin.class )
+	@JaxrsMethodDescribe(value = "用户进入系统,获取并且更新用户权限角色信息.", action = ActionLogin.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response login( @Context HttpServletRequest request ) {
+	public void login(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<RoleAndPermission> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionLogin().execute( request, effectivePerson );
+				result = new ActionLogin().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionForumInfoProcess( e, "获取所有ForumInfo的信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionForumInfoProcess(e, "获取所有ForumInfo的信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 13 - 11
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/login/LogoutAction.java

@@ -5,6 +5,8 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 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 javax.ws.rs.core.Response;
@@ -24,27 +26,27 @@ import com.x.bbs.assemble.control.service.bean.RoleAndPermission;
 @Path("logout")
 @JaxrsDescribe("登出服务")
 public class LogoutAction extends StandardJaxrsAction {
-	private static  Logger logger = LoggerFactory.getLogger(LogoutAction.class);
+	private static Logger logger = LoggerFactory.getLogger(LogoutAction.class);
 
-	@JaxrsMethodDescribe( value = "退出系统.", action = ActionLogout.class )
+	@JaxrsMethodDescribe(value = "退出系统.", action = ActionLogout.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response login( @Context HttpServletRequest request ) {
+	public void login(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<RoleAndPermission> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionLogout().execute( request, effectivePerson );
+				result = new ActionLogout().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionForumInfoProcess( e, "获取所有ForumInfo的信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionForumInfoProcess(e, "获取所有ForumInfo的信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 15 - 12
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/login/MobileIndexAction.java

@@ -7,6 +7,8 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 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 javax.ws.rs.core.Response;
@@ -26,7 +28,7 @@ import com.x.bbs.assemble.control.jaxrs.foruminfo.exception.ExceptionForumInfoPr
 @JaxrsDescribe("手机APP论坛首页信息内容查询")
 public class MobileIndexAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger(MobileIndexAction.class);
+	private static Logger logger = LoggerFactory.getLogger(MobileIndexAction.class);
 
 	/**
 	 * 手机用户访问论坛信息,首页所有的信息整合在一起 匿名用户可以访问
@@ -34,27 +36,28 @@ public class MobileIndexAction extends StandardJaxrsAction {
 	 * @param request
 	 * @return
 	 */
-	@JaxrsMethodDescribe( value = "获取登录者可以访问到的所有ForumInfo的信息列表.", action = ActionMobileIndex.class )
+	@JaxrsMethodDescribe(value = "获取登录者可以访问到的所有ForumInfo的信息列表.", action = ActionMobileIndex.class)
 	@GET
 	@Path("view/all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response viewAllWithMyPermission( @Context HttpServletRequest request ) {
-		ActionResult<List< ActionMobileIndex.Wo >> result = new ActionResult<>();
+	public void viewAllWithMyPermission(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request) {
+		ActionResult<List<ActionMobileIndex.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionMobileIndex().execute( request, effectivePerson );
+				result = new ActionMobileIndex().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionForumInfoProcess( e, "获取所有ForumInfo的信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionForumInfoProcess(e, "获取所有ForumInfo的信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 }

+ 64 - 60
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/permissioninfo/PermissionInfoAction.java

@@ -6,6 +6,8 @@ import javax.ws.rs.GET;
 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 javax.ws.rs.core.Response;
@@ -28,126 +30,128 @@ import com.x.bbs.assemble.control.jaxrs.permissioninfo.exception.ExceptionSubjec
 @JaxrsDescribe("权限查询服务")
 public class PermissionInfoAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger( PermissionInfoAction.class );
+	private static Logger logger = LoggerFactory.getLogger(PermissionInfoAction.class);
 
-	@JaxrsMethodDescribe( value = "查询用户在指定板块中的所有操作权限.", action = ActionGetSectionOperationPermissoin.class )
+	@JaxrsMethodDescribe(value = "查询用户在指定板块中的所有操作权限.", action = ActionGetSectionOperationPermissoin.class)
 	@GET
 	@Path("section/{sectionId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response getSectionOperationPermissoin( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("版块ID") @PathParam("sectionId") String sectionId ) {
+	public void getSectionOperationPermissoin(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("版块ID") @PathParam("sectionId") String sectionId) {
 		ActionResult<ActionGetSectionOperationPermissoin.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
-		Boolean check = true;		
-		if( check ){
-			if( sectionId == null || sectionId.isEmpty() ){
+		Boolean check = true;
+		if (check) {
+			if (sectionId == null || sectionId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSectionIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGetSectionOperationPermissoin().execute( request, effectivePerson, sectionId );
+				result = new ActionGetSectionOperationPermissoin().execute(request, effectivePerson, sectionId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionConfigSettingProcess( e, "查询用户在指定板块中的所有操作权限时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionConfigSettingProcess(e, "查询用户在指定板块中的所有操作权限时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "查询用户对指定主题的所有操作权限.", action = ActionGetSubjectOperationPermissoin.class )
+
+	@JaxrsMethodDescribe(value = "查询用户对指定主题的所有操作权限.", action = ActionGetSubjectOperationPermissoin.class)
 	@GET
 	@Path("subject/{subjectId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response getSubjectOperationPermissoin( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("主贴ID") @PathParam("subjectId") String subjectId ) {
+	public void getSubjectOperationPermissoin(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("主贴ID") @PathParam("subjectId") String subjectId) {
 		ActionResult<ActionGetSubjectOperationPermissoin.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
-		Boolean check = true;		
-		if( check ){
-			if( subjectId == null || subjectId.isEmpty() ){
+		Boolean check = true;
+		if (check) {
+			if (subjectId == null || subjectId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSubjectIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGetSubjectOperationPermissoin().execute( request, effectivePerson, subjectId );
+				result = new ActionGetSubjectOperationPermissoin().execute(request, effectivePerson, subjectId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionConfigSettingProcess( e, "查询用户对指定主题的所有操作权限时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionConfigSettingProcess(e, "查询用户对指定主题的所有操作权限时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "查询用户对指定主题的所有操作权限.", action = ActionCheckSubjectPublishable.class )
+
+	@JaxrsMethodDescribe(value = "查询用户对指定主题的所有操作权限.", action = ActionCheckSubjectPublishable.class)
 	@GET
 	@Path("subjectPublishable/{sectionId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response subjectPublishable( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("版块ID") @PathParam("sectionId") String sectionId ) {
+	public void subjectPublishable(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("版块ID") @PathParam("sectionId") String sectionId) {
 		ActionResult<ActionCheckSubjectPublishable.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if( check ){
-			if( sectionId == null || sectionId.isEmpty() ){
+		if (check) {
+			if (sectionId == null || sectionId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSectionIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
-		}		
-		if(check){
+		}
+		if (check) {
 			try {
-				result = new ActionCheckSubjectPublishable().execute( request, effectivePerson, sectionId );
+				result = new ActionCheckSubjectPublishable().execute(request, effectivePerson, sectionId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionConfigSettingProcess( e, "查询用户中否可以在指定版块中发布主题时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionConfigSettingProcess(e, "查询用户中否可以在指定版块中发布主题时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "查询用户是否可以对指定主题进行回复.", action = ActionCheckReplyPublishable.class )
+
+	@JaxrsMethodDescribe(value = "查询用户是否可以对指定主题进行回复.", action = ActionCheckReplyPublishable.class)
 	@GET
 	@Path("replyPublishable/{subjectId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response replyPublishable( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("主贴ID") @PathParam("subjectId") String subjectId ) {
+	public void replyPublishable(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("主贴ID") @PathParam("subjectId") String subjectId) {
 		ActionResult<ActionCheckReplyPublishable.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if( check ){
-			if( subjectId == null || subjectId.isEmpty() ){
+
+		if (check) {
+			if (subjectId == null || subjectId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSubjectIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionCheckReplyPublishable().execute( request, effectivePerson, subjectId );
+				result = new ActionCheckReplyPublishable().execute(request, effectivePerson, subjectId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionConfigSettingProcess( e, "查询用户是否可以对指定主题进行回复时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionConfigSettingProcess(e, "查询用户是否可以对指定主题进行回复时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 52 - 47
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/permissioninfo/PermissionInfoAdminAction.java

@@ -8,6 +8,8 @@ import javax.ws.rs.GET;
 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 javax.ws.rs.core.Response;
@@ -31,99 +33,102 @@ import com.x.bbs.assemble.control.jaxrs.permissioninfo.exception.ExceptionSectio
 @JaxrsDescribe("权限管理服务")
 public class PermissionInfoAdminAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger( PermissionInfoAdminAction.class );
-	
-	@JaxrsMethodDescribe( value = "获取指定的角色Code绑定的所有PermissionInfo的信息列表.", action = ActionListPermissionByRoleCode.class )
+	private static Logger logger = LoggerFactory.getLogger(PermissionInfoAdminAction.class);
+
+	@JaxrsMethodDescribe(value = "获取指定的角色Code绑定的所有PermissionInfo的信息列表.", action = ActionListPermissionByRoleCode.class)
 	@GET
 	@Path("role/{roleCode}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listPermissionByRoleCode( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("角色编码") @PathParam("roleCode") String roleCode ) {
+	public void listPermissionByRoleCode(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("角色编码") @PathParam("roleCode") String roleCode) {
 		ActionResult<List<ActionListPermissionByRoleCode.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if( check ){
-			if( roleCode == null || roleCode.isEmpty() ){
+
+		if (check) {
+			if (roleCode == null || roleCode.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionRoleCodeEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListPermissionByRoleCode().execute( request, effectivePerson, roleCode );
+				result = new ActionListPermissionByRoleCode().execute(request, effectivePerson, roleCode);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionPermissionInfoProcess( e, "获取指定的角色Code绑定的所有PermissionInfo的信息列表时发生异常." );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionPermissionInfoProcess(e,
+						"获取指定的角色Code绑定的所有PermissionInfo的信息列表时发生异常.");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "获取指定的论坛绑定的所有PermissionInfo的信息列表.", action = ActionListPermissionByRoleCode.class )
+	@JaxrsMethodDescribe(value = "获取指定的论坛绑定的所有PermissionInfo的信息列表.", action = ActionListPermissionByRoleCode.class)
 	@GET
 	@Path("forum/{forumId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listPermissionByForumId( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("论坛ID") @PathParam("forumId") String forumId ) {
+	public void listPermissionByForumId(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("论坛ID") @PathParam("forumId") String forumId) {
 		ActionResult<List<ActionListPermissionByRoleCode.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if( check ){
-			if( forumId == null || forumId.isEmpty() ){
+
+		if (check) {
+			if (forumId == null || forumId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionForumIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
-		}		
-		if(check){
+		}
+		if (check) {
 			try {
-				result = new ActionListPermissionByRoleCode().execute( request, effectivePerson, forumId );
+				result = new ActionListPermissionByRoleCode().execute(request, effectivePerson, forumId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionPermissionInfoProcess( e, "获取指定的论坛绑定的所有PermissionInfo的信息列表时发生异常." );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionPermissionInfoProcess(e, "获取指定的论坛绑定的所有PermissionInfo的信息列表时发生异常.");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		
-		return ResponseFactory.getDefaultActionResultResponse(result);
+
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "获取指定的版块绑定的所有PermissionInfo的信息列表.", action = ActionListPermissionBySection.class )
+
+	@JaxrsMethodDescribe(value = "获取指定的版块绑定的所有PermissionInfo的信息列表.", action = ActionListPermissionBySection.class)
 	@GET
 	@Path("section/{sectionId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listPermissionBySection( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("版块ID") @PathParam("sectionId") String sectionId ) {
+	public void listPermissionBySection(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("版块ID") @PathParam("sectionId") String sectionId) {
 		ActionResult<List<ActionListPermissionBySection.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if( check ){
-			if( sectionId == null || sectionId.isEmpty() ){
+
+		if (check) {
+			if (sectionId == null || sectionId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSectionIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListPermissionBySection().execute( request, effectivePerson, sectionId );
+				result = new ActionListPermissionBySection().execute(request, effectivePerson, sectionId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionPermissionInfoProcess( e, "获取指定的版块绑定的所有PermissionInfo的信息列表时发生异常." );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionPermissionInfoProcess(e, "获取指定的版块绑定的所有PermissionInfo的信息列表时发生异常.");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 38 - 37
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/replyinfo/ReplyInfoAction.java

@@ -9,6 +9,8 @@ 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 javax.ws.rs.core.Response;
@@ -32,76 +34,75 @@ import com.x.bbs.assemble.control.jaxrs.replyinfo.exception.ExceptionReplyInfoPr
 @Path("reply")
 @JaxrsDescribe("回复查询服务")
 public class ReplyInfoAction extends StandardJaxrsAction {
-	private static  Logger logger = LoggerFactory.getLogger( ReplyInfoAction.class );
+	private static Logger logger = LoggerFactory.getLogger(ReplyInfoAction.class);
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的ReplyInfo, 下一页.", action = ActionListWithSubjectForPage.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的ReplyInfo, 下一页.", action = ActionListWithSubjectForPage.class)
 	@PUT
-	@Path( "filter/list/page/{page}/count/{count}" )
-	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8 )
-	@Consumes( MediaType.APPLICATION_JSON )
-	public Response listWithSubjectForPage( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("页码") @PathParam("page") Integer page, 
-			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement ) {
+	@Path("filter/list/page/{page}/count/{count}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listWithSubjectForPage(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("页码") @PathParam("page") Integer page,
+			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListWithSubjectForPage.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if( check ){
-			if( page == null ){
+
+		if (check) {
+			if (page == null) {
 				check = false;
 				Exception exception = new ExceptionPageEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if( check ){
-			if( count == null ){
+		if (check) {
+			if (count == null) {
 				check = false;
 				Exception exception = new ExceptionCountEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListWithSubjectForPage().execute( request, effectivePerson, page , count, jsonElement );
+				result = new ActionListWithSubjectForPage().execute(request, effectivePerson, page, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionReplyInfoProcess( e, "列示根据过滤条件的ReplyInfo下一页时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionReplyInfoProcess(e, "列示根据过滤条件的ReplyInfo下一页时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据指定ID获取回贴信息.", action = ActionGet.class )
+	@JaxrsMethodDescribe(value = "根据指定ID获取回贴信息.", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("回复信息ID") @PathParam("id") String id ) {
+	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);
 		Boolean check = true;
-		
-		if( check ){
-			if( id == null || id.isEmpty() ){
+
+		if (check) {
+			if (id == null || id.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionReplyIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionReplyInfoProcess( e, "根据指定ID获取回贴信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionReplyInfoProcess(e, "根据指定ID获取回贴信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 61 - 58
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/replyinfo/ReplyInfoManagerUserAction.java

@@ -10,6 +10,8 @@ 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 javax.ws.rs.core.Response;
@@ -33,113 +35,114 @@ import com.x.bbs.assemble.control.jaxrs.roleinfo.exception.ExceptionRoleInfoProc
 @Path("user/reply")
 @JaxrsDescribe("主量回复服务")
 public class ReplyInfoManagerUserAction extends StandardJaxrsAction {
-	private static  Logger logger = LoggerFactory.getLogger( ReplyInfoManagerUserAction.class );
-	
-	@JaxrsMethodDescribe( value = "创建新的回贴信息或者更新回贴信息.", action = ActionSave.class )
+	private static Logger logger = LoggerFactory.getLogger(ReplyInfoManagerUserAction.class);
+
+	@JaxrsMethodDescribe(value = "创建新的回贴信息或者更新回贴信息.", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response save( @Context HttpServletRequest request, JsonElement jsonElement ) {
+	public void save(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson( request );
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionReplyInfoProcess( e, "创建新的回贴信息或者更新回贴信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionReplyInfoProcess(e, "创建新的回贴信息或者更新回贴信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "采纳回复信息.", action = ActionAcceptReply.class )
+
+	@JaxrsMethodDescribe(value = "采纳回复信息.", action = ActionAcceptReply.class)
 	@Path("accept")
 	@PUT
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response accept( @Context HttpServletRequest request, JsonElement jsonElement ) {
+	public void accept(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<WrapOutId> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson( request );
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAcceptReply().execute( request, effectivePerson, jsonElement );
+				result = new ActionAcceptReply().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "采纳回复信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "采纳回复信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
+
 	/**
-	 * 用户只有自己的回复可以删除
-	 * 管理员和版主可以删除其他回复内容
+	 * 用户只有自己的回复可以删除 管理员和版主可以删除其他回复内容
+	 * 
 	 * @param request
 	 * @param id
 	 * @return
 	 */
-	@JaxrsMethodDescribe( value = "根据ID删除指定的回贴信息.", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除指定的回贴信息.", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("回复信息ID") @PathParam("id") String id ) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("回复信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
-		Boolean check = true;		
-		if( check ){
-			if( id == null || id.isEmpty() ){
+		Boolean check = true;
+		if (check) {
+			if (id == null || id.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionReplyIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
-		}			
-		if(check){
+		}
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
+				result = new ActionDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionReplyInfoProcess( e, "根据ID删除指定的回贴信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionReplyInfoProcess(e, "根据ID删除指定的回贴信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "列示我发表的回贴,下一页.", action = ActionListMyReplyForPages.class )
+
+	@JaxrsMethodDescribe(value = "列示我发表的回贴,下一页.", action = ActionListMyReplyForPages.class)
 	@PUT
-	@Path( "my/list/page/{page}/count/{count}" )
-	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8 )
-	@Consumes( MediaType.APPLICATION_JSON )
-	public Response listMyReplyForPage( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("前一页最后一条记录ID") @PathParam("page") Integer page, 
-			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement ) {
+	@Path("my/list/page/{page}/count/{count}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listMyReplyForPage(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("前一页最后一条记录ID") @PathParam("page") Integer page,
+			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionListMyReplyForPages.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListMyReplyForPages().execute( request, effectivePerson, page , count );
+				result = new ActionListMyReplyForPages().execute(request, effectivePerson, page, count);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionReplyInfoProcess( e, "列示我发表的回贴下一页时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionReplyInfoProcess(e, "列示我发表的回贴下一页时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 116 - 106
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/roleinfo/RoleInfoAction.java

@@ -11,6 +11,8 @@ 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 javax.ws.rs.core.Response;
@@ -36,34 +38,34 @@ public class RoleInfoAction extends StandardJaxrsAction {
 
 	private Logger logger = LoggerFactory.getLogger(RoleInfoAction.class);
 
-	@JaxrsMethodDescribe( value = "获取所有角色信息列表.", action = ActionGetAll.class )
+	@JaxrsMethodDescribe(value = "获取所有角色信息列表.", action = ActionGetAll.class)
 	@GET
 	@Path("all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAll(@Context HttpServletRequest request) {
+	public void listAll(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<List<ActionGetAll.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGetAll().execute( request, effectivePerson );
+				result = new ActionGetAll().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "获取所有RoleInfo的信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "获取所有RoleInfo的信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据论坛角色ID查询论角色信息.", action = ActionGet.class )
+	@JaxrsMethodDescribe(value = "根据论坛角色ID查询论角色信息.", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest 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);
@@ -72,215 +74,223 @@ public class RoleInfoAction extends StandardJaxrsAction {
 			if (id == null || id.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionRoleInfoIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据论坛ID查询论坛的角色列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据论坛ID查询论坛的角色列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据论坛ID查询论坛的角色列表.", action = ActionListByForum.class )
+	@JaxrsMethodDescribe(value = "根据论坛ID查询论坛的角色列表.", action = ActionListByForum.class)
 	@PUT
 	@Path("forum/{forumId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listByForum(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void listByForum(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<List<ActionListByForum.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionListByForum().execute( request, effectivePerson, jsonElement );
+				result = new ActionListByForum().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据论坛ID查询论坛的角色列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据论坛ID查询论坛的角色列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "把一个或者多个角色CODE绑定到一个对象(对象名称#对象类型)上.", action = ActionBindRoleToUser.class )
+	@JaxrsMethodDescribe(value = "把一个或者多个角色CODE绑定到一个对象(对象名称#对象类型)上.", action = ActionBindRoleToUser.class)
 	@PUT
 	@Path("bind/object")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response bindRoleToUser(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void bindRoleToUser(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<WrapOutBoolean> result = new ActionResult<>();
 		WrapOutBoolean wrap = new WrapOutBoolean();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
-		wrap.setValue( false );
+		wrap.setValue(false);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionBindRoleToUser().execute( request, effectivePerson, jsonElement );
+				result = new ActionBindRoleToUser().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "把一个或者多个角色CODE绑定到一个对象(对象名称#对象类型)上时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "把一个或者多个角色CODE绑定到一个对象(对象名称#对象类型)上时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "把一个或者多个对象(对象名称#对象类型)绑定到一个角色CODE上.", action = ActionBindUserToRole.class )
+	@JaxrsMethodDescribe(value = "把一个或者多个对象(对象名称#对象类型)绑定到一个角色CODE上.", action = ActionBindUserToRole.class)
 	@PUT
 	@Path("bind/role")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response bindUserToRole(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void bindUserToRole(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<WrapOutBoolean> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		WrapOutBoolean wrap = new WrapOutBoolean();
-		wrap.setValue( false );
+		wrap.setValue(false);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionBindUserToRole().execute( request, effectivePerson, jsonElement );
+				result = new ActionBindUserToRole().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "把一个或者多个对象(对象名称#对象类型)绑定到一个角色CODE上!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "把一个或者多个对象(对象名称#对象类型)绑定到一个角色CODE上!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据版块ID查询版块的角色列表.", action = ActionListBySection.class )
+	@JaxrsMethodDescribe(value = "根据版块ID查询版块的角色列表.", action = ActionListBySection.class)
 	@PUT
 	@Path("section/{sectionId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listBySection(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void listBySection(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<List<ActionListBySection.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListBySection().execute( request, effectivePerson, jsonElement );
+				result = new ActionListBySection().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据版块ID查询版块的角色列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据版块ID查询版块的角色列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据组织名称查询角色列表.", action = ActionListBySection.class )
+	@JaxrsMethodDescribe(value = "根据组织名称查询角色列表.", action = ActionListBySection.class)
 	@PUT
 	@Path("unit/selected")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listSelectedRoleByUnit(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void listSelectedRoleByUnit(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, JsonElement jsonElement) {
 		ActionResult<List<ActionListBySection.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListBySection().execute( request, effectivePerson, jsonElement );
+				result = new ActionListBySection().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据组织名称查询角色列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据组织名称查询角色列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据用户姓名查询角色列表.", action = ActionListSelectedRoleByUser.class )
+	@JaxrsMethodDescribe(value = "根据用户姓名查询角色列表.", action = ActionListSelectedRoleByUser.class)
 	@PUT
 	@Path("user/selected")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listSelectedRoleByUser(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void listSelectedRoleByUser(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, JsonElement jsonElement) {
 		ActionResult<List<ActionListSelectedRoleByUser.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-	
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionListSelectedRoleByUser().execute( request, effectivePerson, jsonElement );
+				result = new ActionListSelectedRoleByUser().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据用户姓名查询角色列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据用户姓名查询角色列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据角色编码查询绑定的对象列表.", action = ActionLisstBindObjectByRoleCode.class )
+	@JaxrsMethodDescribe(value = "根据角色编码查询绑定的对象列表.", action = ActionLisstBindObjectByRoleCode.class)
 	@PUT
 	@Path("rolecode/selected")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listBindObjectByRoleCode(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void listBindObjectByRoleCode(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, JsonElement jsonElement) {
 		ActionResult<List<ActionLisstBindObjectByRoleCode.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionLisstBindObjectByRoleCode().execute( request, effectivePerson, jsonElement );
+				result = new ActionLisstBindObjectByRoleCode().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据角色编码查询绑定的对象列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据角色编码查询绑定的对象列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "创建新的角色信息或者更新角色信息.", action = ActionSave.class )
+	@JaxrsMethodDescribe(value = "创建新的角色信息或者更新角色信息.", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "创建新的角色信息或者更新角色信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "创建新的角色信息或者更新角色信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除指定的角色信息.", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除指定的角色信息.", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("角色ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -289,19 +299,19 @@ public class RoleInfoAction extends StandardJaxrsAction {
 			if (id == null || id.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionRoleInfoIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionDelete().execute( request, effectivePerson, id );
-			} catch ( Exception e ) {
+				result = new ActionDelete().execute(request, effectivePerson, id);
+			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据ID删除指定的角色信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据ID删除指定的角色信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 48 - 45
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/sectioninfo/SectionInfoAction.java

@@ -8,6 +8,8 @@ import javax.ws.rs.GET;
 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 javax.ws.rs.core.Response;
@@ -30,96 +32,97 @@ import com.x.bbs.assemble.control.jaxrs.sectioninfo.exception.ExceptionSectionId
 @JaxrsDescribe("版块查询服务")
 public class SectionInfoAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger( SectionInfoAction.class );
-	
-	@JaxrsMethodDescribe( value = "根据论坛ID获取所有版块的信息列表.", action = ActionViewWithForum.class )
+	private static Logger logger = LoggerFactory.getLogger(SectionInfoAction.class);
+
+	@JaxrsMethodDescribe(value = "根据论坛ID获取所有版块的信息列表.", action = ActionViewWithForum.class)
 	@GET
 	@Path("viewforum/{forumId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response viewWithForum( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("论坛信息ID") @PathParam("forumId") String forumId ) {
+	public void viewWithForum(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("论坛信息ID") @PathParam("forumId") String forumId) {
 		ActionResult<List<ActionViewWithForum.Wo>> result = new ActionResult<>();
 		Boolean check = true;
-		EffectivePerson effectivePerson = this.effectivePerson( request );
-		if( check ){
-			if( forumId == null || forumId.isEmpty() ){
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		if (check) {
+			if (forumId == null || forumId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionForumIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionViewWithForum().execute( request, effectivePerson, forumId );
+				result = new ActionViewWithForum().execute(request, effectivePerson, forumId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据主版块ID查询所有的子版块信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据主版块ID查询所有的子版块信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse( result );
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据主版块ID查询所有的子版块信息列表.", action = ActionListSubSectionByMainSectionId.class )
+
+	@JaxrsMethodDescribe(value = "根据主版块ID查询所有的子版块信息列表.", action = ActionListSubSectionByMainSectionId.class)
 	@GET
 	@Path("viewsub/{sectionId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listSubSectionByMainSectionId( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("主版块信息ID") @PathParam("sectionId") String sectionId ) {
+	public void listSubSectionByMainSectionId(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("主版块信息ID") @PathParam("sectionId") String sectionId) {
 		ActionResult<List<ActionListSubSectionByMainSectionId.Wo>> result = new ActionResult<>();
 		Boolean check = true;
 		EffectivePerson effectivePerson = this.effectivePerson(request);
-		if( check ){
-			if( sectionId == null || sectionId.isEmpty() ){
+		if (check) {
+			if (sectionId == null || sectionId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSectionIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
-		}		
-		if(check){
+		}
+		if (check) {
 			try {
-				result = new ActionListSubSectionByMainSectionId().execute( request, effectivePerson, sectionId );
+				result = new ActionListSubSectionByMainSectionId().execute(request, effectivePerson, sectionId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据主版块ID查询所有的子版块信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据主版块ID查询所有的子版块信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse( result );
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据指定ID获取版块信息.", action = ActionGet.class )
+	@JaxrsMethodDescribe(value = "根据指定ID获取版块信息.", action = ActionGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("版块信息ID") @PathParam("id") String id ) {
+	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);
 		Boolean check = true;
-		
-		if( check ){
-			if( id == null || id.isEmpty() ){
+
+		if (check) {
+			if (id == null || id.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSectionIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionGet().execute( request, effectivePerson, id );
+				result = new ActionGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据指定ID获取版块信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据指定ID获取版块信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 74 - 69
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/sectioninfo/SectionInfoManagerUserAction.java

@@ -10,6 +10,8 @@ import javax.ws.rs.POST;
 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 javax.ws.rs.core.Response;
@@ -33,148 +35,151 @@ import com.x.bbs.assemble.control.jaxrs.sectioninfo.exception.ExceptionSectionId
 @JaxrsDescribe("版块管理服务")
 public class SectionInfoManagerUserAction extends StandardJaxrsAction {
 
-	private static  Logger logger = LoggerFactory.getLogger( SectionInfoManagerUserAction.class );
-	
-	@JaxrsMethodDescribe( value = "获取所有版块的信息列表.", action = ActionAllSections.class )
+	private static Logger logger = LoggerFactory.getLogger(SectionInfoManagerUserAction.class);
+
+	@JaxrsMethodDescribe(value = "获取所有版块的信息列表.", action = ActionAllSections.class)
 	@GET
 	@Path("all")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllSection( @Context HttpServletRequest request ) {
+	public void listAllSection(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<List<ActionAllSections.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAllSections().execute( request, effectivePerson );
+				result = new ActionAllSections().execute(request, effectivePerson);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "获取所有版块的信息列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "获取所有版块的信息列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse( result );
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据论坛ID获取所有主版块的信息列表(管理).", action = ActionListWithForum.class )
+
+	@JaxrsMethodDescribe(value = "根据论坛ID获取所有主版块的信息列表(管理).", action = ActionListWithForum.class)
 	@GET
 	@Path("forum/{forumId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listWithForum( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("论坛信息ID") @PathParam("forumId") String forumId ) {
+	public void listWithForum(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("论坛信息ID") @PathParam("forumId") String forumId) {
 		ActionResult<List<ActionListWithForum.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if( check ){
-			if( forumId == null || forumId.isEmpty() ){
+		if (check) {
+			if (forumId == null || forumId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionForumIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionListWithForum().execute( request, effectivePerson, forumId );
+				result = new ActionListWithForum().execute(request, effectivePerson, forumId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据论坛ID获取所有主版块的信息列表(管理)时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据论坛ID获取所有主版块的信息列表(管理)时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse( result );
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据主版块ID查询所有的子版块信息列表(管理).", action = ActionAllListSubSectionByMainSectionId.class )
+
+	@JaxrsMethodDescribe(value = "根据主版块ID查询所有的子版块信息列表(管理).", action = ActionAllListSubSectionByMainSectionId.class)
 	@GET
 	@Path("sub/{sectionId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listAllSubSectionByMainSectionId( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("主版块信息ID") @PathParam("sectionId") String sectionId ) {
+	public void listAllSubSectionByMainSectionId(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("主版块信息ID") @PathParam("sectionId") String sectionId) {
 		ActionResult<List<ActionAllListSubSectionByMainSectionId.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
-		Boolean check = true;	
-		if( check ){
-			if( sectionId == null || sectionId.isEmpty() ){
+		Boolean check = true;
+		if (check) {
+			if (sectionId == null || sectionId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSectionIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
-		}		
-		if(check){
+		}
+		if (check) {
 			try {
-				result = new ActionAllListSubSectionByMainSectionId().execute( request, effectivePerson, sectionId );
+				result = new ActionAllListSubSectionByMainSectionId().execute(request, effectivePerson, sectionId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据主版块ID查询所有的子版块信息列表(管理)时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据主版块ID查询所有的子版块信息列表(管理)时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse( result );
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "创建新的版块信息或者更新版块信息.", action = ActionSave.class )
+	@JaxrsMethodDescribe(value = "创建新的版块信息或者更新版块信息.", action = ActionSave.class)
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response post(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void post(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionSave.Wo> result = new ActionResult<>();
 		Boolean check = true;
 		EffectivePerson effectivePerson = this.effectivePerson(request);
-		
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionSave().execute( request, effectivePerson, jsonElement );
+				result = new ActionSave().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "创建新的版块信息或者更新版块信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "创建新的版块信息或者更新版块信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse( result );
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除指定的版块信息,如果版块里有贴子,则不允许删除.", action = ActionDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除指定的版块信息,如果版块里有贴子,则不允许删除.", action = ActionDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request,  @JaxrsParameterDescribe("版块信息ID") @PathParam("id") String id ) {
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("版块信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDelete.Wo> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson( request );
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
-			result = new ActionDelete().execute( request, effectivePerson, id );
+			result = new ActionDelete().execute(request, effectivePerson, id);
 		} catch (Exception e) {
 			result = new ActionResult<>();
-			Exception exception = new ExceptionRoleInfoProcess( e, "根据ID删除指定的版块信息时发生异常!" );
-			result.error( exception );
-			logger.error( e, effectivePerson, request, null);
-		}	
-		return ResponseFactory.getDefaultActionResultResponse(result);
+			Exception exception = new ExceptionRoleInfoProcess(e, "根据ID删除指定的版块信息时发生异常!");
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据ID删除指定的版块信息,如果版块里有贴子,则全部删除.", action = ActionDeleteForce.class )
+
+	@JaxrsMethodDescribe(value = "根据ID删除指定的版块信息,如果版块里有贴子,则全部删除.", action = ActionDeleteForce.class)
 	@DELETE
 	@Path("force/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response deleteForce(@Context HttpServletRequest request, 
+	public void deleteForce(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("版块信息ID") @PathParam("id") String id) {
 		ActionResult<ActionDeleteForce.Wo> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson( request );
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
-			result = new ActionDeleteForce().execute( request, effectivePerson, id );
+			result = new ActionDeleteForce().execute(request, effectivePerson, id);
 		} catch (Exception e) {
 			result = new ActionResult<>();
-			Exception exception = new ExceptionRoleInfoProcess( e, "根据ID删除指定的版块信息时发生异常!" );
-			result.error( exception );
-			logger.error( e, effectivePerson, request, null);
+			Exception exception = new ExceptionRoleInfoProcess(e, "根据ID删除指定的版块信息时发生异常!");
+			result.error(exception);
+			logger.error(e, effectivePerson, request, null);
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 42 - 40
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/subjectinfo/SubjectAttachmentAction.java

@@ -9,6 +9,8 @@ import javax.ws.rs.GET;
 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 javax.ws.rs.core.Response;
@@ -31,15 +33,15 @@ import com.x.bbs.assemble.control.jaxrs.subjectinfo.exception.ExceptionSubjectId
 @Path("subjectattach")
 @JaxrsDescribe("主贴附件管理服务")
 public class SubjectAttachmentAction extends StandardJaxrsAction {
-	private static  Logger logger = LoggerFactory.getLogger(SubjectAttachmentAction.class);
-	
-	@JaxrsMethodDescribe( value = "根据指定ID获取附件信息.", action = ActionAttachmentGet.class )
+	private static Logger logger = LoggerFactory.getLogger(SubjectAttachmentAction.class);
+
+	@JaxrsMethodDescribe(value = "根据指定ID获取附件信息.", action = ActionAttachmentGet.class)
 	@GET
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("附件信息ID") @PathParam("id") String id ) {
+	public void get(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("附件信息ID") @PathParam("id") String id) {
 		ActionResult<ActionAttachmentGet.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
@@ -51,25 +53,25 @@ public class SubjectAttachmentAction extends StandardJaxrsAction {
 				logger.error(exception, effectivePerson, request, null);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAttachmentGet().execute( request, effectivePerson, id );
+				result = new ActionAttachmentGet().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据指定ID获取版块信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据指定ID获取版块信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据ID删除BBSSubjectAttachment数据对象.", action = ActionAttachmentDelete.class )
+	@JaxrsMethodDescribe(value = "根据ID删除BBSSubjectAttachment数据对象.", action = ActionAttachmentDelete.class)
 	@DELETE
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("附件信息ID") @PathParam("id") String id) {
 		ActionResult<ActionAttachmentDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -80,25 +82,25 @@ public class SubjectAttachmentAction extends StandardJaxrsAction {
 			result.error(exception);
 			logger.error(exception, effectivePerson, request, null);
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionAttachmentDelete().execute( request, effectivePerson, id );
+				result = new ActionAttachmentDelete().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据指定ID获取版块信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据指定ID获取版块信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "根据主题ID获取BBSSubjectAttachment列表.", action = ActionAttachmentListBySubjectId.class )
+	@JaxrsMethodDescribe(value = "根据主题ID获取BBSSubjectAttachment列表.", action = ActionAttachmentListBySubjectId.class)
 	@GET
 	@Path("list/subject/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listBySubjectId(@Context HttpServletRequest request, 
+	public void listBySubjectId(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id) {
 		ActionResult<List<ActionAttachmentListBySubjectId.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -109,26 +111,26 @@ public class SubjectAttachmentAction extends StandardJaxrsAction {
 			result.error(exception);
 			logger.error(exception, effectivePerson, request, null);
 		}
-		if( check ){
+		if (check) {
 			try {
-				result = new ActionAttachmentListBySubjectId().execute( request, effectivePerson, id );
+				result = new ActionAttachmentListBySubjectId().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据主题ID获取BBSSubjectAttachment列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据主题ID获取BBSSubjectAttachment列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "将图片附件转为base64编码.", action = ActionImageToBase64.class )
+	@JaxrsMethodDescribe(value = "将图片附件转为base64编码.", action = ActionImageToBase64.class)
 	@GET
 	@Path("{id}/binary/base64/{size}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response imageToBase64(@Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("图片文件ID") @PathParam("id") String id, 
+	public void imageToBase64(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("图片文件ID") @PathParam("id") String id,
 			@JaxrsParameterDescribe("最大高宽值") @PathParam("size") String size) {
 		ActionResult<WrapOutString> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -141,16 +143,16 @@ public class SubjectAttachmentAction extends StandardJaxrsAction {
 				logger.error(exception, effectivePerson, request, null);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionImageToBase64().execute( request, effectivePerson, id, size );
+				result = new ActionImageToBase64().execute(request, effectivePerson, id, size);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据指定ID获取版块信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据指定ID获取版块信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 125 - 117
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/subjectinfo/SubjectInfoAction.java

@@ -9,6 +9,8 @@ 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 javax.ws.rs.core.Response;
@@ -31,226 +33,232 @@ import com.x.bbs.assemble.control.jaxrs.subjectinfo.exception.ExceptionSubjectId
 @Path("subject")
 @JaxrsDescribe("主贴查询服务")
 public class SubjectInfoAction extends StandardJaxrsAction {
-	private static  Logger logger = LoggerFactory.getLogger( SubjectInfoAction.class );
-	
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的推荐主题列表.", action = ActionSubjectListRecommendedForPages.class )
+	private static Logger logger = LoggerFactory.getLogger(SubjectInfoAction.class);
+
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的推荐主题列表.", action = ActionSubjectListRecommendedForPages.class)
 	@PUT
 	@Path("recommended/list/page/{page}/count/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listRecommendedSubjectForPage( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("展示页码") @PathParam("page") Integer page, 
-			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement ) {
+	public void listRecommendedSubjectForPage(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("展示页码") @PathParam("page") Integer page,
+			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionSubjectListRecommendedForPages.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		
-		if(check){
+
+		if (check) {
 			try {
-				result = new ActionSubjectListRecommendedForPages().execute( request, effectivePerson, page, count, jsonElement );
+				result = new ActionSubjectListRecommendedForPages().execute(request, effectivePerson, page, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "列示根据过滤条件的推荐主题列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "列示根据过滤条件的推荐主题列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "获取所有推荐到BBS首页的主题列表.", action = ActionSubjectListRecommendedForBBSIndex.class )
+
+	@JaxrsMethodDescribe(value = "获取所有推荐到BBS首页的主题列表.", action = ActionSubjectListRecommendedForBBSIndex.class)
 	@GET
 	@Path("recommended/index/{count}")
-	@Produces( HttpMediaType.APPLICATION_JSON_UTF_8 )
-	@Consumes( MediaType.APPLICATION_JSON )
-	public Response listRecommendedSubjectForBBSIndex( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("查询的最大条目数量") @PathParam("count") Integer count ) {
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void listRecommendedSubjectForBBSIndex(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("查询的最大条目数量") @PathParam("count") Integer count) {
 		ActionResult<List<ActionSubjectListRecommendedForBBSIndex.Wo>> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson( request );
-		Boolean check = true;		
-		if( check ){
-			if( count == null || count <= 0 ){
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		Boolean check = true;
+		if (check) {
+			if (count == null || count <= 0) {
 				count = 10;
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSubjectListRecommendedForBBSIndex().execute( request, effectivePerson, count );
+				result = new ActionSubjectListRecommendedForBBSIndex().execute(request, effectivePerson, count);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "获取所有推荐到BBS首页的主题列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "获取所有推荐到BBS首页的主题列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	//所有的置顶贴应该全部取出
-	@JaxrsMethodDescribe( value = "获取所有可以取到的置顶贴列表.", action = ActionSubjectListTop.class )
+
+	// 所有的置顶贴应该全部取出
+	@JaxrsMethodDescribe(value = "获取所有可以取到的置顶贴列表.", action = ActionSubjectListTop.class)
 	@GET
 	@Path("top/{sectionId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listTopSubject( @Context HttpServletRequest request, 
+	public void listTopSubject(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
 			@JaxrsParameterDescribe("版块信息ID") @PathParam("sectionId") String sectionId) {
 		ActionResult<List<ActionSubjectListTop.Wo>> result = new ActionResult<>();
 		Boolean check = true;
-		EffectivePerson effectivePerson = this.effectivePerson( request );
-		
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+
 		if (check) {
-			if ( sectionId == null || sectionId.isEmpty() ) {
+			if (sectionId == null || sectionId.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSectionIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSubjectListTop().execute( request, effectivePerson, sectionId );
+				result = new ActionSubjectListTop().execute(request, effectivePerson, sectionId);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "获取所有可以取到的置顶贴列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "获取所有可以取到的置顶贴列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的精华主题列表.", action = ActionSubjectListCreamedForPages.class )
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的精华主题列表.", action = ActionSubjectListCreamedForPages.class)
 	@PUT
 	@Path("creamed/list/page/{page}/count/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listCreamedSubjectForPage( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page, 
-			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement ) {
+	public void listCreamedSubjectForPage(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page,
+			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionSubjectListCreamedForPages.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if( check ){ if( page == null ){ page = 1; } }
-		if( check ){ if( count == null ){ count = 20; } }
-		if(check){
+		if (check) {
+			if (page == null) {
+				page = 1;
+			}
+		}
+		if (check) {
+			if (count == null) {
+				count = 20;
+			}
+		}
+		if (check) {
 			try {
-				result = new ActionSubjectListCreamedForPages().execute( request, effectivePerson, page, count, jsonElement );
+				result = new ActionSubjectListCreamedForPages().execute(request, effectivePerson, page, count,
+						jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "列示根据过滤条件的精华主题列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "列示根据过滤条件的精华主题列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的SubjectInfo,下一页.", action = ActionSubjectListForPage.class )
+
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的SubjectInfo,下一页.", action = ActionSubjectListForPage.class)
 	@PUT
 	@Path("filter/list/page/{page}/count/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listSubjectForPage( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page, 
-			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement ) {
+	public void listSubjectForPage(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page,
+			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionSubjectListForPage.Wo>> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson( request );
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSubjectListForPage().execute( request, effectivePerson, page, count, jsonElement );
+				result = new ActionSubjectListForPage().execute(request, effectivePerson, page, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "列示根据过滤条件的推荐主题列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "列示根据过滤条件的推荐主题列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的SubjectInfo,为首页准备的服务.", action = ActionSubjectListForBBSIndex.class )
+
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的SubjectInfo,为首页准备的服务.", action = ActionSubjectListForBBSIndex.class)
 	@PUT
 	@Path("index/list/page/{page}/count/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listSubjectForBBSIndex( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page, 
-			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement ) {
+	public void listSubjectForBBSIndex(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request, @JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page,
+			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionSubjectListForBBSIndex.Wo>> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson( request );
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSubjectListForBBSIndex().execute( request, effectivePerson, page, count, jsonElement );
+				result = new ActionSubjectListForBBSIndex().execute(request, effectivePerson, page, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "列示根据过滤条件的推荐主题列表时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "列示根据过滤条件的推荐主题列表时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的SubjectInfo,下一页.", action = ActionSubjectSearchForPage.class )
+
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的SubjectInfo,下一页.", action = ActionSubjectSearchForPage.class)
 	@PUT
 	@Path("search/list/page/{page}/count/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response searchSubjectForPage( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page, 
-			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, 
-			JsonElement jsonElement ) {
+	public void searchSubjectForPage(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page,
+			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, JsonElement jsonElement) {
 		ActionResult<List<ActionSubjectSearchForPage.Wo>> result = new ActionResult<>();
-		EffectivePerson effectivePerson = this.effectivePerson( request );
+		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
 
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSubjectSearchForPage().execute( request, effectivePerson, page, count, jsonElement );
+				result = new ActionSubjectSearchForPage().execute(request, effectivePerson, page, count, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "列示根据过滤条件的SubjectInfo时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "列示根据过滤条件的SubjectInfo时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
-	
-	@JaxrsMethodDescribe( value = "根据指定ID查看主贴具体信息,需要记录查询次数和热度的.", action = ActionSubjectView.class )
+
+	@JaxrsMethodDescribe(value = "根据指定ID查看主贴具体信息,需要记录查询次数和热度的.", action = ActionSubjectView.class)
 	@GET
 	@Path("view/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response viewSubject( @Context HttpServletRequest request, 
-			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
+	public void viewSubject(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id) {
 		ActionResult<ActionSubjectView.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if( check ){
-			if( id == null || id.isEmpty() ){
+		if (check) {
+			if (id == null || id.isEmpty()) {
 				check = false;
 				Exception exception = new ExceptionSubjectIdEmpty();
-				result.error( exception );
+				result.error(exception);
 			}
 		}
-		if(check){
+		if (check) {
 			try {
-				result = new ActionSubjectView().execute( request, effectivePerson, id );
+				result = new ActionSubjectView().execute(request, effectivePerson, id);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据指定ID查看主题具体信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据指定ID查看主题具体信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 56 - 55
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/subjectinfo/SubjectInfoManagerUserAction.java

@@ -11,9 +11,10 @@ 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 javax.ws.rs.core.Response;
 
 import com.google.gson.JsonElement;
 import com.x.base.core.project.annotation.JaxrsDescribe;
@@ -40,7 +41,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response get( @Context HttpServletRequest request, 
+	public void get( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectGet.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -63,7 +64,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "设置为精华主题.", action = ActionSubjectSetCream.class )
@@ -71,7 +72,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("setCream/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response setCream( @Context HttpServletRequest request, 
+	public void setCream( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectSetCream.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -93,7 +94,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "取消精华主题.", action = ActionSubjectNonCream.class )
@@ -101,7 +102,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("nonCream/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response nonCream( @Context HttpServletRequest request, 
+	public void nonCream( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectNonCream.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -124,7 +125,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "设置为原创主题.", action = ActionSubjectSetOriginal.class )
@@ -132,7 +133,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("setOriginal/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response setOriginal( @Context HttpServletRequest request, 
+	public void setOriginal( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectSetOriginal.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -154,7 +155,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "取消原创主题.", action = ActionSubjectNonOriginal.class )
@@ -162,7 +163,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("nonOriginal/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response nonOriginal( @Context HttpServletRequest request, 
+	public void nonOriginal( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectNonOriginal.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -185,7 +186,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "锁定主题: 状态修改为'启用', 属性stopReply = false.", action = ActionSubjectUnLock.class )
@@ -193,7 +194,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("unlock/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response unlock( @Context HttpServletRequest request, 
+	public void unlock( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectUnLock.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -215,7 +216,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "锁定主题: 状态修改为'已锁定', 属性stopReply = true", action = ActionSubjectLock.class )
@@ -223,7 +224,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("lock/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response lock( @Context HttpServletRequest request, 
+	public void lock( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectLock.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -245,7 +246,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "取消完成主题: 属性isCompleted = false.", action = ActionSubjectUnComplete.class )
@@ -253,7 +254,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("uncomplete/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response unComplete( @Context HttpServletRequest request, 
+	public void unComplete( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectUnComplete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -275,7 +276,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "完成主题: 属性isCompleted = true", action = ActionSubjectCompleted.class )
@@ -283,7 +284,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("complete/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response complete( @Context HttpServletRequest request, 
+	public void complete( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectCompleted.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -305,7 +306,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "取消问题贴采纳回复", action = ActionSubjectUnAcceptReply.class )
@@ -313,7 +314,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("unacceptreply/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response unAcceptReply( @Context HttpServletRequest request, 
+	public void unAcceptReply( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectUnAcceptReply.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -335,7 +336,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}	
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "问题贴采纳回复", action = ActionSubjectAcceptReply.class )
@@ -343,7 +344,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("acceptreply/{id}/{replyId}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response acceptReply( @Context HttpServletRequest request, 
+	public void acceptReply( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id, 
 			@JaxrsParameterDescribe("回帖信息ID") @PathParam("replyId") String replyId ) {
 		ActionResult<ActionSubjectAcceptReply.Wo> result = new ActionResult<>();
@@ -366,7 +367,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "版块置顶", action = ActionSubjectTopToMainSection.class )
@@ -374,7 +375,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("topToSection/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response topToSection( @Context HttpServletRequest request, 
+	public void topToSection( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectTopToMainSection.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -396,7 +397,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}	
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "取消版块置顶", action = ActionSubjectNonTopToSection.class )
@@ -404,7 +405,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("nonTopToSection/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response nonTopToSection( @Context HttpServletRequest request, 
+	public void nonTopToSection( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectNonTopToSection.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -427,7 +428,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "主版块置顶", action = ActionSubjectTopToMainSection.class )
@@ -435,7 +436,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("topToMainSection/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response topToMainSection( @Context HttpServletRequest request, 
+	public void topToMainSection( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectTopToMainSection.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -457,7 +458,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "取消主版块置顶", action = ActionSubjectNonTopToMainSection.class )
@@ -465,7 +466,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("nonTopToMainSection/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response nonTopToMainSection( @Context HttpServletRequest request, 
+	public void nonTopToMainSection( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectNonTopToMainSection.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -488,7 +489,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "论坛置顶", action = ActionSubjectTopToForum.class )
@@ -496,7 +497,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("topToForum/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response topToForum( @Context HttpServletRequest request, 
+	public void topToForum( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectTopToForum.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -519,7 +520,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "取消论坛置顶.", action = ActionSubjectNonTopToForum.class )
@@ -527,7 +528,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("nonTopToForum/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response nonTopToForum( @Context HttpServletRequest request, 
+	public void nonTopToForum( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectNonTopToForum.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -550,7 +551,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "全局置顶.", action = ActionSubjectTopToBBS.class )
@@ -558,7 +559,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("topToBBS/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response topToBBS( @Context HttpServletRequest request, 
+	public void topToBBS( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectTopToBBS.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -580,7 +581,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "推荐到BBS首页.", action = ActionSubjectSetRecommendToBBSIndex.class )
@@ -588,7 +589,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("setRecommendToBBSIndex/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response setRecommendToBBSIndex( @Context HttpServletRequest request, 
+	public void setRecommendToBBSIndex( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectSetRecommendToBBSIndex.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -610,7 +611,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "取消推荐到BBS首页.", action = ActionSubjectNonRecommendToBBSIndex.class )
@@ -618,7 +619,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("nonRecommendToBBSIndex/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response nonRecommendToBBSIndex( @Context HttpServletRequest request, 
+	public void nonRecommendToBBSIndex( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectNonRecommendToBBSIndex.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -641,7 +642,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "取消全局置顶.", action = ActionSubjectNonTopToBBS.class )
@@ -649,7 +650,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("nonTopToBBS/{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response nonTopToBBS( @Context HttpServletRequest request, 
+	public void nonTopToBBS( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id ) {
 		ActionResult<ActionSubjectNonTopToBBS.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -672,14 +673,14 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
     
 	@JaxrsMethodDescribe( value = "创建新的主题信息或者更新主题信息.", action = ActionSubjectSave.class )
 	@POST
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response save(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void save(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, JsonElement jsonElement) {
 		ActionResult<ActionSubjectSave.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson( request );
 		Boolean check = true;
@@ -694,7 +695,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe( value = "根据ID删除指定的主题信息.", action = ActionSubjectDelete.class )
@@ -702,7 +703,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("{id}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response delete(@Context HttpServletRequest request, 
+	public void delete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("主贴信息ID") @PathParam("id") String id) {
 		ActionResult<ActionSubjectDelete.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
@@ -724,7 +725,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "将指定ID的主贴转移到其他的版块中.", action = ActionSubjectChangeSection.class )
@@ -732,7 +733,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("change/section")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response changeSection( @Context HttpServletRequest request, JsonElement jsonElement ) {
+	public void changeSection( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, JsonElement jsonElement ) {
 		ActionResult<ActionSubjectChangeSection.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
@@ -746,7 +747,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 	@JaxrsMethodDescribe( value = "列示投票记录.", action = ActionVoteRecordListMyForPage.class )
@@ -754,7 +755,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("voterecord/list/page/{page}/count/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listVoteRecordForPage( @Context HttpServletRequest request, 
+	public void listVoteRecordForPage( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page, 
 			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, 
 			JsonElement jsonElement ) {
@@ -772,7 +773,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe( value = "提交投票信息.", action = ActionSubjectSubmitVoteResult.class )
@@ -780,7 +781,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@PUT
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response voteSubmit(@Context HttpServletRequest request, JsonElement jsonElement) {
+	public void voteSubmit(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, JsonElement jsonElement) {
 		ActionResult<ActionSubjectSubmitVoteResult.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson( request );
 		Boolean check = true;
@@ -795,7 +796,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
 	@JaxrsMethodDescribe( value = "列示我发布的主题.", action = ActionSubjectListMyForPage.class )
@@ -803,7 +804,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 	@Path("my/list/page/{page}/count/{count}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response listMySubjectForPage( @Context HttpServletRequest request, 
+	public void listMySubjectForPage( @Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request, 
 			@JaxrsParameterDescribe("显示页码") @PathParam("page") Integer page, 
 			@JaxrsParameterDescribe("每页显示条目数量") @PathParam("count") Integer count, 
 			JsonElement jsonElement ) {
@@ -821,7 +822,7 @@ public class SubjectInfoManagerUserAction extends StandardJaxrsAction {
 				logger.error( e, effectivePerson, request, null);
 			}	
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 	
 }

+ 14 - 11
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/userinfo/UserInfoAction.java

@@ -5,6 +5,8 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 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 javax.ws.rs.core.Response;
@@ -24,27 +26,28 @@ import com.x.bbs.assemble.control.jaxrs.roleinfo.exception.ExceptionRoleInfoProc
 @Path("userinfo")
 @JaxrsDescribe("论坛用户信息查询服务")
 public class UserInfoAction extends StandardJaxrsAction {
-	
-	private static  Logger logger = LoggerFactory.getLogger( UserInfoAction.class );
 
-	@JaxrsMethodDescribe( value = "列示根据过滤条件的论坛用户信息.", action = ActionFilterUserInfo.class )
+	private static Logger logger = LoggerFactory.getLogger(UserInfoAction.class);
+
+	@JaxrsMethodDescribe(value = "列示根据过滤条件的论坛用户信息.", action = ActionFilterUserInfo.class)
 	@PUT
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response filterUserInfo( @Context HttpServletRequest request, JsonElement jsonElement ) {
+	public void filterUserInfo(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			JsonElement jsonElement) {
 		ActionResult<ActionFilterUserInfo.Wo> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		Boolean check = true;
-		if(check){
+		if (check) {
 			try {
-				result = new ActionFilterUserInfo().execute( request, effectivePerson, jsonElement );
+				result = new ActionFilterUserInfo().execute(request, effectivePerson, jsonElement);
 			} catch (Exception e) {
 				result = new ActionResult<>();
-				Exception exception = new ExceptionRoleInfoProcess( e, "根据指定ID获取主题具体信息时发生异常!" );
-				result.error( exception );
-				logger.error( e, effectivePerson, request, null);
-			}	
+				Exception exception = new ExceptionRoleInfoProcess(e, "根据指定ID获取主题具体信息时发生异常!");
+				result.error(exception);
+				logger.error(e, effectivePerson, request, null);
+			}
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 12 - 9
o2server/x_bbs_assemble_control/src/main/java/com/x/bbs/assemble/control/jaxrs/uuid/UUIDAction.java

@@ -9,6 +9,8 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 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 javax.ws.rs.core.Response;
@@ -23,31 +25,32 @@ import com.x.base.core.project.logger.LoggerFactory;
 
 /**
  * 该类旨在提供一个服务创建唯一的UNID
+ * 
  * @author liyi
  *
  */
 @Path("uuid")
 public class UUIDAction extends StandardJaxrsAction {
-	
-	private static  Logger logger = LoggerFactory.getLogger( UUIDAction.class );
-	
-	//@HttpMethodDescribe(value = "根据随机ID的.", response = JsonElement.class)
+
+	private static Logger logger = LoggerFactory.getLogger(UUIDAction.class);
+
+	// @HttpMethodDescribe(value = "根据随机ID的.", response = JsonElement.class)
 	@GET
 	@Path("random")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public Response getUUID( @Context HttpServletRequest request ) {
+	public void getUUID(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request) {
 		ActionResult<List<String>> result = new ActionResult<>();
 		List<String> data = new ArrayList<String>();
 		String uuid = null;
 		EffectivePerson currentPerson = this.effectivePerson(request);
 		try {
 			uuid = UUID.randomUUID().toString();
-			data.add( uuid );
-			result.setData( data );
+			data.add(uuid);
+			result.setData(data);
 		} catch (Exception e) {
-			logger.warn( "user["+ currentPerson.getDistinguishedName() +"] get a new UUID error!", e );
+			logger.warn("user[" + currentPerson.getDistinguishedName() + "] get a new UUID error!", e);
 		}
-		return ResponseFactory.getDefaultActionResultResponse(result);
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 }

+ 442 - 70
o2server/x_bbs_assemble_control/src/main/webapp/jest/describe.js

@@ -183,23 +183,31 @@ Describe.createSampleMootools = function(m) {
 		        strSample =  "var data = {};" + "\n";
 			if (m.ins && m.ins.length > 0) {
 				$.each(m.ins, function(ii, i) {
-					switch (i.type) {
-					default:
-						if (i.isBaseType) {
-							if (i.isCollection) {
-								  strSample += 'data["'+i.name+'"] = ["参数1"];' + "\n";
+							switch (i.type) {
+						default:
+							if (i.isBaseType) {
+								if (i.isCollection) {
+									  strSample += '       data["'+i.name+'"] = ["参数1"];' + "\n";
+								} else {
+									  strSample += '       data["'+i.name+'"] = "参数";' + "\n";
+								}
 							} else {
-								  strSample += 'data["'+i.name+'"] = "参数";' + "\n";
+									if(i.isCollection){
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   strSample += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+										  }else{
+											   strSample += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+										  }
+										  
+										}else{
+										  strSample += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
+									}else{
+										strSample += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
+									}
 							}
-						} else {
-							     // strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								 if(i.isCollection){
-									strSample += 'data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
-								}else{
-									strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								}
 						}
-					}
 				});
 			} else if (m.useJsonElementParameter) {
 				strSample += 'data = {"参数1":"value1","参数2":"value2"};' +"\n";
@@ -285,22 +293,30 @@ Describe.createSampleJSO2= function(m) {
 			if (m.ins && m.ins.length > 0) {
 				$.each(m.ins, function(ii, i) {
 					switch (i.type) {
-					default:
-						if (i.isBaseType) {
-							if (i.isCollection) {
-								  strSample += 'data["'+i.name+'"] = ["参数1"];' + "\n";
+						default:
+							if (i.isBaseType) {
+								if (i.isCollection) {
+									  strSample += '       data["'+i.name+'"] = ["参数1"];' + "\n";
+								} else {
+									  strSample += '       data["'+i.name+'"] = "参数";' + "\n";
+								}
 							} else {
-								  strSample += 'data["'+i.name+'"] = "参数";' + "\n";
+									if(i.isCollection){
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   strSample += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+										  }else{
+											   strSample += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+										  }
+										  
+										}else{
+										  strSample += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
+									}else{
+										strSample += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
+									}
 							}
-						} else {
-							           // strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								if(i.isCollection){
-									strSample += 'data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
-								}else{
-									strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								}
 						}
-					}
 				});
 			} else if (m.useJsonElementParameter) {
 				strSample += 'data = {"参数1":"value1","参数2":"value2"};' +"\n";
@@ -365,23 +381,31 @@ Describe.createSampleO2= function(m) {
 		  strSample =  "var data = {};" + "\n";
 			if (m.ins && m.ins.length > 0) {
 				$.each(m.ins, function(ii, i) {
-					switch (i.type) {
-					default:
-						if (i.isBaseType) {
-							if (i.isCollection) {
-								  strSample += 'data["'+i.name+'"] = ["参数1"];' + "\n";
+						switch (i.type) {
+						default:
+							if (i.isBaseType) {
+								if (i.isCollection) {
+									  strSample += '       data["'+i.name+'"] = ["参数1"];' + "\n";
+								} else {
+									  strSample += '       data["'+i.name+'"] = "参数";' + "\n";
+								}
 							} else {
-								  strSample += 'data["'+i.name+'"] = "参数";' + "\n";
+									if(i.isCollection){
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   strSample += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+										  }else{
+											   strSample += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+										  }
+										  
+										}else{
+										  strSample += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
+									}else{
+										strSample += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
+									}
 							}
-						} else {
-							           // strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								if(i.isCollection){
-									strSample += 'data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
-								}else{
-									strSample += 'data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								}
 						}
-					}
 				});
 			} else if (m.useJsonElementParameter) {
 				strSample += 'data = {"参数1":"value1","参数2":"value2"};' +"\n";
@@ -449,24 +473,31 @@ Describe.createSample= function(m) {
 			if (m.ins && m.ins.length > 0) {
 				strSample =  "var data = {};" + "\n";
 				$.each(m.ins, function(ii, i) {
-					switch (i.type) {
-					default:
-						if (i.isBaseType) {
-							if (i.isCollection) {
-								  strSample += '   data["'+i.name+'"] = ["参数1"];' + "\n";
+						switch (i.type) {
+						default:
+							if (i.isBaseType) {
+								if (i.isCollection) {
+									  strSample += '       data["'+i.name+'"] = ["参数1"];' + "\n";
+								} else {
+									  strSample += '       data["'+i.name+'"] = "参数";' + "\n";
+								}
 							} else {
-								  strSample += '   data["'+i.name+'"] = "参数";' + "\n";
+									if(i.isCollection){
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   strSample += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+										  }else{
+											   strSample += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+										  }
+										  
+										}else{
+										  strSample += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
+									}else{
+										strSample += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
+									}
 							}
-						} else {
-								if(i.isCollection){
-									strSample += '   data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
-								}else{
-									strSample += '   data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
-								}
-														
-						
 						}
-					}
 				});
 			} else if (m.useJsonElementParameter) {
 				strSample += '    data = {"参数1":"value1","参数2":"value2"};' +"\n";
@@ -561,12 +592,21 @@ Describe.createSampleCommon= function(m,className) {
 								}
 							} else {
 									if(i.isCollection){
-										body += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										if(i.fieldValue){
+										  if(i.fieldType =='enum'){
+											   body += '       data["'+i.name+'"] = ["'+ i.fieldValue +'"];'+"\n";	
+											   body +=(i.fieldSample ? "  "+'<span style="color:red">//注解:'+i.fieldSample +'</span>\n':"");
+										  }else{
+											   body += '       data["'+i.name+'"] = ['+ i.fieldValue +'];'+"\n";	
+											   body +=(i.fieldSample ? "  "+'<span style="color:red">//注解:'+i.fieldSample +'</span>\n':"");
+										  }
+										  
+										}else{
+										  body += '       data["'+i.name+'"] = [{"参数1":"value1","参数2":"value2"}];'+"\n";
+										}
 									}else{
 										body += '       data["'+i.name+'"] = {"参数1":"value1","参数2":"value2"};'+"\n";
 									}
-															
-							
 							}
 						}
 					});
@@ -627,14 +667,16 @@ Describe.createSampleCommon= function(m,className) {
 		} 
    return  strSample ;		
    }
+   
 Describe.prototype = {
 	"load" : function() {
 		var str = '<ul>';
 		$.getJSON('../describe/describe.json?rd=' + Math.random(), function(json) {
+			Describe.json = json;
 			$.each(json.jaxrs, function(ji, j) {
 				str += '<li xtype="menu" ' + 'style="margin-top: 30px;font-size:14px;font-weight:bold;"title="' +'" >' + j.name + ' <span style="font-style:italic">(' + j.description+ ')</span>';
 				$.each(j.methods, function(mi, m) {
-					str += '<ul><li xtype="li"  style="margin-top: 10px;margin-left:-24px;font-size:12px; font-weight:normal;line-height:18px" ><a id ="' + j.name + '_' + m.name + '" href="#"><b>' + m.name+'</b><br/><span style="color: #666666;">-'+ m.description + '</span>' + '</a></li></ul>';
+					str += '<ul><li xtype="li"  style="margin-top: 10px;margin-left:-24px;font-size:12px; font-weight:normal;line-height:18px" ><a  title="' + m.path + '"id ="' + j.name + '_' + m.name + '" href="#"><b>' + m.name+'</b><br/><span style="color: #666666;">-'+ m.description + '</span>' + '</a></li></ul>';
 				});
 				str += '</li>'
 			});
@@ -712,12 +754,13 @@ Describe.prototype = {
 									txt += '</fieldset>';
 								}
 								
-								if (m.ins && m.ins.length > 0) {
+							  if (m.ins && m.ins.length > 0) {
 									txt += '<fieldset id="ins"><legend>In</legend>';
 									txt += '<table>';
 									$.each(m.ins, function(ii, i) {
 										if (i.isCollection) {
-											txt += '<tr><td><textarea id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':' + i.description
+											
+											txt += '<tr><td><textarea id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':' + i.description +(i.fieldValue ? "  "+'。数据格式:<span style="color:red">'+i.fieldValue +'</span>':"") + (i.fieldSample ? "  "+'<span style="color:red">'+i.fieldSample +'</span>':"") 
 											'</td></tr>';
 										} else {
 											txt += '<tr><td><input type="text" id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':'
@@ -730,6 +773,7 @@ Describe.prototype = {
 								}
 								
 								
+								
 								if (m.useJsonElementParameter) {
 									txt += '<fieldset><legend>JsonElement</legend>';
 									txt += '<table><tr><td>';
@@ -898,10 +942,7 @@ Describe.prototype = {
 								
 								debugger;
 							$('#Sample').html("<div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;color: #1E7ACE;\">\n平台推荐脚本样例</span>\n\n"+ Describe.createSampleCommon(m,j.name)+ "</div><div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n前台脚本样例</span>\n\n"+ Describe.createSampleJSO2(m)+ "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\n后台脚本样例</span>\n\n" + Describe.createSampleO2(m) + "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\nmootools样例</span>\n\n"+Describe.createSampleMootools(m)+"</div><div  style=\"line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\njquery样例</span>\n\n<span style=\"\">"+ Describe.createSample(m)+"</span></div>");
-							
-							 /*
-							 $('#Sample').html("<div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n前台脚本样例</span>\n\n"+ Describe.createSampleJSO2(m)+ "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\n后台脚本样例</span>\n\n" + Describe.createSampleO2(m) + "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\nmootools样例</span>\n\n"+Describe.createSampleMootools(m)+"</div><div  style=\"line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\njquery样例</span>\n\n<span style=\"\">"+ Describe.createSample(m)+"</span></div>");
-							 */
+
 							});
 				});
 			});
@@ -932,7 +973,7 @@ Describe.prototype = {
 			if(i!=0){
 			  // $(this).children().toggle();
 			  $(this).children().each(function(i){
-							debugger;
+					
 							if(this.tagName != "SPAN"){
 							$(this).toggle();
 							}
@@ -941,7 +982,338 @@ Describe.prototype = {
 			}
 			);
 		});
-		
-	
+	},
+  "search":function(strKey) {
+	var str = '<ul>';
+	var strTemp = "";
+	    $.each(Describe.json.jaxrs, function(ji, j) {
+			    var flag = false;
+				strTemp = '<li xtype="menu" ' + 'style="margin-top: 30px;font-size:14px;font-weight:bold;"title="' +'" >' + j.name + ' <span style="font-style:italic">(' + j.description+ ')</span>';
+				$.each(j.methods, function(mi, m) {
+					if((m.name.toUpperCase().indexOf(strKey.toUpperCase())>-1) || (m.description.toUpperCase().indexOf(strKey.toUpperCase())>-1) || (m.path.toUpperCase().indexOf(strKey.toUpperCase())>-1)){
+					flag = true;
+					
+					var tempKey =  strKey;
+					var tempReplace = "<span style='color: #f31313'>"+ strKey + "</span>";
+					 debugger;
+					var strDescripthion = m.description.replace(tempKey, tempReplace);
+					var strName = m.name.replace(tempKey, tempReplace);
+					var strPath = m.path;
+					var startPost = m.name.toUpperCase().indexOf(strKey.toUpperCase());
+					if(startPost>-1){
+						tempReplace = m.name.substr(startPost,tempKey.length);
+						tempKey = tempReplace;
+						tempReplace = "<span style='color: #f31313'>"+ tempReplace + "</span>";
+						strName = m.name.replace(tempKey, tempReplace);
+					}
+					tempKey =  strKey;
+					startPost = m.description.toUpperCase().indexOf(strKey.toUpperCase());
+					if(startPost>-1){
+						tempReplace = m.description.substr(startPost,tempKey.length);
+						tempKey =  tempReplace;
+						tempReplace = "<span style='color: #f31313'>"+ tempReplace + "</span>";
+						strDescripthion = m.description.replace(tempKey, tempReplace);
+					}
+					
+					
+					strTemp += '<ul><li xtype="li"  style="margin-top: 10px;margin-left:-24px;font-size:12px; font-weight:normal;line-height:18px" ><a title = "' + strPath+ '"  id ="' + j.name + '_' + m.name + '" href="#"><b>' + strName+'</b><br/><span style="color: #666666;">-'+strDescripthion + '</span>' + '</a></li></ul>';
+					}
+				});
+				strTemp += '</li>';
+				
+				if(flag == true){
+				   str += strTemp;
+				}
+			});
+			str += '</ul>';
+			$("#menu").html(str);
+			this.display(Describe.json);
+  },
+   "display":function(json) {
+			$.each(json.jaxrs, function(ji, j) {
+				$.each(j.methods, function(mi, m) {
+					$('#' + j.name + '_' + m.name).click(
+							function() {
+								$('#result').html('');
+								var sample = "";
+								var txt = '<fieldset id="method"><legend>Method</legend>';
+								txt += '<table>';
+								txt += '<tr><td style="width:100px;">name:</td><td><a href="../describe/sources/' + m.className.replace(/\./g, '/') + '.java">' + m.name + '</a></td></tr>';
+								txt += '<tr><td>path:</td><td>' + m.path + '</td></tr>';
+								txt += '<tr><td>type:</td><td>' + m.type + '</td></tr>';
+								txt += '<tr><td>description:</td><td>' + m.description + '</td></tr>';
+								txt += '</table>';
+								txt += '<button id="' + m.name + "_" + m.type + '">' + m.type + '</button>';
+								txt += '<div id="url">&nbsp;</div>';
+								txt += '</fieldset>';
+								if (m.pathParameters && m.pathParameters.length > 0) {
+									txt += '<fieldset id="pathParameters"><legend>Path Parameter</legend>';
+									txt += '<table >';
+									$.each(m.pathParameters, function(pi, p) {
+										if (m.name == 'listNext' || m.name == 'listPrev') {
+											switch (p.name) {
+											case 'flag':
+											case 'id':
+												txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid" value="(0)"/></td><td>' + p.name
+														+ ':' + p.description + '</td></tr>';
+												break;
+											case 'count':
+												txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid" value="20"/></td><td>' + p.name + ':'
+														+ p.description + '</td></tr>';
+												break;
+											default:
+												txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + p.name + ':'
+														+ p.description + '</td></tr>';
+												break
+											}
+										} else {
+											txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + p.name + ':'
+													+ p.description + '</td></tr>';
+										}
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								if (m.formParameters && m.formParameters.length > 0) {
+									txt += '<fieldset id="formParameters"><legend>Form Parameter</legend>';
+									txt += '<table >';
+									$.each(m.formParameters, function(pi, p) {
+										if (p.type == "File") {
+											txt += '<tr><td><input type="file" name="' + p.name + '" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>'
+													+ p.name + ':' + p.description + '</td></tr>';
+										} else {
+											txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + p.name + ':'
+													+ p.description + '</td></tr>';
+										}
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								if (m.queryParameters && m.queryParameters.length > 0) {
+									txt += '<fieldset id="queryParameters"><legend>Query Parameter</legend>';
+									txt += '<table >';
+									$.each(m.queryParameters, function(pi, p) {
+										txt += '<tr><td><input type="text" id="' + p.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + p.name + ':' + p.description
+												+ '</td></tr>';
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+							  if (m.ins && m.ins.length > 0) {
+									txt += '<fieldset id="ins"><legend>In</legend>';
+									txt += '<table>';
+									$.each(m.ins, function(ii, i) {
+										if (i.isCollection) {
+											
+											txt += '<tr><td><textarea id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':' + i.description +(i.fieldValue ? "  "+'。数据格式:<span style="color:red">'+i.fieldValue +'</span>':"") + (i.fieldSample ? "  "+'<span style="color:red">'+i.fieldSample +'</span>':"") 
+											'</td></tr>';
+										} else {
+											txt += '<tr><td><input type="text" id="' + i.name + '" style="width:600px; padding:1px; border:1px #000000 solid"/></td><td>' + i.name + ':'
+													+ i.description
+											'</td></tr>';
+										}
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								
+								
+								if (m.useJsonElementParameter) {
+									txt += '<fieldset><legend>JsonElement</legend>';
+									txt += '<table><tr><td>';
+									txt += '<textarea id="jsonElement" style="height:300px; width:600px; padding:1px; border:1px #000000 solid"/>';
+									txt += '</td><td>json</td></tr>';
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								if (m.useStringParameter) {
+									txt += '<fieldset><legend>String</legend>';
+									txt += '<table><tr><td>';
+									txt += '<textarea id="string" style="height:300px; width:600px; padding:1px; border:1px #000000 solid"/>';
+									txt += '</td><td>string</td></tr>';
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								if (m.outs && m.outs.length > 0) {
+									txt += '<fieldset id="outs"><legend>Out</legend>';
+									txt += '<table>';
+									$.each(m.outs, function(oi, o) {
+										txt += '<tr><td style="width: 160px;">' + o.name + '</td><td style="width: 90px;">' + o.type + '</td><td style="width: 90px;">' + (o.isCollection ? 'multi' : 'single') + '</td><td style="width: 90px;">' + o.description + '</td><td id="out_'
+												+ o.name + '_out">&nbsp;</td></tr>';
+									});
+									txt += '</table>';
+									txt += '</fieldset>';
+								}
+								
+								$('#content').html(txt);
+								
+								$('#' + m.name + '_' + m.type, '#method').click(function() {
+									var address = '../' + m.path;
+									if (m.pathParameters && m.pathParameters.length > 0) {
+										$.each(m.pathParameters, function(pi, p) {
+											address = address.replace('{' + p.name + '}', encodeURIComponent($('#' + p.name, '#pathParameters').val()));
+										});
+									}
+									if (m.queryParameters && m.queryParameters.length > 0) {
+										$.each(m.queryParameters, function(pi, p) {
+											var query = p.name + '=' + encodeURIComponent($('#' + p.name, '#queryParameters').val());
+											if (address.indexOf("?") > 0) {
+												address += '&' + query;
+											} else {
+												address += '?' + query;
+											}
+										});
+									}
+									if (m.contentType.indexOf('application/json') > -1) {
+										switch (m.type) {
+										case 'POST':
+											var data = {};
+											if (m.ins && m.ins.length > 0) {
+												$.each(m.ins, function(ii, i) {
+													switch (i.type) {
+													default:
+														if (i.isBaseType) {
+															if (i.isCollection) {
+																data[i.name] = Describe.splitValue($('#' + i.name, '#ins').val());
+															} else {
+																data[i.name] = $('#' + i.name, '#ins').val();
+															}
+														} else {
+															//data[i.name] = $.parseJSON($('#' + i.name, '#ins').val());
+															if($('#' + i.name, '#ins').val() == ""){
+																if(i.isCollection){
+																	data[i.name] = [{}];
+																}else{
+																	data[i.name] = {};
+																}
+															}else{
+																data[i.name] = $.parseJSON($('#' + i.name, '#ins').val());
+															}
+														}
+													}
+												});
+											} else if (m.useJsonElementParameter) {
+												data = $.parseJSON($('#jsonElement').val());
+											} else if (m.useStringParameter) {
+												data = $('#string').val();
+											}
+											Describe.doPost(address, m, data);
+											break;
+										case 'PUT':
+											var data = {};
+											if (m.ins && m.ins.length > 0) {
+												$.each(m.ins, function(ii, i) {
+													switch (i.type) {
+													default:
+														if (i.isBaseType) {
+															if (i.isCollection) {
+																data[i.name] = Describe.splitValue($('#' + i.name, '#ins').val());
+															} else {
+																data[i.name] = $('#' + i.name, '#ins').val();
+															}
+														} else {
+															if($('#' + i.name, '#ins').val() == ""){
+																if(i.isCollection){
+																	data[i.name] = [{}];
+																}else{
+																	data[i.name] = {};
+																}
+															}else{
+																data[i.name] = $.parseJSON($('#' + i.name, '#ins').val());
+															}
+														
+														}
+													}
+												});
+											} else if (m.useJsonElementParameter) {
+												data = $.parseJSON($('#jsonElement').val());
+											} else if (m.useStringParameter) {
+												data = $('#string').val();
+											}
+											Describe.doPut(address, m, data);
+											break;
+										case 'GET':
+											Describe.doGet(address, m);
+											break;
+										case 'DELETE':
+											Describe.doDelete(address, m);
+											break;
+										default:
+											break;
+										}
+										
+									} else {
+										switch (m.type) {
+										case 'POST':
+											var formData = new FormData();
+											if (m.formParameters && m.formParameters.length > 0) {
+												$.each(m.formParameters, function(pi, p) {
+													if (p.type == "File") {
+														formData.append(p.name, $('input[type=file]', '#formParameters')[0].files[0]);
+													} else {
+														formData.append(p.name, $('#' + p.name, '#formParameters').val());
+													}
+												});
+											}
+											Describe.doPost(address, m, formData);
+											break;
+										case 'PUT':
+											var formData = new FormData();
+											if (m.formParameters && m.formParameters.length > 0) {
+												$.each(m.formParameters, function(pi, p) {
+													if (p.type == "File") {
+														formData.append(p.name, $('input[type=file]', '#formParameters')[0].files[0]);
+													} else {
+														formData.append(p.name, $('#' + p.name, '#formParameters').val());
+													}
+												});
+											}
+											Describe.doPut(address, m, formData);
+											break;
+										case 'GET':
+											Describe.doGet(address, m);
+											break;
+										case 'DELETE':
+											Describe.doDelete(address, m);
+											break;
+										default:
+											break;
+										}
+									}
+								})
+								
+								debugger;
+							$('#Sample').html("<div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;color: #1E7ACE;\">\n平台推荐脚本样例</span>\n\n"+ Describe.createSampleCommon(m,j.name)+ "</div><div style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n前台脚本样例</span>\n\n"+ Describe.createSampleJSO2(m)+ "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\n后台脚本样例</span>\n\n" + Describe.createSampleO2(m) + "</div><div  style=\"border-bottom:1px solid #E6E6E6;padding-bottom: 40px;line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\nmootools样例</span>\n\n"+Describe.createSampleMootools(m)+"</div><div  style=\"line-height:21px\"><span style=\"font-size:17px;font-weight:bold;\">\n\njquery样例</span>\n\n<span style=\"\">"+ Describe.createSample(m)+"</span></div>");
+							});
+				});
+			});
+		 
+		  $("[xtype='menu']").click(
+				  function(event) {
+					    if(event.stopPropagation){
+						    event.stopPropagation();
+						  }else{
+						     event.cancelBubble = true;
+						  }
+						$(this).children().each(function(i){
+							debugger;
+							if(this.tagName != "SPAN"){
+							$(this).toggle();
+							}
+						});
+					});
+		  $("[xtype='li']").click( function(event) {
+			    if(event.stopPropagation){
+				    event.stopPropagation();
+				  }else{
+				     event.cancelBubble = true;
+				  }
+			})
 	}
-}
+}

+ 19 - 1
o2server/x_bbs_assemble_control/src/main/webapp/jest/index.html

@@ -68,8 +68,9 @@
 </style>
 	
 <script>
+    var describe;
     $.getScript('./describe.js?rd=' + Math.random()).then(function() {
-		var describe = new Describe();
+		describe = new Describe();
 		describe.load();
     }).catch( function() {
 		alert('get describe error.'); 
@@ -77,6 +78,19 @@
 	
 	$(document).ready(function(){
         var clipboard = new Clipboard("#btn_copy");
+		$('#butSearch').click(function() {
+		var  strKey = $('#inpSearch').val();
+		  if(strKey == ""){
+		  window.location.reload();
+		  }else{
+		   describe.search(strKey);
+		  }
+		})
+		$('#inpSearch').bind('keyup', function(event) {
+       if (event.keyCode == "13") {
+         $('#butSearch').click();
+         }
+       });
 	});	
 </script>
 </head>
@@ -85,6 +99,10 @@
 	<table style="width: 1800px; margin: 0 auto">
 		<tr>
 			<td style="width: 350px;" valign="top">
+				<fieldset>
+					<legend>search</legend>
+					<div><input id="inpSearch" style="width:70%;height: 23px; overflow: auto;"/>&nbsp; <button id="butSearch">search</button></div>
+				</fieldset>
 				<fieldset>
 					<legend>API Menu</legend>
 					<div id="menu" style="height: 850px; overflow: auto;">&nbsp;</div>

+ 2 - 3
o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/ThisApplication.java

@@ -1,7 +1,5 @@
 package com.x.calendar.assemble.control;
 
-import java.util.List;
-
 import com.x.base.core.project.Context;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.message.MessageConnector;
@@ -12,11 +10,12 @@ import com.x.calendar.assemble.control.service.UserManagerService;
 import com.x.calendar.core.entity.Calendar;
 import com.x.calendar.core.entity.Calendar_Event;
 
+import java.util.List;
+
 public class ThisApplication {
 
 	protected static Context context;
 	public static final String CalendarMANAGER = "CalendarManager";
-
 	public static Context context() {
 		return context;
 	}

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

@@ -9,7 +9,6 @@ import com.x.calendar.assemble.control.jaxrs.calendar.CalendarAction;
 import com.x.calendar.assemble.control.jaxrs.event.Calendar_EventAction;
 import com.x.calendar.assemble.control.jaxrs.event.Calendar_EventMessageAction;
 import com.x.calendar.assemble.control.jaxrs.setting.CalendarSettingAction;
-import com.x.calendar.assemble.control.jaxrs.test.TestAction;
 
 @ApplicationPath("jaxrs")
 public class ActionApplication extends AbstractActionApplication {
@@ -20,7 +19,6 @@ public class ActionApplication extends AbstractActionApplication {
 		this.classes.add(Calendar_EventAction.class);
 		this.classes.add(CalendarAction.class);
 		this.classes.add(Calendar_EventMessageAction.class);
-		this.classes.add(TestAction.class);
 		return this.classes;
 	}
 

+ 6 - 5
o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionDelete.java

@@ -1,20 +1,21 @@
 package com.x.calendar.assemble.control.jaxrs.calendar;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang3.StringUtils;
-
+import com.x.base.core.project.annotation.AuditLog;
 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.calendar.core.entity.Calendar;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
 
 public class ActionDelete extends BaseAction {
 	
 	private Logger logger = LoggerFactory.getLogger( ActionDelete.class );
-	
+
+	@AuditLog(operation = "删除日历")
 	protected ActionResult<Wo> execute( HttpServletRequest request, EffectivePerson effectivePerson, String id ) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		Calendar calendar = null;

+ 6 - 5
o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionFollowCalendar.java

@@ -1,15 +1,15 @@
 package com.x.calendar.assemble.control.jaxrs.calendar;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang3.StringUtils;
-
+import com.x.base.core.project.annotation.AuditLog;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.http.WrapOutBoolean;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.calendar.core.entity.Calendar;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * 关注一个公开的日历(非公开的日历不允许被关注)
@@ -20,7 +20,8 @@ import com.x.calendar.core.entity.Calendar;
 public class ActionFollowCalendar extends BaseAction {
 	
 	private Logger logger = LoggerFactory.getLogger( ActionFollowCalendar.class );
-	
+
+	@AuditLog(operation = "关注日历")
 	protected ActionResult<WrapOutBoolean> execute( HttpServletRequest request, EffectivePerson effectivePerson, String id ) throws Exception {
 		ActionResult<WrapOutBoolean> result = new ActionResult<>();
 		Wo wo = new Wo();

+ 6 - 5
o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionFollowCalendarCancel.java

@@ -1,14 +1,14 @@
 package com.x.calendar.assemble.control.jaxrs.calendar;
 
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang3.StringUtils;
-
+import com.x.base.core.project.annotation.AuditLog;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.http.WrapOutBoolean;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * 取消关注一个公开的日历
@@ -19,7 +19,8 @@ import com.x.base.core.project.logger.LoggerFactory;
 public class ActionFollowCalendarCancel extends BaseAction {
 	
 	private Logger logger = LoggerFactory.getLogger( ActionFollowCalendarCancel.class );
-	
+
+	@AuditLog(operation = "取消关注日历")
 	protected ActionResult<WrapOutBoolean> execute( HttpServletRequest request, EffectivePerson effectivePerson, String id ) throws Exception {
 		ActionResult<WrapOutBoolean> result = new ActionResult<>();
 		Wo wo = new Wo();

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

@@ -1,10 +1,5 @@
 package com.x.calendar.assemble.control.jaxrs.calendar;
 
-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.annotation.FieldDescribe;
 import com.x.base.core.project.bean.WrapCopier;
@@ -17,6 +12,10 @@ import com.x.base.core.project.tools.ListTools;
 import com.x.calendar.assemble.control.ThisApplication;
 import com.x.calendar.core.entity.Calendar;
 
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 列示所有我能访问到的日历信息
  * 
@@ -26,7 +25,7 @@ import com.x.calendar.core.entity.Calendar;
 public class ActionListWhatICanView extends BaseAction {
 	
 	private Logger logger = LoggerFactory.getLogger( ActionListWhatICanView.class );
-	
+
 	protected ActionResult<Wo> execute( HttpServletRequest request, EffectivePerson effectivePerson ) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		Wo wo = new Wo();

+ 8 - 8
o2server/x_calendar_assemble_control/src/main/java/com/x/calendar/assemble/control/jaxrs/calendar/ActionSave.java

@@ -1,14 +1,8 @@
 package com.x.calendar.assemble.control.jaxrs.calendar;
 
-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.annotation.AuditLog;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.http.ActionResult;
@@ -20,11 +14,17 @@ import com.x.base.core.project.organization.Person;
 import com.x.base.core.project.organization.Unit;
 import com.x.calendar.assemble.control.ExceptionWrapInConvert;
 import com.x.calendar.core.entity.Calendar;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
 
 public class ActionSave extends BaseAction {
 	
 	private static Logger logger = LoggerFactory.getLogger( ActionSave.class );
-	
+
+	@AuditLog(operation = "保存日历")
 	protected ActionResult<Wo> execute( HttpServletRequest request, EffectivePerson effectivePerson, JsonElement jsonElement ) throws Exception {
 		ActionResult<Wo> result = new ActionResult<>();
 		Wi wi = null;

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác